diff --git a/.dockerignore b/.dockerignore index ae5f6c2afe8..55f56a51226 100644 --- a/.dockerignore +++ b/.dockerignore @@ -15,5 +15,5 @@ packages/**/*.test.* docker/compose docker/**/Dockerfile .vscode -cypress -test-workflows \ No newline at end of file +packages/testing +cypress \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/01-bug.yml b/.github/ISSUE_TEMPLATE/01-bug.yml index f7c79f718f0..3d507ed3058 100644 --- a/.github/ISSUE_TEMPLATE/01-bug.yml +++ b/.github/ISSUE_TEMPLATE/01-bug.yml @@ -4,7 +4,13 @@ body: - type: markdown attributes: value: | - Thanks for taking the time to fill out this bug report! + > ⚠️ This form is for reporting bugs only. + > ❌ Please do not use this form for general support, feature requests, or questions. + > πŸ’¬ For help and general inquiries, visit our [community support forum](https://community.n8n.io). + > ☁️ If you're experiencing issues with cloud instances not starting or license-related problems, contact [n8n support directly](mailto:help@n8n.io). + --- + Thank you for helping us improve n8n! + To ensure we can address your report efficiently, please fill out all sections in English and provide as much detail as possible. - type: textarea id: description attributes: @@ -32,6 +38,13 @@ body: description: A clear and concise description of what you expected to happen validations: required: true + - type: textarea + id: debug-info + attributes: + label: Debug Info + description: This can be found under Help > About n8n > Copy debug information + validations: + required: true - type: markdown attributes: value: '## Environment' @@ -80,3 +93,13 @@ body: default: 0 validations: required: true + - type: dropdown + id: hosting + attributes: + label: Hosting + options: + - n8n cloud + - self hosted + default: 0 + validations: + required: true diff --git a/.github/workflows/check-documentation-urls.yml b/.github/workflows/check-documentation-urls.yml index 37b83977750..97fc6c8fbf5 100644 --- a/.github/workflows/check-documentation-urls.yml +++ b/.github/workflows/check-documentation-urls.yml @@ -16,20 +16,10 @@ jobs: steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + - name: Setup Node.js + uses: n8n-io/n8n/.github/actions/setup-nodejs-blacksmith@f5fbbbe0a28a886451c886cac6b49192a39b0eea # v1.104.1 with: - node-version: 22.x - - - name: Setup corepack and pnpm - run: | - npm i -g corepack@0.33 - corepack enable - - - name: Install dependencies - run: pnpm install --frozen-lockfile - - - name: Build relevant packages - run: pnpm build:nodes + build-command: turbo build --filter=*nodes* - run: npm install --prefix=.github/scripts --no-package-lock diff --git a/.github/workflows/check-pr-title.yml b/.github/workflows/check-pr-title.yml index 2e6c55189bb..0b9a0b614ab 100644 --- a/.github/workflows/check-pr-title.yml +++ b/.github/workflows/check-pr-title.yml @@ -14,23 +14,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 5 steps: - - name: Check out branch - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - - - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 - with: - node-version: 22.x - - - name: Setup corepack and pnpm - run: | - npm i -g corepack@0.33 - corepack enable - - - name: Install dependencies - run: pnpm install --frozen-lockfile - - name: Validate PR title - id: validate_pr_title uses: n8n-io/validate-n8n-pull-request-title@c97ff722ac14ee0bda73766473bba764445db805 # v2.2.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/ci-master.yml b/.github/workflows/ci-master.yml index 42f2da4c547..60e07994d88 100644 --- a/.github/workflows/ci-master.yml +++ b/.github/workflows/ci-master.yml @@ -6,64 +6,24 @@ on: - master jobs: - install-and-build: - runs-on: blacksmith-2vcpu-ubuntu-2204 - env: - NODE_OPTIONS: '--max-old-space-size=4096' - - timeout-minutes: 10 - - steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - - - uses: useblacksmith/setup-node@65c6ca86fdeb0ab3d85e78f57e4f6a7e4780b391 # v5 - with: - node-version: 22.x - - - name: Setup corepack and pnpm - run: | - npm i -g corepack@0.33 - corepack enable - - - name: Install dependencies - run: pnpm install --frozen-lockfile - - - name: Setup build cache - uses: useblacksmith/caching-for-turbo@bafb57e7ebdbf1185762286ec94d24648cd3938a # v1 - - - name: Build - run: pnpm build - - - name: Cache build artifacts - uses: useblacksmith/cache/save@c5fe29eb0efdf1cf4186b9f7fcbbcbc0cf025662 # v5 - with: - path: ./packages/**/dist - key: ${{ github.sha }}-base:build - unit-test: name: Unit tests uses: ./.github/workflows/units-tests-reusable.yml - needs: install-and-build strategy: matrix: - node-version: [20.x, 22.x, 24.x] + node-version: [20.x, 22.x, 24.3.x] with: ref: ${{ inputs.branch }} nodeVersion: ${{ matrix.node-version }} - cacheKey: ${{ github.sha }}-base:build collectCoverage: ${{ matrix.node-version == '22.x' }} - ignoreTurboCache: ${{ matrix.node-version == '22.x' }} - skipFrontendTests: ${{ matrix.node-version != '22.x' }} secrets: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} lint: name: Lint uses: ./.github/workflows/linting-reusable.yml - needs: install-and-build with: ref: ${{ inputs.branch }} - cacheKey: ${{ github.sha }}-base:build notify-on-failure: name: Notify Slack on failure diff --git a/.github/workflows/ci-postgres-mysql.yml b/.github/workflows/ci-postgres-mysql.yml index b103ab58f8f..d9b37b343b1 100644 --- a/.github/workflows/ci-postgres-mysql.yml +++ b/.github/workflows/ci-postgres-mysql.yml @@ -21,41 +21,24 @@ concurrency: group: db-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: false +env: + NODE_OPTIONS: '--max-old-space-size=3072' + jobs: build: name: Install & Build - runs-on: ubuntu-latest + runs-on: blacksmith-2vcpu-ubuntu-2204 if: github.event_name != 'pull_request_review' || startsWith(github.event.pull_request.base.ref, 'release/') steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 - with: - node-version: 22.x - - - name: Setup corepack and pnpm - run: | - npm i -g corepack@0.33 - corepack enable - - - run: pnpm install --frozen-lockfile - - - name: Setup build cache - uses: rharkor/caching-for-turbo@439abec0d28d21b192fa8817b744ffdf1ee5ac0d # v1.5 - - - name: Build - run: pnpm build - - - name: Cache build artifacts - uses: actions/cache/save@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 - with: - path: ./packages/**/dist - key: ${{ github.sha }}:db-tests + - name: Setup and Build + uses: n8n-io/n8n/.github/actions/setup-nodejs-blacksmith@f5fbbbe0a28a886451c886cac6b49192a39b0eea # v1.104.1 sqlite-pooled: name: SQLite Pooled - runs-on: ubuntu-latest needs: build + runs-on: blacksmith-2vcpu-ubuntu-2204 timeout-minutes: 20 env: DB_TYPE: sqlite @@ -63,25 +46,8 @@ jobs: steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 - with: - node-version: 22.x - - - name: Setup corepack and pnpm - run: | - npm i -g corepack@0.33 - corepack enable - - - run: pnpm install --frozen-lockfile - - - name: Setup build cache - uses: rharkor/caching-for-turbo@439abec0d28d21b192fa8817b744ffdf1ee5ac0d # v1.5 - - - name: Restore cached build artifacts - uses: actions/cache/restore@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 - with: - path: ./packages/**/dist - key: ${{ github.sha }}:db-tests + - name: Setup and Build + uses: n8n-io/n8n/.github/actions/setup-nodejs-blacksmith@f5fbbbe0a28a886451c886cac6b49192a39b0eea # v1.104.1 - name: Test SQLite Pooled working-directory: packages/cli @@ -89,33 +55,16 @@ jobs: mariadb: name: MariaDB - runs-on: ubuntu-latest needs: build + runs-on: blacksmith-2vcpu-ubuntu-2204 timeout-minutes: 20 env: DB_MYSQLDB_PASSWORD: password steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 - with: - node-version: 22.x - - - name: Setup corepack and pnpm - run: | - npm i -g corepack@0.33 - corepack enable - - - run: pnpm install --frozen-lockfile - - - name: Setup build cache - uses: rharkor/caching-for-turbo@439abec0d28d21b192fa8817b744ffdf1ee5ac0d # v1.5 - - - name: Restore cached build artifacts - uses: actions/cache/restore@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 - with: - path: ./packages/**/dist - key: ${{ github.sha }}:db-tests + - name: Setup and Build + uses: n8n-io/n8n/.github/actions/setup-nodejs-blacksmith@f5fbbbe0a28a886451c886cac6b49192a39b0eea # v1.104.1 - name: Start MariaDB uses: isbang/compose-action@802a148945af6399a338c7906c267331b39a71af # v2.0.0 @@ -130,8 +79,8 @@ jobs: mysql: name: MySQL (${{ matrix.service-name }}) - runs-on: ubuntu-latest needs: build + runs-on: blacksmith-2vcpu-ubuntu-2204 timeout-minutes: 20 strategy: matrix: @@ -141,25 +90,8 @@ jobs: steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 - with: - node-version: 22.x - - - name: Setup corepack and pnpm - run: | - npm i -g corepack@0.33 - corepack enable - - - run: pnpm install --frozen-lockfile - - - name: Setup build cache - uses: rharkor/caching-for-turbo@439abec0d28d21b192fa8817b744ffdf1ee5ac0d # v1.5 - - - name: Restore cached build artifacts - uses: actions/cache/restore@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 - with: - path: ./packages/**/dist - key: ${{ github.sha }}:db-tests + - name: Setup and Build + uses: n8n-io/n8n/.github/actions/setup-nodejs-blacksmith@f5fbbbe0a28a886451c886cac6b49192a39b0eea # v1.104.1 - name: Start MySQL uses: isbang/compose-action@802a148945af6399a338c7906c267331b39a71af # v2.0.0 @@ -174,8 +106,8 @@ jobs: postgres: name: Postgres - runs-on: ubuntu-latest needs: build + runs-on: blacksmith-2vcpu-ubuntu-2204 timeout-minutes: 20 env: DB_POSTGRESDB_PASSWORD: password @@ -183,25 +115,8 @@ jobs: steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 - with: - node-version: 22.x - - - name: Setup corepack and pnpm - run: | - npm i -g corepack@0.33 - corepack enable - - - run: pnpm install --frozen-lockfile - - - name: Setup build cache - uses: rharkor/caching-for-turbo@439abec0d28d21b192fa8817b744ffdf1ee5ac0d # v1.5 - - - name: Restore cached build artifacts - uses: actions/cache/restore@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 - with: - path: ./packages/**/dist - key: ${{ github.sha }}:db-tests + - name: Setup and Build + uses: n8n-io/n8n/.github/actions/setup-nodejs-blacksmith@f5fbbbe0a28a886451c886cac6b49192a39b0eea # v1.104.1 - name: Start Postgres uses: isbang/compose-action@802a148945af6399a338c7906c267331b39a71af # v2.0.0 diff --git a/.github/workflows/ci-pull-requests.yml b/.github/workflows/ci-pull-requests.yml index 4c5a8062c5a..f06be06bb68 100644 --- a/.github/workflows/ci-pull-requests.yml +++ b/.github/workflows/ci-pull-requests.yml @@ -11,7 +11,7 @@ jobs: name: Install & Build runs-on: blacksmith-2vcpu-ubuntu-2204 env: - NODE_OPTIONS: '--max-old-space-size=4096' + NODE_OPTIONS: '--max-old-space-size=3072' outputs: frontend_changed: ${{ steps.paths-filter.outputs.frontend == 'true' }} steps: @@ -31,14 +31,10 @@ jobs: - packages/@n8n/codemirror-lang/** - .bundlemonrc.json - .github/workflows/ci-pull-requests.yml + - name: Setup and Build + uses: n8n-io/n8n/.github/actions/setup-nodejs-blacksmith@f5fbbbe0a28a886451c886cac6b49192a39b0eea # v1.104.1 - - name: Setup Environment and Build Project - uses: ./.github/actions/setup-and-build - with: - node-version: 22.x - enable-caching: true - - - name: Run formatcheck + - name: Run format check run: pnpm format:check - name: Run typecheck @@ -89,7 +85,6 @@ jobs: needs: install-and-build with: ref: refs/pull/${{ github.event.pull_request.number }}/merge - cacheKey: ${{ github.sha }}-base:build collectCoverage: true secrets: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} @@ -100,4 +95,3 @@ jobs: needs: install-and-build with: ref: refs/pull/${{ github.event.pull_request.number }}/merge - cacheKey: ${{ github.sha }}-base:build diff --git a/.github/workflows/claude.yml b/.github/workflows/claude.yml new file mode 100644 index 00000000000..37a413002b2 --- /dev/null +++ b/.github/workflows/claude.yml @@ -0,0 +1,48 @@ +name: Claude PR Assistant + +on: + issue_comment: + types: [created] + pull_request_review_comment: + types: [created] + issues: + types: [opened, assigned] + pull_request_review: + types: [submitted] + +jobs: + claude-code-action: + if: | + (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) || + (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) || + (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) || + (github.event_name == 'issues' && contains(github.event.issue.body, '@claude')) + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: read + issues: read + id-token: write + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 1 + + - name: Run Claude PR Action + uses: anthropics/claude-code-action@beta + with: + anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} + # Or use OAuth token instead: + # claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} + timeout_minutes: '60' + # mode: tag # Default: responds to @claude mentions + # Optional: Restrict network access to specific domains only + # experimental_allowed_domains: | + # .anthropic.com + # .github.com + # api.github.com + # .githubusercontent.com + # bun.sh + # registry.npmjs.org + # .blob.core.windows.net diff --git a/.github/workflows/docker-build-push.yml b/.github/workflows/docker-build-push.yml index 851a5ccdfd4..5f1127e608a 100644 --- a/.github/workflows/docker-build-push.yml +++ b/.github/workflows/docker-build-push.yml @@ -7,7 +7,7 @@ name: 'Docker: Build and Push' env: - NODE_OPTIONS: '--max-old-space-size=8192' + NODE_OPTIONS: '--max-old-space-size=7168' on: schedule: @@ -166,26 +166,10 @@ jobs: with: fetch-depth: 0 - - name: Setup pnpm - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 + - name: Setup and Build + uses: n8n-io/n8n/.github/actions/setup-nodejs-blacksmith@f5fbbbe0a28a886451c886cac6b49192a39b0eea # v1.104.1 with: - run_install: false - - - name: Setup Node.js - uses: useblacksmith/setup-node@65c6ca86fdeb0ab3d85e78f57e4f6a7e4780b391 # v5.0.4 - with: - node-version: 22.x - - - name: Install dependencies - run: pnpm install --frozen-lockfile - shell: bash - - - name: Configure Turborepo Cache - uses: useblacksmith/caching-for-turbo@bafb57e7ebdbf1185762286ec94d24648cd3938a # v1 - - - name: Build n8n for Docker - run: pnpm build:n8n - shell: bash + build-command: pnpm build:n8n - name: Determine Docker tags id: determine-tags diff --git a/.github/workflows/e2e-flaky.yml b/.github/workflows/e2e-flaky.yml deleted file mode 100644 index a703ca16d40..00000000000 --- a/.github/workflows/e2e-flaky.yml +++ /dev/null @@ -1,70 +0,0 @@ -name: Debug Flaky E2E Test - -on: - workflow_dispatch: - inputs: - test_name: - description: 'The name of the test to filter.' - required: true - type: string - burn_count: - description: 'Number of times to run the test.' - required: false - type: number - default: 50 - branch: - description: 'Optional: GitHub branch, tag, or SHA to test. Defaults to the branch selected in UI.' - required: false - type: string - -jobs: - debug-test: - runs-on: blacksmith-4vcpu-ubuntu-2204 - timeout-minutes: 60 - - steps: - - name: Checkout code - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - with: - ref: ${{ github.event.inputs.branch }} - - - name: Setup PNPM - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 - - - name: Setup Node.js - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 - with: - node-version: 22.x - cache: 'pnpm' - - - name: Cache build artifacts - id: cache-build-artifacts - uses: useblacksmith/cache@c5fe29eb0efdf1cf4186b9f7fcbbcbc0cf025662 # v5.0.2 - with: - path: | - /home/runner/.cache/Cypress - ./packages/**/dist - key: ${{ github.ref }}-${{ github.sha }}-debug-build - restore-keys: | - ${{ github.ref }}-debug-build- - - - name: Install dependencies - run: pnpm install --frozen-lockfile - - - name: Build application - if: steps.cache-build-artifacts.outputs.cache-hit != 'true' - run: pnpm build - - - name: Cypress install - if: steps.cache-build-artifacts.outputs.cache-hit != 'true' - working-directory: cypress - run: pnpm cypress:install - - - name: Run Flaky Debug Command - env: - TEST_NAME: ${{ github.event.inputs.test_name }} - BURN_COUNT: ${{ github.event.inputs.burn_count }} - NODE_OPTIONS: --dns-result-order=ipv4first - E2E_TESTS: true - SHELL: /bin/sh - run: pnpm run debug:flaky:e2e "${{ env.TEST_NAME }}" "${{ env.BURN_COUNT }}" diff --git a/.github/workflows/e2e-reusable.yml b/.github/workflows/e2e-reusable.yml index b7fde6ceeab..75b9a28bb5e 100644 --- a/.github/workflows/e2e-reusable.yml +++ b/.github/workflows/e2e-reusable.yml @@ -45,7 +45,7 @@ on: required: true env: - NODE_OPTIONS: --max-old-space-size=4096 + NODE_OPTIONS: --max-old-space-size=3072 jobs: testing: diff --git a/.github/workflows/linting-reusable.yml b/.github/workflows/linting-reusable.yml index 90773bd4a9f..4d89d34ffd8 100644 --- a/.github/workflows/linting-reusable.yml +++ b/.github/workflows/linting-reusable.yml @@ -13,11 +13,9 @@ on: required: false type: string default: 22.x - cacheKey: - description: Cache key for modules and build artifacts. - required: false - type: string - default: '' + +env: + NODE_OPTIONS: --max-old-space-size=7168 jobs: lint: @@ -28,21 +26,8 @@ jobs: with: ref: ${{ inputs.ref }} - - name: Setup Environment - uses: n8n-io/n8n/.github/actions/setup-and-build@7e870b8f7f5a39bb8bf82d1f42b6d44febc0082c # v1.100.1 + - name: Build and Test + uses: n8n-io/n8n/.github/actions/setup-nodejs-blacksmith@f5fbbbe0a28a886451c886cac6b49192a39b0eea # v1.104.1 with: + build-command: pnpm lint node-version: ${{ inputs.nodeVersion }} - enable-caching: true - skip-build: ${{ inputs.cacheKey != '' }} - - - name: Lint Backend - run: pnpm lint:backend - - - name: Lint Nodes - run: pnpm lint:nodes - - - name: Lint Frontend - run: pnpm lint:frontend - - - name: Lint Testing - run: pnpm lint:testing diff --git a/.github/workflows/playwright-test-reusable.yml b/.github/workflows/playwright-test-reusable.yml index 24683de6409..ec36be0617d 100644 --- a/.github/workflows/playwright-test-reusable.yml +++ b/.github/workflows/playwright-test-reusable.yml @@ -25,7 +25,7 @@ on: env: PLAYWRIGHT_BROWSERS_PATH: packages/testing/playwright/ms-playwright-cache - NODE_OPTIONS: --max-old-space-size=4096 + NODE_OPTIONS: --max-old-space-size=3072 # Disable Ryuk to avoid issues with Docker since it needs privileged access, containers are cleaned on teardown anyway TESTCONTAINERS_RYUK_DISABLED: true diff --git a/.github/workflows/test-workflows-callable.yml b/.github/workflows/test-workflows-callable.yml index 6959d2f370d..b8738ee31a8 100644 --- a/.github/workflows/test-workflows-callable.yml +++ b/.github/workflows/test-workflows-callable.yml @@ -1,4 +1,4 @@ -name: Callable Test Workflows +name: Test Workflows - Reusable on: workflow_call: @@ -7,208 +7,47 @@ on: description: 'The Git ref (branch, tag, or SHA) to checkout and test.' required: true type: string - send_webhook_report: - description: 'Set to true to send test results to the webhook.' - required: false - type: boolean - default: false - pr_number: - description: 'The PR number, if applicable (for context in webhook).' + compare_schemas: + description: 'Set to "true" to enable schema comparison during tests.' required: false + default: 'true' type: string - default: '' secrets: ENCRYPTION_KEY: description: 'Encryption key for n8n operations.' required: true - CI_SENTRY_DSN: - description: 'Sentry DSN for CI test runs.' - required: false - WORKFLOW_TESTS_RESULT_DESTINATION: - description: 'Webhook URL to send test results to (if enabled).' - required: false + CURRENTS_RECORD_KEY: + description: 'Currents record key for uploading test results.' + required: true + +env: + NODE_OPTIONS: --max-old-space-size=3072 jobs: - build_and_test: - name: Install, Build, and Test Workflows + run_workflow_tests: + name: Run Workflow Tests with Snapshots runs-on: blacksmith-2vcpu-ubuntu-2204 - timeout-minutes: 10 - env: - N8N_ENCRYPTION_KEY: ${{ secrets.ENCRYPTION_KEY }} - steps: - name: Checkout repository - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: ${{ inputs.git_ref }} - - name: Setup Environment and Build Project - uses: n8n-io/n8n/.github/actions/setup-and-build@7e870b8f7f5a39bb8bf82d1f42b6d44febc0082c # v1.100.1 - with: - node-version: '22.x' - cache-suffix: 'workflow-test' + - name: Set up Environment + uses: n8n-io/n8n/.github/actions/setup-nodejs-blacksmith@f5fbbbe0a28a886451c886cac6b49192a39b0eea # v1.104.1 - - name: Install OS dependencies - run: | - sudo apt update -y - echo 'tzdata tzdata/Areas select Europe' | sudo debconf-set-selections - echo 'tzdata tzdata/Zones/Europe select Paris' | sudo debconf-set-selections - sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends graphicsmagick - sudo apt-get clean - sudo rm -rf /var/lib/apt/lists/* - - - name: Import credentials - run: ./packages/cli/bin/n8n import:credentials --input=test-workflows/credentials.json - - - name: Import workflows - run: ./packages/cli/bin/n8n import:workflow --separate --input=test-workflows/workflows - - - name: Copy static assets - run: | - mkdir -p /tmp/testData/pdfs - cp assets/n8n-logo.png /tmp/n8n-logo.png - cp assets/n8n-screenshot.png /tmp/n8n-screenshot.png - cp test-workflows/testData/pdfs/*.pdf /tmp/testData/pdfs/ - - - name: Run tests - id: tests - run: ./packages/cli/bin/n8n executeBatch --shallow --skipList=test-workflows/skipList.json --githubWorkflow --shortOutput --output=test-results.json --concurrency=16 --compare=test-workflows/snapshots - continue-on-error: true + - name: Set up Workflow Tests + run: pnpm --filter=n8n-playwright test:workflows:setup env: - SKIP_STATISTICS_EVENTS: 'true' - DB_SQLITE_POOL_SIZE: '4' - N8N_SENTRY_DSN: ${{ secrets.CI_SENTRY_DSN }} + N8N_ENCRYPTION_KEY: ${{ secrets.ENCRYPTION_KEY }} - - name: Report test outcome - if: always() - run: | - echo "Test step outcome was: ${{ steps.tests.outcome }}" - if [[ "${{ steps.tests.outcome }}" == "failure" ]]; then - echo "Workflow tests failed but the workflow will continue." - elif [[ "${{ steps.tests.outcome }}" == "success" ]]; then - echo "Workflow tests passed." - else - echo "Workflow tests outcome: ${{ steps.tests.outcome }}" - fi - - - name: Prepare and Send Test Results to Webhook - if: inputs.send_webhook_report == true - shell: bash + - name: Run Workflow Tests + run: pnpm --filter=n8n-playwright test:workflows --workers 4 env: - WEBHOOK_URL: ${{ secrets.WORKFLOW_TESTS_RESULT_DESTINATION }} - TEST_RESULTS_FILE: ./test-results.json - GH_REPOSITORY: ${{ github.repository }} - GH_RUN_ID: ${{ github.run_id }} - GH_RUN_ATTEMPT: ${{ github.run_attempt }} - GH_REF_TESTED: ${{ inputs.git_ref }} - GH_EVENT_NAME: ${{ github.event_name }} - GH_PR_NUMBER_INPUT: ${{ inputs.pr_number }} - GH_WORKFLOW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} - GH_ACTOR: ${{ github.actor }} - run: | - echo "Attempting to send test results to webhook..." - echo "Test results file expected at: $TEST_RESULTS_FILE" + CURRENTS_RECORD_KEY: ${{ secrets.CURRENTS_RECORD_KEY }} - if [ ! -f "$TEST_RESULTS_FILE" ]; then - echo "::warning::Test results file ($TEST_RESULTS_FILE) not found. Skipping webhook." - exit 0 - fi - - if ! command -v jq &> /dev/null; then - echo "jq not found. Installing jq..." - sudo apt-get update -qq && sudo apt-get install -y -qq jq - if ! command -v jq &> /dev/null; then - echo "::error::Failed to install jq. Cannot process JSON." - exit 1 - fi - fi - - pr_number_to_send="$GH_PR_NUMBER_INPUT" - - echo "Preparing JSON payload..." - if [ ! -s "$TEST_RESULTS_FILE" ]; then - echo "::warning::Test results file ($TEST_RESULTS_FILE) is empty. Sending only GitHub context." - enriched_payload=$(jq -n \ - --arg repository "$GH_REPOSITORY" \ - --arg run_id "$GH_RUN_ID" \ - --arg run_attempt "$GH_RUN_ATTEMPT" \ - --arg ref_tested "$GH_REF_TESTED" \ - --arg event_name "$GH_EVENT_NAME" \ - --arg pr_num "$pr_number_to_send" \ - --arg workflow_run_url "$GH_WORKFLOW_RUN_URL" \ - --arg actor "$GH_ACTOR" \ - '{ - githubWorkflowContext: { - repository: $repository, - runId: $run_id, - runAttempt: $run_attempt, - gitRefTested: $ref_tested, - triggeringEventName: $event_name, - prNumber: (if $pr_num == "" then null else $pr_num | tonumber? // $pr_num end), - workflowRunUrl: $workflow_run_url, - triggeredBy: $actor - } - }') - else - enriched_payload=$(jq \ - --arg repository "$GH_REPOSITORY" \ - --arg run_id "$GH_RUN_ID" \ - --arg run_attempt "$GH_RUN_ATTEMPT" \ - --arg ref_tested "$GH_REF_TESTED" \ - --arg event_name "$GH_EVENT_NAME" \ - --arg pr_num "$pr_number_to_send" \ - --arg workflow_run_url "$GH_WORKFLOW_RUN_URL" \ - --arg actor "$GH_ACTOR" \ - '. + { - githubWorkflowContext: { - repository: $repository, - runId: $run_id, - runAttempt: $run_attempt, - gitRefTested: $ref_tested, - triggeringEventName: $event_name, - prNumber: (if $pr_num == "" then null else $pr_num | tonumber? // $pr_num end), - workflowRunUrl: $workflow_run_url, - triggeredBy: $actor - } - }' "$TEST_RESULTS_FILE") - fi - - jq_exit_code=$? - if [ $jq_exit_code -ne 0 ] || [ -z "$enriched_payload" ]; then - echo "::error::Failed to process JSON with jq (exit code: $jq_exit_code). Input file: $TEST_RESULTS_FILE" - if [ -s "$TEST_RESULTS_FILE" ]; then - echo "Contents of $TEST_RESULTS_FILE that may have caused an error:" - head -c 1000 "$TEST_RESULTS_FILE" # Print first 1000 chars - echo "" # Newline after head - elif [ -f "$TEST_RESULTS_FILE" ]; then - echo "$TEST_RESULTS_FILE exists but is empty." - fi - exit 1 - fi - - echo "Enriched payload to send (first 500 chars):" - echo "$enriched_payload" | head -c 500 - echo "" - - echo "Sending data to webhook: $WEBHOOK_URL" - http_response_code=$(curl -s -w "%{http_code}" \ - -X POST \ - -H "Content-Type: application/json" \ - -H "X-GitHub-Event: $GH_EVENT_NAME" \ - -H "X-GitHub-Run-Id: $GH_RUN_ID" \ - --data "$enriched_payload" \ - "$WEBHOOK_URL" \ - -o curl_response_body.txt 2>curl_stderr.txt) - - curl_stderr_content=$(cat curl_stderr.txt) - if [ -n "$curl_stderr_content" ]; then - echo "::warning::curl stderr: $curl_stderr_content" - fi - echo "Webhook response code: $http_response_code" - echo "Webhook response body:" - cat curl_response_body.txt - if [[ "$http_response_code" -ge 200 && "$http_response_code" -lt 300 ]]; then - echo "Successfully sent data to webhook." - else - echo "::error::Webhook call failed with status code $http_response_code." - fi + - name: Run Workflow Schema Tests + if: ${{ inputs.compare_schemas == 'true' }} + run: pnpm --filter=n8n-playwright test:workflows:schema + env: + CURRENTS_RECORD_KEY: ${{ secrets.CURRENTS_RECORD_KEY }} diff --git a/.github/workflows/test-workflows-nightly.yml b/.github/workflows/test-workflows-nightly.yml index 28d6e6d3910..3f912e6aef5 100644 --- a/.github/workflows/test-workflows-nightly.yml +++ b/.github/workflows/test-workflows-nightly.yml @@ -11,16 +11,10 @@ on: type: string default: 'master' - -permissions: - contents: read - jobs: run_workflow_tests: name: Run Workflow Tests uses: ./.github/workflows/test-workflows-callable.yml with: git_ref: ${{ github.event_name == 'schedule' && 'master' || github.event.inputs.git_ref_to_test }} - send_webhook_report: false - pr_number: '' - secrets: inherit \ No newline at end of file + secrets: inherit diff --git a/.github/workflows/test-workflows-pr-approved.yml b/.github/workflows/test-workflows-pr-approved.yml index 0eda5329ee5..a1dbd25322c 100644 --- a/.github/workflows/test-workflows-pr-approved.yml +++ b/.github/workflows/test-workflows-pr-approved.yml @@ -22,6 +22,4 @@ jobs: uses: ./.github/workflows/test-workflows-callable.yml with: git_ref: ${{ github.event.pull_request.head.sha }} - send_webhook_report: true - pr_number: ${{ github.event.pull_request.number }} - secrets: inherit \ No newline at end of file + secrets: inherit diff --git a/.github/workflows/test-workflows-pr-comment.yml b/.github/workflows/test-workflows-pr-comment.yml index d1b2615765a..61073c2689c 100644 --- a/.github/workflows/test-workflows-pr-comment.yml +++ b/.github/workflows/test-workflows-pr-comment.yml @@ -107,6 +107,4 @@ jobs: uses: ./.github/workflows/test-workflows-callable.yml with: git_ref: ${{ needs.handle_comment_command.outputs.git_ref }} - send_webhook_report: true - pr_number: ${{ needs.handle_comment_command.outputs.pr_number }} secrets: inherit diff --git a/.github/workflows/units-tests-reusable.yml b/.github/workflows/units-tests-reusable.yml index a47fa0d82b6..6d96f164533 100644 --- a/.github/workflows/units-tests-reusable.yml +++ b/.github/workflows/units-tests-reusable.yml @@ -13,63 +13,36 @@ on: required: false type: string default: 22.x - cacheKey: - description: Cache key for modules and build artifacts. - required: false - default: '' - type: string collectCoverage: required: false default: false type: boolean - ignoreTurboCache: - required: false - default: false - type: boolean - skipFrontendTests: - required: false - default: false - type: boolean secrets: CODECOV_TOKEN: description: 'Codecov upload token.' required: false +env: + NODE_OPTIONS: --max-old-space-size=7168 + jobs: unit-test: name: Unit tests runs-on: blacksmith-4vcpu-ubuntu-2204 env: - TURBO_FORCE: ${{ inputs.ignoreTurboCache }} COVERAGE_ENABLED: ${{ inputs.collectCoverage }} steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: ${{ inputs.ref }} - - name: Setup Environment and Build Project - uses: n8n-io/n8n/.github/actions/setup-and-build@7e870b8f7f5a39bb8bf82d1f42b6d44febc0082c # v1.100.1 + - name: Build + uses: n8n-io/n8n/.github/actions/setup-nodejs-blacksmith@f5fbbbe0a28a886451c886cac6b49192a39b0eea # v1.104.1 with: node-version: ${{ inputs.nodeVersion }} - skip-build: ${{ inputs.cacheKey != '' }} - - name: Restore cached build artifacts only - if: ${{ inputs.cacheKey != '' }} - uses: useblacksmith/cache/restore@c5fe29eb0efdf1cf4186b9f7fcbbcbc0cf025662 # v5.0.2 - with: - path: ./packages/**/dist - key: ${{ inputs.cacheKey }} - fail-on-cache-miss: true - - - name: Test Backend - run: pnpm test:backend - - - name: Test Nodes - run: pnpm test:nodes - - - name: Test Frontend - if: ${{ !inputs.skipFrontendTests }} - run: pnpm test:frontend + - name: Test + run: pnpm test:ci - name: Upload test results to Codecov if: ${{ !cancelled() }} diff --git a/.gitignore b/.gitignore index 04e32957594..97903e13b6a 100644 --- a/.gitignore +++ b/.gitignore @@ -33,5 +33,4 @@ test-results/ compiled_app_output trivy_report* compiled -jest.config.js -packages/cli/src/modules/my-feature \ No newline at end of file +packages/cli/src/modules/my-feature diff --git a/CHANGELOG.md b/CHANGELOG.md index a9b5cb85216..f735e5a2e64 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,63 @@ +# [1.105.0](https://github.com/n8n-io/n8n/compare/n8n@1.104.0...n8n@1.105.0) (2025-07-28) + + +### Bug Fixes + +* **core:** Add headers to telemetry cross origin request ([#17631](https://github.com/n8n-io/n8n/issues/17631)) ([251e892](https://github.com/n8n-io/n8n/commit/251e892a09b82b2f1f980d3984e3aef84ed1732e)) +* **core:** Decouple removing and closing destination from actually deleting it ([#17614](https://github.com/n8n-io/n8n/issues/17614)) ([b09f737](https://github.com/n8n-io/n8n/commit/b09f73701d8b6ce0e3bc4ef28d0f5d9fc7fb5df1)) +* **core:** Fetching schema files in Docker ([#17623](https://github.com/n8n-io/n8n/issues/17623)) ([5a3b0a2](https://github.com/n8n-io/n8n/commit/5a3b0a24811eea5ebd9d80c26a54fea74665569f)) +* **core:** Fix getLiveExecutionRowsOnPostgres when there are multiple n8n schemas ([#17635](https://github.com/n8n-io/n8n/issues/17635)) ([9e3bfff](https://github.com/n8n-io/n8n/commit/9e3bfff68d35a2eb21ba43452fc01ee24601c122)) +* **core:** Ignore pairedItem when checking for incorrect output data from a node ([#17340](https://github.com/n8n-io/n8n/issues/17340)) ([2708fe8](https://github.com/n8n-io/n8n/commit/2708fe81a5323687c59c3d483d6bf3c67464f657)) +* **core:** Make the module loading for local dev more generic ([#17547](https://github.com/n8n-io/n8n/issues/17547)) ([01b95a9](https://github.com/n8n-io/n8n/commit/01b95a9ee5dd4985e4770ef625ced91158f849da)) +* **core:** Optimize connection type lookups ([#17585](https://github.com/n8n-io/n8n/issues/17585)) ([70eab1b](https://github.com/n8n-io/n8n/commit/70eab1b2a02d70a46a56e8c993ccc694e38ac2d5)) +* **core:** Remove non-included nodes regardless of the package when using NODES_INCLUDE ([#17517](https://github.com/n8n-io/n8n/issues/17517)) ([1641d39](https://github.com/n8n-io/n8n/commit/1641d3964b72539354a939400af91e2692368058)) +* Do not throw on tool errors, instead return error message ([#17558](https://github.com/n8n-io/n8n/issues/17558)) ([f11ec53](https://github.com/n8n-io/n8n/commit/f11ec538dca2938e57302a1bedd5dd7d1e7a9488)) +* **editor:** Add background same as that of the parent ([#17625](https://github.com/n8n-io/n8n/issues/17625)) ([8660057](https://github.com/n8n-io/n8n/commit/8660057350e21b604b3fb3f627ccd32659058e87)) +* **editor:** Case-sensitive credential search in `NodeCredentials` component ([#17564](https://github.com/n8n-io/n8n/issues/17564)) ([3ce9a99](https://github.com/n8n-io/n8n/commit/3ce9a998ae454929207dd9add4a67b68dba13bc8)) +* **editor:** Do not show new NDV for sticky notes ([#17537](https://github.com/n8n-io/n8n/issues/17537)) ([4de3759](https://github.com/n8n-io/n8n/commit/4de3759a59cade3f82c57a1eeba1c6b4a16a3eaf)) +* **editor:** Fix canvas layouting when tab is not active ([#17638](https://github.com/n8n-io/n8n/issues/17638)) ([2df76e0](https://github.com/n8n-io/n8n/commit/2df76e020ef3a962fc991f2d108a8181914a2dd1)) +* **editor:** Fix error when there is no path back to referenced node ([#16059](https://github.com/n8n-io/n8n/issues/16059)) ([d6ac924](https://github.com/n8n-io/n8n/commit/d6ac924b3b7d2205cbcc0e5edc7ad407f4fe2a19)) +* **editor:** Fix layout of binary data preview in the log view ([#17584](https://github.com/n8n-io/n8n/issues/17584)) ([456c4e8](https://github.com/n8n-io/n8n/commit/456c4e8167ed95e5f096daaae9cc46cad90a0981)) +* **editor:** Fix trimPayloadToSize mutating original objects in AI assistant ([#17498](https://github.com/n8n-io/n8n/issues/17498)) ([1010043](https://github.com/n8n-io/n8n/commit/101004390bf5cdf5f67675dcfccb551f71ea4b70)) +* **editor:** Hide `What's New` notification in executions demo view ([#17742](https://github.com/n8n-io/n8n/issues/17742)) ([cebb1f6](https://github.com/n8n-io/n8n/commit/cebb1f65669638a6716dbbd2eb9873ae8dbfe108)) +* **editor:** Improve filter change handling with debounced updates for date fields ([#17618](https://github.com/n8n-io/n8n/issues/17618)) ([ae08917](https://github.com/n8n-io/n8n/commit/ae089173a71b3417ca07ae4bf49d4b0b3d31bf09)) +* **editor:** Make inline text edit component reactive to prop changes ([#17557](https://github.com/n8n-io/n8n/issues/17557)) ([9c793a4](https://github.com/n8n-io/n8n/commit/9c793a45c562631ec331f65ca871334f5a8a8e2f)) +* **editor:** Make sure HTML editor field is not editable when workflow is in read only mode ([#17561](https://github.com/n8n-io/n8n/issues/17561)) ([18c02df](https://github.com/n8n-io/n8n/commit/18c02dfa2b5cf76663b4678046a8bcb313fba1f4)) +* **editor:** Persist SSO protocol setting properly in the UI ([#17572](https://github.com/n8n-io/n8n/issues/17572)) ([4b2be26](https://github.com/n8n-io/n8n/commit/4b2be263790a53bf46b99f3301ddec6a771b2daf)) +* **editor:** Prevent default action on Enter key in commit and push dialog ([#17578](https://github.com/n8n-io/n8n/issues/17578)) ([e317c92](https://github.com/n8n-io/n8n/commit/e317c929161733a03ff61c07ae6f3ae12cf22ef2)) +* **editor:** Prevent unnecessary updates on model value change in InlineTextEdit component ([#17553](https://github.com/n8n-io/n8n/issues/17553)) ([832b7fd](https://github.com/n8n-io/n8n/commit/832b7fda3b59cc518624128ca98d26983cb444fd)) +* **editor:** Remove inline script and style from index.html ([#17531](https://github.com/n8n-io/n8n/issues/17531)) ([0db24ce](https://github.com/n8n-io/n8n/commit/0db24ce71b671f6311fc47ac9553466d34c46ba8)) +* **editor:** Render HTML in the log view ([#17586](https://github.com/n8n-io/n8n/issues/17586)) ([46635c5](https://github.com/n8n-io/n8n/commit/46635c59418630c2f24fce5cb8c25e425eddc3c2)) +* **editor:** Tweak configurable node width ([#17512](https://github.com/n8n-io/n8n/issues/17512)) ([3825f8a](https://github.com/n8n-io/n8n/commit/3825f8a806fcc67a33f43ce6ebd71b6a8023d7d8)) +* **GitHub Document Loader Node:** Fix node loading issue ([#17494](https://github.com/n8n-io/n8n/issues/17494)) ([8fb3d8d](https://github.com/n8n-io/n8n/commit/8fb3d8d5870682af4b8b0c31949b5c1569a70d90)) +* **Google Gemini Node:** Error when used as tool with "Message a model" operation ([#17491](https://github.com/n8n-io/n8n/issues/17491)) ([f30cc7b](https://github.com/n8n-io/n8n/commit/f30cc7b6cfba6998091f31fcd3012a971b3a2bb8)) +* **Google Sheets Node:** Get Rows operation returns an empty string when the cell has a value of 0 ([#17642](https://github.com/n8n-io/n8n/issues/17642)) ([9808783](https://github.com/n8n-io/n8n/commit/980878398e9f6b498ba7079492e92bdba6fa6778)) +* **MySQL Node:** Do not replace $ values with null ([#17327](https://github.com/n8n-io/n8n/issues/17327)) ([4b626e5](https://github.com/n8n-io/n8n/commit/4b626e528219c0610528a1119a2bb60c8442952d)) +* **OpenAI Node:** Fix memory connector for assistant message ([#17501](https://github.com/n8n-io/n8n/issues/17501)) ([e51b056](https://github.com/n8n-io/n8n/commit/e51b056e3a8fd79c73b0a87eaf6595b7f03d546b)) +* Prevent error when importing nodes with malformed collection params ([#17580](https://github.com/n8n-io/n8n/issues/17580)) ([4713827](https://github.com/n8n-io/n8n/commit/4713827813809065c8800adc7c0cd4bf42f54eeb)) +* **RabbitMQ Trigger Node:** Respect the "Delete From Queue When" option with manual executions ([#17554](https://github.com/n8n-io/n8n/issues/17554)) ([2bd0aa3](https://github.com/n8n-io/n8n/commit/2bd0aa38e24dcada0777921d457586d35095ac42)) +* **Telegram Node:** Determine the MIME type when downloading the file ([#17725](https://github.com/n8n-io/n8n/issues/17725)) ([a9c29e3](https://github.com/n8n-io/n8n/commit/a9c29e340adf370a65222600f3fac6884642c747)) +* Update packages for security fixes ([#17733](https://github.com/n8n-io/n8n/issues/17733)) ([edeb8ef](https://github.com/n8n-io/n8n/commit/edeb8ef8a437f30a6c37826ad1eccb6a35a4d3bc)) +* Update settings icons on canvas style ([#17636](https://github.com/n8n-io/n8n/issues/17636)) ([0338ebb](https://github.com/n8n-io/n8n/commit/0338ebb3dde3be4050ee869fb056f67827a764b2)) +* **Webhook Node:** Don't wrap response in an iframe if it doesn't have HTML ([#17671](https://github.com/n8n-io/n8n/issues/17671)) ([69beafb](https://github.com/n8n-io/n8n/commit/69beafbf7127d6492fc875ab243e6f2e174e61ec)) + + +### Features + +* **core:** Increase Cron observability ([#17626](https://github.com/n8n-io/n8n/issues/17626)) ([08c38a7](https://github.com/n8n-io/n8n/commit/08c38a76f384642c09fab6fc47f76bffd532a5b8)) +* **editor:** Add dragging and hiding for evaluation table columns ([#17587](https://github.com/n8n-io/n8n/issues/17587)) ([921cdb6](https://github.com/n8n-io/n8n/commit/921cdb6fd0ff11793a2ec08faee28b1c5842e25b)) +* **editor:** Add follow up question nps ([#17459](https://github.com/n8n-io/n8n/issues/17459)) ([e18ffe8](https://github.com/n8n-io/n8n/commit/e18ffe809c044f2e10564669d96cf79779a8a279)) +* **editor:** Add settings icons to the node on canvas ([#15467](https://github.com/n8n-io/n8n/issues/15467)) ([a2f21a7](https://github.com/n8n-io/n8n/commit/a2f21a76159e40de97c84c7604d3039d7e9a522e)) +* **editor:** New users see whatsnew notification only if new ([#17409](https://github.com/n8n-io/n8n/issues/17409)) ([a1d2a55](https://github.com/n8n-io/n8n/commit/a1d2a55f7e6e04389cd8b86aacb9c78f2bffdc41)) +* **editor:** Release the Focus Panel ([#17734](https://github.com/n8n-io/n8n/issues/17734)) ([a415dbf](https://github.com/n8n-io/n8n/commit/a415dbfd96c429f34e5de0a3572c7338d31321af)) +* **editor:** Use remote filtering for error workflow search in settings ([#17624](https://github.com/n8n-io/n8n/issues/17624)) ([e1ef35a](https://github.com/n8n-io/n8n/commit/e1ef35a2b4a44c1ff9770b387fec9b5a3a742838)) +* Proxy all RudderStack frontend telemetry events through the backend ([#17177](https://github.com/n8n-io/n8n/issues/17177)) ([5524b21](https://github.com/n8n-io/n8n/commit/5524b2137a0b54132df7dad1600c2e3054ed78c8)) +* Respond to chat and wait for response ([#12546](https://github.com/n8n-io/n8n/issues/12546)) ([a98ed2c](https://github.com/n8n-io/n8n/commit/a98ed2ca495d5c86ebb61baad049592ba1bce3a6)) +* **RSS Read Node:** Add support for custom response fields ([#16875](https://github.com/n8n-io/n8n/issues/16875)) ([d520059](https://github.com/n8n-io/n8n/commit/d520059ec36a9f0a578a60ddd8ea9811e76afd1f)) +* Track inputs and outputs in Evaluations ([#17404](https://github.com/n8n-io/n8n/issues/17404)) ([c18fabb](https://github.com/n8n-io/n8n/commit/c18fabb419889d35bf70326f83e26300eaba0102)) + + + # [1.104.0](https://github.com/n8n-io/n8n/compare/n8n@1.103.0...n8n@1.104.0) (2025-07-21) diff --git a/cypress-playwright-migration.md b/cypress-playwright-migration.md new file mode 100644 index 00000000000..bdbd2440e29 --- /dev/null +++ b/cypress-playwright-migration.md @@ -0,0 +1,270 @@ +# Cypress to Playwright Migration Guide + +## Overview + +This guide outlines the systematic approach for migrating Cypress tests to Playwright in the n8n codebase, based on successful migrations and lessons learned. + +## 🎯 Migration Principles + +### 1. **Architecture First** +- Follow the established 4-layer architecture: Tests β†’ Composables β†’ Page Objects β†’ BasePage +- Use existing composables and page objects before creating new ones +- Maintain separation of concerns: business logic in composables, UI interactions in page objects + +### 2. **Search Existing Patterns First** +- **ALWAYS** search for existing Playwright patterns before implementing new functionality +- Look for working examples in existing test files (e.g., `39-projects.spec.ts`) +- Check composables and page objects for existing methods +- Framework-specific patterns may differ (Cypress display names vs Playwright field names) + +### 3. **Idempotent Test Design** +- Design tests to work regardless of initial state +- Use fresh project creation for tests that need empty states +- Create test prerequisites within the test when needed +- Avoid `@db:reset` dependencies in favor of project-based isolation + +## πŸ“‹ Pre-Migration Checklist + +### 1. **Environment Setup** +```bash +# Start isolated test environment +cd packages/testing/playwright +pnpm start:isolated + +# Run tests with proper environment +N8N_BASE_URL=http://localhost:5679 npx playwright test --reporter=list +``` + +### 2. **Study Existing Patterns** +- Review `CONTRIBUTING.md` for architecture guidelines +- Examine working test files (e.g., `1-workflows.spec.ts`, `39-projects.spec.ts`) +- Check available composables in `composables/` directory +- Review page objects in `pages/` directory + +### 3. **Understand Framework Differences** +- **Cypress**: Uses display names (`'Internal Integration Secret'`) +- **Playwright**: Uses field names (`'apiKey'`) +- **Navigation**: Direct page navigation often more reliable than complex UI interactions +- **Selectors**: Prefer `data-test-id` over text-based selectors + +## πŸ”„ Migration Process + +### Step 1: Scaffold the Test File +```typescript +// 1. Create test file with proper imports +import { test, expect } from '../fixtures/base'; +import { + // Import constants from existing patterns + NOTION_NODE_NAME, + NEW_NOTION_ACCOUNT_NAME, + // ... other constants +} from '../config/constants'; + +// 2. Add beforeEach setup if needed +test.describe('Feature Name', () => { + test.beforeEach(async ({ api, n8n }) => { + await api.enableFeature('sharing'); + await api.enableFeature('folders'); + // ... other feature flags + await n8n.goHome(); + }); + + // 3. Scaffold all tests from Cypress file + test('should do something', async ({ n8n }) => { + // TODO: Implement based on Cypress version + console.log('Test scaffolded - ready for implementation'); + }); +}); +``` + +### Step 2: Research Existing Patterns +```bash +# Search for existing implementations +grep -r "addCredentialToProject" packages/testing/playwright/ +grep -r "createProject" packages/testing/playwright/ +grep -r "workflowComposer" packages/testing/playwright/ +``` + +### Step 3: Implement Working Tests First +- Start with tests that have clear existing patterns +- Use composables for high-level operations (project creation, navigation) +- Use direct DOM interactions for form filling when composables don't match +- Implement one test at a time and verify it works + +### Step 4: Handle Complex UI Interactions +- **Node Creation Issues**: Close NDV after adding first node to prevent overlay blocking +- **Universal Add Button**: Use direct navigation when button interactions fail +- **Modal Overlays**: Use route interception for error testing +- **Multiple Elements**: Use specific selectors to avoid strict mode violations + +## πŸ› οΈ Common Patterns + +### Project-Based Testing +```typescript +// βœ… Good: Use existing composable +const { projectName } = await n8n.projectComposer.createProject(); +await n8n.projectComposer.addCredentialToProject( + projectName, + 'Notion API', + 'apiKey', // Use field name, not display name + 'test_value' +); +``` + +### Direct Navigation +```typescript +// βœ… Good: Direct navigation when UI interactions fail +await n8n.page.goto('/home/credentials/create'); +await n8n.page.goto('/workflow/new'); +``` + +### Error Testing with Route Interception +```typescript +// βœ… Good: Force errors for notification testing +await n8n.page.route('**/rest/credentials', route => { + route.abort(); +}); +``` + +### Node Creation with NDV Handling +```typescript +// βœ… Good: Handle NDV auto-opening +await n8n.canvas.addNode(SCHEDULE_TRIGGER_NODE_NAME); +await n8n.ndv.close(); // Close NDV that opens automatically +await n8n.canvas.addNode(NOTION_NODE_NAME); +``` + +## 🚨 Common Pitfalls + +### 1. **Not Checking Existing Patterns** +```typescript +// ❌ Bad: Implementing without checking existing patterns +await n8n.page.getByText('Internal Integration Secret').fill('value'); + +// βœ… Good: Use existing composable with correct field name +await n8n.projectComposer.addCredentialToProject( + projectName, 'Notion API', 'apiKey', 'value' +); +``` + +### 2. **Ignoring Framework Differences** +```typescript +// ❌ Bad: Assuming Cypress patterns work in Playwright +await n8n.credentialsModal.connectionParameter('Internal Integration Secret').fill('value'); + +// βœ… Good: Use Playwright field names +await n8n.page.getByTestId('parameter-input-field').fill('value'); +``` + +### 3. **Complex UI Interactions When Simple Navigation Works** +```typescript +// ❌ Bad: Complex button clicking when direct navigation works +await n8n.workflows.clickAddWorkflowButton(); +await n8n.page.waitForLoadState(); + +// βœ… Good: Direct navigation +await n8n.page.goto('/workflow/new'); +await n8n.page.waitForLoadState('networkidle'); +``` + +### 4. **Not Handling UI Blocking** +```typescript +// ❌ Bad: Not handling NDV auto-opening +await n8n.canvas.addNode(SCHEDULE_TRIGGER_NODE_NAME); +await n8n.canvas.addNode(NOTION_NODE_NAME); // This will fail + +// βœ… Good: Close NDV after first node +await n8n.canvas.addNode(SCHEDULE_TRIGGER_NODE_NAME); +await n8n.ndv.close(); +await n8n.canvas.addNode(NOTION_NODE_NAME); +``` + +## πŸ“ Testing Strategy + +### 1. **Start Simple** +- Begin with basic navigation and page verification tests +- Use existing composables for common operations +- Verify each test works before moving to complex scenarios + +### 2. **Incremental Implementation** +- Scaffold all tests first with placeholders +- Implement one test at a time +- Use `console.log` for placeholder tests to maintain passing test suite + +### 3. **Debugging Approach** +```typescript +// Add pauses for debugging +await n8n.page.pause(); + +// Use headed mode for visual debugging +SHOW_BROWSER=true npx playwright test + +// Use specific test selection +npx playwright test -g "test name" --reporter=list +``` + +### 4. **Verification Strategy** +- Run individual tests during development +- Run full test suite after each major change +- Use `--reporter=list` for clear output during development + +## πŸ”§ Environment Configuration + +### VS Code Settings +```json +{ + "playwright.env": { + "N8N_BASE_URL": "http://localhost:5679", + "SHOW_BROWSER": "true", + "RESET_E2E_DB": "true" + } +} +``` + +### Package.json Scripts +```json +{ + "scripts": { + "start:isolated": "cd ..; N8N_PORT=5679 N8N_USER_FOLDER=/tmp/n8n-test-$(date +%s) E2E_TESTS=true pnpm start", + "test:local": "RESET_E2E_DB=true N8N_BASE_URL=http://localhost:5679 start-server-and-test 'pnpm start:isolated' http://localhost:5679/favicon.ico 'sleep 1 && pnpm test:standard --workers 4 --repeat-each 5'" + } +} +``` + +## πŸ“Š Success Metrics + +### Migration Complete When: +- [ ] All tests from Cypress file are scaffolded +- [ ] All tests pass consistently +- [ ] Tests use existing composables where appropriate +- [ ] Tests follow established patterns +- [ ] No `@db:reset` dependencies (unless absolutely necessary) +- [ ] Tests are idempotent and can run in any order +- [ ] Complex UI interactions are handled properly + +### Quality Checklist: +- [ ] Tests use proper error handling +- [ ] Tests include appropriate assertions +- [ ] Tests follow naming conventions +- [ ] Tests include proper comments +- [ ] Tests use constants for repeated values +- [ ] Tests handle dynamic data properly + +## 🎯 Best Practices Summary + +1. **Search First**: Always look for existing patterns before implementing +2. **Use Composables**: Leverage existing business logic composables +3. **Direct Navigation**: Prefer direct page navigation over complex UI interactions +4. **Handle UI Blocking**: Close modals/NDV when adding multiple nodes +5. **Framework Awareness**: Understand differences between Cypress and Playwright +6. **Incremental Approach**: Implement one test at a time +7. **Idempotent Design**: Make tests work regardless of initial state +8. **Proper Debugging**: Use pauses and headed mode for troubleshooting + +## πŸ“š Resources + +- [Playwright Test Documentation](https://playwright.dev/docs/intro) +- [n8n Playwright Contributing Guide](./packages/testing/playwright/CONTRIBUTING.md) +- [Existing Test Examples](./packages/testing/playwright/tests/) +- [Composables Reference](./packages/testing/playwright/composables/) +- [Page Objects Reference](./packages/testing/playwright/pages/) \ No newline at end of file diff --git a/cypress/e2e/1-workflows.cy.ts b/cypress/e2e/1-workflows.cy.ts index b447d1aa96c..8025a306ebe 100644 --- a/cypress/e2e/1-workflows.cy.ts +++ b/cypress/e2e/1-workflows.cy.ts @@ -10,7 +10,9 @@ const workflowSharingModal = new WorkflowSharingModal(); const multipleWorkflowsCount = 5; -describe('Workflows', () => { +// Migrated to Playwright +// eslint-disable-next-line n8n-local-rules/no-skipped-tests +describe.skip('Workflows', () => { beforeEach(() => { cy.visit(WorkflowsPage.url); }); diff --git a/cypress/e2e/14-mapping.cy.ts b/cypress/e2e/14-mapping.cy.ts index b8d263941fa..3af70bc2708 100644 --- a/cypress/e2e/14-mapping.cy.ts +++ b/cypress/e2e/14-mapping.cy.ts @@ -1,10 +1,10 @@ +import { WorkflowPage, NDV } from '../pages'; +import { getVisibleSelect } from '../utils'; import { MANUAL_TRIGGER_NODE_NAME, MANUAL_TRIGGER_NODE_DISPLAY_NAME, SCHEDULE_TRIGGER_NODE_NAME, } from './../constants'; -import { WorkflowPage, NDV } from '../pages'; -import { getVisibleSelect } from '../utils'; const workflowPage = new WorkflowPage(); const ndv = new NDV(); diff --git a/cypress/e2e/19-execution.cy.ts b/cypress/e2e/19-execution.cy.ts index acb476734b9..d88cf55c905 100644 --- a/cypress/e2e/19-execution.cy.ts +++ b/cypress/e2e/19-execution.cy.ts @@ -41,33 +41,33 @@ describe('Execution', () => { // Check canvas nodes after 1st step (workflow passed the manual trigger node workflowPage.getters .canvasNodeByName('Manual') - .within(() => cy.get('svg[data-icon=check]')) + .within(() => cy.get('svg[data-icon=node-success]')) .should('exist'); workflowPage.getters .canvasNodeByName('Wait') - .within(() => cy.get('svg[data-icon=check]').should('not.exist')); + .within(() => cy.get('svg[data-icon=node-success]').should('not.exist')); workflowPage.getters .canvasNodeByName('Wait') .within(() => cy.get('svg[data-icon=refresh-cw]')) .should('exist'); workflowPage.getters .canvasNodeByName('Set') - .within(() => cy.get('svg[data-icon=check]').should('not.exist')); + .within(() => cy.get('svg[data-icon=node-success]').should('not.exist')); cy.wait(2000); // Check canvas nodes after 2nd step (waiting node finished its execution and the http request node is about to start) workflowPage.getters .canvasNodeByName('Manual') - .within(() => cy.get('svg[data-icon=check]')) + .within(() => cy.get('svg[data-icon=node-success]')) .should('exist'); workflowPage.getters .canvasNodeByName('Wait') - .within(() => cy.get('svg[data-icon=check]')) + .within(() => cy.get('svg[data-icon=node-success]')) .should('exist'); workflowPage.getters .canvasNodeByName('Set') - .within(() => cy.get('svg[data-icon=check]')) + .within(() => cy.get('svg[data-icon=node-success]')) .should('exist'); successToast().should('be.visible'); @@ -101,18 +101,18 @@ describe('Execution', () => { // Check canvas nodes after 1st step (workflow passed the manual trigger node workflowPage.getters .canvasNodeByName('Manual') - .within(() => cy.get('svg[data-icon=check]')) + .within(() => cy.get('svg[data-icon=node-success]')) .should('exist'); workflowPage.getters .canvasNodeByName('Wait') - .within(() => cy.get('svg[data-icon=check]').should('not.exist')); + .within(() => cy.get('svg[data-icon=node-success]').should('not.exist')); workflowPage.getters .canvasNodeByName('Wait') .within(() => cy.get('svg[data-icon=refresh-cw]')) .should('exist'); workflowPage.getters .canvasNodeByName('Set') - .within(() => cy.get('svg[data-icon=check]').should('not.exist')); + .within(() => cy.get('svg[data-icon=node-success]').should('not.exist')); successToast().should('be.visible'); clearNotifications(); @@ -123,7 +123,7 @@ describe('Execution', () => { // Check canvas nodes after workflow stopped workflowPage.getters .canvasNodeByName('Manual') - .within(() => cy.get('svg[data-icon=check]')) + .within(() => cy.get('svg[data-icon=node-success]')) .should('exist'); workflowPage.getters @@ -132,7 +132,7 @@ describe('Execution', () => { workflowPage.getters .canvasNodeByName('Set') - .within(() => cy.get('svg[data-icon=check]').should('not.exist')); + .within(() => cy.get('svg[data-icon=node-success]').should('not.exist')); successToast().should('be.visible'); @@ -181,29 +181,29 @@ describe('Execution', () => { // Check canvas nodes after 1st step (workflow passed the manual trigger node workflowPage.getters .canvasNodeByName('Webhook') - .within(() => cy.get('svg[data-icon=check]')) + .within(() => cy.get('svg[data-icon=node-success]')) .should('exist'); workflowPage.getters .canvasNodeByName('Wait') - .within(() => cy.get('svg[data-icon=check]').should('not.exist')); + .within(() => cy.get('svg[data-icon=node-success]').should('not.exist')); workflowPage.getters .canvasNodeByName('Wait') .within(() => cy.get('svg[data-icon=refresh-cw]')) .should('exist'); workflowPage.getters .canvasNodeByName('Set') - .within(() => cy.get('svg[data-icon=check]').should('not.exist')); + .within(() => cy.get('svg[data-icon=node-success]').should('not.exist')); cy.wait(2000); // Check canvas nodes after 2nd step (waiting node finished its execution and the http request node is about to start) workflowPage.getters .canvasNodeByName('Webhook') - .within(() => cy.get('svg[data-icon=check]')) + .within(() => cy.get('svg[data-icon=node-success]')) .should('exist'); workflowPage.getters .canvasNodeByName('Set') - .within(() => cy.get('svg[data-icon=check]')) + .within(() => cy.get('svg[data-icon=node-success]')) .should('exist'); successToast().should('be.visible'); @@ -578,11 +578,11 @@ describe('Execution', () => { // Check that the previous nodes executed successfully workflowPage.getters .canvasNodeByName('DebugHelper') - .within(() => cy.get('svg[data-icon=check]')) + .within(() => cy.get('svg[data-icon=node-success]')) .should('exist'); workflowPage.getters .canvasNodeByName('Filter') - .within(() => cy.get('svg[data-icon=check]')) + .within(() => cy.get('svg[data-icon=node-success]')) .should('exist'); errorToast().should('contain', 'Problem in node β€˜Telegramβ€˜'); @@ -596,7 +596,7 @@ describe('Execution', () => { workflowPage.getters .canvasNodeByName('Edit Fields') - .within(() => cy.get('svg[data-icon=check]')) + .within(() => cy.get('svg[data-icon=node-success]')) .should('exist'); workflowPage.getters.canvasNodeByName('Edit Fields').dblclick(); diff --git a/cypress/e2e/27-two-factor-authentication.cy.ts b/cypress/e2e/27-two-factor-authentication.cy.ts index 2201e652851..877345ccc10 100644 --- a/cypress/e2e/27-two-factor-authentication.cy.ts +++ b/cypress/e2e/27-two-factor-authentication.cy.ts @@ -1,11 +1,11 @@ import generateOTPToken from 'cypress-otp'; -import { MainSidebar } from './../pages/sidebar/main-sidebar'; import { INSTANCE_OWNER, INSTANCE_ADMIN, BACKEND_BASE_URL } from '../constants'; import { SigninPage } from '../pages'; import { MfaLoginPage } from '../pages/mfa-login'; import { successToast } from '../pages/notifications'; import { PersonalSettingsPage } from '../pages/settings-personal'; +import { MainSidebar } from './../pages/sidebar/main-sidebar'; const MFA_SECRET = 'KVKFKRCPNZQUYMLXOVYDSQKJKZDTSRLD'; diff --git a/cypress/e2e/33-settings-personal.cy.ts b/cypress/e2e/33-settings-personal.cy.ts index 6b5cc946876..183655cbe8b 100644 --- a/cypress/e2e/33-settings-personal.cy.ts +++ b/cypress/e2e/33-settings-personal.cy.ts @@ -35,7 +35,7 @@ describe('Personal Settings', () => { successToast().find('.el-notification__closeBtn').click(); }); }); - // eslint-disable-next-line n8n-local-rules/no-skipped-tests + it('not allow malicious values for personal data', () => { cy.visit('/settings/personal'); INVALID_NAMES.forEach((name) => { diff --git a/cypress/e2e/42-nps-survey.cy.ts b/cypress/e2e/42-nps-survey.cy.ts index 11e5ebb88e5..b3140aa6083 100644 --- a/cypress/e2e/42-nps-survey.cy.ts +++ b/cypress/e2e/42-nps-survey.cy.ts @@ -3,8 +3,9 @@ import { clearNotifications } from '../pages/notifications'; import { getNpsSurvey, getNpsSurveyClose, - getNpsSurveyEmail, + getNpsSurveyFeedback, getNpsSurveyRatings, + getNpsSurveySubmit, } from '../pages/npsSurvey'; import { WorkflowPage } from '../pages/workflow'; @@ -22,7 +23,7 @@ describe('NpsSurvey', () => { cy.signin(INSTANCE_ADMIN); }); - it('shows nps survey to recently activated user and can submit email ', () => { + it('shows nps survey to recently activated user and can submit feedback ', () => { cy.intercept('/rest/settings', { middleware: true }, (req) => { req.on('response', (res) => { if (res.body.data) { @@ -31,6 +32,8 @@ describe('NpsSurvey', () => { config: { key: 'test', url: 'https://telemetry-test.n8n.io', + proxy: 'http://localhost:5678/rest/telemetry/proxy', + sourceConfig: 'http://localhost:5678/rest/telemetry/rudderstack', }, }; } @@ -54,8 +57,8 @@ describe('NpsSurvey', () => { getNpsSurveyRatings().find('button').should('have.length', 11); getNpsSurveyRatings().find('button').first().click(); - getNpsSurveyEmail().find('input').type('test@n8n.io'); - getNpsSurveyEmail().find('button').click(); + getNpsSurveyFeedback().find('textarea').type('n8n is the best'); + getNpsSurveySubmit().find('button').click(); // test that modal does not show up again until 6 months later workflowPage.actions.visit(true, NOW + ONE_DAY); @@ -77,6 +80,8 @@ describe('NpsSurvey', () => { config: { key: 'test', url: 'https://telemetry-test.n8n.io', + proxy: 'http://localhost:5678/rest/telemetry/proxy', + sourceConfig: 'http://localhost:5678/rest/telemetry/rudderstack', }, }; } diff --git a/cypress/e2e/45-ai-assistant.cy.ts b/cypress/e2e/45-ai-assistant.cy.ts index 98b3b450cfc..21caea250e5 100644 --- a/cypress/e2e/45-ai-assistant.cy.ts +++ b/cypress/e2e/45-ai-assistant.cy.ts @@ -443,7 +443,7 @@ describe('AI Assistant Credential Help', () => { aiAssistant.getters.credentialEditAssistantButton().should('not.exist'); credentialsModal.getters.credentialAuthTypeRadioButtons().eq(1).click(); - credentialsModal.getters.credentialInputs().should('have.length', 1); + credentialsModal.getters.credentialInputs().should('have.length', 3); aiAssistant.getters.credentialEditAssistantButton().should('exist'); }); diff --git a/cypress/e2e/6-code-node.cy.ts b/cypress/e2e/6-code-node.cy.ts index 84a855c4a35..501af802a22 100644 --- a/cypress/e2e/6-code-node.cy.ts +++ b/cypress/e2e/6-code-node.cy.ts @@ -94,7 +94,7 @@ $input.item() return [] `); - getParameter().get('.cm-lintRange-error').should('have.length', 5); + getParameter().get('.cm-lintRange-error').should('have.length.gte', 5); getParameter().contains('all').realHover(); cy.get('.cm-tooltip-lint').should( 'have.text', diff --git a/cypress/package.json b/cypress/package.json index 114c984e1d0..4dcf1ddc322 100644 --- a/cypress/package.json +++ b/cypress/package.json @@ -11,7 +11,7 @@ "format": "biome format --write .", "format:check": "biome ci .", "lint": "eslint . --quiet", - "lintfix": "eslint . --fix", + "lint:fix": "eslint . --fix", "develop": "cd ..; pnpm dev:e2e:server", "start": "cd ..; pnpm start" }, diff --git a/cypress/pages/ndv.ts b/cypress/pages/ndv.ts index caa2ead7374..5b672d83ebc 100644 --- a/cypress/pages/ndv.ts +++ b/cypress/pages/ndv.ts @@ -305,7 +305,7 @@ export class NDV extends BasePage { this.actions.typeIntoParameterInput(fieldName, invalidExpression ?? "{{ $('unknown')", { parseSpecialCharSequences: false, }); - this.actions.validateExpressionPreview(fieldName, "node doesn't exist"); + this.actions.validateExpressionPreview(fieldName, 'No path back to node'); }, openSettings: () => { this.getters.nodeSettingsTab().click(); diff --git a/cypress/pages/npsSurvey.ts b/cypress/pages/npsSurvey.ts index b68d33797d6..295661b32ca 100644 --- a/cypress/pages/npsSurvey.ts +++ b/cypress/pages/npsSurvey.ts @@ -6,7 +6,8 @@ export const getNpsSurvey = () => cy.getByTestId('nps-survey-modal'); export const getNpsSurveyRatings = () => cy.getByTestId('nps-survey-ratings'); -export const getNpsSurveyEmail = () => cy.getByTestId('nps-survey-email'); +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'); diff --git a/cypress/pages/settings-community-nodes.ts b/cypress/pages/settings-community-nodes.ts index 454dc95e212..fade3e6b44a 100644 --- a/cypress/pages/settings-community-nodes.ts +++ b/cypress/pages/settings-community-nodes.ts @@ -14,9 +14,13 @@ export const installFirstCommunityNode = (nodeName: string) => { }; export const confirmCommunityNodeUpdate = () => { - cy.getByTestId('communityPackageManageConfirm-modal').find('button').eq(1).click(); + cy.getByTestId('communityPackageManageConfirm-modal') + .contains('button', 'Confirm update') + .click(); }; export const confirmCommunityNodeUninstall = () => { - cy.getByTestId('communityPackageManageConfirm-modal').find('button').eq(1).click(); + cy.getByTestId('communityPackageManageConfirm-modal') + .contains('button', 'Confirm uninstall') + .click(); }; diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts index 91e9f540c7f..f4237c8adc7 100644 --- a/cypress/support/commands.ts +++ b/cypress/support/commands.ts @@ -149,7 +149,7 @@ Cypress.Commands.add('grantBrowserPermissions', (...permissions: string[]) => { }); Cypress.Commands.add('readClipboard', () => - cy.window().then((win) => win.navigator.clipboard.readText()), + cy.window().then(async (win) => await win.navigator.clipboard.readText()), ); Cypress.Commands.add('paste', { prevSubject: true }, (selector, pastePayload) => { diff --git a/package.json b/package.json index d990b26e7d2..da4ed3ab4e9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "n8n-monorepo", - "version": "1.104.0", + "version": "1.105.0", "private": true, "engines": { "node": ">=22.16", @@ -11,9 +11,6 @@ "prepare": "node scripts/prepare.mjs", "preinstall": "node scripts/block-npm-install.js", "build": "turbo run build", - "build:backend": "turbo run build:backend", - "build:frontend": "turbo run build:frontend", - "build:nodes": "turbo run build:nodes", "build:n8n": "node scripts/build-n8n.mjs", "build:deploy": "node scripts/build-n8n.mjs", "build:docker": "node scripts/build-n8n.mjs && node scripts/dockerize-n8n.mjs", @@ -28,16 +25,13 @@ "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 --parallel", + "clean": "turbo run clean", "reset": "node scripts/ensure-zx.mjs && zx scripts/reset.mjs", "format": "turbo run format && node scripts/format.mjs", "format:check": "turbo run format:check", "lint": "turbo run lint", - "lintfix": "turbo run lintfix", - "lint:backend": "turbo run lint:backend", - "lint:nodes": "turbo run lint:nodes", - "lint:frontend": "turbo run lint:frontend", - "lint:testing": "turbo run lint:testing", + "lint:affected": "turbo run lint --affected", + "lint:fix": "turbo run lint:fix", "optimize-svg": "find ./packages -name '*.svg' ! -name 'pipedrive.svg' -print0 | xargs -0 -P16 -L20 npx svgo", "setup-backend-module": "node scripts/ensure-zx.mjs && zx scripts/backend-module/setup.mjs", "start": "run-script-os", @@ -45,12 +39,11 @@ "start:tunnel": "./packages/cli/bin/n8n start --tunnel", "start:windows": "cd packages/cli/bin && n8n", "test": "JEST_JUNIT_CLASSNAME={filepath} turbo run test", - "test:backend": "turbo run test:backend --concurrency=1", - "test:frontend": "turbo run test:frontend --concurrency=1", - "test:nodes": "turbo run test:nodes --concurrency=1", + "test:ci": "turbo run test --continue --concurrency=1", + "test:affected": "turbo run test --affected --concurrency=1", "test:with:docker": "pnpm --filter=n8n-playwright run test:standard", "test:show:report": "pnpm --filter=n8n-playwright exec playwright show-report", - "watch": "turbo run watch --parallel", + "watch": "turbo run watch", "webhook": "./packages/cli/bin/n8n webhook", "worker": "./packages/cli/bin/n8n worker" }, @@ -91,10 +84,11 @@ ], "overrides": { "@azure/identity": "^4.3.0", + "@n8n/typeorm>@sentry/node": "catalog:", "@types/node": "^20.17.50", "chokidar": "^4.0.1", "esbuild": "^0.24.0", - "multer": "^2.0.1", + "multer": "^2.0.2", "prebuild-install": "7.1.3", "pug": "^3.0.3", "semver": "^7.5.4", @@ -108,7 +102,8 @@ "brace-expansion@1": "1.1.12", "brace-expansion@2": "2.0.2", "date-fns": "2.30.0", - "date-fns-tz": "2.0.0" + "date-fns-tz": "2.0.0", + "form-data": "4.0.4" }, "patchedDependencies": { "bull@4.16.4": "patches/bull@4.16.4.patch", @@ -122,7 +117,9 @@ "js-base64": "patches/js-base64.patch", "ics": "patches/ics.patch", "minifaker": "patches/minifaker.patch", - "z-vue-scan": "patches/z-vue-scan.patch" + "z-vue-scan": "patches/z-vue-scan.patch", + "@lezer/highlight": "patches/@lezer__highlight.patch", + "v-code-diff": "patches/v-code-diff.patch" } } } diff --git a/packages/@n8n/ai-workflow-builder.ee/jest.config.js b/packages/@n8n/ai-workflow-builder.ee/jest.config.js new file mode 100644 index 00000000000..d6c48554a79 --- /dev/null +++ b/packages/@n8n/ai-workflow-builder.ee/jest.config.js @@ -0,0 +1,2 @@ +/** @type {import('jest').Config} */ +module.exports = require('../../../jest.config'); diff --git a/packages/@n8n/ai-workflow-builder.ee/package.json b/packages/@n8n/ai-workflow-builder.ee/package.json index a2bc7b42c24..c2464b8ca66 100644 --- a/packages/@n8n/ai-workflow-builder.ee/package.json +++ b/packages/@n8n/ai-workflow-builder.ee/package.json @@ -1,6 +1,6 @@ { "name": "@n8n/ai-workflow-builder", - "version": "0.14.0", + "version": "0.15.0", "scripts": { "clean": "rimraf dist .turbo", "typecheck": "tsc --noEmit", @@ -11,7 +11,7 @@ "test:coverage": "jest --coverage", "test:watch": "jest --watch", "lint": "eslint . --quiet", - "lintfix": "eslint . --fix", + "lint:fix": "eslint . --fix", "watch": "tsc-watch -p tsconfig.build.json --onCompilationComplete \"tsc-alias -p tsconfig.build.json\"", "deps:graph": "madge src/index.ts --image deps-graph.svg", "deps:graph:service": "madge src/ai-workflow-builder-agent.service.ts --image deps-service.svg", diff --git a/packages/@n8n/ai-workflow-builder.ee/src/ai-workflow-builder-agent.service.ts b/packages/@n8n/ai-workflow-builder.ee/src/ai-workflow-builder-agent.service.ts index 9cee0dad57e..8c88881aed5 100644 --- a/packages/@n8n/ai-workflow-builder.ee/src/ai-workflow-builder-agent.service.ts +++ b/packages/@n8n/ai-workflow-builder.ee/src/ai-workflow-builder-agent.service.ts @@ -167,10 +167,10 @@ export class AiWorkflowBuilderService { return this.agent; } - async *chat(payload: ChatPayload, user?: IUser) { + async *chat(payload: ChatPayload, user?: IUser, abortSignal?: AbortSignal) { const agent = await this.getAgent(user); - for await (const output of agent.chat(payload, user?.id?.toString())) { + for await (const output of agent.chat(payload, user?.id?.toString(), abortSignal)) { yield output; } } diff --git a/packages/@n8n/ai-workflow-builder.ee/src/workflow-builder-agent.ts b/packages/@n8n/ai-workflow-builder.ee/src/workflow-builder-agent.ts index a0f9172f545..20cd539fde1 100644 --- a/packages/@n8n/ai-workflow-builder.ee/src/workflow-builder-agent.ts +++ b/packages/@n8n/ai-workflow-builder.ee/src/workflow-builder-agent.ts @@ -1,6 +1,7 @@ import type { BaseChatModel } from '@langchain/core/language_models/chat_models'; -import type { AIMessage, ToolMessage } from '@langchain/core/messages'; -import { HumanMessage, RemoveMessage } from '@langchain/core/messages'; +import type { ToolMessage } from '@langchain/core/messages'; +import { AIMessage, HumanMessage, RemoveMessage } from '@langchain/core/messages'; +import type { RunnableConfig } from '@langchain/core/runnables'; import type { LangChainTracer } from '@langchain/core/tracers/tracer_langchain'; import { StateGraph, MemorySaver, END } from '@langchain/langgraph'; import type { Logger } from '@n8n/backend-common'; @@ -180,71 +181,73 @@ export class WorkflowBuilderAgent { : crypto.randomUUID(); } - async *chat(payload: ChatPayload, userId?: string) { + private getDefaultWorkflowJSON(payload: ChatPayload): SimpleWorkflow { + return ( + (payload.workflowContext?.currentWorkflow as SimpleWorkflow) ?? { + nodes: [], + connections: {}, + } + ); + } + + async *chat(payload: ChatPayload, userId?: string, abortSignal?: AbortSignal) { const agent = this.createWorkflow().compile({ checkpointer: this.checkpointer }); const workflowId = payload.workflowContext?.currentWorkflow?.id; // Generate thread ID from workflowId and userId // This ensures one session per workflow per user const threadId = WorkflowBuilderAgent.generateThreadId(workflowId, userId); - - // Configure thread for checkpointing - const threadConfig = { + const threadConfig: RunnableConfig = { configurable: { thread_id: threadId, }, }; + const streamConfig = { + ...threadConfig, + streamMode: ['updates', 'custom'], + recursionLimit: 30, + signal: abortSignal, + callbacks: this.tracer ? [this.tracer] : undefined, + } as RunnableConfig; - // Check if this is a subsequent message - // If so, update the workflowJSON with the current editor state - const existingCheckpoint = await this.checkpointer.getTuple(threadConfig); - - let stream; - - if (!existingCheckpoint?.checkpoint) { - // First message - use initial state - const initialState: typeof WorkflowState.State = { + const stream = await agent.stream( + { messages: [new HumanMessage({ content: payload.message })], - workflowJSON: (payload.workflowContext?.currentWorkflow as SimpleWorkflow) ?? { - nodes: [], - connections: {}, - }, + workflowJSON: this.getDefaultWorkflowJSON(payload), workflowOperations: [], workflowContext: payload.workflowContext, - }; + }, + streamConfig, + ); - stream = await agent.stream(initialState, { - ...threadConfig, - streamMode: ['updates', 'custom'], - recursionLimit: 30, - callbacks: this.tracer ? [this.tracer] : undefined, - }); - } else { - // Subsequent message - update the state with current workflow - const stateUpdate: Partial = { - messages: [new HumanMessage({ content: payload.message })], - workflowOperations: [], // Clear any pending operations from previous message - workflowContext: payload.workflowContext, - workflowJSON: { nodes: [], connections: {} }, // Default to empty workflow - }; - - if (payload.workflowContext?.currentWorkflow) { - stateUpdate.workflowJSON = payload.workflowContext?.currentWorkflow as SimpleWorkflow; + try { + const streamProcessor = createStreamProcessor(stream); + for await (const output of streamProcessor) { + yield output; } + } catch (error) { + if ( + error && + typeof error === 'object' && + 'message' in error && + typeof error.message === 'string' && + // This is naive, but it's all we get from LangGraph AbortError + ['Abort', 'Aborted'].includes(error.message) + ) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + const messages = (await agent.getState(threadConfig)).values.messages as Array< + AIMessage | HumanMessage | ToolMessage + >; - // Stream with just the new message - stream = await agent.stream(stateUpdate, { - ...threadConfig, - streamMode: ['updates', 'custom'], - recursionLimit: 80, - callbacks: this.tracer ? [this.tracer] : undefined, - }); - } - - // Use the stream processor utility to handle chunk processing - const streamProcessor = createStreamProcessor(stream); - - for await (const output of streamProcessor) { - yield output; + // Handle abort errors gracefully + const abortedAiMessage = new AIMessage({ + content: '[Task aborted]', + id: crypto.randomUUID(), + }); + // TODO: Should we clear tool calls that are in progress? + await agent.updateState(threadConfig, { messages: [...messages, abortedAiMessage] }); + return; + } + throw error; } } @@ -256,7 +259,7 @@ export class WorkflowBuilderAgent { if (workflowId) { const threadId = WorkflowBuilderAgent.generateThreadId(workflowId, userId); - const threadConfig = { + const threadConfig: RunnableConfig = { configurable: { thread_id: threadId, }, diff --git a/packages/@n8n/ai-workflow-builder.ee/tsconfig.json b/packages/@n8n/ai-workflow-builder.ee/tsconfig.json index 7891f2b50fb..6629cbe9ffe 100644 --- a/packages/@n8n/ai-workflow-builder.ee/tsconfig.json +++ b/packages/@n8n/ai-workflow-builder.ee/tsconfig.json @@ -11,7 +11,8 @@ "paths": { "@/*": ["./*"] }, - "tsBuildInfoFile": "dist/typecheck.tsbuildinfo" + "tsBuildInfoFile": "dist/typecheck.tsbuildinfo", + "types": ["node", "jest"] }, "include": ["src/**/*.ts", "test/**/*.ts", "evaluations/**/*.ts"] } diff --git a/packages/@n8n/api-types/package.json b/packages/@n8n/api-types/package.json index 11c18e758e6..674dd03903b 100644 --- a/packages/@n8n/api-types/package.json +++ b/packages/@n8n/api-types/package.json @@ -1,6 +1,6 @@ { "name": "@n8n/api-types", - "version": "0.38.0", + "version": "0.39.0", "scripts": { "clean": "rimraf dist .turbo", "dev": "pnpm watch", @@ -9,7 +9,7 @@ "format": "biome format --write .", "format:check": "biome ci .", "lint": "eslint . --quiet", - "lintfix": "eslint . --fix", + "lint:fix": "eslint . --fix", "watch": "tsc -p tsconfig.build.json --watch", "test": "jest", "test:dev": "jest --watch" diff --git a/packages/@n8n/api-types/src/frontend-settings.ts b/packages/@n8n/api-types/src/frontend-settings.ts index 2d4adf9cdd6..500168ba240 100644 --- a/packages/@n8n/api-types/src/frontend-settings.ts +++ b/packages/@n8n/api-types/src/frontend-settings.ts @@ -13,6 +13,8 @@ export interface IVersionNotificationSettings { export interface ITelemetryClientConfig { url: string; key: string; + proxy: string; + sourceConfig: string; } export interface ITelemetrySettings { diff --git a/packages/@n8n/backend-common/package.json b/packages/@n8n/backend-common/package.json index 7ab99baafe6..128a84eff8f 100644 --- a/packages/@n8n/backend-common/package.json +++ b/packages/@n8n/backend-common/package.json @@ -1,6 +1,6 @@ { "name": "@n8n/backend-common", - "version": "0.14.0", + "version": "0.15.0", "scripts": { "clean": "rimraf dist .turbo", "dev": "pnpm watch", @@ -9,7 +9,7 @@ "format": "biome format --write .", "format:check": "biome ci .", "lint": "eslint . --quiet", - "lintfix": "eslint . --fix", + "lint:fix": "eslint . --fix", "watch": "tsc -p tsconfig.build.json --watch", "test": "jest", "test:dev": "jest --watch" @@ -29,9 +29,12 @@ "n8n-workflow": "workspace:^", "picocolors": "catalog:", "reflect-metadata": "catalog:", - "winston": "3.14.2" + "winston": "3.14.2", + "yargs-parser": "21.1.1" }, "devDependencies": { - "@n8n/typescript-config": "workspace:*" + "@n8n/typescript-config": "workspace:*", + "@types/yargs-parser": "21.0.0", + "zod": "catalog:" } } diff --git a/packages/@n8n/backend-common/src/__tests__/cli-parser.test.ts b/packages/@n8n/backend-common/src/__tests__/cli-parser.test.ts new file mode 100644 index 00000000000..8e42f2ebdd7 --- /dev/null +++ b/packages/@n8n/backend-common/src/__tests__/cli-parser.test.ts @@ -0,0 +1,117 @@ +import { mock } from 'jest-mock-extended'; +import z from 'zod'; + +import { CliParser } from '../cli-parser'; + +describe('parse', () => { + it('should parse `argv` without flags schema', () => { + const cliParser = new CliParser(mock()); + const result = cliParser.parse({ argv: ['node', 'script.js', 'arg1', 'arg2'] }); + expect(result).toEqual({ flags: {}, args: ['arg1', 'arg2'] }); + }); + + it('should parse `argv` with flags schema', () => { + const cliParser = new CliParser(mock()); + const flagsSchema = z.object({ + verbose: z.boolean().optional(), + name: z.string().optional(), + }); + + const result = cliParser.parse({ + argv: ['node', 'script.js', '--verbose', '--name', 'test', 'arg1'], + flagsSchema, + }); + + expect(result).toEqual({ + flags: { verbose: true, name: 'test' }, + args: ['arg1'], + }); + }); + + it('should ignore flags not defined in schema', () => { + const cliParser = new CliParser(mock()); + const flagsSchema = z.object({ + name: z.string().optional(), + // ignored is absent + }); + + const result = cliParser.parse({ + argv: ['node', 'script.js', '--name', 'test', '--ignored', 'value', 'arg1'], + flagsSchema, + }); + + expect(result).toEqual({ + flags: { + name: 'test', + // ignored is absent + }, + args: ['arg1'], + }); + }); + + it('should handle a numeric value for `--id` flag', () => { + const cliParser = new CliParser(mock()); + const result = cliParser.parse({ + argv: ['node', 'script.js', '--id', '123', 'arg1'], + flagsSchema: z.object({ + id: z.string(), + }), + }); + + expect(result).toEqual({ + flags: { id: '123' }, + args: ['arg1'], + }); + }); + + it('should handle positional arguments', () => { + const cliParser = new CliParser(mock()); + const result = cliParser.parse({ + argv: ['node', 'script.js', '123', 'true'], + }); + + expect(result.args).toEqual(['123', 'true']); + expect(typeof result.args[0]).toBe('string'); + expect(typeof result.args[1]).toBe('string'); + }); + + it('should handle required flags with aliases', () => { + const cliParser = new CliParser(mock()); + const flagsSchema = z.object({ + name: z.string(), + }); + + // @ts-expect-error zod was monkey-patched to support aliases + flagsSchema.shape.name._def._alias = 'n'; + + const result = cliParser.parse({ + argv: ['node', 'script.js', '-n', 'test', 'arg1'], + flagsSchema, + }); + + expect(result).toEqual({ + flags: { name: 'test' }, + args: ['arg1'], + }); + }); + + it('should handle optional flags with aliases', () => { + const cliParser = new CliParser(mock()); + const flagsSchema = z.object({ + name: z.optional(z.string()), + }); + + // @ts-expect-error zod was monkey-patched to support aliases + flagsSchema.shape.name._def.innerType._def._alias = 'n'; + + const result = cliParser.parse({ + argv: ['node', 'script.js', '-n', 'test', 'arg1'], + flagsSchema, + }); + + expect(result).toEqual({ + flags: { name: 'test' }, + args: ['arg1'], + }); + }); +}); diff --git a/packages/@n8n/backend-common/src/cli-parser.ts b/packages/@n8n/backend-common/src/cli-parser.ts new file mode 100644 index 00000000000..1ac603df507 --- /dev/null +++ b/packages/@n8n/backend-common/src/cli-parser.ts @@ -0,0 +1,63 @@ +import { Service } from '@n8n/di'; +import argvParser from 'yargs-parser'; +import type { z } from 'zod'; + +import { Logger } from './logging'; + +type CliInput = { + argv: string[]; + flagsSchema?: z.ZodObject; + description?: string; + examples?: string[]; +}; + +type ParsedArgs> = { + flags: Flags; + args: string[]; +}; + +@Service() +export class CliParser { + constructor(private readonly logger: Logger) {} + + parse( + input: CliInput, + ): ParsedArgs>> { + // eslint-disable-next-line id-denylist + const { _: rest, ...rawFlags } = argvParser(input.argv, { string: ['id'] }); + + let flags = {} as z.infer>; + if (input.flagsSchema) { + for (const key in input.flagsSchema.shape) { + const flagSchema = input.flagsSchema.shape[key]; + let schemaDef = flagSchema._def as z.ZodTypeDef & { + typeName: string; + innerType?: z.ZodType; + _alias?: string; + }; + + if (schemaDef.typeName === 'ZodOptional' && schemaDef.innerType) { + schemaDef = schemaDef.innerType._def as typeof schemaDef; + } + + const alias = schemaDef._alias; + if (alias?.length && !(key in rawFlags) && rawFlags[alias]) { + rawFlags[key] = rawFlags[alias] as unknown; + } + } + + flags = input.flagsSchema.parse(rawFlags); + } + + const args = rest.map(String).slice(2); + + this.logger.debug('Received CLI command', { + execPath: rest[0], + scriptPath: rest[1], + args, + flags, + }); + + return { flags, args }; + } +} diff --git a/packages/@n8n/backend-common/src/index.ts b/packages/@n8n/backend-common/src/index.ts index 8f26f40690e..f80a7e740f6 100644 --- a/packages/@n8n/backend-common/src/index.ts +++ b/packages/@n8n/backend-common/src/index.ts @@ -7,3 +7,4 @@ export { Logger } from './logging/logger'; export { ModuleRegistry } from './modules/module-registry'; export { ModulesConfig, ModuleName } from './modules/modules.config'; export { isContainedWithin, safeJoinPath } from './utils/path-util'; +export { CliParser } from './cli-parser'; diff --git a/packages/@n8n/backend-common/src/modules/module-registry.ts b/packages/@n8n/backend-common/src/modules/module-registry.ts index f140cc50e0c..0c3afabb2ad 100644 --- a/packages/@n8n/backend-common/src/modules/module-registry.ts +++ b/packages/@n8n/backend-common/src/modules/module-registry.ts @@ -1,6 +1,7 @@ import { ModuleMetadata } from '@n8n/decorators'; import type { EntityClass, ModuleSettings } from '@n8n/decorators'; import { Container, Service } from '@n8n/di'; +import { existsSync } from 'fs'; import path from 'path'; import { MissingModuleError } from './errors/missing-module.error'; @@ -54,11 +55,13 @@ export class ModuleRegistry { // docker + tests const n8nPackagePath = require.resolve('n8n/package.json'); const n8nRoot = path.dirname(n8nPackagePath); - const dir = process.env.NODE_ENV === 'test' ? 'src' : 'dist'; + const srcDirExists = existsSync(path.join(n8nRoot, 'src')); + const dir = process.env.NODE_ENV === 'test' && srcDirExists ? 'src' : 'dist'; modulesDir = path.join(n8nRoot, dir, 'modules'); } catch { // local dev - modulesDir = path.resolve(__dirname, '../../../../cli/dist/modules'); + // n8n binary is inside the bin folder, so we need to go up two levels + modulesDir = path.resolve(process.argv[1], '../../dist/modules'); } for (const moduleName of modules ?? this.eligibleModules) { diff --git a/packages/@n8n/backend-common/tsconfig.json b/packages/@n8n/backend-common/tsconfig.json index eca44d32aa3..1f27af82d29 100644 --- a/packages/@n8n/backend-common/tsconfig.json +++ b/packages/@n8n/backend-common/tsconfig.json @@ -8,5 +8,12 @@ "experimentalDecorators": true, "emitDecoratorMetadata": true }, - "include": ["src/**/*.ts"] + "include": ["src/**/*.ts"], + "references": [ + { "path": "../../workflow/tsconfig.build.cjs.json" }, + { "path": "../config/tsconfig.build.json" }, + { "path": "../constants/tsconfig.build.json" }, + { "path": "../decorators/tsconfig.build.json" }, + { "path": "../di/tsconfig.build.json" } + ] } diff --git a/packages/@n8n/backend-test-utils/package.json b/packages/@n8n/backend-test-utils/package.json index 8ca569296b9..3bcb6aa08c4 100644 --- a/packages/@n8n/backend-test-utils/package.json +++ b/packages/@n8n/backend-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@n8n/backend-test-utils", - "version": "0.7.0", + "version": "0.8.0", "scripts": { "clean": "rimraf dist .turbo", "dev": "pnpm watch", @@ -9,10 +9,10 @@ "format": "biome format --write .", "format:check": "biome ci .", "lint": "eslint . --quiet", - "lintfix": "eslint . --fix", + "lint:fix": "eslint . --fix", "watch": "tsc -p tsconfig.build.json --watch", - "test": "jest", - "test:dev": "jest --watch" + "test": "echo \"WARNING: no test specified\" && exit 0", + "test:dev": "echo \"WARNING: no test specified\" && exit 0" }, "main": "dist/index.js", "module": "src/index.ts", diff --git a/packages/@n8n/benchmark/package.json b/packages/@n8n/benchmark/package.json index 041bb1552dd..956ebe9ed75 100644 --- a/packages/@n8n/benchmark/package.json +++ b/packages/@n8n/benchmark/package.json @@ -1,6 +1,6 @@ { "name": "@n8n/n8n-benchmark", - "version": "1.19.0", + "version": "1.20.0", "description": "Cli for running benchmark tests for n8n", "main": "dist/index", "scripts": { @@ -8,9 +8,9 @@ "format": "biome format --write .", "format:check": "biome ci .", "lint": "eslint . --quiet", - "lintfix": "eslint . --fix", + "lint:fix": "eslint . --fix", "start": "./bin/n8n-benchmark", - "test": "echo \"Error: no test specified\" && exit 1", + "test": "echo \"WARNING: no test specified\" && exit 0", "typecheck": "tsc --noEmit", "benchmark": "zx scripts/run.mjs", "benchmark-in-cloud": "pnpm benchmark --env cloud", diff --git a/packages/@n8n/benchmark/scripts/n8n-setups/postgres-with-insights/docker-compose.yml b/packages/@n8n/benchmark/scripts/n8n-setups/postgres-with-insights/docker-compose.yml deleted file mode 100644 index 71f9912630b..00000000000 --- a/packages/@n8n/benchmark/scripts/n8n-setups/postgres-with-insights/docker-compose.yml +++ /dev/null @@ -1,64 +0,0 @@ -services: - mockapi: - image: wiremock/wiremock:3.9.1 - ports: - - '8088:8080' - volumes: - - ${MOCK_API_DATA_PATH}/mappings:/home/wiremock/mappings - - postgres: - image: postgres:16.4 - restart: always - user: root:root - environment: - - POSTGRES_DB=n8n - - POSTGRES_USER=postgres - - POSTGRES_PASSWORD=password - - PGDATA=/var/lib/postgresql/data/pgdata - volumes: - - ${RUN_DIR}/postgres:/var/lib/postgresql/data - healthcheck: - test: ['CMD-SHELL', 'pg_isready -U postgres'] - interval: 5s - timeout: 5s - retries: 5 - - n8n: - image: ghcr.io/n8n-io/n8n:${N8N_VERSION:-latest} - user: root:root - environment: - - N8N_DIAGNOSTICS_ENABLED=false - - N8N_USER_FOLDER=/n8n - - DB_TYPE=postgresdb - - DB_POSTGRESDB_HOST=postgres - - DB_POSTGRESDB_PASSWORD=password - # Task Runner config - - N8N_RUNNERS_ENABLED=true - - N8N_RUNNERS_MODE=internal - # Enable Insights - - N8N_ENABLED_MODULES=insights - ports: - - 5678:5678 - volumes: - - ${RUN_DIR}/n8n:/n8n - depends_on: - postgres: - condition: service_healthy - mockapi: - condition: service_started - healthcheck: - test: ['CMD-SHELL', 'wget --spider -q http://n8n:5678/healthz || exit 1'] - interval: 5s - timeout: 5s - retries: 10 - - benchmark: - image: ghcr.io/n8n-io/n8n-benchmark:${N8N_BENCHMARK_VERSION:-latest} - depends_on: - n8n: - condition: service_healthy - environment: - - N8N_BASE_URL=http://n8n:5678 - - K6_API_TOKEN=${K6_API_TOKEN} - - BENCHMARK_RESULT_WEBHOOK_URL=${BENCHMARK_RESULT_WEBHOOK_URL} - - BENCHMARK_RESULT_WEBHOOK_AUTH_HEADER=${BENCHMARK_RESULT_WEBHOOK_AUTH_HEADER} diff --git a/packages/@n8n/benchmark/scripts/n8n-setups/postgres-with-insights/setup.mjs b/packages/@n8n/benchmark/scripts/n8n-setups/postgres-with-insights/setup.mjs deleted file mode 100644 index c2ead0ab07b..00000000000 --- a/packages/@n8n/benchmark/scripts/n8n-setups/postgres-with-insights/setup.mjs +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env zx - -import path from 'path'; -import { fs } from 'zx'; - -/** - * Creates the needed directories so the permissions get set correctly. - */ -export function setup({ runDir }) { - const neededDirs = ['n8n', 'postgres']; - - for (const dir of neededDirs) { - fs.ensureDirSync(path.join(runDir, dir)); - } -} diff --git a/packages/@n8n/benchmark/scripts/n8n-setups/postgres/docker-compose.yml b/packages/@n8n/benchmark/scripts/n8n-setups/postgres/docker-compose.yml index ad8f224e910..52419713257 100644 --- a/packages/@n8n/benchmark/scripts/n8n-setups/postgres/docker-compose.yml +++ b/packages/@n8n/benchmark/scripts/n8n-setups/postgres/docker-compose.yml @@ -35,8 +35,6 @@ services: # Task Runner config - N8N_RUNNERS_ENABLED=true - N8N_RUNNERS_MODE=internal - # Disable Insights - - N8N_DISABLED_MODULES=insights ports: - 5678:5678 volumes: diff --git a/packages/@n8n/benchmark/scripts/n8n-setups/scaling-multi-main-with-insights/docker-compose.yml b/packages/@n8n/benchmark/scripts/n8n-setups/scaling-multi-main-with-insights/docker-compose.yml deleted file mode 100644 index 63b5a619e57..00000000000 --- a/packages/@n8n/benchmark/scripts/n8n-setups/scaling-multi-main-with-insights/docker-compose.yml +++ /dev/null @@ -1,217 +0,0 @@ -services: - mockapi: - image: wiremock/wiremock:3.9.1 - ports: - - '8088:8080' - volumes: - - ${MOCK_API_DATA_PATH}/mappings:/home/wiremock/mappings - - redis: - image: redis:6.2.14-alpine - restart: always - ports: - - 6379:6379 - healthcheck: - test: ['CMD', 'redis-cli', 'ping'] - interval: 1s - timeout: 3s - - postgres: - image: postgres:16.4 - restart: always - environment: - - POSTGRES_DB=n8n - - POSTGRES_USER=postgres - - POSTGRES_PASSWORD=password - - PGDATA=/var/lib/postgresql/data/pgdata - volumes: - - ${RUN_DIR}/postgres:/var/lib/postgresql/data - healthcheck: - test: ['CMD-SHELL', 'pg_isready -U postgres'] - interval: 5s - timeout: 5s - retries: 10 - - n8n_worker1: - image: ghcr.io/n8n-io/n8n:${N8N_VERSION:-latest} - environment: - - N8N_DIAGNOSTICS_ENABLED=false - - N8N_USER_FOLDER=/n8n/worker1 - - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY} - - N8N_LICENSE_CERT=${N8N_LICENSE_CERT} - - N8N_LICENSE_ACTIVATION_KEY=${N8N_LICENSE_ACTIVATION_KEY} - - N8N_LICENSE_TENANT_ID=${N8N_LICENSE_TENANT_ID} - # Scaling mode config - - EXECUTIONS_MODE=queue - - QUEUE_BULL_REDIS_HOST=redis - - QUEUE_HEALTH_CHECK_ACTIVE=true - - N8N_CONCURRENCY_PRODUCTION_LIMIT=10 - # DB config - - DB_TYPE=postgresdb - - DB_POSTGRESDB_HOST=postgres - - DB_POSTGRESDB_PASSWORD=password - # Task Runner config - - N8N_RUNNERS_ENABLED=true - - N8N_RUNNERS_MODE=internal - # Enable Insights - - N8N_ENABLED_MODULES=insights - command: worker - volumes: - - ${RUN_DIR}/n8n-worker1:/n8n - depends_on: - postgres: - condition: service_healthy - redis: - condition: service_healthy - healthcheck: - test: ['CMD-SHELL', 'wget --spider -q http://localhost:5678/healthz || exit 1'] - interval: 5s - timeout: 5s - retries: 10 - - n8n_worker2: - image: ghcr.io/n8n-io/n8n:${N8N_VERSION:-latest} - environment: - - N8N_DIAGNOSTICS_ENABLED=false - - N8N_USER_FOLDER=/n8n/worker2 - - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY} - - N8N_LICENSE_CERT=${N8N_LICENSE_CERT} - - N8N_LICENSE_ACTIVATION_KEY=${N8N_LICENSE_ACTIVATION_KEY} - - N8N_LICENSE_TENANT_ID=${N8N_LICENSE_TENANT_ID} - # Scaling mode config - - EXECUTIONS_MODE=queue - - QUEUE_BULL_REDIS_HOST=redis - - QUEUE_HEALTH_CHECK_ACTIVE=true - - N8N_CONCURRENCY_PRODUCTION_LIMIT=10 - # DB config - - DB_TYPE=postgresdb - - DB_POSTGRESDB_HOST=postgres - - DB_POSTGRESDB_PASSWORD=password - # Task Runner config - - N8N_RUNNERS_ENABLED=true - - N8N_RUNNERS_MODE=internal - # Enable Insights - - N8N_ENABLED_MODULES=insights - command: worker - volumes: - - ${RUN_DIR}/n8n-worker2:/n8n - depends_on: - # We let the worker 1 start first so it can run the DB migrations - n8n_worker1: - condition: service_healthy - postgres: - condition: service_healthy - redis: - condition: service_healthy - healthcheck: - test: ['CMD-SHELL', 'wget --spider -q http://localhost:5678/healthz || exit 1'] - interval: 5s - timeout: 5s - retries: 10 - - n8n_main2: - image: ghcr.io/n8n-io/n8n:${N8N_VERSION:-latest} - environment: - - N8N_DIAGNOSTICS_ENABLED=false - - N8N_USER_FOLDER=/n8n - - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY} - - N8N_LICENSE_CERT=${N8N_LICENSE_CERT} - - N8N_LICENSE_ACTIVATION_KEY=${N8N_LICENSE_ACTIVATION_KEY} - - N8N_LICENSE_TENANT_ID=${N8N_LICENSE_TENANT_ID} - # Scaling mode config - - N8N_PROXY_HOPS=1 - - EXECUTIONS_MODE=queue - - QUEUE_BULL_REDIS_HOST=redis - - N8N_MULTI_MAIN_SETUP_ENABLED=true - # DB config - - DB_TYPE=postgresdb - - DB_POSTGRESDB_HOST=postgres - - DB_POSTGRESDB_PASSWORD=password - # Task Runner config - - N8N_RUNNERS_ENABLED=true - - N8N_RUNNERS_MODE=internal - # Enable Insights - - N8N_ENABLED_MODULES=insights - volumes: - - ${RUN_DIR}/n8n-main2:/n8n - depends_on: - n8n_worker1: - condition: service_healthy - n8n_worker2: - condition: service_healthy - postgres: - condition: service_healthy - redis: - condition: service_healthy - mockapi: - condition: service_started - healthcheck: - test: ['CMD-SHELL', 'wget --spider -q http://n8n_main2:5678/healthz || exit 1'] - interval: 5s - timeout: 5s - retries: 10 - - n8n_main1: - image: ghcr.io/n8n-io/n8n:${N8N_VERSION:-latest} - environment: - - N8N_DIAGNOSTICS_ENABLED=false - - N8N_USER_FOLDER=/n8n - - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY} - - N8N_LICENSE_CERT=${N8N_LICENSE_CERT} - - N8N_LICENSE_ACTIVATION_KEY=${N8N_LICENSE_ACTIVATION_KEY} - - N8N_LICENSE_TENANT_ID=${N8N_LICENSE_TENANT_ID} - # Scaling mode config - - N8N_PROXY_HOPS=1 - - EXECUTIONS_MODE=queue - - QUEUE_BULL_REDIS_HOST=redis - - N8N_MULTI_MAIN_SETUP_ENABLED=true - # DB config - - DB_TYPE=postgresdb - - DB_POSTGRESDB_HOST=postgres - - DB_POSTGRESDB_PASSWORD=password - # Task Runner config - - N8N_RUNNERS_ENABLED=true - - N8N_RUNNERS_MODE=internal - # Enable Insights - - N8N_ENABLED_MODULES=insights - volumes: - - ${RUN_DIR}/n8n-main1:/n8n - depends_on: - n8n_worker1: - condition: service_healthy - n8n_worker2: - condition: service_healthy - postgres: - condition: service_healthy - redis: - condition: service_healthy - mockapi: - condition: service_started - healthcheck: - test: ['CMD-SHELL', 'wget --spider -q http://n8n_main1:5678/healthz || exit 1'] - interval: 5s - timeout: 5s - retries: 10 - - # Load balancer that acts as an entry point for n8n - n8n: - image: nginx:1.27.2 - ports: - - '5678:80' - volumes: - - ./nginx.conf:/etc/nginx/nginx.conf - depends_on: - n8n_main1: - condition: service_healthy - n8n_main2: - condition: service_healthy - - benchmark: - image: ghcr.io/n8n-io/n8n-benchmark:${N8N_BENCHMARK_VERSION:-latest} - depends_on: - - n8n - environment: - - N8N_BASE_URL=http://n8n:80 - - K6_API_TOKEN=${K6_API_TOKEN} - - BENCHMARK_RESULT_WEBHOOK_URL=${BENCHMARK_RESULT_WEBHOOK_URL} - - BENCHMARK_RESULT_WEBHOOK_AUTH_HEADER=${BENCHMARK_RESULT_WEBHOOK_AUTH_HEADER} diff --git a/packages/@n8n/benchmark/scripts/n8n-setups/scaling-multi-main-with-insights/nginx.conf b/packages/@n8n/benchmark/scripts/n8n-setups/scaling-multi-main-with-insights/nginx.conf deleted file mode 100644 index 142da7416ee..00000000000 --- a/packages/@n8n/benchmark/scripts/n8n-setups/scaling-multi-main-with-insights/nginx.conf +++ /dev/null @@ -1,24 +0,0 @@ -events {} - -http { - client_max_body_size 50M; - access_log off; - error_log /dev/stderr warn; - - upstream backend { - server n8n_main1:5678; - server n8n_main2:5678; - } - - server { - listen 80; - - location / { - proxy_pass http://backend; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } - } -} diff --git a/packages/@n8n/benchmark/scripts/n8n-setups/scaling-multi-main-with-insights/setup.mjs b/packages/@n8n/benchmark/scripts/n8n-setups/scaling-multi-main-with-insights/setup.mjs deleted file mode 100644 index 13bb657ac2d..00000000000 --- a/packages/@n8n/benchmark/scripts/n8n-setups/scaling-multi-main-with-insights/setup.mjs +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env zx - -import path from 'path'; -import { fs } from 'zx'; - -/** - * Creates the needed directories so the permissions get set correctly. - */ -export function setup({ runDir }) { - const neededDirs = ['n8n-worker1', 'n8n-worker2', 'n8n-main1', 'n8n-main2', 'postgres']; - - for (const dir of neededDirs) { - fs.ensureDirSync(path.join(runDir, dir)); - } -} diff --git a/packages/@n8n/benchmark/scripts/n8n-setups/scaling-multi-main/docker-compose.yml b/packages/@n8n/benchmark/scripts/n8n-setups/scaling-multi-main/docker-compose.yml index c66883f7fad..723c10f00e2 100644 --- a/packages/@n8n/benchmark/scripts/n8n-setups/scaling-multi-main/docker-compose.yml +++ b/packages/@n8n/benchmark/scripts/n8n-setups/scaling-multi-main/docker-compose.yml @@ -53,8 +53,6 @@ services: # Task Runner config - N8N_RUNNERS_ENABLED=true - N8N_RUNNERS_MODE=internal - # Disable Insights - - N8N_DISABLED_MODULES=insights command: worker volumes: - ${RUN_DIR}/n8n-worker1:/n8n @@ -90,8 +88,6 @@ services: # Task Runner config - N8N_RUNNERS_ENABLED=true - N8N_RUNNERS_MODE=internal - # Disable Insights - - N8N_DISABLED_MODULES=insights command: worker volumes: - ${RUN_DIR}/n8n-worker2:/n8n @@ -130,8 +126,6 @@ services: # Task Runner config - N8N_RUNNERS_ENABLED=true - N8N_RUNNERS_MODE=internal - # Disable Insights - - N8N_DISABLED_MODULES=insights volumes: - ${RUN_DIR}/n8n-main2:/n8n depends_on: @@ -172,8 +166,6 @@ services: # Task Runner config - N8N_RUNNERS_ENABLED=true - N8N_RUNNERS_MODE=internal - # Disable Insights - - N8N_DISABLED_MODULES=insights volumes: - ${RUN_DIR}/n8n-main1:/n8n depends_on: diff --git a/packages/@n8n/benchmark/scripts/n8n-setups/scaling-single-main-with-insights/docker-compose.yml b/packages/@n8n/benchmark/scripts/n8n-setups/scaling-single-main-without-insights/docker-compose.yml similarity index 95% rename from packages/@n8n/benchmark/scripts/n8n-setups/scaling-single-main-with-insights/docker-compose.yml rename to packages/@n8n/benchmark/scripts/n8n-setups/scaling-single-main-without-insights/docker-compose.yml index 6c91f27d015..02d618e1a58 100644 --- a/packages/@n8n/benchmark/scripts/n8n-setups/scaling-single-main-with-insights/docker-compose.yml +++ b/packages/@n8n/benchmark/scripts/n8n-setups/scaling-single-main-without-insights/docker-compose.yml @@ -51,8 +51,8 @@ services: # Task Runner config - N8N_RUNNERS_ENABLED=true - N8N_RUNNERS_MODE=internal - # Enable Insights - - N8N_ENABLED_MODULES=insights + # Disable Insights + - N8N_DISABLED_MODULES=insights command: worker volumes: - ${RUN_DIR}/n8n-worker1:/n8n @@ -86,8 +86,8 @@ services: # Task Runner config - N8N_RUNNERS_ENABLED=true - N8N_RUNNERS_MODE=internal - # Enable Insights - - N8N_ENABLED_MODULES=insights + # Disable Insights + - N8N_DISABLED_MODULES=insights command: worker volumes: - ${RUN_DIR}/n8n-worker2:/n8n @@ -122,8 +122,8 @@ services: # Task Runner config - N8N_RUNNERS_ENABLED=true - N8N_RUNNERS_MODE=internal - # Enable Insights - - N8N_ENABLED_MODULES=insights + # Disable Insights + - N8N_DISABLED_MODULES=insights ports: - 5678:5678 volumes: diff --git a/packages/@n8n/benchmark/scripts/n8n-setups/scaling-single-main-with-insights/setup.mjs b/packages/@n8n/benchmark/scripts/n8n-setups/scaling-single-main-without-insights/setup.mjs similarity index 100% rename from packages/@n8n/benchmark/scripts/n8n-setups/scaling-single-main-with-insights/setup.mjs rename to packages/@n8n/benchmark/scripts/n8n-setups/scaling-single-main-without-insights/setup.mjs diff --git a/packages/@n8n/benchmark/scripts/n8n-setups/scaling-single-main/docker-compose.yml b/packages/@n8n/benchmark/scripts/n8n-setups/scaling-single-main/docker-compose.yml index 02d618e1a58..ecefddf5b0e 100644 --- a/packages/@n8n/benchmark/scripts/n8n-setups/scaling-single-main/docker-compose.yml +++ b/packages/@n8n/benchmark/scripts/n8n-setups/scaling-single-main/docker-compose.yml @@ -51,8 +51,6 @@ services: # Task Runner config - N8N_RUNNERS_ENABLED=true - N8N_RUNNERS_MODE=internal - # Disable Insights - - N8N_DISABLED_MODULES=insights command: worker volumes: - ${RUN_DIR}/n8n-worker1:/n8n @@ -86,8 +84,6 @@ services: # Task Runner config - N8N_RUNNERS_ENABLED=true - N8N_RUNNERS_MODE=internal - # Disable Insights - - N8N_DISABLED_MODULES=insights command: worker volumes: - ${RUN_DIR}/n8n-worker2:/n8n @@ -122,8 +118,6 @@ services: # Task Runner config - N8N_RUNNERS_ENABLED=true - N8N_RUNNERS_MODE=internal - # Disable Insights - - N8N_DISABLED_MODULES=insights ports: - 5678:5678 volumes: diff --git a/packages/@n8n/benchmark/scripts/n8n-setups/sqlite-legacy-with-insights/docker-compose.yml b/packages/@n8n/benchmark/scripts/n8n-setups/sqlite-legacy-with-insights/docker-compose.yml deleted file mode 100644 index 592bf2d9ca6..00000000000 --- a/packages/@n8n/benchmark/scripts/n8n-setups/sqlite-legacy-with-insights/docker-compose.yml +++ /dev/null @@ -1,39 +0,0 @@ -services: - mockapi: - image: wiremock/wiremock:3.9.1 - ports: - - '8088:8080' - volumes: - - ${MOCK_API_DATA_PATH}/mappings:/home/wiremock/mappings - - n8n: - image: ghcr.io/n8n-io/n8n:${N8N_VERSION:-latest} - user: root:root - environment: - - N8N_DIAGNOSTICS_ENABLED=false - - N8N_USER_FOLDER=/n8n - # Enable Insights - - N8N_ENABLED_MODULES=insights - ports: - - 5678:5678 - volumes: - - ${RUN_DIR}:/n8n - healthcheck: - test: ['CMD-SHELL', 'wget --spider -q http://n8n:5678/healthz || exit 1'] - interval: 5s - timeout: 5s - retries: 10 - depends_on: - mockapi: - condition: service_started - - benchmark: - image: ghcr.io/n8n-io/n8n-benchmark:${N8N_BENCHMARK_VERSION:-latest} - depends_on: - n8n: - condition: service_healthy - environment: - - N8N_BASE_URL=http://n8n:5678 - - K6_API_TOKEN=${K6_API_TOKEN} - - BENCHMARK_RESULT_WEBHOOK_URL=${BENCHMARK_RESULT_WEBHOOK_URL} - - BENCHMARK_RESULT_WEBHOOK_AUTH_HEADER=${BENCHMARK_RESULT_WEBHOOK_AUTH_HEADER} diff --git a/packages/@n8n/benchmark/scripts/n8n-setups/sqlite-legacy-with-insights/setup.mjs b/packages/@n8n/benchmark/scripts/n8n-setups/sqlite-legacy-with-insights/setup.mjs deleted file mode 100644 index 4f883a7b498..00000000000 --- a/packages/@n8n/benchmark/scripts/n8n-setups/sqlite-legacy-with-insights/setup.mjs +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env zx - -import path from 'path'; -import { fs } from 'zx'; - -/** - * Creates the needed directories so the permissions get set correctly. - */ -export function setup({ runDir }) { - const neededDirs = ['n8n']; - - for (const dir of neededDirs) { - fs.ensureDirSync(path.join(runDir, dir)); - } -} diff --git a/packages/@n8n/benchmark/scripts/n8n-setups/sqlite-legacy/docker-compose.yml b/packages/@n8n/benchmark/scripts/n8n-setups/sqlite-legacy/docker-compose.yml index 11b91793c40..750aa838868 100644 --- a/packages/@n8n/benchmark/scripts/n8n-setups/sqlite-legacy/docker-compose.yml +++ b/packages/@n8n/benchmark/scripts/n8n-setups/sqlite-legacy/docker-compose.yml @@ -12,8 +12,6 @@ services: environment: - N8N_DIAGNOSTICS_ENABLED=false - N8N_USER_FOLDER=/n8n - # Disable Insights - - N8N_DISABLED_MODULES=insights ports: - 5678:5678 volumes: diff --git a/packages/@n8n/benchmark/scripts/n8n-setups/sqlite-with-insights/docker-compose.yml b/packages/@n8n/benchmark/scripts/n8n-setups/sqlite-with-insights/docker-compose.yml deleted file mode 100644 index 592d2caffde..00000000000 --- a/packages/@n8n/benchmark/scripts/n8n-setups/sqlite-with-insights/docker-compose.yml +++ /dev/null @@ -1,44 +0,0 @@ -services: - mockapi: - image: wiremock/wiremock:3.9.1 - ports: - - '8088:8080' - volumes: - - ${MOCK_API_DATA_PATH}/mappings:/home/wiremock/mappings - - n8n: - image: ghcr.io/n8n-io/n8n:${N8N_VERSION:-latest} - user: root:root - environment: - - N8N_DIAGNOSTICS_ENABLED=false - - N8N_USER_FOLDER=/n8n - - DB_SQLITE_POOL_SIZE=3 - - DB_SQLITE_ENABLE_WAL=true - # Task Runner config - - N8N_RUNNERS_ENABLED=true - - N8N_RUNNERS_MODE=internal - # Enable Insights - - N8N_ENABLED_MODULES=insights - ports: - - 5678:5678 - volumes: - - ${RUN_DIR}:/n8n - healthcheck: - test: ['CMD-SHELL', 'wget --spider -q http://n8n:5678/healthz || exit 1'] - interval: 5s - timeout: 5s - retries: 10 - depends_on: - mockapi: - condition: service_started - - benchmark: - image: ghcr.io/n8n-io/n8n-benchmark:${N8N_BENCHMARK_VERSION:-latest} - depends_on: - n8n: - condition: service_healthy - environment: - - N8N_BASE_URL=http://n8n:5678 - - K6_API_TOKEN=${K6_API_TOKEN} - - BENCHMARK_RESULT_WEBHOOK_URL=${BENCHMARK_RESULT_WEBHOOK_URL} - - BENCHMARK_RESULT_WEBHOOK_AUTH_HEADER=${BENCHMARK_RESULT_WEBHOOK_AUTH_HEADER} diff --git a/packages/@n8n/benchmark/scripts/n8n-setups/sqlite-with-insights/setup.mjs b/packages/@n8n/benchmark/scripts/n8n-setups/sqlite-with-insights/setup.mjs deleted file mode 100644 index 4f883a7b498..00000000000 --- a/packages/@n8n/benchmark/scripts/n8n-setups/sqlite-with-insights/setup.mjs +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env zx - -import path from 'path'; -import { fs } from 'zx'; - -/** - * Creates the needed directories so the permissions get set correctly. - */ -export function setup({ runDir }) { - const neededDirs = ['n8n']; - - for (const dir of neededDirs) { - fs.ensureDirSync(path.join(runDir, dir)); - } -} diff --git a/packages/@n8n/benchmark/scripts/n8n-setups/sqlite/docker-compose.yml b/packages/@n8n/benchmark/scripts/n8n-setups/sqlite/docker-compose.yml index de20840a7af..37e1424cfda 100644 --- a/packages/@n8n/benchmark/scripts/n8n-setups/sqlite/docker-compose.yml +++ b/packages/@n8n/benchmark/scripts/n8n-setups/sqlite/docker-compose.yml @@ -17,8 +17,6 @@ services: # Task Runner config - N8N_RUNNERS_ENABLED=true - N8N_RUNNERS_MODE=internal - # Disable Insights - - N8N_DISABLED_MODULES=insights ports: - 5678:5678 volumes: diff --git a/packages/@n8n/client-oauth2/package.json b/packages/@n8n/client-oauth2/package.json index 857707a99f3..fa46838a4f2 100644 --- a/packages/@n8n/client-oauth2/package.json +++ b/packages/@n8n/client-oauth2/package.json @@ -1,6 +1,6 @@ { "name": "@n8n/client-oauth2", - "version": "0.27.0", + "version": "0.28.0", "scripts": { "clean": "rimraf dist .turbo", "dev": "pnpm watch", @@ -9,7 +9,7 @@ "format": "biome format --write src test", "format:check": "biome ci src test", "lint": "eslint . --quiet", - "lintfix": "eslint . --fix", + "lint:fix": "eslint . --fix", "watch": "tsc -p tsconfig.build.json --watch", "test": "jest", "test:dev": "jest --watch" diff --git a/packages/@n8n/client-oauth2/src/client-oauth2.ts b/packages/@n8n/client-oauth2/src/client-oauth2.ts index 985b16c20ab..5bbbde43552 100644 --- a/packages/@n8n/client-oauth2/src/client-oauth2.ts +++ b/packages/@n8n/client-oauth2/src/client-oauth2.ts @@ -42,8 +42,9 @@ export class ResponseError extends Error { readonly status: number, readonly body: unknown, readonly code = 'ESTATUS', + readonly message = `HTTP status ${status}`, ) { - super(`HTTP status ${status}`); + super(message); } } @@ -133,6 +134,11 @@ export class ClientOAuth2 { return qs.parse(body) as T; } - throw new Error(`Unsupported content type: ${contentType}`); + throw new ResponseError( + response.status, + body, + undefined, + `Unsupported content type: ${contentType}`, + ); } } diff --git a/packages/@n8n/codemirror-lang/package.json b/packages/@n8n/codemirror-lang/package.json index cddb07e93e3..737ed74acfe 100644 --- a/packages/@n8n/codemirror-lang/package.json +++ b/packages/@n8n/codemirror-lang/package.json @@ -23,7 +23,7 @@ "build": "tsc -p tsconfig.build.json", "test": "jest", "lint": "eslint . --quiet", - "lintfix": "eslint . --fix", + "lint:fix": "eslint . --fix", "format": "biome format --write src test", "format:check": "biome ci src test" }, diff --git a/packages/@n8n/config/package.json b/packages/@n8n/config/package.json index e5da266047c..27b0ee36ae6 100644 --- a/packages/@n8n/config/package.json +++ b/packages/@n8n/config/package.json @@ -1,6 +1,6 @@ { "name": "@n8n/config", - "version": "1.47.0", + "version": "1.48.0", "scripts": { "clean": "rimraf dist .turbo", "dev": "pnpm watch", @@ -9,7 +9,7 @@ "format": "biome format --write src test", "format:check": "biome ci src test", "lint": "eslint . --quiet", - "lintfix": "eslint . --fix", + "lint:fix": "eslint . --fix", "watch": "tsc -p tsconfig.build.json --watch", "test": "jest", "test:dev": "jest --watch" diff --git a/packages/@n8n/config/src/configs/ai.config.ts b/packages/@n8n/config/src/configs/ai.config.ts new file mode 100644 index 00000000000..e158c4e09b5 --- /dev/null +++ b/packages/@n8n/config/src/configs/ai.config.ts @@ -0,0 +1,8 @@ +import { Config, Env } from '../decorators'; + +@Config +export class AiConfig { + /** Whether AI features are enabled. */ + @Env('N8N_AI_ENABLED') + enabled: boolean = false; +} diff --git a/packages/@n8n/config/src/configs/logging.config.ts b/packages/@n8n/config/src/configs/logging.config.ts index d64ff22c5be..8c321ff5cce 100644 --- a/packages/@n8n/config/src/configs/logging.config.ts +++ b/packages/@n8n/config/src/configs/logging.config.ts @@ -20,10 +20,23 @@ export const LOG_SCOPES = [ 'workflow-activation', 'ssh-client', 'data-store', + 'cron', + 'community-nodes', ] as const; export type LogScope = (typeof LOG_SCOPES)[number]; +@Config +export class CronLoggingConfig { + /** + * Interval in minutes to log currently active cron jobs. Set to `0` to disable. + * + * @example `N8N_LOG_CRON_ACTIVE_INTERVAL=30` will log active crons every 30 minutes. + */ + @Env('N8N_LOG_CRON_ACTIVE_INTERVAL') + activeInterval: number = 0; +} + @Config class FileLoggingConfig { /** @@ -80,6 +93,9 @@ export class LoggingConfig { @Nested file: FileLoggingConfig; + @Nested + cron: CronLoggingConfig; + /** * Scopes to filter logs by. Nothing is filtered by default. * diff --git a/packages/@n8n/config/src/configs/nodes.config.ts b/packages/@n8n/config/src/configs/nodes.config.ts index 396ec352b9b..6ea8f115f55 100644 --- a/packages/@n8n/config/src/configs/nodes.config.ts +++ b/packages/@n8n/config/src/configs/nodes.config.ts @@ -1,4 +1,4 @@ -import { Config, Env, Nested } from '../decorators'; +import { Config, Env } from '../decorators'; function isStringArray(input: unknown): input is string[] { return Array.isArray(input) && input.every((item) => typeof item === 'string'); @@ -20,33 +20,6 @@ class JsonStringArray extends Array { } } -@Config -class CommunityPackagesConfig { - /** Whether to enable community packages */ - @Env('N8N_COMMUNITY_PACKAGES_ENABLED') - enabled: boolean = true; - - /** NPM registry URL to pull community packages from */ - @Env('N8N_COMMUNITY_PACKAGES_REGISTRY') - registry: string = 'https://registry.npmjs.org'; - - /** Whether to reinstall any missing community packages */ - @Env('N8N_REINSTALL_MISSING_PACKAGES') - reinstallMissing: boolean = false; - - /** Whether to block installation of not verified packages */ - @Env('N8N_UNVERIFIED_PACKAGES_ENABLED') - unverifiedEnabled: boolean = true; - - /** Whether to enable and show search suggestion of packages verified by n8n */ - @Env('N8N_VERIFIED_PACKAGES_ENABLED') - verifiedEnabled: boolean = true; - - /** Whether to load community packages */ - @Env('N8N_COMMUNITY_PACKAGES_PREVENT_LOADING') - preventLoading: boolean = false; -} - @Config export class NodesConfig { /** Node types to load. Includes all if unspecified. @example '["n8n-nodes-base.hackerNews"]' */ @@ -64,7 +37,4 @@ export class NodesConfig { /** Whether to enable Python execution on the Code node. */ @Env('N8N_PYTHON_ENABLED') pythonEnabled: boolean = true; - - @Nested - communityPackages: CommunityPackagesConfig; } diff --git a/packages/@n8n/config/src/configs/redis.config.ts b/packages/@n8n/config/src/configs/redis.config.ts new file mode 100644 index 00000000000..cd0f397a524 --- /dev/null +++ b/packages/@n8n/config/src/configs/redis.config.ts @@ -0,0 +1,8 @@ +import { Config, Env } from '../decorators'; + +@Config +export class RedisConfig { + /** Prefix for all Redis keys managed by n8n. */ + @Env('N8N_REDIS_KEY_PREFIX') + prefix: string = 'n8n'; +} diff --git a/packages/@n8n/config/src/configs/security.config.ts b/packages/@n8n/config/src/configs/security.config.ts index e9cac862ed3..ee424403008 100644 --- a/packages/@n8n/config/src/configs/security.config.ts +++ b/packages/@n8n/config/src/configs/security.config.ts @@ -38,4 +38,8 @@ export class SecurityConfig { */ @Env('N8N_CONTENT_SECURITY_POLICY_REPORT_ONLY') contentSecurityPolicyReportOnly: boolean = false; + + /** Whether to disable iframe sandboxing for webhooks */ + @Env('N8N_INSECURE_DISABLE_WEBHOOK_IFRAME_SANDBOX') + disableIframeSandboxing: boolean = false; } diff --git a/packages/@n8n/config/src/index.ts b/packages/@n8n/config/src/index.ts index 4a41829f353..31b73bb0955 100644 --- a/packages/@n8n/config/src/index.ts +++ b/packages/@n8n/config/src/index.ts @@ -1,6 +1,7 @@ import { z } from 'zod'; import { AiAssistantConfig } from './configs/ai-assistant.config'; +import { AiConfig } from './configs/ai.config'; import { AuthConfig } from './configs/auth.config'; import { CacheConfig } from './configs/cache.config'; import { CredentialsConfig } from './configs/credentials.config'; @@ -21,6 +22,7 @@ import { NodesConfig } from './configs/nodes.config'; import { PartialExecutionsConfig } from './configs/partial-executions.config'; import { PersonalizationConfig } from './configs/personalization.config'; import { PublicApiConfig } from './configs/public-api.config'; +import { RedisConfig } from './configs/redis.config'; import { TaskRunnersConfig } from './configs/runners.config'; import { ScalingModeConfig } from './configs/scaling-mode.config'; import { SecurityConfig } from './configs/security.config'; @@ -49,6 +51,7 @@ export { MfaConfig } from './configs/mfa.config'; export { HiringBannerConfig } from './configs/hiring-banner.config'; export { PersonalizationConfig } from './configs/personalization.config'; export { NodesConfig } from './configs/nodes.config'; +export { CronLoggingConfig } from './configs/logging.config'; const protocolSchema = z.enum(['http', 'https']); @@ -195,4 +198,14 @@ export class GlobalConfig { /** Public URL where the editor is accessible. Also used for emails sent from n8n. */ @Env('N8N_EDITOR_BASE_URL') editorBaseUrl: string = ''; + + /** URLs to external frontend hooks files, separated by semicolons. */ + @Env('EXTERNAL_FRONTEND_HOOKS_URLS') + externalFrontendHooksUrls: string = ''; + + @Nested + redis: RedisConfig; + + @Nested + ai: AiConfig; } diff --git a/packages/@n8n/config/test/config.test.ts b/packages/@n8n/config/test/config.test.ts index 58e7abfb737..853f0b87847 100644 --- a/packages/@n8n/config/test/config.test.ts +++ b/packages/@n8n/config/test/config.test.ts @@ -138,14 +138,6 @@ describe('GlobalConfig', () => { files: [], }, nodes: { - communityPackages: { - enabled: true, - registry: 'https://registry.npmjs.org', - reinstallMissing: false, - unverifiedEnabled: true, - verifiedEnabled: true, - preventLoading: false, - }, errorTriggerType: 'n8n-nodes-base.errorTrigger', include: [], exclude: [], @@ -275,6 +267,9 @@ describe('GlobalConfig', () => { location: 'logs/n8n.log', }, scopes: [], + cron: { + activeInterval: 0, + }, }, multiMainSetup: { enabled: false, @@ -300,6 +295,7 @@ describe('GlobalConfig', () => { daysAbandonedWorkflow: 90, contentSecurityPolicy: '{}', contentSecurityPolicyReportOnly: false, + disableIframeSandboxing: false, }, executions: { pruneData: true, @@ -348,6 +344,13 @@ describe('GlobalConfig', () => { loginLabel: '', }, }, + redis: { + prefix: 'n8n', + }, + externalFrontendHooksUrls: '', + ai: { + enabled: false, + }, }; it('should use all default values when no env variables are defined', () => { diff --git a/packages/@n8n/constants/package.json b/packages/@n8n/constants/package.json index 971a8efbac9..14b19874e04 100644 --- a/packages/@n8n/constants/package.json +++ b/packages/@n8n/constants/package.json @@ -1,6 +1,6 @@ { "name": "@n8n/constants", - "version": "0.9.0", + "version": "0.10.0", "scripts": { "clean": "rimraf dist .turbo", "dev": "pnpm watch", @@ -9,7 +9,7 @@ "format": "biome format --write .", "format:check": "biome ci .", "lint": "eslint . --quiet", - "lintfix": "eslint . --fix", + "lint:fix": "eslint . --fix", "watch": "tsc -p tsconfig.build.json --watch" }, "main": "dist/index.js", diff --git a/packages/@n8n/create-node/README.md b/packages/@n8n/create-node/README.md new file mode 100644 index 00000000000..f2918e668f7 --- /dev/null +++ b/packages/@n8n/create-node/README.md @@ -0,0 +1,13 @@ +# @n8n/create-node + +Scaffold a new community n8n node + +## Usage + +```bash +npm create @n8n/node +# or +pnpm create @n8n/node +# or +yarn create @n8n/node +``` diff --git a/packages/@n8n/create-node/bin/create.js b/packages/@n8n/create-node/bin/create.js new file mode 100755 index 00000000000..51e8287e755 --- /dev/null +++ b/packages/@n8n/create-node/bin/create.js @@ -0,0 +1,15 @@ +#!/usr/bin/env node + +import { spawnSync } from 'node:child_process'; +import { createRequire } from 'node:module'; +import path from 'node:path'; + +const require = createRequire(import.meta.url); + +const cliBin = require.resolve('@n8n/node-cli/bin/n8n-node.js'); + +const result = spawnSync('node', [cliBin, 'create', ...process.argv.slice(2)], { + stdio: 'inherit', +}); + +process.exit(result.status ?? 1); diff --git a/packages/@n8n/create-node/package.json b/packages/@n8n/create-node/package.json new file mode 100644 index 00000000000..76247e964b1 --- /dev/null +++ b/packages/@n8n/create-node/package.json @@ -0,0 +1,25 @@ +{ + "private": true, + "type": "module", + "name": "@n8n/create-node", + "version": "0.1.0", + "description": "Official CLI to create new community nodes for n8n", + "bin": { + "create-n8n-node": "./bin/create.js" + }, + "files": [ + "bin", + "dist" + ], + "scripts": { + "publish:dry": "pnpm run build && pnpm pub --dry-run", + "start": "./bin/create.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/n8n-io/n8n" + }, + "dependencies": { + "@n8n/node-cli": "workspace:*" + } +} diff --git a/packages/@n8n/create-node/tsconfig.json b/packages/@n8n/create-node/tsconfig.json new file mode 100644 index 00000000000..1fc9b187008 --- /dev/null +++ b/packages/@n8n/create-node/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "@n8n/typescript-config/modern/tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src", + "outDir": "dist", + "types": ["vite/client", "vitest/globals"], + "isolatedModules": true + }, + "include": ["src/**/*.ts"] +} diff --git a/packages/@n8n/db/package.json b/packages/@n8n/db/package.json index 860856827ea..6599d4676aa 100644 --- a/packages/@n8n/db/package.json +++ b/packages/@n8n/db/package.json @@ -1,6 +1,6 @@ { "name": "@n8n/db", - "version": "0.15.0", + "version": "0.16.0", "scripts": { "clean": "rimraf dist .turbo", "dev": "pnpm watch", @@ -9,7 +9,7 @@ "format": "biome format --write .", "format:check": "biome ci .", "lint": "eslint . --quiet", - "lintfix": "eslint . --fix", + "lint:fix": "eslint . --fix", "watch": "tsc -p tsconfig.build.json --watch", "test": "jest", "test:dev": "jest --watch" diff --git a/packages/@n8n/db/src/entities/test-case-execution.ee.ts b/packages/@n8n/db/src/entities/test-case-execution.ee.ts index e9a3b599e22..88f51009ea5 100644 --- a/packages/@n8n/db/src/entities/test-case-execution.ee.ts +++ b/packages/@n8n/db/src/entities/test-case-execution.ee.ts @@ -1,5 +1,5 @@ import { Column, Entity, ManyToOne, OneToOne } from '@n8n/typeorm'; -import type { IDataObject } from 'n8n-workflow'; +import type { IDataObject, JsonObject } from 'n8n-workflow'; import { WithStringId, DateTimeColumn, JsonColumn } from './abstract-entity'; import type { ExecutionEntity } from './execution-entity'; @@ -54,4 +54,10 @@ export class TestCaseExecution extends WithStringId { @JsonColumn({ nullable: true }) metrics: TestCaseRunMetrics; + + @JsonColumn({ nullable: true }) + inputs: JsonObject | null; + + @JsonColumn({ nullable: true }) + outputs: JsonObject | null; } diff --git a/packages/@n8n/db/src/migrations/common/1752669793000-AddInputsOutputsToTestCaseExecution.ts b/packages/@n8n/db/src/migrations/common/1752669793000-AddInputsOutputsToTestCaseExecution.ts new file mode 100644 index 00000000000..a622d490468 --- /dev/null +++ b/packages/@n8n/db/src/migrations/common/1752669793000-AddInputsOutputsToTestCaseExecution.ts @@ -0,0 +1,11 @@ +import type { MigrationContext, ReversibleMigration } from '../migration-types'; + +export class AddInputsOutputsToTestCaseExecution1752669793000 implements ReversibleMigration { + async up({ schemaBuilder: { addColumns, column } }: MigrationContext) { + await addColumns('test_case_execution', [column('inputs').json, column('outputs').json]); + } + + async down({ schemaBuilder: { dropColumns } }: MigrationContext) { + await dropColumns('test_case_execution', ['inputs', 'outputs']); + } +} diff --git a/packages/@n8n/db/src/migrations/mysqldb/index.ts b/packages/@n8n/db/src/migrations/mysqldb/index.ts index 1fa8fb761e3..2410768770a 100644 --- a/packages/@n8n/db/src/migrations/mysqldb/index.ts +++ b/packages/@n8n/db/src/migrations/mysqldb/index.ts @@ -88,6 +88,7 @@ import { AddWorkflowArchivedColumn1745934666076 } from '../common/1745934666076- import { DropRoleTable1745934666077 } from '../common/1745934666077-DropRoleTable'; import { AddProjectDescriptionColumn1747824239000 } from '../common/1747824239000-AddProjectDescriptionColumn'; import { AddLastActiveAtColumnToUser1750252139166 } from '../common/1750252139166-AddLastActiveAtColumnToUser'; +import { AddInputsOutputsToTestCaseExecution1752669793000 } from '../common/1752669793000-AddInputsOutputsToTestCaseExecution'; import type { Migration } from '../migration-types'; import { UpdateParentFolderIdColumn1740445074052 } from '../mysqldb/1740445074052-UpdateParentFolderIdColumn'; @@ -183,4 +184,5 @@ export const mysqlMigrations: Migration[] = [ ClearEvaluation1745322634000, AddProjectDescriptionColumn1747824239000, AddLastActiveAtColumnToUser1750252139166, + AddInputsOutputsToTestCaseExecution1752669793000, ]; diff --git a/packages/@n8n/db/src/migrations/postgresdb/index.ts b/packages/@n8n/db/src/migrations/postgresdb/index.ts index 1ab184fbb58..1096d89ff54 100644 --- a/packages/@n8n/db/src/migrations/postgresdb/index.ts +++ b/packages/@n8n/db/src/migrations/postgresdb/index.ts @@ -1,4 +1,5 @@ import { AddMfaColumns1690000000030 } from './../common/1690000000040-AddMfaColumns'; +import { AddInputsOutputsToTestCaseExecution1752669793000 } from './../common/1752669793000-AddInputsOutputsToTestCaseExecution'; import { InitialMigration1587669153312 } from './1587669153312-InitialMigration'; import { WebhookModel1589476000887 } from './1589476000887-WebhookModel'; import { CreateIndexStoppedAt1594828256133 } from './1594828256133-CreateIndexStoppedAt'; @@ -181,4 +182,5 @@ export const postgresMigrations: Migration[] = [ ClearEvaluation1745322634000, AddProjectDescriptionColumn1747824239000, AddLastActiveAtColumnToUser1750252139166, + AddInputsOutputsToTestCaseExecution1752669793000, ]; diff --git a/packages/@n8n/db/src/migrations/sqlite/index.ts b/packages/@n8n/db/src/migrations/sqlite/index.ts index 03274408095..42ada52bffe 100644 --- a/packages/@n8n/db/src/migrations/sqlite/index.ts +++ b/packages/@n8n/db/src/migrations/sqlite/index.ts @@ -86,7 +86,9 @@ import { DropRoleTable1745934666077 } from '../common/1745934666077-DropRoleTabl import { CreateDataStoreTables1747814180618 } from '../common/1747814180618-CreateDataStoreTables'; import { AddProjectDescriptionColumn1747824239000 } from '../common/1747824239000-AddProjectDescriptionColumn'; import { AddLastActiveAtColumnToUser1750252139166 } from '../common/1750252139166-AddLastActiveAtColumnToUser'; +import { AddInputsOutputsToTestCaseExecution1752669793000 } from '../common/1752669793000-AddInputsOutputsToTestCaseExecution'; import type { Migration } from '../migration-types'; + const sqliteMigrations: Migration[] = [ InitialMigration1588102412422, WebhookModel1592445003908, @@ -176,6 +178,7 @@ const sqliteMigrations: Migration[] = [ CreateDataStoreTables1747814180618, AddProjectDescriptionColumn1747824239000, AddLastActiveAtColumnToUser1750252139166, + AddInputsOutputsToTestCaseExecution1752669793000, ]; export { sqliteMigrations }; diff --git a/packages/@n8n/db/src/repositories/execution.repository.ts b/packages/@n8n/db/src/repositories/execution.repository.ts index 94ba8b62958..22b0bbc19ba 100644 --- a/packages/@n8n/db/src/repositories/execution.repository.ts +++ b/packages/@n8n/db/src/repositories/execution.repository.ts @@ -922,7 +922,7 @@ export class ExecutionRepository extends Repository { async getLiveExecutionRowsOnPostgres() { const tableName = `${this.globalConfig.database.tablePrefix}execution_entity`; - const pgSql = `SELECT n_live_tup as result FROM pg_stat_all_tables WHERE relname = '${tableName}';`; + const pgSql = `SELECT n_live_tup as result FROM pg_stat_all_tables WHERE relname = '${tableName}' and schemaname = '${this.globalConfig.database.postgresdb.schema}';`; try { const rows = (await this.query(pgSql)) as Array<{ result: string }>; diff --git a/packages/@n8n/db/src/repositories/test-run.repository.ee.ts b/packages/@n8n/db/src/repositories/test-run.repository.ee.ts index 526c5c114a1..ed35da464e2 100644 --- a/packages/@n8n/db/src/repositories/test-run.repository.ee.ts +++ b/packages/@n8n/db/src/repositories/test-run.repository.ee.ts @@ -22,7 +22,7 @@ export class TestRunRepository extends Repository { super(TestRun, dataSource.manager); } - async createTestRun(workflowId: string) { + async createTestRun(workflowId: string): Promise { const testRun = this.create({ status: 'new', workflow: { diff --git a/packages/@n8n/db/src/repositories/workflow.repository.ts b/packages/@n8n/db/src/repositories/workflow.repository.ts index 500bbf2dbdc..5fcb4bf8136 100644 --- a/packages/@n8n/db/src/repositories/workflow.repository.ts +++ b/packages/@n8n/db/src/repositories/workflow.repository.ts @@ -19,7 +19,9 @@ import type { FolderWithWorkflowAndSubFolderCount, ListQuery, } from '../entities/types-db'; +import { buildWorkflowsByNodesQuery } from '../utils/build-workflows-by-nodes-query'; import { isStringArray } from '../utils/is-string-array'; +import { TimedQuery } from '../utils/timed-query'; type ResourceType = 'folder' | 'workflow'; @@ -371,6 +373,7 @@ export class WorkflowRepository extends Repository { }); } + @TimedQuery() async getMany(workflowIds: string[], options: ListQuery.Options = {}) { if (workflowIds.length === 0) { return []; @@ -710,4 +713,22 @@ export class WorkflowRepository extends Repository { { parentFolder: toFolderId === PROJECT_ROOT ? null : { id: toFolderId } }, ); } + + async findWorkflowsWithNodeType(nodeTypes: string[]) { + if (!nodeTypes?.length) return []; + + const qb = this.createQueryBuilder('workflow'); + + const { whereClause, parameters } = buildWorkflowsByNodesQuery( + nodeTypes, + this.globalConfig.database.type, + ); + + const workflows: Array<{ id: string; name: string; active: boolean }> = await qb + .select(['workflow.id', 'workflow.name', 'workflow.active']) + .where(whereClause, parameters) + .getMany(); + + return workflows; + } } diff --git a/packages/@n8n/db/src/utils/__tests__/build-workflows-by-nodes-query.test.ts b/packages/@n8n/db/src/utils/__tests__/build-workflows-by-nodes-query.test.ts new file mode 100644 index 00000000000..737b0660fd4 --- /dev/null +++ b/packages/@n8n/db/src/utils/__tests__/build-workflows-by-nodes-query.test.ts @@ -0,0 +1,48 @@ +import { buildWorkflowsByNodesQuery } from '../build-workflows-by-nodes-query'; + +describe('WorkflowRepository', () => { + describe('filterWorkflowsByNodesConstructWhereClause', () => { + it('should return the correct WHERE clause and parameters for sqlite', () => { + const nodeTypes = ['HTTP Request', 'Set']; + const expectedInQuery = + "FROM json_each(workflow.nodes) WHERE json_extract(json_each.value, '$.type')"; + const expectedParameters = { + nodeType0: 'HTTP Request', + nodeType1: 'Set', + nodeTypes, + }; + + const { whereClause, parameters } = buildWorkflowsByNodesQuery(nodeTypes, 'sqlite'); + + expect(whereClause).toContain(expectedInQuery); + expect(parameters).toEqual(expectedParameters); + }); + + it('should return the correct WHERE clause and parameters for postgresdb', () => { + const nodeTypes = ['HTTP Request', 'Set']; + const expectedInQuery = 'FROM jsonb_array_elements(workflow.nodes::jsonb) AS node'; + const expectedParameters = { nodeTypes }; + + const { whereClause, parameters } = buildWorkflowsByNodesQuery(nodeTypes, 'postgresdb'); + + expect(whereClause).toContain(expectedInQuery); + expect(parameters).toEqual(expectedParameters); + }); + + it('should return the correct WHERE clause and parameters for mysqldb', () => { + const nodeTypes = ['HTTP Request', 'Set']; + const expectedWhereClause = + "(JSON_SEARCH(JSON_EXTRACT(workflow.nodes, '$[*].type'), 'one', :nodeType0) IS NOT NULL OR JSON_SEARCH(JSON_EXTRACT(workflow.nodes, '$[*].type'), 'one', :nodeType1) IS NOT NULL)"; + const expectedParameters = { + nodeType0: 'HTTP Request', + nodeType1: 'Set', + nodeTypes, + }; + + const { whereClause, parameters } = buildWorkflowsByNodesQuery(nodeTypes, 'mysqldb'); + + expect(whereClause).toEqual(expectedWhereClause); + expect(parameters).toEqual(expectedParameters); + }); + }); +}); diff --git a/packages/@n8n/db/src/utils/build-workflows-by-nodes-query.ts b/packages/@n8n/db/src/utils/build-workflows-by-nodes-query.ts new file mode 100644 index 00000000000..dd678005348 --- /dev/null +++ b/packages/@n8n/db/src/utils/build-workflows-by-nodes-query.ts @@ -0,0 +1,56 @@ +/** + * Builds the WHERE clause and parameters for a query to find workflows by node types + */ +export function buildWorkflowsByNodesQuery( + nodeTypes: string[], + dbType: 'postgresdb' | 'mysqldb' | 'mariadb' | 'sqlite', +) { + let whereClause: string; + + const parameters: Record = { nodeTypes }; + + switch (dbType) { + case 'postgresdb': + whereClause = `EXISTS ( + SELECT 1 + FROM jsonb_array_elements(workflow.nodes::jsonb) AS node + WHERE node->>'type' = ANY(:nodeTypes) + )`; + break; + case 'mysqldb': + case 'mariadb': { + const conditions = nodeTypes + .map( + (_, i) => + `JSON_SEARCH(JSON_EXTRACT(workflow.nodes, '$[*].type'), 'one', :nodeType${i}) IS NOT NULL`, + ) + .join(' OR '); + + whereClause = `(${conditions})`; + + nodeTypes.forEach((nodeType, index) => { + parameters[`nodeType${index}`] = nodeType; + }); + break; + } + case 'sqlite': { + const conditions = nodeTypes + .map( + (_, i) => + `EXISTS (SELECT 1 FROM json_each(workflow.nodes) WHERE json_extract(json_each.value, '$.type') = :nodeType${i})`, + ) + .join(' OR '); + + whereClause = `(${conditions})`; + + nodeTypes.forEach((nodeType, index) => { + parameters[`nodeType${index}`] = nodeType; + }); + break; + } + default: + throw new Error('Unsupported database type'); + } + + return { whereClause, parameters }; +} diff --git a/packages/@n8n/db/src/utils/timed-query.ts b/packages/@n8n/db/src/utils/timed-query.ts new file mode 100644 index 00000000000..793a882cf6e --- /dev/null +++ b/packages/@n8n/db/src/utils/timed-query.ts @@ -0,0 +1,26 @@ +import { Logger } from '@n8n/backend-common'; +import { Timed } from '@n8n/decorators'; +import { Container } from '@n8n/di'; + +/** + * Decorator that warns when database queries exceed a duration threshold. + * + * For options, see `@n8n/decorators/src/timed.ts`. + * + * @example + * ```ts + * @Service() + * class UserRepository { + * @TimedQuery() + * async findUsers() { + * // will log warning if execution takes > 100ms + * } + * + * @TimedQuery({ threshold: 50, logArgs: true }) + * async findUserById(id: string) { + * // will log warning if execution takes >50ms, including args + * } + * } + * ``` + */ +export const TimedQuery = Timed(Container.get(Logger), 'Slow database query'); diff --git a/packages/@n8n/decorators/package.json b/packages/@n8n/decorators/package.json index 1ebdbe1fc91..a2ac76c6b6c 100644 --- a/packages/@n8n/decorators/package.json +++ b/packages/@n8n/decorators/package.json @@ -1,6 +1,6 @@ { "name": "@n8n/decorators", - "version": "0.14.0", + "version": "0.15.0", "scripts": { "clean": "rimraf dist .turbo", "dev": "pnpm watch", @@ -9,7 +9,7 @@ "format": "biome format --write .", "format:check": "biome ci .", "lint": "eslint . --quiet", - "lintfix": "eslint . --fix", + "lint:fix": "eslint . --fix", "watch": "tsc -p tsconfig.build.json --watch", "test": "jest", "test:dev": "jest --watch" diff --git a/packages/@n8n/decorators/src/index.ts b/packages/@n8n/decorators/src/index.ts index 03b8c3413f2..974076a1229 100644 --- a/packages/@n8n/decorators/src/index.ts +++ b/packages/@n8n/decorators/src/index.ts @@ -9,3 +9,4 @@ export * from './pubsub'; export { Redactable } from './redactable'; export * from './shutdown'; export * from './module/module-metadata'; +export { Timed, TimedOptions } from './timed'; diff --git a/packages/@n8n/decorators/src/timed.ts b/packages/@n8n/decorators/src/timed.ts new file mode 100644 index 00000000000..12dd0089c91 --- /dev/null +++ b/packages/@n8n/decorators/src/timed.ts @@ -0,0 +1,42 @@ +export interface TimedOptions { + /** Duration (in ms) above which to log a warning. Defaults to `100`. */ + threshold?: number; + /** Whether to include method parameters in the log. Defaults to `false`. */ + logArgs?: boolean; +} + +interface Logger { + warn(message: string, meta?: object): void; +} + +/** + * Factory to create decorators to warn when method calls exceed a duration threshold. + */ +export const Timed = + (logger: Logger, msg = 'Slow method call') => + (options: TimedOptions = {}): MethodDecorator => + (_target, propertyKey, descriptor: PropertyDescriptor) => { + const originalMethod = descriptor.value as (...args: unknown[]) => unknown; + const thresholdMs = options.threshold ?? 100; + const logArgs = options.logArgs ?? false; + + descriptor.value = async function (...args: unknown[]) { + const methodName = `${this.constructor.name}.${String(propertyKey)}`; + const start = performance.now(); + const result = await originalMethod.apply(this, args); + const durationMs = performance.now() - start; + + if (durationMs > thresholdMs) { + logger.warn(msg, { + method: methodName, + durationMs: Math.round(durationMs), + thresholdMs, + params: logArgs ? args : '[hidden]', + }); + } + + return result; + }; + + return descriptor; + }; diff --git a/packages/@n8n/di/package.json b/packages/@n8n/di/package.json index 25b09b6c3fb..aa1da4d78e9 100644 --- a/packages/@n8n/di/package.json +++ b/packages/@n8n/di/package.json @@ -1,6 +1,6 @@ { "name": "@n8n/di", - "version": "0.8.0", + "version": "0.9.0", "scripts": { "clean": "rimraf dist .turbo", "dev": "pnpm watch", @@ -9,7 +9,7 @@ "format": "biome format --write .", "format:check": "biome ci .", "lint": "eslint . --quiet", - "lintfix": "eslint . --fix", + "lint:fix": "eslint . --fix", "watch": "tsc -p tsconfig.build.json --watch", "test": "jest", "test:dev": "jest --watch" diff --git a/packages/@n8n/errors/package.json b/packages/@n8n/errors/package.json index 36977f97a6e..7ec38fff95a 100644 --- a/packages/@n8n/errors/package.json +++ b/packages/@n8n/errors/package.json @@ -1,6 +1,6 @@ { "name": "@n8n/errors", - "version": "0.2.0", + "version": "0.3.0", "scripts": { "clean": "rimraf dist .turbo", "dev": "pnpm watch", @@ -9,10 +9,10 @@ "format": "biome format --write .", "format:check": "biome ci .", "lint": "eslint . --quiet", - "lintfix": "eslint . --fix", + "lint:fix": "eslint . --fix", "watch": "tsc -p tsconfig.build.json --watch", - "test": "jest", - "test:dev": "jest --watch" + "test": "echo \"WARNING: no test specified\" && exit 0", + "test:dev": "echo \"WARNING: no test specified\" && exit 0" }, "main": "dist/index.js", "module": "src/index.ts", @@ -21,6 +21,10 @@ "dist/**/*" ], "devDependencies": { - "@n8n/typescript-config": "workspace:*" + "@n8n/typescript-config": "workspace:*", + "@sentry/node": "catalog:" + }, + "dependencies": { + "callsites": "catalog:" } } diff --git a/packages/workflow/src/errors/application.error.ts b/packages/@n8n/errors/src/application.error.ts similarity index 83% rename from packages/workflow/src/errors/application.error.ts rename to packages/@n8n/errors/src/application.error.ts index b7f1907d04c..c33cda55a35 100644 --- a/packages/workflow/src/errors/application.error.ts +++ b/packages/@n8n/errors/src/application.error.ts @@ -1,7 +1,7 @@ import type { Event } from '@sentry/node'; import callsites from 'callsites'; -import type { ErrorLevel, ReportingOptions } from './error.types'; +import type { ErrorLevel, ReportingOptions } from './types'; /** * @deprecated Use `UserError`, `OperationalError` or `UnexpectedError` instead. @@ -26,9 +26,11 @@ export class ApplicationError extends Error { try { const filePath = callsites()[2].getFileName() ?? ''; + // eslint-disable-next-line no-useless-escape const match = /packages\/([^\/]+)\//.exec(filePath)?.[1]; if (match) this.tags.packageName = match; + // eslint-disable-next-line no-empty } catch {} } } diff --git a/packages/@n8n/errors/src/index.ts b/packages/@n8n/errors/src/index.ts index cb0ff5c3b54..8de63e4d4b2 100644 --- a/packages/@n8n/errors/src/index.ts +++ b/packages/@n8n/errors/src/index.ts @@ -1 +1,2 @@ -export {}; +export { ApplicationError } from './application.error'; +export * from './types'; diff --git a/packages/workflow/src/errors/error.types.ts b/packages/@n8n/errors/src/types.ts similarity index 79% rename from packages/workflow/src/errors/error.types.ts rename to packages/@n8n/errors/src/types.ts index 54435298ec6..7cbcc4ccf94 100644 --- a/packages/workflow/src/errors/error.types.ts +++ b/packages/@n8n/errors/src/types.ts @@ -7,6 +7,8 @@ export type ErrorTags = NonNullable; export type ReportingOptions = { /** Whether the error should be reported to Sentry */ shouldReport?: boolean; + /** Whether the error log should be logged (default to true) */ + shouldBeLogged?: boolean; level?: ErrorLevel; tags?: ErrorTags; extra?: Event['extra']; diff --git a/packages/@n8n/eslint-config/package.json b/packages/@n8n/eslint-config/package.json index 6bbd089d51d..38fbd88ed6c 100644 --- a/packages/@n8n/eslint-config/package.json +++ b/packages/@n8n/eslint-config/package.json @@ -5,16 +5,16 @@ "version": "0.0.1", "exports": { "./base": { - "default": "./dist/configs/base.js", - "types": "./dist/configs/base.d.js" + "types": "./dist/configs/base.d.js", + "default": "./dist/configs/base.js" }, "./frontend": { - "default": "./dist/configs/frontend.js", - "types": "./dist/configs/frontend.d.js" + "types": "./dist/configs/frontend.d.js", + "default": "./dist/configs/frontend.js" }, "./node": { - "default": "./dist/configs/node.js", - "types": "./dist/configs/node.d.js" + "types": "./dist/configs/node.d.js", + "default": "./dist/configs/node.js" } }, "scripts": { diff --git a/packages/@n8n/eslint-config/src/configs/base.ts b/packages/@n8n/eslint-config/src/configs/base.ts index fda6f5f53bf..dbd5522673e 100644 --- a/packages/@n8n/eslint-config/src/configs/base.ts +++ b/packages/@n8n/eslint-config/src/configs/base.ts @@ -369,7 +369,7 @@ export const baseConfig = tseslint.config( /** * https://eslint.org/docs/rules/prefer-spread */ - 'prefer-spread': 'error', + 'prefer-spread': 'off', // These are tuned off since we use `noUnusedLocals` and `noUnusedParameters` now 'no-unused-vars': 'off', diff --git a/packages/@n8n/eslint-config/src/plugin.ts b/packages/@n8n/eslint-config/src/plugin.ts index da810921220..1da4a84c3fb 100644 --- a/packages/@n8n/eslint-config/src/plugin.ts +++ b/packages/@n8n/eslint-config/src/plugin.ts @@ -24,6 +24,7 @@ export const localRulesPlugin = { 'n8n-local-rules/no-interpolation-in-regular-string': 'error', 'n8n-local-rules/no-unused-param-in-catch-clause': 'error', 'n8n-local-rules/no-useless-catch-throw': 'error', + 'n8n-local-rules/no-argument-spread': 'warn', // TODO: mark error }, }, }, diff --git a/packages/@n8n/eslint-config/src/rules/index.ts b/packages/@n8n/eslint-config/src/rules/index.ts index 2a28310cc5f..f68f469cc3d 100644 --- a/packages/@n8n/eslint-config/src/rules/index.ts +++ b/packages/@n8n/eslint-config/src/rules/index.ts @@ -13,6 +13,7 @@ import { NoUntypedConfigClassFieldRule } from './no-untyped-config-class-field.j import { NoTopLevelRelativeImportsInBackendModuleRule } from './no-top-level-relative-imports-in-backend-module.js'; import { NoConstructorInBackendModuleRule } from './no-constructor-in-backend-module.js'; import type { AnyRuleModule } from '@typescript-eslint/utils/ts-eslint'; +import { NoArgumentSpreadRule } from './no-argument-spread.js'; export const rules = { 'no-uncaught-json-parse': NoUncaughtJsonParseRule, @@ -29,4 +30,5 @@ export const rules = { 'no-untyped-config-class-field': NoUntypedConfigClassFieldRule, 'no-top-level-relative-imports-in-backend-module': NoTopLevelRelativeImportsInBackendModuleRule, 'no-constructor-in-backend-module': NoConstructorInBackendModuleRule, + 'no-argument-spread': NoArgumentSpreadRule, } satisfies Record; diff --git a/packages/@n8n/eslint-config/src/rules/no-argument-spread.test.ts b/packages/@n8n/eslint-config/src/rules/no-argument-spread.test.ts new file mode 100644 index 00000000000..f3f43358a51 --- /dev/null +++ b/packages/@n8n/eslint-config/src/rules/no-argument-spread.test.ts @@ -0,0 +1,47 @@ +import { RuleTester } from '@typescript-eslint/rule-tester'; +import { NoArgumentSpreadRule } from './no-argument-spread.js'; + +const ruleTester = new RuleTester(); + +ruleTester.run('no-unbounded-argument-spread', NoArgumentSpreadRule, { + valid: [ + { code: 'fn(1, 2, 3)' }, + { code: 'fn(...[1, 2, 3])' }, + { code: 'new Foo(...[1, 2])' }, + { code: 'fn.apply(null, deps)' }, + { code: 'Reflect.construct(Foo, deps)' }, + ], + + invalid: [ + { + code: 'fn(...deps)', + output: 'fn.apply(undefined, deps)', + errors: [{ messageId: 'replaceWithApply' }], + }, + { + code: 'obj.fn(...deps)', + output: 'obj.fn.apply(obj, deps)', + errors: [{ messageId: 'replaceWithApply' }], + }, + { + code: 'instance = metadata.factory(...dependencies);', + output: 'instance = metadata.factory.apply(metadata, dependencies);', + errors: [{ messageId: 'replaceWithApply' }], + }, + { + code: 'new Foo(...deps)', + output: 'Reflect.construct(Foo, deps)', + errors: [{ messageId: 'replaceWithReflect' }], + }, + { + code: 'someFunction(a, ...deps)', + output: null, // multiple args β€” no fix + errors: [{ messageId: 'replaceWithApply' }], + }, + { + code: 'new Bar(a, ...deps)', + output: null, + errors: [{ messageId: 'replaceWithReflect' }], + }, + ], +}); diff --git a/packages/@n8n/eslint-config/src/rules/no-argument-spread.ts b/packages/@n8n/eslint-config/src/rules/no-argument-spread.ts new file mode 100644 index 00000000000..623617d83d0 --- /dev/null +++ b/packages/@n8n/eslint-config/src/rules/no-argument-spread.ts @@ -0,0 +1,87 @@ +import { ESLintUtils } from '@typescript-eslint/utils'; + +export const NoArgumentSpreadRule = ESLintUtils.RuleCreator.withoutDocs({ + meta: { + type: 'problem', + docs: { + description: + 'Avoid spreading potentially large arrays in function or constructor calls β€” can cause stack overflows. Use `.apply` or `Reflect.construct` instead.', + }, + fixable: 'code', + messages: { + noUnboundedSpread: + 'Avoid spreading an array in function or constructor calls unless known to be small.', + replaceWithApply: + 'Replace `array.push(...largeArray)` with `array.push.apply(array, largeArray)` to avoid potential stack overflows.', + replaceWithReflect: + 'Replace `new Constructor(...args)` with `Reflect.construct(Constructor, args)` to avoid potential stack overflows.', + }, + schema: [], + }, + defaultOptions: [], + create(context) { + return { + CallExpression(node) { + for (const arg of node.arguments) { + if (arg.type !== 'SpreadElement') continue; + + const spreadArg = arg.argument; + + // Allow spread of inline arrays + if (spreadArg.type === 'ArrayExpression') return; + + // Only autofix if it's the sole argument + const canFix = node.arguments.length === 1; + + context.report({ + node, + messageId: 'replaceWithApply', + fix: canFix + ? (fixer) => { + const source = context.sourceCode; + + if (node.callee.type === 'MemberExpression') { + // Preserve `this` + const thisText = source.getText(node.callee.object); + const calleeText = source.getText(node.callee); + const argText = source.getText(spreadArg); + return fixer.replaceText(node, `${calleeText}.apply(${thisText}, ${argText})`); + } else { + // Not a memberexpression, use undefined as thisArg + const calleeText = source.getText(node.callee); + const argText = source.getText(spreadArg); + return fixer.replaceText(node, `${calleeText}.apply(undefined, ${argText})`); + } + } + : null, + }); + } + }, + + NewExpression(node) { + for (const arg of node.arguments || []) { + if (arg.type !== 'SpreadElement') continue; + + const spreadArg = arg.argument; + + if (spreadArg.type === 'ArrayExpression') return; + + const canFix = node.arguments.length === 1; + + context.report({ + node, + messageId: 'replaceWithReflect', + fix: canFix + ? (fixer) => { + const source = context.sourceCode; + const ctorText = source.getText(node.callee); + const argText = source.getText(spreadArg); + return fixer.replaceText(node, `Reflect.construct(${ctorText}, ${argText})`); + } + : null, + }); + } + }, + }; + }, +}); diff --git a/packages/@n8n/imap/package.json b/packages/@n8n/imap/package.json index 1e1e4632479..7ee71b19ec6 100644 --- a/packages/@n8n/imap/package.json +++ b/packages/@n8n/imap/package.json @@ -1,6 +1,6 @@ { "name": "@n8n/imap", - "version": "0.13.0", + "version": "0.14.0", "scripts": { "clean": "rimraf dist .turbo", "dev": "pnpm watch", @@ -9,7 +9,7 @@ "format": "biome format --write src test", "format:check": "biome ci src test", "lint": "eslint . --quiet", - "lintfix": "eslint . --fix", + "lint:fix": "eslint . --fix", "watch": "tsc -p tsconfig.build.json --watch", "test": "vitest run", "test:dev": "vitest --silent=false" diff --git a/packages/@n8n/json-schema-to-zod/package.json b/packages/@n8n/json-schema-to-zod/package.json index 9b1bdd7b943..099b6946816 100644 --- a/packages/@n8n/json-schema-to-zod/package.json +++ b/packages/@n8n/json-schema-to-zod/package.json @@ -1,6 +1,6 @@ { "name": "@n8n/json-schema-to-zod", - "version": "1.4.0", + "version": "1.5.0", "description": "Converts JSON schema objects into Zod schemas", "types": "./dist/types/index.d.ts", "main": "./dist/cjs/index.js", @@ -22,7 +22,7 @@ "format": "biome format --write src", "format:check": "biome ci src", "lint": "eslint src --quiet", - "lintfix": "eslint src --fix", + "lint:fix": "eslint src --fix", "build:types": "tsc -p tsconfig.types.json", "build:cjs": "tsc -p tsconfig.cjs.json && node postcjs.cjs", "build:esm": "tsc -p tsconfig.esm.json && node postesm.cjs", diff --git a/packages/@n8n/node-cli/README.md b/packages/@n8n/node-cli/README.md new file mode 100644 index 00000000000..7bfce9cfcb9 --- /dev/null +++ b/packages/@n8n/node-cli/README.md @@ -0,0 +1,35 @@ +# @n8n/node-cli + +Official CLI for developing community nodes for [n8n](https://n8n.io). + +## Features + +- πŸ”§ Scaffold new nodes +- More coming soon + +## Installation + +Run directly via `npx`: + +```bash +npx n8n-node create +``` + +Or install globally: + +```bash +npm install -g @n8n/node-cli +n8n-node create +``` + +## Commands + +## Create a node + +```bash +n8n-node create # Scaffold a new node +``` + +## Related + +`@n8n/create-node`: Lightweight wrapper to support `npm create @n8n/node` diff --git a/packages/@n8n/node-cli/bin/n8n-node.js b/packages/@n8n/node-cli/bin/n8n-node.js new file mode 100755 index 00000000000..176d2af58c5 --- /dev/null +++ b/packages/@n8n/node-cli/bin/n8n-node.js @@ -0,0 +1,5 @@ +#!/usr/bin/env node + +import { execute } from '@oclif/core'; + +await execute({ dir: import.meta.url }); diff --git a/packages/@n8n/node-cli/eslint.config.mjs b/packages/@n8n/node-cli/eslint.config.mjs new file mode 100644 index 00000000000..378bbb0b8ff --- /dev/null +++ b/packages/@n8n/node-cli/eslint.config.mjs @@ -0,0 +1,7 @@ +import { defineConfig } from 'eslint/config'; +import { nodeConfig } from '@n8n/eslint-config/node'; + +export default defineConfig(nodeConfig, { + files: ['./src/commands/*.ts'], + rules: { 'import-x/no-default-export': 'off' }, +}); diff --git a/packages/@n8n/node-cli/package.json b/packages/@n8n/node-cli/package.json new file mode 100644 index 00000000000..647fb474b09 --- /dev/null +++ b/packages/@n8n/node-cli/package.json @@ -0,0 +1,46 @@ +{ + "private": true, + "type": "module", + "name": "@n8n/node-cli", + "version": "0.1.0", + "description": "Official CLI for developing community nodes for n8n", + "bin": { + "n8n-node": "./bin/n8n-node.js" + }, + "files": [ + "bin", + "dist" + ], + "scripts": { + "clean": "rimraf dist .turbo", + "typecheck": "tsc --noEmit", + "dev": "tsc -w", + "format": "biome format --write src", + "format:check": "biome ci src", + "lint": "eslint src --quiet", + "lintfix": "eslint src --fix", + "build": "tsc", + "publish:dry": "pnpm run build && pnpm pub --dry-run", + "test": "vitest run", + "test:dev": "vitest --silent=false", + "start": "./bin/n8n-node.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/n8n-io/n8n" + }, + "oclif": { + "bin": "n8n-node", + "commands": "./dist/commands", + "topicSeparator": " " + }, + "dependencies": { + "@oclif/core": "^4.5.2", + "prompts": "^2.4.2" + }, + "devDependencies": { + "@n8n/typescript-config": "workspace:*", + "@n8n/vitest-config": "workspace:*", + "@oclif/test": "^4.1.13" + } +} diff --git a/packages/@n8n/node-cli/src/commands/create.test.ts b/packages/@n8n/node-cli/src/commands/create.test.ts new file mode 100644 index 00000000000..0a68c80120b --- /dev/null +++ b/packages/@n8n/node-cli/src/commands/create.test.ts @@ -0,0 +1,8 @@ +import { runCommand } from '@oclif/test'; + +describe('n8n-node create', () => { + it('should print correct output', async () => { + const { stdout } = await runCommand('create -f', { root: import.meta.dirname }); + expect(stdout).toEqual('hello from commands/create.ts (force=true)\n'); + }); +}); diff --git a/packages/@n8n/node-cli/src/commands/create.ts b/packages/@n8n/node-cli/src/commands/create.ts new file mode 100644 index 00000000000..64710cc0778 --- /dev/null +++ b/packages/@n8n/node-cli/src/commands/create.ts @@ -0,0 +1,17 @@ +import { Command, Flags } from '@oclif/core'; + +export default class Create extends Command { + static override description = 'Create a new n8n community node'; + static override examples = ['<%= config.bin %> <%= command.id %>']; + static override flags = { + // flag with no value (-f, --force) + force: Flags.boolean({ char: 'f' }), + }; + + async run(): Promise { + const { flags } = await this.parse(Create); + + const force = flags.force; + this.log(`hello from commands/create.ts (force=${force})`); + } +} diff --git a/packages/@n8n/node-cli/tsconfig.json b/packages/@n8n/node-cli/tsconfig.json new file mode 100644 index 00000000000..1fc9b187008 --- /dev/null +++ b/packages/@n8n/node-cli/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "@n8n/typescript-config/modern/tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src", + "outDir": "dist", + "types": ["vite/client", "vitest/globals"], + "isolatedModules": true + }, + "include": ["src/**/*.ts"] +} diff --git a/packages/@n8n/node-cli/vite.config.ts b/packages/@n8n/node-cli/vite.config.ts new file mode 100644 index 00000000000..90ab02b0779 --- /dev/null +++ b/packages/@n8n/node-cli/vite.config.ts @@ -0,0 +1,4 @@ +import { vitestConfig } from '@n8n/vitest-config/node'; +import { defineConfig, mergeConfig } from 'vitest/config'; + +export default defineConfig({ test: { globals: true, disableConsoleIntercept: true } }); diff --git a/packages/@n8n/nodes-langchain/credentials/VercelAiGatewayApi.credentials.ts b/packages/@n8n/nodes-langchain/credentials/VercelAiGatewayApi.credentials.ts new file mode 100644 index 00000000000..ccd69441bf8 --- /dev/null +++ b/packages/@n8n/nodes-langchain/credentials/VercelAiGatewayApi.credentials.ts @@ -0,0 +1,63 @@ +import type { + IAuthenticateGeneric, + ICredentialTestRequest, + ICredentialType, + INodeProperties, +} from 'n8n-workflow'; + +export class VercelAiGatewayApi implements ICredentialType { + name = 'vercelAiGatewayApi'; + + displayName = 'Vercel AI Gateway'; + + documentationUrl = 'vercelaigateway'; + + properties: INodeProperties[] = [ + { + displayName: 'API Key or OIDC Token', + name: 'apiKey', + type: 'string', + typeOptions: { password: true }, + required: true, + default: '', + description: 'Your credentials for the Vercel AI Gateway', + }, + { + displayName: 'Base URL', + name: 'url', + type: 'string', + required: true, + default: 'https://ai-gateway.vercel.sh/v1', + description: 'The base URL for your Vercel AI Gateway instance', + placeholder: 'https://ai-gateway.vercel.sh/v1', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + Authorization: '=Bearer {{$credentials.apiKey}}', + 'http-referer': 'https://n8n.io/', + 'x-title': 'n8n', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + baseURL: '={{ $credentials.url }}', + url: '/chat/completions', + method: 'POST', + headers: { + 'http-referer': 'https://n8n.io/', + 'x-title': 'n8n', + }, + body: { + model: 'openai/gpt-4.1-nano', + messages: [{ role: 'user', content: 'test' }], + max_tokens: 1, + }, + }, + }; +} diff --git a/packages/@n8n/nodes-langchain/nodes/ModelSelector/ModelSelector.node.ts b/packages/@n8n/nodes-langchain/nodes/ModelSelector/ModelSelector.node.ts index 17d531438d2..69337432466 100644 --- a/packages/@n8n/nodes-langchain/nodes/ModelSelector/ModelSelector.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/ModelSelector/ModelSelector.node.ts @@ -72,6 +72,19 @@ export class ModelSelector implements INodeType { return configuredInputs(parameters) })($parameter) }}`, + codex: { + categories: ['AI'], + subcategories: { + AI: ['Language Models'], + }, + resources: { + primaryDocumentation: [ + { + url: 'https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.modelselector/', + }, + ], + }, + }, outputs: [NodeConnectionTypes.AiLanguageModel], requiredInputs: 1, properties: [ diff --git a/packages/@n8n/nodes-langchain/nodes/agents/Agent/Agent.node.ts b/packages/@n8n/nodes-langchain/nodes/agents/Agent/Agent.node.ts index d1b367dd45b..0f3fa171a12 100644 --- a/packages/@n8n/nodes-langchain/nodes/agents/Agent/Agent.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/agents/Agent/Agent.node.ts @@ -27,8 +27,7 @@ export class Agent extends VersionedNodeType { ], }, }, - // We keep defaultVersion as 2.1 to ensure we publish streaming when everything is ready - defaultVersion: 2.1, + defaultVersion: 2.2, }; const nodeVersions: IVersionedNodeType['nodeVersions'] = { diff --git a/packages/@n8n/nodes-langchain/nodes/agents/Agent/V1/AgentV1.node.ts b/packages/@n8n/nodes-langchain/nodes/agents/Agent/V1/AgentV1.node.ts index 56c5207e4f7..50056509739 100644 --- a/packages/@n8n/nodes-langchain/nodes/agents/Agent/V1/AgentV1.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/agents/Agent/V1/AgentV1.node.ts @@ -99,6 +99,7 @@ function getInputs( '@n8n/n8n-nodes-langchain.lmChatAzureOpenAi', '@n8n/n8n-nodes-langchain.lmChatDeepSeek', '@n8n/n8n-nodes-langchain.lmChatOpenRouter', + '@n8n/n8n-nodes-langchain.lmChatVercelAiGateway', '@n8n/n8n-nodes-langchain.lmChatXAiGrok', '@n8n/n8n-nodes-langchain.modelSelector', ], @@ -131,6 +132,7 @@ function getInputs( '@n8n/n8n-nodes-langchain.lmChatGoogleGemini', '@n8n/n8n-nodes-langchain.lmChatDeepSeek', '@n8n/n8n-nodes-langchain.lmChatOpenRouter', + '@n8n/n8n-nodes-langchain.lmChatVercelAiGateway', '@n8n/n8n-nodes-langchain.lmChatXAiGrok', ], }, diff --git a/packages/@n8n/nodes-langchain/nodes/document_loaders/DocumentGithubLoader/DocumentGithubLoader.node.ts b/packages/@n8n/nodes-langchain/nodes/document_loaders/DocumentGithubLoader/DocumentGithubLoader.node.ts index f12a3392432..a25125df03a 100644 --- a/packages/@n8n/nodes-langchain/nodes/document_loaders/DocumentGithubLoader/DocumentGithubLoader.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/document_loaders/DocumentGithubLoader/DocumentGithubLoader.node.ts @@ -1,6 +1,8 @@ import { GithubRepoLoader } from '@langchain/community/document_loaders/web/github'; import type { TextSplitter } from '@langchain/textsplitters'; import { RecursiveCharacterTextSplitter } from '@langchain/textsplitters'; +import { logWrapper } from '@utils/logWrapper'; +import { getConnectionHintNoticeField } from '@utils/sharedFields'; import { NodeConnectionTypes, type INodeType, @@ -11,9 +13,6 @@ import { type INodeInputConfiguration, } from 'n8n-workflow'; -import { logWrapper } from '@utils/logWrapper'; -import { getConnectionHintNoticeField } from '@utils/sharedFields'; - function getInputs(parameters: IDataObject) { const inputs: INodeInputConfiguration[] = []; diff --git a/packages/@n8n/nodes-langchain/nodes/llms/LmChatAwsBedrock/LmChatAwsBedrock.node.ts b/packages/@n8n/nodes-langchain/nodes/llms/LmChatAwsBedrock/LmChatAwsBedrock.node.ts index e8d764e0c06..903d973d50a 100644 --- a/packages/@n8n/nodes-langchain/nodes/llms/LmChatAwsBedrock/LmChatAwsBedrock.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/llms/LmChatAwsBedrock/LmChatAwsBedrock.node.ts @@ -20,7 +20,7 @@ export class LmChatAwsBedrock implements INodeType { name: 'lmChatAwsBedrock', icon: 'file:bedrock.svg', group: ['transform'], - version: 1, + version: [1, 1.1], description: 'Language Model AWS Bedrock', defaults: { name: 'AWS Bedrock Chat Model', @@ -56,6 +56,31 @@ export class LmChatAwsBedrock implements INodeType { }, properties: [ getConnectionHintNoticeField([NodeConnectionTypes.AiChain, NodeConnectionTypes.AiChain]), + { + displayName: 'Model Source', + name: 'modelSource', + type: 'options', + displayOptions: { + show: { + '@version': [{ _cnd: { gte: 1.1 } }], + }, + }, + options: [ + { + name: 'On-Demand Models', + value: 'onDemand', + description: 'Standard foundation models with on-demand pricing', + }, + { + name: 'Inference Profiles', + value: 'inferenceProfile', + description: + 'Cross-region inference profiles (required for models like Claude Sonnet 4 and others)', + }, + ], + default: 'onDemand', + description: 'Choose between on-demand foundation models or inference profiles', + }, { displayName: 'Model', name: 'model', @@ -63,7 +88,13 @@ export class LmChatAwsBedrock implements INodeType { allowArbitraryValues: true, // Hide issues when model name is specified in the expression and does not match any of the options description: 'The model which will generate the completion. Learn more.', + displayOptions: { + hide: { + modelSource: ['inferenceProfile'], + }, + }, typeOptions: { + loadOptionsDependsOn: ['modelSource'], loadOptions: { routing: { request: { @@ -105,6 +136,62 @@ export class LmChatAwsBedrock implements INodeType { }, default: '', }, + { + displayName: 'Model', + name: 'model', + type: 'options', + allowArbitraryValues: true, + description: + 'The inference profile which will generate the completion. Learn more.', + displayOptions: { + show: { + modelSource: ['inferenceProfile'], + }, + }, + typeOptions: { + loadOptionsDependsOn: ['modelSource'], + loadOptions: { + routing: { + request: { + method: 'GET', + url: '/inference-profiles?maxResults=1000', + }, + output: { + postReceive: [ + { + type: 'rootProperty', + properties: { + property: 'inferenceProfileSummaries', + }, + }, + { + type: 'setKeyValue', + properties: { + name: '={{$responseItem.inferenceProfileName}}', + description: + '={{$responseItem.description || $responseItem.inferenceProfileArn}}', + value: '={{$responseItem.inferenceProfileId}}', + }, + }, + { + type: 'sort', + properties: { + key: 'name', + }, + }, + ], + }, + }, + }, + }, + routing: { + send: { + type: 'body', + property: 'model', + }, + }, + default: '', + }, { displayName: 'Options', name: 'options', diff --git a/packages/@n8n/nodes-langchain/nodes/llms/LmChatVercelAiGateway/LmChatVercelAiGateway.node.ts b/packages/@n8n/nodes-langchain/nodes/llms/LmChatVercelAiGateway/LmChatVercelAiGateway.node.ts new file mode 100644 index 00000000000..ac56905f012 --- /dev/null +++ b/packages/@n8n/nodes-langchain/nodes/llms/LmChatVercelAiGateway/LmChatVercelAiGateway.node.ts @@ -0,0 +1,254 @@ +import { ChatOpenAI, type ClientOptions } from '@langchain/openai'; +import { + NodeConnectionTypes, + type INodeType, + type INodeTypeDescription, + type ISupplyDataFunctions, + type SupplyData, +} from 'n8n-workflow'; + +import { getProxyAgent } from '@utils/httpProxyAgent'; +import { getConnectionHintNoticeField } from '@utils/sharedFields'; + +import type { OpenAICompatibleCredential } from '../../../types/types'; +import { openAiFailedAttemptHandler } from '../../vendors/OpenAi/helpers/error-handling'; +import { makeN8nLlmFailedAttemptHandler } from '../n8nLlmFailedAttemptHandler'; +import { N8nLlmTracing } from '../N8nLlmTracing'; + +export class LmChatVercelAiGateway implements INodeType { + description: INodeTypeDescription = { + displayName: 'Vercel AI Gateway Chat Model', + name: 'lmChatVercelAiGateway', + icon: { light: 'file:vercel.dark.svg', dark: 'file:vercel.svg' }, + group: ['transform'], + version: [1], + description: 'For advanced usage with an AI chain via Vercel AI Gateway', + defaults: { + name: 'Vercel AI Gateway Chat Model', + }, + codex: { + categories: ['AI'], + subcategories: { + AI: ['Language Models', 'Root Nodes'], + 'Language Models': ['Chat Models (Recommended)'], + }, + resources: { + primaryDocumentation: [ + { + url: 'https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatvercel/', + }, + ], + }, + }, + + inputs: [], + + outputs: [NodeConnectionTypes.AiLanguageModel], + outputNames: ['Model'], + credentials: [ + { + name: 'vercelAiGatewayApi', + required: true, + }, + ], + requestDefaults: { + ignoreHttpStatusErrors: true, + baseURL: '={{ $credentials?.url }}', + }, + properties: [ + getConnectionHintNoticeField([NodeConnectionTypes.AiChain, NodeConnectionTypes.AiAgent]), + { + displayName: + 'If using JSON response format, you must include word "json" in the prompt in your chain or agent. Also, make sure to select latest models released post November 2023.', + name: 'notice', + type: 'notice', + default: '', + displayOptions: { + show: { + '/options.responseFormat': ['json_object'], + }, + }, + }, + { + displayName: 'Model', + name: 'model', + type: 'options', + description: 'The model which will generate the completion', + typeOptions: { + loadOptions: { + routing: { + request: { + method: 'GET', + url: '/models', + }, + output: { + postReceive: [ + { + type: 'rootProperty', + properties: { + property: 'data', + }, + }, + { + type: 'setKeyValue', + properties: { + name: '={{$responseItem.id}}', + value: '={{$responseItem.id}}', + }, + }, + { + type: 'sort', + properties: { + key: 'name', + }, + }, + ], + }, + }, + }, + }, + routing: { + send: { + type: 'body', + property: 'model', + }, + }, + default: 'openai/gpt-4o', + }, + { + displayName: 'Options', + name: 'options', + placeholder: 'Add Option', + description: 'Additional options to add', + type: 'collection', + default: {}, + options: [ + { + displayName: 'Frequency Penalty', + name: 'frequencyPenalty', + default: 0, + typeOptions: { maxValue: 2, minValue: -2, numberPrecision: 1 }, + description: + "Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim", + type: 'number', + }, + { + displayName: 'Maximum Number of Tokens', + name: 'maxTokens', + default: -1, + description: + 'The maximum number of tokens to generate in the completion. Most models have a context length of 2048 tokens (except for the newest models, which support 32,768).', + type: 'number', + typeOptions: { + maxValue: 32768, + }, + }, + { + displayName: 'Response Format', + name: 'responseFormat', + default: 'text', + type: 'options', + options: [ + { + name: 'Text', + value: 'text', + description: 'Regular text response', + }, + { + name: 'JSON', + value: 'json_object', + description: + 'Enables JSON mode, which should guarantee the message the model generates is valid JSON', + }, + ], + }, + { + displayName: 'Presence Penalty', + name: 'presencePenalty', + default: 0, + typeOptions: { maxValue: 2, minValue: -2, numberPrecision: 1 }, + description: + "Positive values penalize new tokens based on whether they appear in the text so far, increasing the model's likelihood to talk about new topics", + type: 'number', + }, + { + displayName: 'Sampling Temperature', + name: 'temperature', + default: 0.7, + typeOptions: { maxValue: 2, minValue: 0, numberPrecision: 1 }, + description: + 'Controls randomness: Lowering results in less random completions. As the temperature approaches zero, the model will become deterministic and repetitive.', + type: 'number', + }, + { + displayName: 'Timeout', + name: 'timeout', + default: 360000, + description: 'Maximum amount of time a request is allowed to take in milliseconds', + type: 'number', + }, + { + displayName: 'Max Retries', + name: 'maxRetries', + default: 2, + description: 'Maximum number of retries to attempt', + type: 'number', + }, + { + displayName: 'Top P', + name: 'topP', + default: 1, + typeOptions: { maxValue: 1, minValue: 0, numberPrecision: 1 }, + description: + 'Controls diversity via nucleus sampling: 0.5 means half of all likelihood-weighted options are considered. We generally recommend altering this or temperature but not both.', + type: 'number', + }, + ], + }, + ], + }; + + async supplyData(this: ISupplyDataFunctions, itemIndex: number): Promise { + const credentials = await this.getCredentials('vercelAiGatewayApi'); + + const modelName = this.getNodeParameter('model', itemIndex) as string; + + const options = this.getNodeParameter('options', itemIndex, {}) as { + frequencyPenalty?: number; + maxTokens?: number; + maxRetries: number; + timeout: number; + presencePenalty?: number; + temperature?: number; + topP?: number; + responseFormat?: 'text' | 'json_object'; + }; + + const configuration: ClientOptions = { + baseURL: credentials.url, + fetchOptions: { + dispatcher: getProxyAgent(credentials.url), + }, + }; + + const model = new ChatOpenAI({ + openAIApiKey: credentials.apiKey, + model: modelName, + ...options, + timeout: options.timeout ?? 60000, + maxRetries: options.maxRetries ?? 2, + configuration, + callbacks: [new N8nLlmTracing(this)], + modelKwargs: options.responseFormat + ? { + response_format: { type: options.responseFormat }, + } + : undefined, + onFailedAttempt: makeN8nLlmFailedAttemptHandler(this, openAiFailedAttemptHandler), + }); + + return { + response: model, + }; + } +} diff --git a/packages/@n8n/nodes-langchain/nodes/llms/LmChatVercelAiGateway/vercel.dark.svg b/packages/@n8n/nodes-langchain/nodes/llms/LmChatVercelAiGateway/vercel.dark.svg new file mode 100644 index 00000000000..32d84309213 --- /dev/null +++ b/packages/@n8n/nodes-langchain/nodes/llms/LmChatVercelAiGateway/vercel.dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/@n8n/nodes-langchain/nodes/llms/LmChatVercelAiGateway/vercel.svg b/packages/@n8n/nodes-langchain/nodes/llms/LmChatVercelAiGateway/vercel.svg new file mode 100644 index 00000000000..5326cd3bc77 --- /dev/null +++ b/packages/@n8n/nodes-langchain/nodes/llms/LmChatVercelAiGateway/vercel.svg @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/packages/@n8n/nodes-langchain/nodes/mcp/McpClientTool/McpClientTool.node.test.ts b/packages/@n8n/nodes-langchain/nodes/mcp/McpClientTool/McpClientTool.node.test.ts index 846e1634d87..67d6660982b 100644 --- a/packages/@n8n/nodes-langchain/nodes/mcp/McpClientTool/McpClientTool.node.test.ts +++ b/packages/@n8n/nodes-langchain/nodes/mcp/McpClientTool/McpClientTool.node.test.ts @@ -2,6 +2,7 @@ import { Client } from '@modelcontextprotocol/sdk/client/index.js'; import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js'; import { mock } from 'jest-mock-extended'; import { + NodeConnectionTypes, NodeOperationError, type ILoadOptionsFunctions, type INode, @@ -284,5 +285,78 @@ describe('McpClientTool', () => { headers: { Accept: 'text/event-stream', Authorization: 'Bearer my-token' }, }); }); + + it('should successfully execute a tool', async () => { + jest.spyOn(Client.prototype, 'connect').mockResolvedValue(); + jest.spyOn(Client.prototype, 'callTool').mockResolvedValue({ content: 'Sunny' }); + jest.spyOn(Client.prototype, 'listTools').mockResolvedValue({ + tools: [ + { + name: 'Weather Tool', + description: 'Gets the current weather', + inputSchema: { type: 'object', properties: { location: { type: 'string' } } }, + }, + ], + }); + + const supplyDataResult = await new McpClientTool().supplyData.call( + mock({ + getNode: jest.fn(() => + mock({ + typeVersion: 1, + }), + ), + logger: { debug: jest.fn(), error: jest.fn() }, + addInputData: jest.fn(() => ({ index: 0 })), + }), + 0, + ); + + expect(supplyDataResult.closeFunction).toBeInstanceOf(Function); + expect(supplyDataResult.response).toBeInstanceOf(McpToolkit); + + const tools = (supplyDataResult.response as McpToolkit).getTools(); + const toolResult = await tools[0].invoke({ location: 'Berlin' }); + expect(toolResult).toEqual('Sunny'); + }); + + it('should handle tool errors', async () => { + jest.spyOn(Client.prototype, 'connect').mockResolvedValue(); + jest + .spyOn(Client.prototype, 'callTool') + .mockResolvedValue({ isError: true, content: [{ text: 'Weather unknown at location' }] }); + jest.spyOn(Client.prototype, 'listTools').mockResolvedValue({ + tools: [ + { + name: 'Weather Tool', + description: 'Gets the current weather', + inputSchema: { type: 'object', properties: { location: { type: 'string' } } }, + }, + ], + }); + + const supplyDataFunctions = mock({ + getNode: jest.fn(() => + mock({ + typeVersion: 1, + }), + ), + logger: { debug: jest.fn(), error: jest.fn() }, + addInputData: jest.fn(() => ({ index: 0 })), + }); + const supplyDataResult = await new McpClientTool().supplyData.call(supplyDataFunctions, 0); + + expect(supplyDataResult.closeFunction).toBeInstanceOf(Function); + expect(supplyDataResult.response).toBeInstanceOf(McpToolkit); + + const tools = (supplyDataResult.response as McpToolkit).getTools(); + const toolResult = await tools[0].invoke({ location: 'Berlin' }); + expect(toolResult).toEqual('Weather unknown at location'); + expect(supplyDataFunctions.addOutputData).toHaveBeenCalledWith( + NodeConnectionTypes.AiTool, + 0, + new NodeOperationError(supplyDataFunctions.getNode(), 'Weather unknown at location'), + ); + }); }); }); diff --git a/packages/@n8n/nodes-langchain/nodes/mcp/McpClientTool/McpClientTool.node.ts b/packages/@n8n/nodes-langchain/nodes/mcp/McpClientTool/McpClientTool.node.ts index 53dd4f90430..dbd5113c688 100644 --- a/packages/@n8n/nodes-langchain/nodes/mcp/McpClientTool/McpClientTool.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/mcp/McpClientTool/McpClientTool.node.ts @@ -1,3 +1,5 @@ +import { logWrapper } from '@utils/logWrapper'; +import { getConnectionHintNoticeField } from '@utils/sharedFields'; import { NodeConnectionTypes, NodeOperationError, @@ -7,9 +9,6 @@ import { type SupplyData, } from 'n8n-workflow'; -import { logWrapper } from '@utils/logWrapper'; -import { getConnectionHintNoticeField } from '@utils/sharedFields'; - import { getTools } from './loadOptions'; import type { McpServerTransport, McpAuthenticationOption, McpToolIncludeMode } from './types'; import { @@ -294,11 +293,10 @@ export class McpClientTool implements INodeType { logWrapper( mcpToolToDynamicTool( tool, - createCallTool(tool.name, client.result, (error) => { + createCallTool(tool.name, client.result, (errorMessage) => { + const error = new NodeOperationError(node, errorMessage, { itemIndex }); + void this.addOutputData(NodeConnectionTypes.AiTool, itemIndex, error); this.logger.error(`McpClientTool: Tool "${tool.name}" failed to execute`, { error }); - throw new NodeOperationError(node, `Failed to execute tool "${tool.name}"`, { - description: error, - }); }), ), this, diff --git a/packages/@n8n/nodes-langchain/nodes/mcp/McpClientTool/utils.ts b/packages/@n8n/nodes-langchain/nodes/mcp/McpClientTool/utils.ts index 140924acb3d..06cbe8ceb0c 100644 --- a/packages/@n8n/nodes-langchain/nodes/mcp/McpClientTool/utils.ts +++ b/packages/@n8n/nodes-langchain/nodes/mcp/McpClientTool/utils.ts @@ -3,6 +3,7 @@ import { Client } from '@modelcontextprotocol/sdk/client/index.js'; import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js'; import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js'; import { CompatibilityCallToolResultSchema } from '@modelcontextprotocol/sdk/types.js'; +import { convertJsonSchemaToZod } from '@utils/schemaParsing'; import { Toolkit } from 'langchain/agents'; import { createResultError, @@ -13,12 +14,10 @@ import { } from 'n8n-workflow'; import { z } from 'zod'; -import { convertJsonSchemaToZod } from '@utils/schemaParsing'; - import type { McpAuthenticationOption, - McpTool, McpServerTransport, + McpTool, McpToolIncludeMode, } from './types'; @@ -78,17 +77,24 @@ export const getErrorDescriptionFromToolCall = (result: unknown): string | undef }; export const createCallTool = - (name: string, client: Client, onError: (error: string | undefined) => void) => - async (args: IDataObject) => { + (name: string, client: Client, onError: (error: string) => void) => async (args: IDataObject) => { let result: Awaited>; + + function handleError(error: unknown) { + const errorDescription = + getErrorDescriptionFromToolCall(error) ?? `Failed to execute tool "${name}"`; + onError(errorDescription); + return errorDescription; + } + try { result = await client.callTool({ name, arguments: args }, CompatibilityCallToolResultSchema); } catch (error) { - return onError(getErrorDescriptionFromToolCall(error)); + return handleError(error); } if (result.isError) { - return onError(getErrorDescriptionFromToolCall(result)); + return handleError(result); } if (result.toolResult !== undefined) { @@ -105,7 +111,7 @@ export const createCallTool = export function mcpToolToDynamicTool( tool: McpTool, onCallTool: DynamicStructuredToolInput['func'], -): DynamicStructuredTool> { +): DynamicStructuredTool { const rawSchema = convertJsonSchemaToZod(tool.inputSchema); // Ensure we always have an object schema for structured tools @@ -122,7 +128,7 @@ export function mcpToolToDynamicTool( } export class McpToolkit extends Toolkit { - constructor(public tools: Array>>) { + constructor(public tools: DynamicStructuredTool[]) { super(); } } diff --git a/packages/@n8n/nodes-langchain/nodes/output_parser/OutputParserStructured/test/OutputParserStructured.node.test.ts b/packages/@n8n/nodes-langchain/nodes/output_parser/OutputParserStructured/test/OutputParserStructured.node.test.ts index b0dca4905a6..fb1c9f14a14 100644 --- a/packages/@n8n/nodes-langchain/nodes/output_parser/OutputParserStructured/test/OutputParserStructured.node.test.ts +++ b/packages/@n8n/nodes-langchain/nodes/output_parser/OutputParserStructured/test/OutputParserStructured.node.test.ts @@ -608,6 +608,33 @@ describe('OutputParserStructured', () => { ), ).rejects.toThrow('Required'); }); + + it('should raise schema fit error when passing in empty object', async () => { + const jsonExample = `{ + "user": { + "name": "Alice", + "email": "alice@example.com", + "profile": { + "age": 30, + "city": "New York" + } + }, + "tags": ["work", "important"] + }`; + thisArg.getNodeParameter.calledWith('schemaType', 0).mockReturnValueOnce('fromJson'); + thisArg.getNodeParameter + .calledWith('jsonSchemaExample', 0) + .mockReturnValueOnce(jsonExample); + + const { response } = (await outputParser.supplyData.call(thisArg, 0)) as { + response: N8nStructuredOutputParser; + }; + + // @ts-expect-error 2345 + await expect(response.parse({})).rejects.toThrow( + "Model output doesn't fit required format", + ); + }); }); describe('manual schema mode', () => { diff --git a/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/Chat.node.ts b/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/Chat.node.ts new file mode 100644 index 00000000000..042211ab898 --- /dev/null +++ b/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/Chat.node.ts @@ -0,0 +1,273 @@ +/* eslint-disable n8n-nodes-base/node-dirname-against-convention */ +import type { BaseChatMemory } from 'langchain/memory'; +import { + CHAT_TRIGGER_NODE_TYPE, + CHAT_WAIT_USER_REPLY, + NodeConnectionTypes, + NodeOperationError, +} from 'n8n-workflow'; +import type { + IExecuteFunctions, + INodeExecutionData, + INodeTypeDescription, + INodeType, + INodeProperties, +} from 'n8n-workflow'; + +import { configureInputs, configureWaitTillDate } from './util'; + +const limitWaitTimeProperties: INodeProperties[] = [ + { + displayName: 'Limit Type', + name: 'limitType', + type: 'options', + default: 'afterTimeInterval', + description: + 'Sets the condition for the execution to resume. Can be a specified date or after some time.', + options: [ + { + name: 'After Time Interval', + description: 'Waits for a certain amount of time', + value: 'afterTimeInterval', + }, + { + name: 'At Specified Time', + description: 'Waits until the set date and time to continue', + value: 'atSpecifiedTime', + }, + ], + }, + { + displayName: 'Amount', + name: 'resumeAmount', + type: 'number', + displayOptions: { + show: { + limitType: ['afterTimeInterval'], + }, + }, + typeOptions: { + minValue: 0, + numberPrecision: 2, + }, + default: 1, + description: 'The time to wait', + }, + { + displayName: 'Unit', + name: 'resumeUnit', + type: 'options', + displayOptions: { + show: { + limitType: ['afterTimeInterval'], + }, + }, + options: [ + { + name: 'Minutes', + value: 'minutes', + }, + { + name: 'Hours', + value: 'hours', + }, + { + name: 'Days', + value: 'days', + }, + ], + default: 'hours', + description: 'Unit of the interval value', + }, + { + displayName: 'Max Date and Time', + name: 'maxDateAndTime', + type: 'dateTime', + displayOptions: { + show: { + limitType: ['atSpecifiedTime'], + }, + }, + default: '', + description: 'Continue execution after the specified date and time', + }, +]; + +const limitWaitTimeOption: INodeProperties = { + displayName: 'Limit Wait Time', + name: 'limitWaitTime', + type: 'fixedCollection', + description: + 'Whether to limit the time this node should wait for a user response before execution resumes', + default: { values: { limitType: 'afterTimeInterval', resumeAmount: 45, resumeUnit: 'minutes' } }, + options: [ + { + displayName: 'Values', + name: 'values', + values: limitWaitTimeProperties, + }, + ], + displayOptions: { + show: { + [`/${CHAT_WAIT_USER_REPLY}`]: [true], + }, + }, +}; + +export class Chat implements INodeType { + description: INodeTypeDescription = { + displayName: 'Respond to Chat', + name: 'chat', + icon: 'fa:comments', + iconColor: 'black', + group: ['input'], + version: 1, + description: 'Send a message to a chat', + defaults: { + name: 'Respond to Chat', + }, + codex: { + categories: ['Core Nodes', 'HITL'], + subcategories: { + HITL: ['Human in the Loop'], + }, + alias: ['human', 'wait', 'hitl'], + resources: { + primaryDocumentation: [ + { + url: 'https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-langchain.chat/', + }, + ], + }, + }, + inputs: `={{ (${configureInputs})($parameter) }}`, + outputs: [NodeConnectionTypes.Main], + properties: [ + { + displayName: + "Verify you're using a chat trigger with the 'Response Mode' option set to 'Using Response Nodes'", + name: 'generalNotice', + type: 'notice', + default: '', + }, + { + displayName: 'Message', + name: 'message', + type: 'string', + default: '', + required: true, + typeOptions: { + rows: 6, + }, + }, + { + displayName: 'Wait for User Reply', + name: CHAT_WAIT_USER_REPLY, + type: 'boolean', + default: true, + }, + { + displayName: 'Options', + name: 'options', + type: 'collection', + placeholder: 'Add Option', + default: {}, + options: [ + { + displayName: 'Add Memory Input Connection', + name: 'memoryConnection', + type: 'boolean', + default: false, + }, + limitWaitTimeOption, + ], + }, + ], + }; + + async onMessage( + context: IExecuteFunctions, + data: INodeExecutionData, + ): Promise { + const options = context.getNodeParameter('options', 0, {}) as { + memoryConnection?: boolean; + }; + + const waitForReply = context.getNodeParameter(CHAT_WAIT_USER_REPLY, 0, true) as boolean; + + if (!waitForReply) { + const inputData = context.getInputData(); + return [inputData]; + } + + if (options.memoryConnection) { + const memory = (await context.getInputConnectionData(NodeConnectionTypes.AiMemory, 0)) as + | BaseChatMemory + | undefined; + + const message = data.json?.chatInput; + + if (memory && message) { + await memory.chatHistory.addUserMessage(message as string); + } + } + + return [[data]]; + } + + async execute(this: IExecuteFunctions): Promise { + const connectedNodes = this.getParentNodes(this.getNode().name, { + includeNodeParameters: true, + }); + + const chatTrigger = connectedNodes.find( + (node) => node.type === CHAT_TRIGGER_NODE_TYPE && !node.disabled, + ); + + if (!chatTrigger) { + throw new NodeOperationError( + this.getNode(), + 'Workflow must be started from a chat trigger node', + ); + } + + const parameters = chatTrigger.parameters as { + mode?: 'hostedChat' | 'webhook'; + options: { responseMode: 'lastNode' | 'responseNodes' | 'streaming' | 'responseNode' }; + }; + + if (parameters.mode === 'webhook') { + throw new NodeOperationError( + this.getNode(), + '"Embeded chat" is not supported, change the "Mode" in the chat trigger node to the "Hosted Chat"', + ); + } + + if (parameters.options.responseMode !== 'responseNodes') { + throw new NodeOperationError( + this.getNode(), + '"Response Mode" in the chat trigger node must be set to "Respond Nodes"', + ); + } + + const message = (this.getNodeParameter('message', 0) as string) ?? ''; + const options = this.getNodeParameter('options', 0, {}) as { + memoryConnection?: boolean; + }; + + if (options.memoryConnection) { + const memory = (await this.getInputConnectionData(NodeConnectionTypes.AiMemory, 0)) as + | BaseChatMemory + | undefined; + + if (memory) { + await memory.chatHistory.addAIChatMessage(message); + } + } + + const waitTill = configureWaitTillDate(this); + + await this.putExecutionToWait(waitTill); + return [[{ json: {}, sendMessage: message }]]; + } +} diff --git a/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/ChatTrigger.node.ts b/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/ChatTrigger.node.ts index a1c36f8db73..1ead017151f 100644 --- a/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/ChatTrigger.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/ChatTrigger.node.ts @@ -35,27 +35,30 @@ const allowedFileMimeTypeOption: INodeProperties = { 'Allowed file types for upload. Comma-separated list of MIME types.', }; -const responseModeOptions = [ - { - name: 'When Last Node Finishes', - value: 'lastNode', - description: 'Returns data of the last-executed node', - }, - { - name: "Using 'Respond to Webhook' Node", - value: 'responseNode', - description: 'Response defined in that node', - }, -]; +const respondToWebhookResponseMode = { + name: "Using 'Respond to Webhook' Node", + value: 'responseNode', + description: 'Response defined in that node', +}; -const responseModeWithStreamingOptions = [ - ...responseModeOptions, - { - name: 'Streaming Response', - value: 'streaming', - description: 'Streaming response from specified nodes (e.g. Agents)', - }, -]; +const lastNodeResponseMode = { + name: 'When Last Node Finishes', + value: 'lastNode', + description: 'Returns data of the last-executed node', +}; + +const streamingResponseMode = { + name: 'Streaming', + value: 'streaming', + description: 'Streaming response from specified nodes (e.g. Agents)', +}; + +const respondNodesResponseMode = { + name: 'Using Response Nodes', + value: 'responseNodes', + description: + "Send responses to the chat by using 'Respond to Chat' or 'Respond to Webhook' nodes", +}; const commonOptionsFields: INodeProperties[] = [ // CORS parameters are only valid for when chat is used in hosted or webhook mode @@ -209,9 +212,8 @@ export class ChatTrigger extends Node { icon: 'fa:comments', iconColor: 'black', group: ['trigger'], - version: [1, 1.1, 1.2], - // Keep the default version as 1.1 to avoid releasing streaming in broken state - defaultVersion: 1.1, + version: [1, 1.1, 1.2, 1.3], + defaultVersion: 1.3, description: 'Runs the workflow when an n8n generated webchat is submitted', defaults: { name: 'When chat message received', @@ -390,7 +392,7 @@ export class ChatTrigger extends Node { displayOptions: { show: { public: [false], - '@version': [{ _cnd: { gte: 1.1 } }], + '@version': [1, 1.1], }, }, placeholder: 'Add Field', @@ -417,13 +419,13 @@ export class ChatTrigger extends Node { displayName: 'Response Mode', name: 'responseMode', type: 'options', - options: responseModeOptions, + options: [lastNodeResponseMode, respondToWebhookResponseMode], default: 'lastNode', description: 'When and how to respond to the webhook', }, ], }, - // Options for version 1.2+ (with streaming) + // Options for version 1.2 (with streaming) { displayName: 'Options', name: 'options', @@ -432,7 +434,7 @@ export class ChatTrigger extends Node { show: { mode: ['hostedChat', 'webhook'], public: [true], - '@version': [{ _cnd: { gte: 1.2 } }], + '@version': [1.2], }, }, placeholder: 'Add Field', @@ -443,12 +445,72 @@ export class ChatTrigger extends Node { displayName: 'Response Mode', name: 'responseMode', type: 'options', - options: responseModeWithStreamingOptions, + options: [lastNodeResponseMode, respondToWebhookResponseMode, streamingResponseMode], default: 'lastNode', description: 'When and how to respond to the webhook', }, ], }, + { + displayName: 'Options', + name: 'options', + type: 'collection', + displayOptions: { + show: { + public: [false], + '@version': [{ _cnd: { gte: 1.3 } }], + }, + }, + placeholder: 'Add Field', + default: {}, + options: [ + allowFileUploadsOption, + allowedFileMimeTypeOption, + { + displayName: 'Response Mode', + name: 'responseMode', + type: 'options', + options: [lastNodeResponseMode, respondNodesResponseMode], + default: 'lastNode', + description: 'When and how to respond to the chat', + }, + ], + }, + { + displayName: 'Options', + name: 'options', + type: 'collection', + displayOptions: { + show: { + mode: ['hostedChat', 'webhook'], + public: [true], + '@version': [{ _cnd: { gte: 1.3 } }], + }, + }, + placeholder: 'Add Field', + default: {}, + options: [ + ...commonOptionsFields, + { + displayName: 'Response Mode', + name: 'responseMode', + type: 'options', + options: [lastNodeResponseMode, streamingResponseMode, respondToWebhookResponseMode], + default: 'lastNode', + description: 'When and how to respond to the chat', + displayOptions: { show: { '/mode': ['webhook'] } }, + }, + { + displayName: 'Response Mode', + name: 'responseMode', + type: 'options', + options: [lastNodeResponseMode, streamingResponseMode, respondNodesResponseMode], + default: 'lastNode', + description: 'When and how to respond to the webhook', + displayOptions: { show: { '/mode': ['hostedChat'] } }, + }, + ], + }, ], }; @@ -536,10 +598,10 @@ export class ChatTrigger extends Node { allowFileUploads?: boolean; allowedFilesMimeTypes?: string; customCss?: string; + responseMode?: string; }; - const responseMode = ctx.getNodeParameter('options.responseMode', 'lastNode') as string; - const enableStreaming = responseMode === 'streaming'; + const enableStreaming = options.responseMode === 'streaming'; const req = ctx.getRequestObject(); const webhookName = ctx.getWebhookName(); diff --git a/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/__test__/Chat.node.test.ts b/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/__test__/Chat.node.test.ts new file mode 100644 index 00000000000..dc47838eb1a --- /dev/null +++ b/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/__test__/Chat.node.test.ts @@ -0,0 +1,143 @@ +import type { MockProxy } from 'jest-mock-extended'; +import { mock } from 'jest-mock-extended'; +import type { INode, IExecuteFunctions } from 'n8n-workflow'; +import { CHAT_TRIGGER_NODE_TYPE } from 'n8n-workflow'; + +import { Chat } from '../Chat.node'; + +describe('Test Chat Node', () => { + let chat: Chat; + let mockExecuteFunctions: MockProxy; + + const chatNode = mock({ + name: 'Chat', + type: CHAT_TRIGGER_NODE_TYPE, + parameters: {}, + }); + + beforeEach(() => { + chat = new Chat(); + mockExecuteFunctions = mock(); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + it('should execute and send message', async () => { + const items = [{ json: { data: 'test' } }]; + mockExecuteFunctions.getInputData.mockReturnValue(items); + mockExecuteFunctions.getNodeParameter.mockReturnValueOnce('message'); + mockExecuteFunctions.getNodeParameter.mockReturnValueOnce(false); + mockExecuteFunctions.getNodeParameter.mockReturnValueOnce({ + limitType: 'afterTimeInterval', + resumeAmount: 1, + resumeUnit: 'minutes', + }); + mockExecuteFunctions.getNode.mockReturnValue(chatNode); + mockExecuteFunctions.getParentNodes.mockReturnValue([ + { + type: CHAT_TRIGGER_NODE_TYPE, + disabled: false, + parameters: { mode: 'hostedChat', options: { responseMode: 'responseNodes' } }, + } as any, + ]); + + const result = await chat.execute.call(mockExecuteFunctions); + + expect(result).toEqual([[{ json: {}, sendMessage: 'message' }]]); + }); + + it('should execute and handle memory connection', async () => { + const items = [{ json: { data: 'test' } }]; + mockExecuteFunctions.getInputData.mockReturnValue(items); + mockExecuteFunctions.getNodeParameter.mockReturnValueOnce('message'); + mockExecuteFunctions.getNodeParameter.mockReturnValueOnce({ memoryConnection: true }); + mockExecuteFunctions.getNodeParameter.mockReturnValueOnce({ + limitType: 'afterTimeInterval', + resumeAmount: 1, + resumeUnit: 'minutes', + }); + mockExecuteFunctions.getNode.mockReturnValue(chatNode); + mockExecuteFunctions.getParentNodes.mockReturnValue([ + { + type: CHAT_TRIGGER_NODE_TYPE, + disabled: false, + parameters: { mode: 'hostedChat', options: { responseMode: 'responseNodes' } }, + } as any, + ]); + + const memory = { chatHistory: { addAIChatMessage: jest.fn() } }; + mockExecuteFunctions.getInputConnectionData.mockResolvedValueOnce(memory); + + await chat.execute.call(mockExecuteFunctions); + + expect(memory.chatHistory.addAIChatMessage).toHaveBeenCalledWith('message'); + }); + + it('should execute without memory connection', async () => { + const items = [{ json: { data: 'test' } }]; + mockExecuteFunctions.getInputData.mockReturnValue(items); + mockExecuteFunctions.getNodeParameter.mockReturnValueOnce('message'); + mockExecuteFunctions.getNodeParameter.mockReturnValueOnce(false); + mockExecuteFunctions.getNodeParameter.mockReturnValueOnce({ + limitType: 'afterTimeInterval', + resumeAmount: 1, + resumeUnit: 'minutes', + }); + mockExecuteFunctions.getNode.mockReturnValue(chatNode); + mockExecuteFunctions.getParentNodes.mockReturnValue([ + { + type: CHAT_TRIGGER_NODE_TYPE, + disabled: false, + parameters: { mode: 'hostedChat', options: { responseMode: 'responseNodes' } }, + } as any, + ]); + + const result = await chat.execute.call(mockExecuteFunctions); + + expect(result).toEqual([[{ json: {}, sendMessage: 'message' }]]); + }); + + it('should execute with specified time limit', async () => { + const items = [{ json: { data: 'test' } }]; + mockExecuteFunctions.getInputData.mockReturnValue(items); + mockExecuteFunctions.getNodeParameter.mockReturnValueOnce('message'); + mockExecuteFunctions.getNodeParameter.mockReturnValueOnce(false); + mockExecuteFunctions.getNodeParameter.mockReturnValueOnce({ + limitType: 'atSpecifiedTime', + maxDateAndTime: new Date().toISOString(), + }); + mockExecuteFunctions.getNode.mockReturnValue(chatNode); + mockExecuteFunctions.getParentNodes.mockReturnValue([ + { + type: CHAT_TRIGGER_NODE_TYPE, + disabled: false, + parameters: { mode: 'hostedChat', options: { responseMode: 'responseNodes' } }, + } as any, + ]); + + const result = await chat.execute.call(mockExecuteFunctions); + + expect(result).toEqual([[{ json: {}, sendMessage: 'message' }]]); + }); + + it('should process onMessage without waiting for reply', async () => { + const data = { json: { chatInput: 'user message' } }; + mockExecuteFunctions.getNodeParameter.mockReturnValueOnce({ memoryConnection: true }); + mockExecuteFunctions.getNodeParameter.mockReturnValueOnce(false); + mockExecuteFunctions.getInputData.mockReturnValue([data]); + mockExecuteFunctions.getNode.mockReturnValue(chatNode); + mockExecuteFunctions.getParentNodes.mockReturnValue([ + { + type: CHAT_TRIGGER_NODE_TYPE, + disabled: false, + parameters: { mode: 'hostedChat', options: { responseMode: 'responseNodes' } }, + } as any, + ]); + + const result = await chat.onMessage(mockExecuteFunctions, data); + + expect(result).toEqual([[data]]); + }); +}); diff --git a/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/__test__/ChatTrigger.node.test.ts b/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/__test__/ChatTrigger.node.test.ts index 1dd55ff0b5b..a9480c7fa91 100644 --- a/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/__test__/ChatTrigger.node.test.ts +++ b/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/__test__/ChatTrigger.node.test.ts @@ -150,8 +150,7 @@ describe('ChatTrigger Node', () => { ): boolean | string | object | undefined => { if (paramName === 'public') return true; if (paramName === 'mode') return 'hostedChat'; - if (paramName === 'options') return {}; - if (paramName === 'options.responseMode') return 'streaming'; + if (paramName === 'options') return { responseMode: 'streaming' }; return defaultValue; }, ); @@ -184,8 +183,7 @@ describe('ChatTrigger Node', () => { ): boolean | string | object | undefined => { if (paramName === 'public') return true; if (paramName === 'mode') return 'hostedChat'; - if (paramName === 'options') return {}; - if (paramName === 'options.responseMode') return 'lastNode'; + if (paramName === 'options') return { responseMode: 'lastNode' }; return defaultValue; }, ); @@ -220,8 +218,7 @@ describe('ChatTrigger Node', () => { ): boolean | string | object | undefined => { if (paramName === 'public') return true; if (paramName === 'mode') return 'hostedChat'; - if (paramName === 'options') return {}; - if (paramName === 'options.responseMode') return 'streaming'; + if (paramName === 'options') return { responseMode: 'streaming' }; return defaultValue; }, ); diff --git a/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/error.ts b/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/error.ts index 3c17243ca63..30aa62be463 100644 --- a/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/error.ts +++ b/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/error.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; export class ChatTriggerAuthorizationError extends ApplicationError { constructor( diff --git a/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/util.ts b/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/util.ts new file mode 100644 index 00000000000..49fdc36eaab --- /dev/null +++ b/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/util.ts @@ -0,0 +1,67 @@ +import { NodeOperationError, UserError, WAIT_INDEFINITELY } from 'n8n-workflow'; +import type { IExecuteFunctions } from 'n8n-workflow'; + +export function configureWaitTillDate(context: IExecuteFunctions) { + let waitTill = WAIT_INDEFINITELY; + + const limitOptions = context.getNodeParameter('options.limitWaitTime.values', 0, {}) as { + limitType?: string; + resumeAmount?: number; + resumeUnit?: string; + maxDateAndTime?: string; + }; + + if (Object.keys(limitOptions).length) { + try { + if (limitOptions.limitType === 'afterTimeInterval') { + let waitAmount = limitOptions.resumeAmount as number; + + if (limitOptions.resumeUnit === 'minutes') { + waitAmount *= 60; + } + if (limitOptions.resumeUnit === 'hours') { + waitAmount *= 60 * 60; + } + if (limitOptions.resumeUnit === 'days') { + waitAmount *= 60 * 60 * 24; + } + + waitAmount *= 1000; + waitTill = new Date(new Date().getTime() + waitAmount); + } else { + waitTill = new Date(limitOptions.maxDateAndTime as string); + } + + if (isNaN(waitTill.getTime())) { + throw new UserError('Invalid date format'); + } + } catch (error) { + throw new NodeOperationError(context.getNode(), 'Could not configure Limit Wait Time', { + description: error.message, + }); + } + } + + return waitTill; +} + +export const configureInputs = (parameters: { options?: { memoryConnection?: boolean } }) => { + const inputs = [ + { + type: 'main', + displayName: 'User Response', + }, + ]; + if (parameters.options?.memoryConnection) { + return [ + ...inputs, + { + type: 'ai_memory', + displayName: 'Memory', + maxConnections: 1, + }, + ]; + } + + return inputs; +}; diff --git a/packages/@n8n/nodes-langchain/nodes/vendors/GoogleGemini/GoogleGemini.node.test.ts b/packages/@n8n/nodes-langchain/nodes/vendors/GoogleGemini/GoogleGemini.node.test.ts index f75b72ef9df..613617309ab 100644 --- a/packages/@n8n/nodes-langchain/nodes/vendors/GoogleGemini/GoogleGemini.node.test.ts +++ b/packages/@n8n/nodes-langchain/nodes/vendors/GoogleGemini/GoogleGemini.node.test.ts @@ -1,9 +1,8 @@ +import * as helpers from '@utils/helpers'; import { mockDeep } from 'jest-mock-extended'; import type { IExecuteFunctions, IBinaryData, INode } from 'n8n-workflow'; import { NodeOperationError } from 'n8n-workflow'; -import * as helpers from '@utils/helpers'; - import * as audio from './actions/audio'; import * as file from './actions/file'; import * as image from './actions/image'; @@ -51,6 +50,7 @@ describe('GoogleGemini Node', () => { return undefined; } }); + executeFunctionsMock.getNodeInputs.mockReturnValue([{ type: 'main' }, { type: 'ai_tool' }]); getConnectedToolsMock.mockResolvedValue([]); apiRequestMock.mockResolvedValue({ candidates: [ @@ -1007,6 +1007,72 @@ describe('GoogleGemini Node', () => { }); }); + it('should not pass durationSeconds if not provided', async () => { + executeFunctionsMock.getNodeParameter.mockImplementation((parameter: string) => { + switch (parameter) { + case 'modelId': + return 'models/veo-3.0-generate-002'; + case 'prompt': + return 'Panning wide shot of a calico kitten sleeping in the sunshine'; + case 'options': + return { + aspectRatio: '16:9', + personGeneration: 'dont_allow', + sampleCount: 1, + }; + case 'returnAs': + return 'url'; + default: + return undefined; + } + }); + executeFunctionsMock.getCredentials.mockResolvedValue({ apiKey: 'test-api-key' }); + apiRequestMock.mockResolvedValue({ + name: 'operations/123', + done: true, + response: { + generateVideoResponse: { + generatedSamples: [ + { + video: { + uri: 'https://example.com/video.mp4', + }, + }, + ], + }, + }, + }); + + const result = await video.generate.execute.call(executeFunctionsMock, 0); + + expect(result).toEqual([ + { + json: { + url: 'https://example.com/video.mp4', + }, + pairedItem: { item: 0 }, + }, + ]); + expect(apiRequestMock).toHaveBeenCalledWith( + 'POST', + '/v1beta/models/veo-3.0-generate-002:predictLongRunning', + { + body: { + instances: [ + { + prompt: 'Panning wide shot of a calico kitten sleeping in the sunshine', + }, + ], + parameters: { + aspectRatio: '16:9', + personGeneration: 'dont_allow', + sampleCount: 1, + }, + }, + }, + ); + }); + it('should handle errors from video generation', async () => { executeFunctionsMock.getNodeParameter.mockImplementation((parameter: string) => { switch (parameter) { diff --git a/packages/@n8n/nodes-langchain/nodes/vendors/GoogleGemini/actions/text/message.operation.ts b/packages/@n8n/nodes-langchain/nodes/vendors/GoogleGemini/actions/text/message.operation.ts index b2bb01547ec..c86efaed377 100644 --- a/packages/@n8n/nodes-langchain/nodes/vendors/GoogleGemini/actions/text/message.operation.ts +++ b/packages/@n8n/nodes-langchain/nodes/vendors/GoogleGemini/actions/text/message.operation.ts @@ -236,7 +236,10 @@ export async function execute(this: IExecuteFunctions, i: number): Promise i.type === 'ai_tool') + ? await getConnectedTools(this, true) + : []; const tools: Tool[] = [ { functionDeclarations: availableTools.map((t) => ({ diff --git a/packages/@n8n/nodes-langchain/nodes/vendors/GoogleGemini/actions/video/generate.operation.ts b/packages/@n8n/nodes-langchain/nodes/vendors/GoogleGemini/actions/video/generate.operation.ts index b0f41243eb0..f3f09a16ec6 100644 --- a/packages/@n8n/nodes-langchain/nodes/vendors/GoogleGemini/actions/video/generate.operation.ts +++ b/packages/@n8n/nodes-langchain/nodes/vendors/GoogleGemini/actions/video/generate.operation.ts @@ -60,7 +60,7 @@ const properties: INodeProperties[] = [ name: 'durationSeconds', type: 'number', default: 8, - description: 'Length of the generated video in seconds', + description: 'Length of the generated video in seconds. Supported only by certain models.', typeOptions: { minValue: 5, maxValue: 8, @@ -159,7 +159,7 @@ export async function execute(this: IExecuteFunctions, i: number): Promise { }); }); +describe('getSessionId', () => { + let mockCtx: any; + + beforeEach(() => { + mockCtx = { + getNodeParameter: jest.fn(), + evaluateExpression: jest.fn(), + getChatTrigger: jest.fn(), + getNode: jest.fn(), + }; + }); + + it('should retrieve sessionId from bodyData', () => { + mockCtx.getBodyData = jest.fn(); + mockCtx.getNodeParameter.mockReturnValue('fromInput'); + mockCtx.getBodyData.mockReturnValue({ sessionId: '12345' }); + + const sessionId = getSessionId(mockCtx, 0); + expect(sessionId).toBe('12345'); + }); + + it('should retrieve sessionId from chat trigger', () => { + mockCtx.getNodeParameter.mockReturnValue('fromInput'); + mockCtx.evaluateExpression.mockReturnValueOnce(undefined); + mockCtx.getChatTrigger.mockReturnValue({ name: 'chatTrigger' }); + mockCtx.evaluateExpression.mockReturnValueOnce('67890'); + const sessionId = getSessionId(mockCtx, 0); + expect(sessionId).toBe('67890'); + }); + + it('should throw error if sessionId is not found', () => { + mockCtx.getNodeParameter.mockReturnValue('fromInput'); + mockCtx.evaluateExpression.mockReturnValue(undefined); + mockCtx.getChatTrigger.mockReturnValue(undefined); + + expect(() => getSessionId(mockCtx, 0)).toThrow(NodeOperationError); + }); + + it('should use custom sessionId if provided', () => { + mockCtx.getNodeParameter.mockReturnValueOnce('custom').mockReturnValueOnce('customSessionId'); + + const sessionId = getSessionId(mockCtx, 0); + expect(sessionId).toBe('customSessionId'); + }); +}); + describe('hasLongSequentialRepeat', () => { it('should return false for text shorter than threshold', () => { const text = 'a'.repeat(99); diff --git a/packages/@n8n/permissions/package.json b/packages/@n8n/permissions/package.json index e3d8b76ee20..cb1bba0c113 100644 --- a/packages/@n8n/permissions/package.json +++ b/packages/@n8n/permissions/package.json @@ -1,6 +1,6 @@ { "name": "@n8n/permissions", - "version": "0.30.0", + "version": "0.31.0", "scripts": { "clean": "rimraf dist .turbo", "dev": "pnpm watch", @@ -9,7 +9,7 @@ "format": "biome format --write .", "format:check": "biome ci .", "lint": "eslint . --quiet", - "lintfix": "eslint . --fix", + "lint:fix": "eslint . --fix", "watch": "tsc -p tsconfig.build.json --watch", "test": "jest", "test:dev": "jest --watch" diff --git a/packages/@n8n/task-runner/package.json b/packages/@n8n/task-runner/package.json index 82162b20308..a4ce47ef88b 100644 --- a/packages/@n8n/task-runner/package.json +++ b/packages/@n8n/task-runner/package.json @@ -1,6 +1,6 @@ { "name": "@n8n/task-runner", - "version": "1.40.0", + "version": "1.41.0", "scripts": { "clean": "rimraf dist .turbo", "start": "node dist/start.js", @@ -12,7 +12,7 @@ "test": "jest", "test:watch": "jest --watch", "lint": "eslint . --quiet", - "lintfix": "eslint . --fix", + "lint:fix": "eslint . --fix", "watch": "tsc-watch -p tsconfig.build.json --onCompilationComplete \"tsc-alias -p tsconfig.build.json\"" }, "main": "dist/start.js", @@ -36,6 +36,7 @@ "dependencies": { "@n8n/config": "workspace:*", "@n8n/di": "workspace:*", + "@n8n/errors": "workspace:^", "@sentry/node": "catalog:", "acorn": "8.14.0", "acorn-walk": "8.3.4", diff --git a/packages/@n8n/task-runner/src/__tests__/task-runner-sentry.test.ts b/packages/@n8n/task-runner/src/__tests__/task-runner-sentry.test.ts index b864bedf8da..1a3779cc1fb 100644 --- a/packages/@n8n/task-runner/src/__tests__/task-runner-sentry.test.ts +++ b/packages/@n8n/task-runner/src/__tests__/task-runner-sentry.test.ts @@ -1,4 +1,4 @@ -import type { ErrorEvent } from '@sentry/types'; +import type { ErrorEvent } from '@sentry/core'; import { mock } from 'jest-mock-extended'; import type { ErrorReporter } from 'n8n-core'; diff --git a/packages/@n8n/task-runner/src/health-check-server.ts b/packages/@n8n/task-runner/src/health-check-server.ts index 9cb4cae6a04..523cefc070a 100644 --- a/packages/@n8n/task-runner/src/health-check-server.ts +++ b/packages/@n8n/task-runner/src/health-check-server.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; import { createServer } from 'node:http'; export class HealthCheckServer { diff --git a/packages/@n8n/task-runner/src/js-task-runner/__tests__/require-resolver.test.ts b/packages/@n8n/task-runner/src/js-task-runner/__tests__/require-resolver.test.ts index 16e0f99e7c6..27f65f4e4e9 100644 --- a/packages/@n8n/task-runner/src/js-task-runner/__tests__/require-resolver.test.ts +++ b/packages/@n8n/task-runner/src/js-task-runner/__tests__/require-resolver.test.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; import { ExecutionError } from '@/js-task-runner/errors/execution-error'; diff --git a/packages/@n8n/task-runner/src/js-task-runner/errors/task-cancelled-error.ts b/packages/@n8n/task-runner/src/js-task-runner/errors/task-cancelled-error.ts index 1970c11fcd9..f2fea1dfb63 100644 --- a/packages/@n8n/task-runner/src/js-task-runner/errors/task-cancelled-error.ts +++ b/packages/@n8n/task-runner/src/js-task-runner/errors/task-cancelled-error.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; export class TaskCancelledError extends ApplicationError { constructor(reason: string) { diff --git a/packages/@n8n/task-runner/src/js-task-runner/errors/timeout-error.ts b/packages/@n8n/task-runner/src/js-task-runner/errors/timeout-error.ts index ef3cc897518..63411afcfd9 100644 --- a/packages/@n8n/task-runner/src/js-task-runner/errors/timeout-error.ts +++ b/packages/@n8n/task-runner/src/js-task-runner/errors/timeout-error.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; export class TimeoutError extends ApplicationError { description: string; diff --git a/packages/@n8n/task-runner/src/js-task-runner/errors/unsupported-function.error.ts b/packages/@n8n/task-runner/src/js-task-runner/errors/unsupported-function.error.ts index ad55ee0bbfa..06275757f9d 100644 --- a/packages/@n8n/task-runner/src/js-task-runner/errors/unsupported-function.error.ts +++ b/packages/@n8n/task-runner/src/js-task-runner/errors/unsupported-function.error.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; /** * Error that indicates that a specific function is not available in the diff --git a/packages/@n8n/task-runner/src/js-task-runner/require-resolver.ts b/packages/@n8n/task-runner/src/js-task-runner/require-resolver.ts index fceef002559..9da36e87a19 100644 --- a/packages/@n8n/task-runner/src/js-task-runner/require-resolver.ts +++ b/packages/@n8n/task-runner/src/js-task-runner/require-resolver.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; import { isBuiltin } from 'node:module'; import { ExecutionError } from './errors/execution-error'; diff --git a/packages/@n8n/task-runner/src/task-runner-sentry.ts b/packages/@n8n/task-runner/src/task-runner-sentry.ts index a509d6c28be..58bc9ded7ea 100644 --- a/packages/@n8n/task-runner/src/task-runner-sentry.ts +++ b/packages/@n8n/task-runner/src/task-runner-sentry.ts @@ -1,5 +1,5 @@ import { Service } from '@n8n/di'; -import type { ErrorEvent, Exception } from '@sentry/types'; +import type { ErrorEvent, Exception } from '@sentry/core'; import { ErrorReporter } from 'n8n-core'; import { SentryConfig } from './config/sentry-config'; diff --git a/packages/@n8n/utils/package.json b/packages/@n8n/utils/package.json index 301ba3ea156..b9030d89283 100644 --- a/packages/@n8n/utils/package.json +++ b/packages/@n8n/utils/package.json @@ -1,7 +1,7 @@ { "name": "@n8n/utils", "type": "module", - "version": "1.13.0", + "version": "1.14.0", "files": [ "dist" ], @@ -19,13 +19,13 @@ }, "scripts": { "dev": "vite", - "build": "pnpm run typecheck && tsup", + "build": "tsup", "preview": "vite preview", "typecheck": "tsc --noEmit", "test": "vitest run", "test:dev": "vitest --silent=false", "lint": "eslint src --quiet", - "lintfix": "eslint src --fix", + "lint:fix": "eslint src --fix", "format": "biome format --write . && prettier --write . --ignore-path ../../../.prettierignore", "format:check": "biome ci . && prettier --check . --ignore-path ../../../.prettierignore" }, diff --git a/packages/cli/package.json b/packages/cli/package.json index ad4f2313098..8791d782502 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "n8n", - "version": "1.104.0", + "version": "1.105.0", "description": "n8n Workflow Automation Tool", "main": "dist/index", "types": "dist/index.d.ts", @@ -16,7 +16,7 @@ "format": "biome format --write .", "format:check": "biome ci .", "lint": "eslint . --quiet", - "lintfix": "eslint . --fix", + "lint:fix": "eslint . --fix", "start": "run-script-os", "start:default": "cd bin && ./n8n", "start:windows": "cd bin && n8n", @@ -89,6 +89,7 @@ "@n8n/ai-workflow-builder": "workspace:*", "@n8n/api-types": "workspace:*", "@n8n/backend-common": "workspace:^", + "@n8n/backend-test-utils": "workspace:^", "@n8n/client-oauth2": "workspace:*", "@n8n/config": "workspace:*", "@n8n/constants": "workspace:^", @@ -96,14 +97,13 @@ "@n8n/decorators": "workspace:*", "@n8n/di": "workspace:*", "@n8n/errors": "workspace:*", - "@n8n/backend-test-utils": "workspace:^", "@n8n/localtunnel": "3.0.0", "@n8n/n8n-nodes-langchain": "workspace:*", "@n8n/permissions": "workspace:*", "@n8n/task-runner": "workspace:*", "@n8n/typeorm": "catalog:", "@n8n_io/ai-assistant-sdk": "catalog:", - "@n8n_io/license-sdk": "2.22.0", + "@n8n_io/license-sdk": "2.23.0", "@rudderstack/rudder-sdk-node": "2.1.4", "@sentry/node": "catalog:", "aws4": "1.11.0", @@ -114,7 +114,7 @@ "change-case": "4.1.2", "class-transformer": "0.5.1", "class-validator": "0.14.0", - "compression": "1.8.0", + "compression": "1.8.1", "convict": "6.2.4", "cookie-parser": "1.4.7", "csrf": "3.1.0", @@ -130,6 +130,7 @@ "formidable": "3.5.4", "handlebars": "4.7.8", "helmet": "8.1.0", + "http-proxy-middleware": "^3.0.5", "infisical-node": "1.3.0", "ioredis": "5.3.2", "isbot": "3.6.13", diff --git a/packages/cli/src/__tests__/command-registry.test.ts b/packages/cli/src/__tests__/command-registry.test.ts index 5a130f0555b..c9333f3fc1d 100644 --- a/packages/cli/src/__tests__/command-registry.test.ts +++ b/packages/cli/src/__tests__/command-registry.test.ts @@ -1,4 +1,5 @@ import type { Logger, ModuleRegistry } from '@n8n/backend-common'; +import { CliParser } from '@n8n/backend-common'; import { CommandMetadata } from '@n8n/decorators'; import { Container } from '@n8n/di'; import { mock } from 'jest-mock-extended'; @@ -17,6 +18,7 @@ describe('CommandRegistry', () => { const logger = mock(); let originalProcessArgv: string[]; let mockProcessExit: jest.SpyInstance; + const cliParser = new CliParser(logger); class TestCommand { flags: any; @@ -64,7 +66,7 @@ describe('CommandRegistry', () => { it('should execute the specified command', async () => { process.argv = ['node', 'n8n', 'test-command']; - commandRegistry = new CommandRegistry(commandMetadata, moduleRegistry, logger); + commandRegistry = new CommandRegistry(commandMetadata, moduleRegistry, logger, cliParser); await commandRegistry.execute(); expect(moduleRegistry.loadModules).toHaveBeenCalled(); @@ -83,7 +85,7 @@ describe('CommandRegistry', () => { const commandInstance = Container.get(commandClass); commandInstance.run = jest.fn().mockRejectedValue(error); - commandRegistry = new CommandRegistry(commandMetadata, moduleRegistry, logger); + commandRegistry = new CommandRegistry(commandMetadata, moduleRegistry, logger, cliParser); await commandRegistry.execute(); expect(commandInstance.catch).toHaveBeenCalledWith(error); @@ -93,7 +95,7 @@ describe('CommandRegistry', () => { it('should parse and apply command flags', async () => { process.argv = ['node', 'n8n', 'test-command', '--flag1', 'value1', '--flag2', '-s', '123']; - commandRegistry = new CommandRegistry(commandMetadata, moduleRegistry, logger); + commandRegistry = new CommandRegistry(commandMetadata, moduleRegistry, logger, cliParser); await commandRegistry.execute(); const commandInstance = Container.get(commandMetadata.get('test-command')!.class); @@ -107,7 +109,7 @@ describe('CommandRegistry', () => { it('should handle alias flags', async () => { process.argv = ['node', 'n8n', 'test-command', '--flag1', 'value1', '-s', '123']; - commandRegistry = new CommandRegistry(commandMetadata, moduleRegistry, logger); + commandRegistry = new CommandRegistry(commandMetadata, moduleRegistry, logger, cliParser); await commandRegistry.execute(); const commandInstance = Container.get(commandMetadata.get('test-command')!.class); @@ -120,7 +122,7 @@ describe('CommandRegistry', () => { it('should exit with error when command not found', async () => { process.argv = ['node', 'n8n', 'non-existent-command']; - commandRegistry = new CommandRegistry(commandMetadata, moduleRegistry, logger); + commandRegistry = new CommandRegistry(commandMetadata, moduleRegistry, logger, cliParser); await commandRegistry.execute(); expect(logger.error).toHaveBeenCalledWith(expect.stringContaining('not found')); @@ -130,7 +132,7 @@ describe('CommandRegistry', () => { it('should display help when --help flag is used', async () => { process.argv = ['node', 'n8n', 'test-command', '--help']; - commandRegistry = new CommandRegistry(commandMetadata, moduleRegistry, logger); + commandRegistry = new CommandRegistry(commandMetadata, moduleRegistry, logger, cliParser); await commandRegistry.execute(); expect(logger.info).toHaveBeenCalledWith(expect.stringContaining('USAGE')); @@ -143,7 +145,7 @@ describe('CommandRegistry', () => { it('should list all commands when global help is requested', async () => { process.argv = ['node', 'n8n', '--help']; - commandRegistry = new CommandRegistry(commandMetadata, moduleRegistry, logger); + commandRegistry = new CommandRegistry(commandMetadata, moduleRegistry, logger, cliParser); await commandRegistry.execute(); expect(logger.info).toHaveBeenCalledWith(expect.stringContaining('Available commands')); @@ -153,7 +155,7 @@ describe('CommandRegistry', () => { it('should display proper command usage with printCommandUsage', () => { process.argv = ['node', 'n8n', 'test-command']; - commandRegistry = new CommandRegistry(commandMetadata, moduleRegistry, logger); + commandRegistry = new CommandRegistry(commandMetadata, moduleRegistry, logger, cliParser); const commandEntry = commandMetadata.get('test-command')!; commandRegistry.printCommandUsage(commandEntry); diff --git a/packages/cli/src/__tests__/utils.test.ts b/packages/cli/src/__tests__/utils.test.ts index a73a512488d..e227beded66 100644 --- a/packages/cli/src/__tests__/utils.test.ts +++ b/packages/cli/src/__tests__/utils.test.ts @@ -58,11 +58,20 @@ describe('shouldAssignExecuteMethod', () => { expect(shouldAssignExecuteMethod(nodeType)).toBe(true); }); - it('should return false when node has methods', () => { + it('should return false when node has methods and is not declarative', () => { const nodeType = { methods: {}, } as unknown as INodeType; expect(shouldAssignExecuteMethod(nodeType)).toBe(false); }); + + it('should return true when node has methods but is declarative', () => { + const nodeType = { + description: { requestDefaults: {} }, // Declarative node + methods: {}, + } as unknown as INodeType; + + expect(shouldAssignExecuteMethod(nodeType)).toBe(true); + }); }); diff --git a/packages/cli/src/__tests__/workflow-runner.test.ts b/packages/cli/src/__tests__/workflow-runner.test.ts index ac25a57a6ca..ff378cdac2c 100644 --- a/packages/cli/src/__tests__/workflow-runner.test.ts +++ b/packages/cli/src/__tests__/workflow-runner.test.ts @@ -513,7 +513,7 @@ describe('streaming functionality', () => { expect(mockHooks.addHandler).toHaveBeenCalledWith('sendChunk', expect.any(Function)); }); - it('should not setup sendChunk handler when streaming is enabled but execution mode is manual', async () => { + it('should setup sendChunk handler when streaming is enabled and execution mode is manual', async () => { // ARRANGE const activeExecutions = Container.get(ActiveExecutions); jest.spyOn(activeExecutions, 'add').mockResolvedValue('1'); @@ -550,6 +550,6 @@ describe('streaming functionality', () => { await runner.run(data); // ASSERT - expect(mockHooks.addHandler).not.toHaveBeenCalledWith('sendChunk', expect.any(Function)); + expect(mockHooks.addHandler).toHaveBeenCalledWith('sendChunk', expect.any(Function)); }); }); diff --git a/packages/cli/src/abstract-server.ts b/packages/cli/src/abstract-server.ts index b69cbe8d3e4..728b2ab64a7 100644 --- a/packages/cli/src/abstract-server.ts +++ b/packages/cli/src/abstract-server.ts @@ -168,11 +168,24 @@ export abstract class AbstractServer { this.server.on('error', (error: Error & { code: string }) => { if (error.code === 'EADDRINUSE') { + // EADDRINUSE is thrown when the port is already in use this.logger.info( `n8n's port ${port} is already in use. Do you have another instance of n8n running already?`, ); - process.exit(1); + } else if (error.code === 'EACCES') { + // EACCES is thrown when the process is not allowed to use the port + // This can happen if the port is below 1024 and the process is not run as root + // or when the port is reserved by the system, for example Windows reserves random ports + // for NAT for Hyper-V and other virtualization software. + this.logger.info( + `n8n does not have permission to use port ${port}. Please run n8n with a different port.`, + ); + } else { + // Other errors are unexpected and should be logged + this.logger.error('n8n webserver failed, exiting', { error }); } + // we always exit on error, so that n8n does not run in an inconsistent state + process.exit(1); }); await new Promise((resolve) => this.server.listen(port, address, () => resolve())); diff --git a/packages/cli/src/chat/__tests__/chat-execution-manager.test.ts b/packages/cli/src/chat/__tests__/chat-execution-manager.test.ts new file mode 100644 index 00000000000..84848057c2c --- /dev/null +++ b/packages/cli/src/chat/__tests__/chat-execution-manager.test.ts @@ -0,0 +1,292 @@ +import { ExecutionRepository } from '@n8n/db'; +import type { IExecutionResponse } from '@n8n/db'; + +import * as WorkflowExecuteAdditionalData from '@/workflow-execute-additional-data'; +import { WorkflowRunner } from '@/workflow-runner'; +import { mockInstance } from '@n8n/backend-test-utils'; + +import { NodeTypes } from '../../node-types'; +import { OwnershipService } from '../../services/ownership.service'; +import { ChatExecutionManager } from '../chat-execution-manager'; +import type { ChatMessage } from '../chat-service.types'; + +describe('ChatExecutionManager', () => { + const executionRepository = mockInstance(ExecutionRepository); + const workflowRunner = mockInstance(WorkflowRunner); + const ownershipService = mockInstance(OwnershipService); + const nodeTypes = mockInstance(NodeTypes); + const chatExecutionManager = new ChatExecutionManager( + executionRepository, + workflowRunner, + ownershipService, + nodeTypes, + ); + + beforeEach(() => { + jest.restoreAllMocks(); + }); + + it('should handle errors from getRunData gracefully', async () => { + const execution = { id: '1', workflowData: {}, data: {} } as IExecutionResponse; + const message = { sessionId: '123', action: 'sendMessage', chatInput: 'input' } as ChatMessage; + + jest + .spyOn(chatExecutionManager as any, 'getRunData') + .mockRejectedValue(new Error('Test error')); + + await expect(chatExecutionManager.runWorkflow(execution, message)).rejects.toThrow( + 'Test error', + ); + }); + + describe('runWorkflow', () => { + it('should call WorkflowRunner.run with correct parameters', async () => { + const execution = { id: '1', workflowData: {}, data: {} } as IExecutionResponse; + const message = { + sessionId: '123', + action: 'sendMessage', + chatInput: 'input', + } as ChatMessage; + const runData = { executionMode: 'manual', executionData: {}, workflowData: {} } as any; + + jest.spyOn(chatExecutionManager as any, 'getRunData').mockResolvedValue(runData); + + await chatExecutionManager.runWorkflow(execution, message); + + expect(workflowRunner.run).toHaveBeenCalledWith(runData, true, true, '1'); + }); + }); + + describe('cancelExecution', () => { + it('should update execution status to canceled if it is running', async () => { + const executionId = '1'; + const execution = { id: executionId, status: 'running' } as any; + + executionRepository.findSingleExecution.mockResolvedValue(execution); + + await chatExecutionManager.cancelExecution(executionId); + + expect(executionRepository.update).toHaveBeenCalledWith( + { id: executionId }, + { status: 'canceled' }, + ); + }); + + it('should update execution status to canceled if it is waiting', async () => { + const executionId = '2'; + const execution = { id: executionId, status: 'waiting' } as any; + + executionRepository.findSingleExecution.mockResolvedValue(execution); + + await chatExecutionManager.cancelExecution(executionId); + + expect(executionRepository.update).toHaveBeenCalledWith( + { id: executionId }, + { status: 'canceled' }, + ); + }); + + it('should update execution status to canceled if it is unknown', async () => { + const executionId = '3'; + const execution = { id: executionId, status: 'unknown' } as any; + + executionRepository.findSingleExecution.mockResolvedValue(execution); + + await chatExecutionManager.cancelExecution(executionId); + + expect(executionRepository.update).toHaveBeenCalledWith( + { id: executionId }, + { status: 'canceled' }, + ); + }); + + it('should not update execution status if it is not running', async () => { + const executionId = '1'; + const execution = { id: executionId, status: 'completed' } as any; + + executionRepository.findSingleExecution.mockResolvedValue(execution); + + await chatExecutionManager.cancelExecution(executionId); + + expect(executionRepository.update).not.toHaveBeenCalled(); + }); + }); + + describe('findExecution', () => { + it('should return undefined if execution does not exist', async () => { + const executionId = 'non-existent'; + + executionRepository.findSingleExecution.mockResolvedValue(undefined); + + const result = await chatExecutionManager.findExecution(executionId); + + expect(result).toBeUndefined; + }); + + it('should return execution data', async () => { + const executionId = '1'; + const execution = { id: executionId } as any; + + executionRepository.findSingleExecution.mockResolvedValue(execution); + + const result = await chatExecutionManager.findExecution(executionId); + + expect(result).toEqual(execution); + }); + }); + + describe('getRunData', () => { + it('should call runNode with correct parameters and return runData', async () => { + const execution = { + id: '1', + workflowData: { id: 'workflowId' }, + data: { + resultData: { pinData: {} }, + executionData: { nodeExecutionStack: [{ data: { main: [[]] } }] }, + pushRef: 'pushRef', + }, + mode: 'manual', + } as any; + const message = { + sessionId: '123', + action: 'sendMessage', + chatInput: 'input', + } as ChatMessage; + const project = { id: 'projectId' }; + const nodeExecutionData = [[{ json: message }]]; + + const getRunDataSpy = jest + .spyOn(chatExecutionManager as any, 'runNode') + .mockResolvedValue(nodeExecutionData); + const getWorkflowProjectCachedSpy = jest + .spyOn(ownershipService, 'getWorkflowProjectCached') + .mockResolvedValue(project as any); + + const runData = await (chatExecutionManager as any).getRunData(execution, message); + + expect(getRunDataSpy).toHaveBeenCalledWith(execution, message); + expect(getWorkflowProjectCachedSpy).toHaveBeenCalledWith('workflowId'); + expect(runData).toEqual({ + executionMode: 'manual', + executionData: execution.data, + pushRef: execution.data.pushRef, + workflowData: execution.workflowData, + pinData: execution.data.resultData.pinData, + projectId: 'projectId', + }); + }); + }); + + describe('runNode', () => { + it('should return null if node is not found', async () => { + const execution = { + id: '1', + workflowData: { id: 'workflowId' }, + data: { + resultData: { lastNodeExecuted: 'nodeId' }, + executionData: { nodeExecutionStack: [{ data: { main: [[]] } }] }, + }, + mode: 'manual', + } as any; + const message = { + sessionId: '123', + action: 'sendMessage', + chatInput: 'input', + } as ChatMessage; + + jest.spyOn(WorkflowExecuteAdditionalData, 'getBase').mockResolvedValue({} as any); + const workflow = { getNode: jest.fn().mockReturnValue(null) }; + jest.spyOn(chatExecutionManager as any, 'getWorkflow').mockReturnValue(workflow); + + const result = await (chatExecutionManager as any).runNode(execution, message); + + expect(result).toBeNull(); + }); + + it('should return null if executionData is undefined', async () => { + const execution = { + id: '1', + workflowData: { id: 'workflowId' }, + data: { + resultData: { lastNodeExecuted: 'nodeId' }, + executionData: { nodeExecutionStack: [] }, + }, + mode: 'manual', + } as any; + const message = { + sessionId: '123', + action: 'sendMessage', + chatInput: 'input', + } as ChatMessage; + + jest.spyOn(WorkflowExecuteAdditionalData, 'getBase').mockResolvedValue({} as any); + const workflow = { getNode: jest.fn().mockReturnValue({}) }; + jest.spyOn(chatExecutionManager as any, 'getWorkflow').mockReturnValue(workflow); + + const result = await (chatExecutionManager as any).runNode(execution, message); + + expect(result).toBeNull(); + }); + + it('should call nodeType.onMessage with correct parameters and return the result', async () => { + const execution = { + id: '1', + workflowData: { id: 'workflowId' }, + data: { + resultData: { lastNodeExecuted: 'nodeId' }, + executionData: { nodeExecutionStack: [{ data: { main: [[{}]] } }] }, + }, + mode: 'manual', + } as any; + const message = { + sessionId: '123', + action: 'sendMessage', + chatInput: 'input', + files: [], + } as ChatMessage; + const node = { type: 'testType', typeVersion: 1 }; + const nodeType = { onMessage: jest.fn().mockResolvedValue([[{ json: message }]]) }; + const workflow = { + getNode: jest.fn().mockReturnValue(node), + nodeTypes: { getByNameAndVersion: jest.fn().mockReturnValue(nodeType) }, + }; + jest.spyOn(chatExecutionManager as any, 'getWorkflow').mockReturnValue(workflow); + jest.spyOn(WorkflowExecuteAdditionalData, 'getBase').mockResolvedValue({} as any); + + const result = await (chatExecutionManager as any).runNode(execution, message); + + expect(workflow.nodeTypes.getByNameAndVersion).toHaveBeenCalledWith('testType', 1); + expect(nodeType.onMessage).toHaveBeenCalled(); + expect(result).toEqual([[{ json: message }]]); + }); + + it('should return nodeExecutionData with sessionId, action and chatInput', async () => { + const execution = { + id: '1', + workflowData: { id: 'workflowId' }, + data: { + resultData: { lastNodeExecuted: 'nodeId' }, + executionData: { nodeExecutionStack: [{ data: { main: [[{}]] } }] }, + }, + mode: 'manual', + } as any; + const message = { + sessionId: '123', + action: 'sendMessage', + chatInput: 'input', + } as ChatMessage; + const node = { type: 'testType', typeVersion: 1 }; + const nodeType = { onMessage: jest.fn().mockResolvedValue([[{ json: message }]]) }; + const workflow = { + getNode: jest.fn().mockReturnValue(node), + nodeTypes: { getByNameAndVersion: jest.fn().mockReturnValue(nodeType) }, + }; + jest.spyOn(chatExecutionManager as any, 'getWorkflow').mockReturnValue(workflow); + jest.spyOn(WorkflowExecuteAdditionalData, 'getBase').mockResolvedValue({} as any); + + const result = await (chatExecutionManager as any).runNode(execution, message); + + expect(result).toEqual([[{ json: message }]]); + }); + }); +}); diff --git a/packages/cli/src/chat/__tests__/chat-server.test.ts b/packages/cli/src/chat/__tests__/chat-server.test.ts new file mode 100644 index 00000000000..51c04bcbd70 --- /dev/null +++ b/packages/cli/src/chat/__tests__/chat-server.test.ts @@ -0,0 +1,86 @@ +import type { Application } from 'express'; +import { ServerResponse } from 'http'; +import type { Server as HttpServer } from 'http'; +import type { IncomingMessage } from 'http'; +import { mock, mockReset } from 'jest-mock-extended'; +import type { WebSocket } from 'ws'; +import type { WebSocketServer } from 'ws'; + +import { ChatServer } from '../chat-server'; +import type { ChatService } from '../chat-service'; +import type { ChatRequest } from '../chat-service.types'; + +jest.mock('ws'); + +describe('ChatServer', () => { + const mockChatService = mock(); + const mockWsServer = mock(); + const mockApp = mock() as unknown as Application & { + handle: (req: IncomingMessage, res: ServerResponse) => void; + }; + mockApp.handle = jest.fn(); + const mockHttpServer = mock(); + + let chatServer: ChatServer; + + beforeEach(() => { + mockReset(mockChatService); + mockReset(mockWsServer); + mockReset(mockApp); + mockReset(mockHttpServer); + + chatServer = new ChatServer(mockChatService); + + (chatServer as any).wsServer = mockWsServer; + }); + + it('attaches upgrade listener to HTTP server', () => { + chatServer.setup(mockHttpServer, mockApp); + expect(mockHttpServer.on).toHaveBeenCalledWith('upgrade', expect.any(Function)); + }); + + it('handles WebSocket upgrade for /chat path', () => { + chatServer.setup(mockHttpServer, mockApp); + + const req = { + url: 'http://localhost:5678/chat?sessionId=123&executionId=456', + socket: { remoteAddress: '127.0.0.1' }, + } as ChatRequest; + const socket = {} as any; + const head = {} as any; + + const upgradeHandler = mockHttpServer.on.mock.calls[0][1]; + upgradeHandler(req, socket, head); + + expect(mockWsServer.handleUpgrade).toHaveBeenCalledWith( + req, + socket, + head, + expect.any(Function), + ); + }); + + it('calls attachToApp after WebSocket upgrade', () => { + chatServer.setup(mockHttpServer, mockApp); + + const req = { + url: 'http://localhost:5678/chat?sessionId=123&executionId=456', + socket: { remoteAddress: '127.0.0.1' }, + } as ChatRequest; + const socket = {} as any; + const head = {} as any; + const ws = {} as WebSocket; + + const upgradeHandler = mockHttpServer.on.mock.calls[0][1]; + upgradeHandler(req, socket, head); + + const handleUpgradeCb = mockWsServer.handleUpgrade.mock.calls[0][3]; + handleUpgradeCb(ws, req); + + expect(req.ws).toBe(ws); + expect(mockApp.handle).toHaveBeenCalledWith( + expect.objectContaining({ ws }), + expect.any(ServerResponse), + ); + }); +}); diff --git a/packages/cli/src/chat/__tests__/chat-service.test.ts b/packages/cli/src/chat/__tests__/chat-service.test.ts new file mode 100644 index 00000000000..75f241c7181 --- /dev/null +++ b/packages/cli/src/chat/__tests__/chat-service.test.ts @@ -0,0 +1,399 @@ +import type { Logger } from '@n8n/backend-common'; +import { mock } from 'jest-mock-extended'; +import { WebSocket } from 'ws'; + +import type { ChatExecutionManager } from '../chat-execution-manager'; +import { ChatService } from '../chat-service'; +import type { ChatRequest } from '../chat-service.types'; +import type { ErrorReporter } from 'n8n-core'; + +describe('ChatService', () => { + let mockExecutionManager: ReturnType>; + let mockLogger: ReturnType>; + let mockErrorReporter: ReturnType>; + let chatService: ChatService; + let mockWs: ReturnType>; + + beforeAll(() => { + jest.useFakeTimers(); + }); + + afterAll(() => { + jest.useRealTimers(); + }); + + beforeEach(() => { + mockExecutionManager = mock(); + mockLogger = mock(); + mockErrorReporter = mock(); + chatService = new ChatService(mockExecutionManager, mockLogger, mockErrorReporter); + mockWs = mock(); + }); + + it('should handle missing execution gracefully', async () => { + const req = { + ws: mockWs, + query: { + sessionId: '123', + executionId: '42', + isPublic: false, + }, + } as unknown as ChatRequest; + + mockExecutionManager.findExecution.mockResolvedValue(undefined); + + try { + await chatService.startSession(req); + } catch (error) { + expect(error).toBeDefined(); + expect(mockWs.send).toHaveBeenCalledWith('Execution with id "42" does not exist'); + } + }); + + it('should handle missing WebSocket connection gracefully', async () => { + const req = { + ws: null, + query: { + sessionId: 'abc', + executionId: '123', + isPublic: false, + }, + } as unknown as ChatRequest; + + await expect(chatService.startSession(req)).rejects.toThrow('WebSocket connection is missing'); + }); + + describe('startSession', () => { + it('should start a session and store it in sessions map', async () => { + const mockWs = mock(); + + (mockWs as any).readyState = WebSocket.OPEN; + + const req = { + ws: mockWs, + query: { + sessionId: 'abc', + executionId: '123', + isPublic: true, + }, + } as unknown as ChatRequest; + + mockExecutionManager.checkIfExecutionExists.mockResolvedValue({ id: '123' } as any); + + await chatService.startSession(req); + + const sessionKey = 'abc|123|public'; + const session = (chatService as any).sessions.get(sessionKey); + + expect(session).toBeDefined(); + expect(session?.sessionId).toBe('abc'); + expect(session?.executionId).toBe('123'); + expect(session?.isPublic).toBe(true); + expect(typeof session?.intervalId).toBe('object'); + }); + + it('should terminate existing session if the same key is used and clear interval', async () => { + const clearIntervalSpy = jest.spyOn(global, 'clearInterval').mockImplementation(); + const req = { + ws: mockWs, + query: { + sessionId: 'abc', + executionId: '123', + isPublic: false, + }, + } as unknown as ChatRequest; + + const previousConnection = mock(); + + (previousConnection as any).readyState = WebSocket.OPEN; + const dummyInterval = setInterval(() => {}, 9999); + const sessionKey = 'abc|123|integrated'; + + (chatService as any).sessions.set(sessionKey, { + connection: previousConnection, + executionId: '123', + sessionId: 'abc', + intervalId: dummyInterval, + waitingForResponse: false, + isPublic: false, + }); + + mockExecutionManager.checkIfExecutionExists.mockResolvedValue({ id: '123' } as any); + + await chatService.startSession(req); + + expect(previousConnection.terminate).toHaveBeenCalled(); + expect(clearIntervalSpy).toHaveBeenCalledWith(dummyInterval); + expect((chatService as any).sessions.get(sessionKey).connection).toBe(mockWs); + clearIntervalSpy.mockRestore(); + }); + + describe('checkHeartbeats', () => { + it('should terminate sessions that have not sent a heartbeat recently', async () => { + const sessionKey = 'abc|123|public'; + const session = { + executionId: '123', + connection: mockWs, + lastHeartbeat: Date.now() - 61 * 1000, + intervalId: 123, + }; + (chatService as any).sessions.set(sessionKey, session); + + mockExecutionManager.cancelExecution.mockResolvedValue(undefined); + mockWs.terminate.mockImplementation(() => {}); + jest.spyOn(global, 'clearInterval').mockImplementation(() => {}); + + await (chatService as any).checkHeartbeats(); + + expect(mockExecutionManager.cancelExecution).toHaveBeenCalledWith('123'); + expect(mockWs.terminate).toHaveBeenCalled(); + expect(clearInterval).toHaveBeenCalledWith(123); + expect((chatService as any).sessions.get(sessionKey)).toBeUndefined(); + }); + + it('should remove sessions whose connection throws an error when sending a heartbeat', async () => { + const sessionKey = 'abc|123|public'; + const session = { + executionId: '123', + connection: mockWs, + lastHeartbeat: Date.now(), + intervalId: 123, + }; + (chatService as any).sessions.set(sessionKey, session); + + mockWs.send.mockImplementation(() => { + throw new Error('Connection error'); + }); + jest.spyOn(global, 'clearInterval').mockImplementation(() => {}); + + await (chatService as any).checkHeartbeats(); + + expect(mockWs.send).toHaveBeenCalledWith('n8n|heartbeat'); + expect(clearInterval).toHaveBeenCalledWith(123); + expect((chatService as any).sessions.get(sessionKey)).toBeUndefined(); + }); + + it('should check heartbeats and maintain sessions', async () => { + const sessionKey = 'abc|123|public'; + mockWs.send.mockImplementation(() => {}); + const session = { + executionId: '123', + connection: mockWs, + lastHeartbeat: Date.now(), + intervalId: 123, + }; + (chatService as any).sessions.set(sessionKey, session); + + await (chatService as any).checkHeartbeats(); + + expect(mockWs.send).toHaveBeenCalledWith('n8n|heartbeat'); + expect((chatService as any).sessions.get(sessionKey)).toBeDefined(); + }); + }); + }); + + describe('incomingMessageHandler', () => { + it('should return if session does not exist', async () => { + const sessionKey = 'nonexistent'; + const data = 'test data'; + const incomingMessageHandler = (chatService as any).incomingMessageHandler(sessionKey); + await incomingMessageHandler(data); + + expect(mockExecutionManager.runWorkflow).not.toHaveBeenCalled(); + }); + + it('should handle heartbeat acknowledgement', async () => { + const sessionKey = 'abc|123|public'; + const session = { + executionId: '123', + lastHeartbeat: 0, + }; + (chatService as any).sessions.set(sessionKey, session); + + const data = 'n8n|heartbeat-ack'; + const incomingMessageHandler = (chatService as any).incomingMessageHandler(sessionKey); + await incomingMessageHandler(data); + + expect(session.lastHeartbeat).not.toBe(0); + expect(mockExecutionManager.runWorkflow).not.toHaveBeenCalled(); + }); + + it('should resume execution with processed message', async () => { + const sessionKey = 'abc|123|public'; + const session = { + executionId: '123', + nodeWaitingForChatResponse: 'test', + }; + (chatService as any).sessions.set(sessionKey, session); + + const data = JSON.stringify({ action: 'sendMessage', chatInput: 'hello', sessionId: 'abc' }); + mockExecutionManager.findExecution.mockResolvedValue({ + id: '123', + status: 'waiting', + data: { resultData: {} }, + } as any); + + const incomingMessageHandler = (chatService as any).incomingMessageHandler(sessionKey); + await incomingMessageHandler(data); + + expect(mockExecutionManager.runWorkflow).toHaveBeenCalled(); + expect(session.nodeWaitingForChatResponse).toBeUndefined(); + }); + + it('should handle errors during message processing', async () => { + const sessionKey = 'abc|123|public'; + const session = { + executionId: '123', + }; + (chatService as any).sessions.set(sessionKey, session); + + const data = 'invalid json'; + const incomingMessageHandler = (chatService as any).incomingMessageHandler(sessionKey); + await incomingMessageHandler(data); + + expect(mockLogger.error).toHaveBeenCalled(); + }); + }); + + describe('pollAndProcessChatResponses', () => { + it('should return if session does not exist', async () => { + const sessionKey = 'nonexistent'; + const pollAndProcessChatResponses = (chatService as any).pollAndProcessChatResponses( + sessionKey, + ); + await pollAndProcessChatResponses(); + + expect(mockExecutionManager.findExecution).not.toHaveBeenCalled(); + }); + + it('should return if session is processing', async () => { + const sessionKey = 'abc|123|public'; + (chatService as any).sessions.set(sessionKey, { isProcessing: true }); + + const pollAndProcessChatResponses = (chatService as any).pollAndProcessChatResponses( + sessionKey, + ); + await pollAndProcessChatResponses(); + + expect(mockExecutionManager.findExecution).not.toHaveBeenCalled(); + }); + + it('should return if execution does not exist', async () => { + const sessionKey = 'abc|123|public'; + (chatService as any).sessions.set(sessionKey, { + isProcessing: false, + executionId: '123', + nodeWaitingForChatResponse: undefined, + }); + mockExecutionManager.findExecution.mockResolvedValue(undefined); + + const pollAndProcessChatResponses = (chatService as any).pollAndProcessChatResponses( + sessionKey, + ); + await pollAndProcessChatResponses(); + + expect(mockWs.send).not.toHaveBeenCalled(); + }); + + it('should send continue if execution status is waiting and last node name is different from nodeWaitingForChatResponse', async () => { + const sessionKey = 'abc|123|public'; + const session = { + isProcessing: false, + executionId: '123', + connection: { send: jest.fn() }, + nodeWaitingForChatResponse: 'node1', + }; + (chatService as any).sessions.set(sessionKey, session); + mockExecutionManager.findExecution.mockResolvedValue({ + status: 'waiting', + data: { resultData: { lastNodeExecuted: 'node2' } }, + workflowData: { nodes: [{ name: 'node1' }] }, + } as any); + + const pollAndProcessChatResponses = (chatService as any).pollAndProcessChatResponses( + sessionKey, + ); + await pollAndProcessChatResponses(); + + expect(session.connection.send).toHaveBeenCalledWith('n8n|continue'); + expect(session.nodeWaitingForChatResponse).toBeUndefined(); + }); + + it('should send message if execution status is waiting and a message exists', async () => { + const sessionKey = 'abc|123|public'; + const session = { + isProcessing: false, + executionId: '123', + connection: { send: jest.fn() }, + sessionId: 'abc', + nodeWaitingForChatResponse: undefined, + }; + (chatService as any).sessions.set(sessionKey, session); + mockExecutionManager.findExecution.mockResolvedValue({ + status: 'waiting', + data: { + resultData: { + lastNodeExecuted: 'node1', + runData: { node1: [{ data: { main: [[{ sendMessage: 'test message' }]] } }] }, + }, + }, + workflowData: { nodes: [{ name: 'node1' }] }, + } as any); + (chatService as any).shouldResumeImmediately = jest.fn().mockReturnValue(false); + + (chatService as any).resumeExecution = jest.fn(); + + const pollAndProcessChatResponses = (chatService as any).pollAndProcessChatResponses( + sessionKey, + ); + await pollAndProcessChatResponses(); + + expect(session.connection.send).toHaveBeenCalledWith('test message'); + expect(session.nodeWaitingForChatResponse).toEqual('node1'); + }); + + it('should close connection if execution status is success and shouldNotReturnLastNodeResponse is false', async () => { + const sessionKey = 'abc|123|public'; + const session = { + isProcessing: false, + executionId: '123', + connection: { close: jest.fn(), readyState: 1, once: jest.fn() }, + isPublic: false, + }; + (chatService as any).sessions.set(sessionKey, session); + mockExecutionManager.findExecution.mockResolvedValue({ + status: 'success', + data: { resultData: { lastNodeExecuted: 'node1' } }, + workflowData: { nodes: [{ type: 'n8n-core.respondToWebhook', name: 'node1' }] }, + mode: 'manual', + } as any); + + const pollAndProcessChatResponses = (chatService as any).pollAndProcessChatResponses( + sessionKey, + ); + await pollAndProcessChatResponses(); + + expect(session.connection.once).toHaveBeenCalled(); + expect(session.connection.once).toHaveBeenCalledWith('drain', expect.any(Function)); + }); + + it('should handle errors during message processing', async () => { + const sessionKey = 'abc|123|public'; + const session = { + isProcessing: false, + executionId: '123', + connection: mockWs, + nodeWaitingForChatResponse: undefined, + }; + (chatService as any).sessions.set(sessionKey, session); + mockExecutionManager.findExecution.mockRejectedValue(new Error('test error')); + + const pollAndProcessChatResponses = (chatService as any).pollAndProcessChatResponses( + sessionKey, + ); + await pollAndProcessChatResponses(); + + expect(mockLogger.error).toHaveBeenCalled(); + }); + }); +}); diff --git a/packages/cli/src/chat/__tests__/utils.test.ts b/packages/cli/src/chat/__tests__/utils.test.ts new file mode 100644 index 00000000000..8fab34c7442 --- /dev/null +++ b/packages/cli/src/chat/__tests__/utils.test.ts @@ -0,0 +1,303 @@ +import type { IExecutionResponse } from '@n8n/db'; +import type { IDataObject, INode } from 'n8n-workflow'; +import { CHAT_WAIT_USER_REPLY, RESPOND_TO_WEBHOOK_NODE_TYPE } from 'n8n-workflow'; + +import { getMessage, getLastNodeExecuted, shouldResumeImmediately } from '../utils'; + +// helpers -------------------------------------------------------- +const createMockExecution = ( + overrides: IDataObject = {}, + firstExecutionData?: IDataObject, + nodeData?: IDataObject[], +): IExecutionResponse => { + const firstItem = firstExecutionData ?? { + json: { test: 'data' }, + sendMessage: 'Test message', + }; + const nodeRunData = nodeData ?? [ + { + data: { + main: [[firstItem]], + }, + }, + ]; + + return { + id: 'test-execution-id', + data: { + resultData: { + lastNodeExecuted: 'TestNode', + runData: { + TestNode: nodeRunData, + }, + }, + }, + workflowData: { + nodes: [ + { + name: 'TestNode', + type: 'test-node', + parameters: {}, + }, + ], + }, + ...overrides, + } as unknown as IExecutionResponse; +}; + +const createMockNode = (overrides: Partial = {}): INode => + ({ + name: 'TestNode', + type: 'test-node', + parameters: {}, + ...overrides, + }) as INode; + +// --------------------------------------------------------- + +describe('getMessage', () => { + it('should return sendMessage from the last node execution', () => { + const execution = createMockExecution(); + const result = getMessage(execution); + expect(result).toBe('Test message'); + }); + + it('should return undefined when no sendMessage exists', () => { + const execution = createMockExecution( + {}, + { + json: { test: 'data' }, + }, + ); + const result = getMessage(execution); + expect(result).toBeUndefined(); + }); + + it('should return undefined when nodeExecutionData is empty', () => { + const execution = createMockExecution({}, undefined, [ + { + data: { + main: [[]], + }, + }, + ]); + const result = getMessage(execution); + expect(result).toBeUndefined(); + }); + + it('should handle multiple run data entries and use the last one', () => { + const execution = createMockExecution({}, undefined, [ + { + data: { + main: [ + [ + { + json: { test: 'first' }, + sendMessage: 'First message', + }, + ], + ], + }, + }, + { + data: { + main: [ + [ + { + json: { test: 'second' }, + sendMessage: 'Second message', + }, + ], + ], + }, + }, + ]); + const result = getMessage(execution); + expect(result).toBe('Second message'); + }); + + it('should return undefined when main data is missing', () => { + const execution = createMockExecution({}, undefined, [ + { + data: {}, + }, + ]); + const result = getMessage(execution); + expect(result).toBeUndefined(); + }); + + it('should return undefined when nodeExecutionData is undefined', () => { + const execution = createMockExecution({ + data: { + resultData: { + lastNodeExecuted: 'TestNode', + runData: { + TestNode: [ + { + data: { + main: undefined, + }, + }, + ], + }, + }, + }, + }); + const result = getMessage(execution); + expect(result).toBeUndefined(); + }); +}); + +describe('getLastNodeExecuted', () => { + it('should return the node that was last executed', () => { + const execution = createMockExecution(); + const result = getLastNodeExecuted(execution); + expect(result).toEqual({ + name: 'TestNode', + type: 'test-node', + parameters: {}, + }); + }); + + it('should return undefined when last executed node is not found', () => { + const execution = createMockExecution({ + data: { + resultData: { + lastNodeExecuted: 'NonExistentNode', + runData: {}, + }, + }, + }); + const result = getLastNodeExecuted(execution); + expect(result).toBeUndefined(); + }); + + it('should find the correct node among multiple nodes', () => { + const execution = createMockExecution({ + data: { + resultData: { + lastNodeExecuted: 'SecondNode', + runData: {}, + }, + }, + workflowData: { + nodes: [ + { + name: 'FirstNode', + type: 'first-type', + parameters: {}, + }, + { + name: 'SecondNode', + type: 'second-type', + parameters: { test: 'value' }, + }, + ], + }, + }); + const result = getLastNodeExecuted(execution); + expect(result).toEqual({ + name: 'SecondNode', + type: 'second-type', + parameters: { test: 'value' }, + }); + }); + + it('should return undefined when workflowData.nodes is undefined', () => { + const execution = createMockExecution({ + workflowData: undefined, + }); + const result = getLastNodeExecuted(execution); + expect(result).toBeUndefined(); + }); +}); + +describe('shouldResumeImmediately', () => { + it('should return true for RESPOND_TO_WEBHOOK_NODE_TYPE', () => { + const node = createMockNode({ + type: RESPOND_TO_WEBHOOK_NODE_TYPE, + }); + const result = shouldResumeImmediately(node); + expect(result).toBe(true); + }); + + it('should return true when CHAT_WAIT_USER_REPLY is false', () => { + const node = createMockNode({ + parameters: { + options: { + [CHAT_WAIT_USER_REPLY]: false, + }, + }, + }); + const result = shouldResumeImmediately(node); + expect(result).toBe(true); + }); + + it('should return false when CHAT_WAIT_USER_REPLY is true', () => { + const node = createMockNode({ + parameters: { + options: { + [CHAT_WAIT_USER_REPLY]: true, + }, + }, + }); + const result = shouldResumeImmediately(node); + expect(result).toBe(false); + }); + + it('should return false when CHAT_WAIT_USER_REPLY is undefined', () => { + const node = createMockNode({ + parameters: { + options: {}, + }, + }); + const result = shouldResumeImmediately(node); + expect(result).toBe(false); + }); + + it('should return false when no options exist', () => { + const node = createMockNode({ + parameters: {}, + }); + const result = shouldResumeImmediately(node); + expect(result).toBe(false); + }); + + it('should return false when no parameters exist', () => { + const node = createMockNode({ + parameters: undefined, + }); + const result = shouldResumeImmediately(node); + expect(result).toBe(false); + }); + + it('should handle null node', () => { + const result = shouldResumeImmediately(null as any); + expect(result).toBe(false); + }); + + it('should handle undefined node', () => { + const result = shouldResumeImmediately(undefined as any); + expect(result).toBe(false); + }); + + it('should return true when CHAT_WAIT_USER_REPLY is false directly in parameters', () => { + const node = createMockNode({ + parameters: { + [CHAT_WAIT_USER_REPLY]: false, + }, + }); + const result = shouldResumeImmediately(node); + expect(result).toBe(true); + }); + + it('should return false when CHAT_WAIT_USER_REPLY is true directly in parameters', () => { + const node = createMockNode({ + parameters: { + [CHAT_WAIT_USER_REPLY]: true, + }, + }); + const result = shouldResumeImmediately(node); + expect(result).toBe(false); + }); +}); diff --git a/packages/cli/src/chat/chat-execution-manager.ts b/packages/cli/src/chat/chat-execution-manager.ts new file mode 100644 index 00000000000..d3d9e446984 --- /dev/null +++ b/packages/cli/src/chat/chat-execution-manager.ts @@ -0,0 +1,156 @@ +import { ExecutionRepository } from '@n8n/db'; +import type { IExecutionResponse, Project } from '@n8n/db'; +import { Service } from '@n8n/di'; +import { ExecuteContext } from 'n8n-core'; +import type { + IBinaryKeyData, + INodeExecutionData, + IWorkflowExecutionDataProcess, +} from 'n8n-workflow'; +import { Workflow, BINARY_ENCODING } from 'n8n-workflow'; + +import { NotFoundError } from '@/errors/response-errors/not-found.error'; +import * as WorkflowExecuteAdditionalData from '@/workflow-execute-additional-data'; +import { WorkflowRunner } from '@/workflow-runner'; + +import type { ChatMessage } from './chat-service.types'; +import { NodeTypes } from '../node-types'; +import { OwnershipService } from '../services/ownership.service'; + +@Service() +export class ChatExecutionManager { + constructor( + private readonly executionRepository: ExecutionRepository, + private readonly workflowRunner: WorkflowRunner, + private readonly ownershipService: OwnershipService, + private readonly nodeTypes: NodeTypes, + ) {} + + async runWorkflow(execution: IExecutionResponse, message: ChatMessage) { + await this.workflowRunner.run( + await this.getRunData(execution, message), + true, + true, + execution.id, + ); + } + + async cancelExecution(executionId: string) { + const execution = await this.executionRepository.findSingleExecution(executionId, { + includeData: true, + unflattenData: true, + }); + + if (!execution) return; + + if (['running', 'waiting', 'unknown'].includes(execution.status)) { + await this.executionRepository.update({ id: executionId }, { status: 'canceled' }); + } + } + + async findExecution(executionId: string) { + return await this.executionRepository.findSingleExecution(executionId, { + includeData: true, + unflattenData: true, + }); + } + async checkIfExecutionExists(executionId: string) { + return await this.executionRepository.findSingleExecution(executionId); + } + + private getWorkflow(execution: IExecutionResponse) { + const { workflowData } = execution; + return new Workflow({ + id: workflowData.id, + name: workflowData.name, + nodes: workflowData.nodes, + connections: workflowData.connections, + active: workflowData.active, + nodeTypes: this.nodeTypes, + staticData: workflowData.staticData, + settings: workflowData.settings, + }); + } + + private async mapFilesToBinaryData(context: ExecuteContext, files: ChatMessage['files']) { + if (!files) return; + const binary: IBinaryKeyData = {}; + + for (const [index, file] of files.entries()) { + const base64 = file.data; + const buffer = Buffer.from(base64, BINARY_ENCODING); + const binaryData = await context.helpers.prepareBinaryData(buffer, file.name, file.type); + + binary[`data_${index}`] = binaryData; + } + + return binary; + } + + private async runNode(execution: IExecutionResponse, message: ChatMessage) { + const workflow = this.getWorkflow(execution); + const lastNodeExecuted = execution.data.resultData.lastNodeExecuted as string; + const node = workflow.getNode(lastNodeExecuted); + const additionalData = await WorkflowExecuteAdditionalData.getBase(); + const executionData = execution.data.executionData?.nodeExecutionStack[0]; + + if (!node || !executionData) return null; + + const inputData = executionData.data; + const connectionInputData = executionData.data.main[0]; + const nodeType = workflow.nodeTypes.getByNameAndVersion(node.type, node.typeVersion); + const context = new ExecuteContext( + workflow, + node, + additionalData, + 'manual', + execution.data, + 0, + connectionInputData ?? [], + inputData, + executionData, + [], + ); + + const { sessionId, action, chatInput, files } = message; + const binary = await this.mapFilesToBinaryData(context, files); + + const nodeExecutionData: INodeExecutionData = { json: { sessionId, action, chatInput } }; + if (binary && Object.keys(binary).length > 0) { + nodeExecutionData.binary = binary; + } + + if (nodeType.onMessage) { + return await nodeType.onMessage(context, nodeExecutionData); + } + + return [[nodeExecutionData]]; + } + + private async getRunData(execution: IExecutionResponse, message: ChatMessage) { + const { workflowData, mode: executionMode, data: runExecutionData } = execution; + + runExecutionData.executionData!.nodeExecutionStack[0].data.main = (await this.runNode( + execution, + message, + )) ?? [[{ json: message }]]; + + let project: Project | undefined = undefined; + try { + project = await this.ownershipService.getWorkflowProjectCached(workflowData.id); + } catch (error) { + throw new NotFoundError('Cannot find workflow'); + } + + const runData: IWorkflowExecutionDataProcess = { + executionMode, + executionData: runExecutionData, + pushRef: runExecutionData.pushRef, + workflowData, + pinData: runExecutionData.resultData.pinData, + projectId: project?.id, + }; + + return runData; + } +} diff --git a/packages/cli/src/chat/chat-server.ts b/packages/cli/src/chat/chat-server.ts new file mode 100644 index 00000000000..444d5c3d166 --- /dev/null +++ b/packages/cli/src/chat/chat-server.ts @@ -0,0 +1,54 @@ +import { Service } from '@n8n/di'; +import { OnShutdown } from '@n8n/decorators'; +import type { Application } from 'express'; +import type { Server as HttpServer } from 'http'; +import { ServerResponse } from 'http'; +import { parse as parseUrl } from 'url'; +import type { WebSocket } from 'ws'; +import { Server as WebSocketServer } from 'ws'; + +import { ChatService } from './chat-service'; +import type { ChatRequest } from './chat-service.types'; + +interface ExpressApplication extends Application { + handle: (req: any, res: any) => void; +} + +@Service() +export class ChatServer { + private readonly wsServer = new WebSocketServer({ noServer: true }); + + constructor(private readonly chatService: ChatService) {} + + setup(server: HttpServer, app: Application) { + server.on('upgrade', (req: ChatRequest, socket, head) => { + const parsedUrl = parseUrl(req.url ?? ''); + + if (parsedUrl.pathname?.startsWith('/chat')) { + this.wsServer.handleUpgrade(req, socket, head, (ws) => { + this.attachToApp(req, ws, app as ExpressApplication); + }); + } + }); + + app.use('/chat', async (req: ChatRequest) => { + await this.chatService.startSession(req); + }); + } + + private attachToApp(req: ChatRequest, ws: WebSocket, app: ExpressApplication) { + req.ws = ws; + const res = new ServerResponse(req); + res.writeHead = (statusCode) => { + if (statusCode > 200) ws.close(); + return res; + }; + + app.handle(req, res); + } + + @OnShutdown() + shutdown() { + this.wsServer.close(); + } +} diff --git a/packages/cli/src/chat/chat-service.ts b/packages/cli/src/chat/chat-service.ts new file mode 100644 index 00000000000..8d00ca739a1 --- /dev/null +++ b/packages/cli/src/chat/chat-service.ts @@ -0,0 +1,339 @@ +import { Logger } from '@n8n/backend-common'; +import { Service } from '@n8n/di'; +import { OnShutdown } from '@n8n/decorators'; +import { jsonParse, UnexpectedError, ensureError } from 'n8n-workflow'; +import { type RawData, WebSocket } from 'ws'; +import { z } from 'zod'; + +import { ChatExecutionManager } from './chat-execution-manager'; +import { + chatMessageSchema, + type ChatMessage, + type ChatRequest, + Session, +} from './chat-service.types'; +import { getLastNodeExecuted, getMessage, shouldResumeImmediately } from './utils'; +import { ErrorReporter } from 'n8n-core'; +import { IExecutionResponse } from '@n8n/db'; + +const CHECK_FOR_RESPONSE_INTERVAL = 3000; +const DRAIN_TIMEOUT = 50; +const HEARTBEAT_INTERVAL = 30 * 1000; +const HEARTBEAT_TIMEOUT = 60 * 1000; + +/** + * let frontend know that no user input is expected + */ +const N8N_CONTINUE = 'n8n|continue'; +/** + * send message for heartbeat check + */ +const N8N_HEARTBEAT = 'n8n|heartbeat'; +/** + * frontend did acknowledge the heartbeat + */ +const N8N_HEARTBEAT_ACK = 'n8n|heartbeat-ack'; + +function closeConnection(ws: WebSocket) { + if (ws.readyState !== WebSocket.OPEN) return; + + ws.once('drain', () => { + ws.close(); + }); + + setTimeout(() => { + if (ws.readyState === WebSocket.OPEN) { + ws.close(); + } + }, DRAIN_TIMEOUT); +} + +@Service() +export class ChatService { + private readonly sessions = new Map(); + private heartbeatIntervalId: NodeJS.Timeout; + + constructor( + private readonly executionManager: ChatExecutionManager, + private readonly logger: Logger, + private readonly errorReporter: ErrorReporter, + ) { + this.heartbeatIntervalId = setInterval( + async () => await this.checkHeartbeats(), + HEARTBEAT_INTERVAL, + ); + } + + async startSession(req: ChatRequest) { + const { + ws, + query: { sessionId, executionId, isPublic }, + } = req; + + if (!ws) { + throw new UnexpectedError('WebSocket connection is missing'); + } + + if (!sessionId || !executionId) { + ws.close(1008); + return; + } + + const execution = await this.executionManager.checkIfExecutionExists(executionId); + + if (!execution) { + ws.send(`Execution with id "${executionId}" does not exist`); + ws.close(1008); + return; + } + + ws.isAlive = true; + + const key = `${sessionId}|${executionId}|${isPublic ? 'public' : 'integrated'}`; + + const existingSession = this.sessions.get(key); + if (existingSession) { + this.cleanupSession(existingSession, key); + } + + const onMessage = this.incomingMessageHandler(key); + const respondToChat = this.pollAndProcessChatResponses(key); + + const intervalId = setInterval(async () => await respondToChat(), CHECK_FOR_RESPONSE_INTERVAL); + + ws.once('close', () => { + ws.off('message', onMessage); + clearInterval(intervalId); + this.sessions.delete(key); + }); + + ws.on('message', onMessage); + + const session: Session = { + connection: ws, + executionId, + sessionId, + intervalId, + isPublic: isPublic ?? false, + isProcessing: false, + lastHeartbeat: Date.now(), + }; + + this.sessions.set(key, session); + + ws.send(N8N_HEARTBEAT); + } + + private async processWaitingExecution( + execution: IExecutionResponse, + session: Session, + sessionKey: string, + ) { + const message = getMessage(execution); + + if (message === undefined) return; + + session.connection.send(message); + + const lastNode = getLastNodeExecuted(execution); + + if (lastNode && shouldResumeImmediately(lastNode)) { + session.connection.send(N8N_CONTINUE); + const data: ChatMessage = { + action: 'sendMessage', + chatInput: '', + sessionId: session.sessionId, + }; + await this.resumeExecution(session.executionId, data, sessionKey); + session.nodeWaitingForChatResponse = undefined; + } else { + session.nodeWaitingForChatResponse = lastNode?.name; + } + } + + private processSuccessExecution(session: Session) { + closeConnection(session.connection); + return; + } + + private waitForChatResponseOrContinue(execution: IExecutionResponse, session: Session) { + const lastNode = getLastNodeExecuted(execution); + + if (execution.status === 'waiting' && lastNode?.name !== session.nodeWaitingForChatResponse) { + session.connection.send(N8N_CONTINUE); + session.nodeWaitingForChatResponse = undefined; + } + } + + private pollAndProcessChatResponses(sessionKey: string) { + return async () => { + const session = this.sessions.get(sessionKey); + + if (!session) return; + if (session.isProcessing) return; + + try { + session.isProcessing = true; + + if (!session.executionId || !session.connection) return; + + const execution = await this.getExecutionOrCleanupSession(session.executionId, sessionKey); + + if (!execution) return; + + if (session.nodeWaitingForChatResponse) { + this.waitForChatResponseOrContinue(execution, session); + return; + } + + if (execution.status === 'waiting') { + await this.processWaitingExecution(execution, session, sessionKey); + return; + } + + if (execution.status === 'success') { + this.processSuccessExecution(session); + return; + } + } catch (e) { + const error = ensureError(e); + this.errorReporter.error(error); + + this.logger.error( + `Error sending message to chat in session ${sessionKey}: ${error.message}`, + ); + } finally { + // get only active sessions, as it could have been deleted, and set isProcessing to false + const activeSession = this.sessions.get(sessionKey); + if (activeSession) { + activeSession.isProcessing = false; + } + } + }; + } + + private incomingMessageHandler(sessionKey: string) { + return async (data: RawData) => { + try { + const session = this.sessions.get(sessionKey); + + if (!session) return; + + const message = this.stringifyRawData(data); + + if (message === N8N_HEARTBEAT_ACK) { + session.lastHeartbeat = Date.now(); + return; + } + + const executionId = session.executionId; + + await this.resumeExecution(executionId, this.parseChatMessage(message), sessionKey); + session.nodeWaitingForChatResponse = undefined; + } catch (e) { + const error = ensureError(e); + this.errorReporter.error(error); + this.logger.error( + `Error processing message from chat in session ${sessionKey}: ${error.message}`, + ); + } + }; + } + + private async resumeExecution(executionId: string, message: ChatMessage, sessionKey: string) { + const execution = await this.getExecutionOrCleanupSession(executionId, sessionKey); + if (!execution || execution.status !== 'waiting') return; + await this.executionManager.runWorkflow(execution, message); + } + + private async getExecutionOrCleanupSession(executionId: string, sessionKey: string) { + const execution = await this.executionManager.findExecution(executionId); + + if (!execution || ['error', 'canceled', 'crashed'].includes(execution.status)) { + const session = this.sessions.get(sessionKey); + + if (!session) return null; + + this.cleanupSession(session, sessionKey); + return null; + } + + if (execution.status === 'running') return null; + + return execution; + } + + private stringifyRawData(data: RawData) { + const buffer = Array.isArray(data) + ? Buffer.concat(data.map((chunk) => Buffer.from(chunk))) + : Buffer.from(data); + + return buffer.toString('utf8'); + } + + private cleanupSession(session: Session, sessionKey: string) { + session.connection.terminate(); + clearInterval(session.intervalId); + if (sessionKey) this.sessions.delete(sessionKey); + } + + private parseChatMessage(message: string): ChatMessage { + try { + const parsedMessage = chatMessageSchema.parse(jsonParse(message)); + + if (parsedMessage.files) { + parsedMessage.files = parsedMessage.files.map((file) => ({ + ...file, + data: file.data.includes('base64,') ? file.data.split('base64,')[1] : file.data, + })); + } + + return parsedMessage; + } catch (error) { + if (error instanceof z.ZodError) { + throw new UnexpectedError( + `Chat message validation error: ${error.errors.map((error) => error.message).join(', ')}`, + ); + } + throw error; + } + } + + private async checkHeartbeats() { + try { + const now = Date.now(); + + for (const [key, session] of this.sessions.entries()) { + const timeSinceLastHeartbeat = now - (session.lastHeartbeat ?? 0); + + if (timeSinceLastHeartbeat > HEARTBEAT_TIMEOUT) { + await this.executionManager.cancelExecution(session.executionId); + this.cleanupSession(session, key); + } else { + try { + session.connection.send(N8N_HEARTBEAT); + } catch (e) { + this.cleanupSession(session, key); + const error = ensureError(e); + this.errorReporter.error(error); + this.logger.error(`Error sending heartbeat to session ${key}: ${error.message}`); + } + } + } + } catch (e) { + const error = ensureError(e); + this.errorReporter.error(error); + this.logger.error(`Error checking heartbeats: ${error.message}`); + } + } + + @OnShutdown() + shutdown() { + for (const [key, session] of this.sessions.entries()) { + this.cleanupSession(session, key); + } + + this.sessions.clear(); + clearInterval(this.heartbeatIntervalId); + } +} diff --git a/packages/cli/src/chat/chat-service.types.ts b/packages/cli/src/chat/chat-service.types.ts new file mode 100644 index 00000000000..134a846d8df --- /dev/null +++ b/packages/cli/src/chat/chat-service.types.ts @@ -0,0 +1,41 @@ +import type { IncomingMessage } from 'http'; +import type { WebSocket } from 'ws'; +import { z } from 'zod'; + +export interface ChatRequest extends IncomingMessage { + url: string; + query: { + sessionId: string; + executionId: string; + isPublic?: boolean; + }; + ws: WebSocket; +} + +export type Session = { + connection: WebSocket; + executionId: string; + sessionId: string; + intervalId: NodeJS.Timeout; + nodeWaitingForChatResponse?: string; + isPublic: boolean; + isProcessing: boolean; + lastHeartbeat?: number; +}; + +export const chatMessageSchema = z.object({ + sessionId: z.string(), + action: z.literal('sendMessage'), + chatInput: z.string(), + files: z + .array( + z.object({ + name: z.string(), + type: z.string(), + data: z.string(), + }), + ) + .optional(), +}); + +export type ChatMessage = z.infer; diff --git a/packages/cli/src/chat/utils.ts b/packages/cli/src/chat/utils.ts new file mode 100644 index 00000000000..c189ac34b89 --- /dev/null +++ b/packages/cli/src/chat/utils.ts @@ -0,0 +1,48 @@ +import type { IExecutionResponse } from '@n8n/db'; +import type { INode } from 'n8n-workflow'; +import { CHAT_WAIT_USER_REPLY, RESPOND_TO_WEBHOOK_NODE_TYPE } from 'n8n-workflow'; + +/** + * Returns the message to be sent of the last executed node + */ +export function getMessage(execution: IExecutionResponse) { + const lastNodeExecuted = execution.data.resultData.lastNodeExecuted; + if (typeof lastNodeExecuted !== 'string') return undefined; + + const runIndex = execution.data.resultData.runData[lastNodeExecuted].length - 1; + const nodeExecutionData = + execution.data.resultData.runData[lastNodeExecuted][runIndex]?.data?.main?.[0]; + return nodeExecutionData?.[0] ? nodeExecutionData[0].sendMessage : undefined; +} + +/** + * Returns the last node executed + */ +export function getLastNodeExecuted(execution: IExecutionResponse) { + const lastNodeExecuted = execution.data.resultData.lastNodeExecuted; + if (typeof lastNodeExecuted !== 'string') return undefined; + return execution.workflowData?.nodes?.find((node) => node.name === lastNodeExecuted); +} + +/** + * Check if execution should be resumed immediately after receivng a message + */ +export function shouldResumeImmediately(lastNode: INode) { + if (lastNode?.type === RESPOND_TO_WEBHOOK_NODE_TYPE) { + return true; + } + + if (lastNode?.parameters?.[CHAT_WAIT_USER_REPLY] === false) { + return true; + } + + const options = lastNode?.parameters?.options as { + [CHAT_WAIT_USER_REPLY]?: boolean; + }; + + if (options && options[CHAT_WAIT_USER_REPLY] === false) { + return true; + } + + return false; +} diff --git a/packages/cli/src/command-registry.ts b/packages/cli/src/command-registry.ts index a3f894e3923..96376ef1cbd 100644 --- a/packages/cli/src/command-registry.ts +++ b/packages/cli/src/command-registry.ts @@ -1,9 +1,8 @@ -import { Logger, ModuleRegistry } from '@n8n/backend-common'; +import { CliParser, Logger, ModuleRegistry } from '@n8n/backend-common'; import { CommandMetadata, type CommandEntry } from '@n8n/decorators'; import { Container, Service } from '@n8n/di'; import glob from 'fast-glob'; import picocolors from 'picocolors'; -import argvParser from 'yargs-parser'; import { z } from 'zod'; import './zod-alias-support'; @@ -15,14 +14,12 @@ import './zod-alias-support'; export class CommandRegistry { private commandName: string; - private readonly argv: argvParser.Arguments; - constructor( private readonly commandMetadata: CommandMetadata, private readonly moduleRegistry: ModuleRegistry, private readonly logger: Logger, + private readonly cliParser: CliParser, ) { - this.argv = argvParser(process.argv.slice(2)); this.commandName = process.argv[2] ?? 'start'; } @@ -51,13 +48,18 @@ export class CommandRegistry { return process.exit(1); } - if (this.argv.help || this.argv.h) { + if (process.argv.includes('--help') || process.argv.includes('-h')) { this.printCommandUsage(commandEntry); return process.exit(0); } + const { flags } = this.cliParser.parse({ + argv: process.argv, + flagsSchema: commandEntry.flagsSchema, + }); + const command = Container.get(commandEntry.class); - command.flags = this.parseFlags(commandEntry); + command.flags = flags; let error: Error | undefined = undefined; try { @@ -71,26 +73,6 @@ export class CommandRegistry { } } - parseFlags(commandEntry: CommandEntry) { - if (!commandEntry.flagsSchema) return {}; - const { _, ...argv } = this.argv; - Object.entries(commandEntry.flagsSchema.shape).forEach(([key, flagSchema]) => { - let schemaDef = flagSchema._def as z.ZodTypeDef & { - typeName: string; - innerType?: z.ZodType; - }; - if (schemaDef.typeName === 'ZodOptional' && schemaDef.innerType) { - schemaDef = schemaDef.innerType._def as typeof schemaDef; - } - const alias = schemaDef._alias; - if (alias?.length && !(key in argv) && argv[alias]) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - argv[key] = argv[alias]; - } - }); - return commandEntry.flagsSchema.parse(argv); - } - async listAllCommands() { // Import all command files to register all the non-module commands const commandFiles = await glob('./commands/**/*.js', { diff --git a/packages/cli/src/commands/__tests__/execute-batch.test.ts b/packages/cli/src/commands/__tests__/execute-batch.test.ts index 50da9f63474..498f3129145 100644 --- a/packages/cli/src/commands/__tests__/execute-batch.test.ts +++ b/packages/cli/src/commands/__tests__/execute-batch.test.ts @@ -3,11 +3,12 @@ import { GlobalConfig } from '@n8n/config'; import type { User, WorkflowEntity } from '@n8n/db'; import { WorkflowRepository, DbConnection } from '@n8n/db'; import { Container } from '@n8n/di'; -import type { SelectQueryBuilder } from '@n8n/typeorm'; +import { type SelectQueryBuilder } from '@n8n/typeorm'; import { mock } from 'jest-mock-extended'; import type { IRun } from 'n8n-workflow'; import { ActiveExecutions } from '@/active-executions'; +import { CommunityPackagesService } from '@/community-packages/community-packages.service'; import { DeprecationService } from '@/deprecation/deprecation.service'; import { MessageEventBus } from '@/eventbus/message-event-bus/message-event-bus'; import { TelemetryEventRelay } from '@/events/relays/telemetry.event-relay'; @@ -33,6 +34,7 @@ mockInstance(MessageEventBus); const posthogClient = mockInstance(PostHogClient); const telemetryEventRelay = mockInstance(TelemetryEventRelay); const externalHooks = mockInstance(ExternalHooks); +mockInstance(CommunityPackagesService); const dbConnection = mockInstance(DbConnection); dbConnection.init.mockResolvedValue(undefined); @@ -69,7 +71,7 @@ test('should start a task runner when task runners are enabled', async () => { GlobalConfig, mock({ taskRunners: { enabled: true }, - nodes: { communityPackages: { enabled: false } }, + nodes: {}, }), ); diff --git a/packages/cli/src/commands/__tests__/execute.test.ts b/packages/cli/src/commands/__tests__/execute.test.ts index 1934cb8fde1..db0ed1165f3 100644 --- a/packages/cli/src/commands/__tests__/execute.test.ts +++ b/packages/cli/src/commands/__tests__/execute.test.ts @@ -7,6 +7,7 @@ import { mock } from 'jest-mock-extended'; import type { IRun } from 'n8n-workflow'; import { ActiveExecutions } from '@/active-executions'; +import { CommunityPackagesService } from '@/community-packages/community-packages.service'; import { DeprecationService } from '@/deprecation/deprecation.service'; import { MessageEventBus } from '@/eventbus/message-event-bus/message-event-bus'; import { TelemetryEventRelay } from '@/events/relays/telemetry.event-relay'; @@ -32,6 +33,7 @@ mockInstance(MessageEventBus); const posthogClient = mockInstance(PostHogClient); const telemetryEventRelay = mockInstance(TelemetryEventRelay); const externalHooks = mockInstance(ExternalHooks); +mockInstance(CommunityPackagesService); const dbConnection = mockInstance(DbConnection); dbConnection.init.mockResolvedValue(undefined); @@ -63,7 +65,7 @@ test('should start a task runner when task runners are enabled', async () => { GlobalConfig, mock({ taskRunners: { enabled: true }, - nodes: { communityPackages: { enabled: false } }, + nodes: {}, }), ); diff --git a/packages/cli/src/commands/base-command.ts b/packages/cli/src/commands/base-command.ts index bc0080e0de3..54bb986d85b 100644 --- a/packages/cli/src/commands/base-command.ts +++ b/packages/cli/src/commands/base-command.ts @@ -37,6 +37,7 @@ import { NodeTypes } from '@/node-types'; import { PostHogClient } from '@/posthog'; import { ShutdownService } from '@/shutdown/shutdown.service'; import { WorkflowHistoryManager } from '@/workflows/workflow-history.ee/workflow-history-manager.ee'; +import { CommunityPackagesConfig } from '@/community-packages/community-packages.config'; export abstract class BaseCommand { readonly flags: F; @@ -132,9 +133,11 @@ export abstract class BaseCommand { ); } - const { communityPackages } = this.globalConfig.nodes; - if (communityPackages.enabled && this.needsCommunityPackages) { - const { CommunityPackagesService } = await import('@/services/community-packages.service'); + const communityPackagesConfig = Container.get(CommunityPackagesConfig); + if (communityPackagesConfig.enabled && this.needsCommunityPackages) { + const { CommunityPackagesService } = await import( + '@/community-packages/community-packages.service' + ); await Container.get(CommunityPackagesService).init(); } diff --git a/packages/cli/src/commands/community-node.ts b/packages/cli/src/commands/community-node.ts index c9b7ff8c8c8..98373627e37 100644 --- a/packages/cli/src/commands/community-node.ts +++ b/packages/cli/src/commands/community-node.ts @@ -5,7 +5,7 @@ import { Container } from '@n8n/di'; import { z } from 'zod'; import { CredentialsService } from '@/credentials/credentials.service'; -import { CommunityPackagesService } from '@/services/community-packages.service'; +import { CommunityPackagesService } from '@/community-packages/community-packages.service'; import { BaseCommand } from './base-command'; diff --git a/packages/cli/src/commands/start.ts b/packages/cli/src/commands/start.ts index f54e22ece0b..2bb409468b7 100644 --- a/packages/cli/src/commands/start.ts +++ b/packages/cli/src/commands/start.ts @@ -33,6 +33,7 @@ import { ExecutionsPruningService } from '@/services/pruning/executions-pruning. import { UrlService } from '@/services/url.service'; import { WaitTracker } from '@/wait-tracker'; import { WorkflowRunner } from '@/workflow-runner'; +import { CommunityPackagesConfig } from '@/community-packages/community-packages.config'; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment const open = require('open'); @@ -126,7 +127,7 @@ export class Start extends BaseCommand> { private async generateStaticAssets() { // Read the index file and replace the path placeholder const n8nPath = this.globalConfig.path; - const hooksUrls = config.getEnv('externalFrontendHooksUrls'); + const hooksUrls = this.globalConfig.externalFrontendHooksUrls; let scriptsString = ''; if (hooksUrls) { @@ -147,7 +148,6 @@ export class Start extends BaseCommand> { replaceStream('/{{BASE_PATH}}/', n8nPath, { ignoreCase: false }), replaceStream('/%7B%7BBASE_PATH%7D%7D/', n8nPath, { ignoreCase: false }), replaceStream('/%257B%257BBASE_PATH%257D%257D/', n8nPath, { ignoreCase: false }), - replaceStream('/static/', n8nPath + 'static/', { ignoreCase: false }), ]; if (filePath.endsWith('index.html')) { streams.push( @@ -179,14 +179,14 @@ export class Start extends BaseCommand> { } const { flags } = this; - const { communityPackages } = this.globalConfig.nodes; + const communityPackagesConfig = Container.get(CommunityPackagesConfig); // cli flag overrides the config env variable if (flags.reinstallMissingPackages) { - if (communityPackages.enabled) { + if (communityPackagesConfig.enabled) { this.logger.warn( '`--reinstallMissingPackages` is deprecated: Please use the env variable `N8N_REINSTALL_MISSING_PACKAGES` instead', ); - communityPackages.reinstallMissing = true; + communityPackagesConfig.reinstallMissing = true; } else { this.logger.warn( '`--reinstallMissingPackages` was passed, but community packages are disabled', diff --git a/packages/cli/src/services/__tests__/community-node-types.service.test.ts b/packages/cli/src/community-packages/__tests__/community-node-types.service.test.ts similarity index 78% rename from packages/cli/src/services/__tests__/community-node-types.service.test.ts rename to packages/cli/src/community-packages/__tests__/community-node-types.service.test.ts index e7a7abbe45d..8d63c09d17a 100644 --- a/packages/cli/src/services/__tests__/community-node-types.service.test.ts +++ b/packages/cli/src/community-packages/__tests__/community-node-types.service.test.ts @@ -1,22 +1,20 @@ import { inProduction } from '@n8n/backend-common'; -import { getCommunityNodeTypes } from '../../utils/community-node-types-utils'; +import { getCommunityNodeTypes } from '../community-node-types-utils'; import { CommunityNodeTypesService } from '../community-node-types.service'; jest.mock('@n8n/backend-common', () => ({ + ...jest.requireActual('@n8n/backend-common'), inProduction: jest.fn().mockReturnValue(false), - logger: jest.fn().mockImplementation(() => ({ - error: jest.fn(), - })), })); -jest.mock('../../utils/community-node-types-utils', () => ({ +jest.mock('../community-node-types-utils', () => ({ getCommunityNodeTypes: jest.fn().mockResolvedValue([]), })); describe('CommunityNodeTypesService', () => { let service: CommunityNodeTypesService; - let globalConfigMock: any; + let configMock: any; let communityPackagesServiceMock: any; let loggerMock: any; @@ -26,21 +24,13 @@ describe('CommunityNodeTypesService', () => { delete process.env.ENVIRONMENT; loggerMock = { error: jest.fn() }; - globalConfigMock = { - nodes: { - communityPackages: { - enabled: true, - verifiedEnabled: true, - }, - }, + configMock = { + enabled: true, + verifiedEnabled: true, }; communityPackagesServiceMock = {}; - service = new CommunityNodeTypesService( - loggerMock, - globalConfigMock, - communityPackagesServiceMock, - ); + service = new CommunityNodeTypesService(loggerMock, configMock, communityPackagesServiceMock); }); describe('fetchNodeTypes', () => { diff --git a/packages/cli/src/controllers/__tests__/community-packages.controller.test.ts b/packages/cli/src/community-packages/__tests__/community-packages.controller.test.ts similarity index 93% rename from packages/cli/src/controllers/__tests__/community-packages.controller.test.ts rename to packages/cli/src/community-packages/__tests__/community-packages.controller.test.ts index 5f3f491122d..e1e44f06d13 100644 --- a/packages/cli/src/controllers/__tests__/community-packages.controller.test.ts +++ b/packages/cli/src/community-packages/__tests__/community-packages.controller.test.ts @@ -2,13 +2,13 @@ import type { CommunityNodeType } from '@n8n/api-types'; import type { InstalledPackages } from '@n8n/db'; import { mock } from 'jest-mock-extended'; -import { CommunityPackagesController } from '@/controllers/community-packages.controller'; +import { CommunityPackagesController } from '@/community-packages/community-packages.controller'; import type { NodeRequest } from '@/requests'; import type { EventService } from '../../events/event.service'; import type { Push } from '../../push'; -import type { CommunityNodeTypesService } from '../../services/community-node-types.service'; -import type { CommunityPackagesService } from '../../services/community-packages.service'; +import type { CommunityNodeTypesService } from '../community-node-types.service'; +import type { CommunityPackagesService } from '../community-packages.service'; describe('CommunityPackagesController', () => { const push = mock(); diff --git a/packages/cli/src/services/__tests__/community-packages.service.test.ts b/packages/cli/src/community-packages/__tests__/community-packages.service.test.ts similarity index 96% rename from packages/cli/src/services/__tests__/community-packages.service.test.ts rename to packages/cli/src/community-packages/__tests__/community-packages.service.test.ts index cd1d2cda4d8..11f92d99c9f 100644 --- a/packages/cli/src/services/__tests__/community-packages.service.test.ts +++ b/packages/cli/src/community-packages/__tests__/community-packages.service.test.ts @@ -1,6 +1,5 @@ import type { Logger } from '@n8n/backend-common'; import { randomName, mockInstance } from '@n8n/backend-test-utils'; -import type { GlobalConfig } from '@n8n/config'; import { LICENSE_FEATURES } from '@n8n/constants'; import { InstalledNodes, @@ -17,6 +16,7 @@ import type { InstanceSettings, PackageDirectoryLoader } from 'n8n-core'; import type { PublicInstalledPackage } from 'n8n-workflow'; import { join } from 'node:path'; +import { CommunityPackagesService } from '@/community-packages/community-packages.service'; import { NODE_PACKAGE_PREFIX, NPM_COMMAND_TOKENS, @@ -24,14 +24,15 @@ import { RESPONSE_ERROR_MESSAGES, } from '@/constants'; import { FeatureNotLicensedError } from '@/errors/feature-not-licensed.error'; -import type { CommunityPackages } from '@/interfaces'; import type { License } from '@/license'; import type { LoadNodesAndCredentials } from '@/load-nodes-and-credentials'; import type { Publisher } from '@/scaling/pubsub/publisher.service'; -import { CommunityPackagesService } from '@/services/community-packages.service'; import { COMMUNITY_NODE_VERSION, COMMUNITY_PACKAGE_VERSION } from '@test-integration/constants'; import { mockPackageName, mockPackagePair } from '@test-integration/utils'; +import type { CommunityPackagesConfig } from '../community-packages.config'; +import type { CommunityPackages } from '../community-packages.types'; + jest.mock('fs/promises'); jest.mock('child_process'); jest.mock('axios'); @@ -46,14 +47,10 @@ const execMock = ((...args) => { describe('CommunityPackagesService', () => { const license = mock(); - const globalConfig = mock({ - nodes: { - communityPackages: { - reinstallMissing: false, - registry: 'some.random.host', - unverifiedEnabled: true, - }, - }, + const config = mock({ + reinstallMissing: false, + registry: 'some.random.host', + unverifiedEnabled: true, }); const loadNodesAndCredentials = mock(); const installedNodesRepository = mockInstance(InstalledNodesRepository); @@ -72,7 +69,7 @@ describe('CommunityPackagesService', () => { loadNodesAndCredentials, publisher, license, - globalConfig, + config, ); beforeEach(() => { @@ -384,7 +381,7 @@ describe('CommunityPackagesService', () => { const testBlockDownloadDir = instanceSettings.nodesDownloadDir; const testBlockPackageDir = `${testBlockDownloadDir}/node_modules/${PACKAGE_NAME}`; const testBlockTarballName = `${PACKAGE_NAME}-latest.tgz`; - const testBlockRegistry = globalConfig.nodes.communityPackages.registry; + const testBlockRegistry = config.registry; const testBlockNpmInstallArgs = [ '--audit=false', '--fund=false', @@ -519,8 +516,8 @@ describe('CommunityPackagesService', () => { describe('installPackage', () => { test('should throw when installation of not vetted packages is forbidden', async () => { - globalConfig.nodes.communityPackages.unverifiedEnabled = false; - globalConfig.nodes.communityPackages.registry = 'https://registry.npmjs.org'; + config.unverifiedEnabled = false; + config.registry = 'https://registry.npmjs.org'; await expect(communityPackagesService.installPackage('package', '0.1.0')).rejects.toThrow( 'Installation of unverified community packages is forbidden!', ); @@ -601,7 +598,7 @@ describe('CommunityPackagesService', () => { loadNodesAndCredentials.isKnownNode.mockImplementation( (nodeType) => nodeType === 'node-type-2', ); - globalConfig.nodes.communityPackages.reinstallMissing = false; + config.reinstallMissing = false; await communityPackagesService.checkForMissingPackages(); @@ -616,7 +613,7 @@ describe('CommunityPackagesService', () => { installedPackageRepository.find.mockResolvedValue(installedPackages); loadNodesAndCredentials.isKnownNode.mockReturnValue(false); - globalConfig.nodes.communityPackages.reinstallMissing = true; + config.reinstallMissing = true; await communityPackagesService.checkForMissingPackages(); @@ -633,7 +630,7 @@ describe('CommunityPackagesService', () => { installedPackageRepository.find.mockResolvedValue(installedPackages); loadNodesAndCredentials.isKnownNode.mockReturnValue(false); - globalConfig.nodes.communityPackages.reinstallMissing = true; + config.reinstallMissing = true; communityPackagesService.installPackage = jest .fn() .mockRejectedValue(new Error('Installation failed')); @@ -650,7 +647,7 @@ describe('CommunityPackagesService', () => { installedPackageRepository.find.mockResolvedValue(installedPackages); loadNodesAndCredentials.isKnownNode.mockReturnValue(false); - globalConfig.nodes.communityPackages.reinstallMissing = true; + config.reinstallMissing = true; // First installation succeeds, second fails communityPackagesService.installPackage = jest diff --git a/packages/cli/src/utils/__tests__/npm-utils.test.ts b/packages/cli/src/community-packages/__tests__/npm-utils.test.ts similarity index 100% rename from packages/cli/src/utils/__tests__/npm-utils.test.ts rename to packages/cli/src/community-packages/__tests__/npm-utils.test.ts diff --git a/packages/cli/src/utils/__tests__/strapi-utils.test.ts b/packages/cli/src/community-packages/__tests__/strapi-utils.test.ts similarity index 100% rename from packages/cli/src/utils/__tests__/strapi-utils.test.ts rename to packages/cli/src/community-packages/__tests__/strapi-utils.test.ts diff --git a/packages/cli/src/utils/community-node-types-utils.ts b/packages/cli/src/community-packages/community-node-types-utils.ts similarity index 100% rename from packages/cli/src/utils/community-node-types-utils.ts rename to packages/cli/src/community-packages/community-node-types-utils.ts diff --git a/packages/cli/src/controllers/community-node-types.controller.ts b/packages/cli/src/community-packages/community-node-types.controller.ts similarity index 86% rename from packages/cli/src/controllers/community-node-types.controller.ts rename to packages/cli/src/community-packages/community-node-types.controller.ts index d0af7786912..e1f48d696fb 100644 --- a/packages/cli/src/controllers/community-node-types.controller.ts +++ b/packages/cli/src/community-packages/community-node-types.controller.ts @@ -2,7 +2,7 @@ import type { CommunityNodeType } from '@n8n/api-types'; import { Get, RestController } from '@n8n/decorators'; import { Request } from 'express'; -import { CommunityNodeTypesService } from '@/services/community-node-types.service'; +import { CommunityNodeTypesService } from '@/community-packages/community-node-types.service'; @RestController('/community-node-types') export class CommunityNodeTypesController { diff --git a/packages/cli/src/services/community-node-types.service.ts b/packages/cli/src/community-packages/community-node-types.service.ts similarity index 90% rename from packages/cli/src/services/community-node-types.service.ts rename to packages/cli/src/community-packages/community-node-types.service.ts index 901ddadf1e3..57e586214a5 100644 --- a/packages/cli/src/services/community-node-types.service.ts +++ b/packages/cli/src/community-packages/community-node-types.service.ts @@ -1,14 +1,12 @@ import type { CommunityNodeType } from '@n8n/api-types'; import { Logger, inProduction } from '@n8n/backend-common'; -import { GlobalConfig } from '@n8n/config'; import { Service } from '@n8n/di'; import { ensureError } from 'n8n-workflow'; +import { CommunityPackagesConfig } from '@/community-packages/community-packages.config'; + +import { getCommunityNodeTypes, StrapiCommunityNodeType } from './community-node-types-utils'; import { CommunityPackagesService } from './community-packages.service'; -import { - getCommunityNodeTypes, - StrapiCommunityNodeType, -} from '../utils/community-node-types-utils'; const UPDATE_INTERVAL = 8 * 60 * 60 * 1000; @@ -20,17 +18,14 @@ export class CommunityNodeTypesService { constructor( private readonly logger: Logger, - private globalConfig: GlobalConfig, + private config: CommunityPackagesConfig, private communityPackagesService: CommunityPackagesService, ) {} private async fetchNodeTypes() { try { let data: StrapiCommunityNodeType[] = []; - if ( - this.globalConfig.nodes.communityPackages.enabled && - this.globalConfig.nodes.communityPackages.verifiedEnabled - ) { + if (this.config.enabled && this.config.verifiedEnabled) { // Cloud sets ENVIRONMENT to 'production' or 'staging' depending on the environment const environment = this.detectEnvironment(); data = await getCommunityNodeTypes(environment); diff --git a/packages/cli/src/community-packages/community-packages.config.ts b/packages/cli/src/community-packages/community-packages.config.ts new file mode 100644 index 00000000000..2deb1f2d18c --- /dev/null +++ b/packages/cli/src/community-packages/community-packages.config.ts @@ -0,0 +1,28 @@ +import { Config, Env } from '@n8n/config'; + +@Config +export class CommunityPackagesConfig { + /** Whether to enable community packages */ + @Env('N8N_COMMUNITY_PACKAGES_ENABLED') + enabled: boolean = true; + + /** NPM registry URL to pull community packages from */ + @Env('N8N_COMMUNITY_PACKAGES_REGISTRY') + registry: string = 'https://registry.npmjs.org'; + + /** Whether to reinstall any missing community packages */ + @Env('N8N_REINSTALL_MISSING_PACKAGES') + reinstallMissing: boolean = false; + + /** Whether to block installation of not verified packages */ + @Env('N8N_UNVERIFIED_PACKAGES_ENABLED') + unverifiedEnabled: boolean = true; + + /** Whether to enable and show search suggestion of packages verified by n8n */ + @Env('N8N_VERIFIED_PACKAGES_ENABLED') + verifiedEnabled: boolean = true; + + /** Whether to load community packages */ + @Env('N8N_COMMUNITY_PACKAGES_PREVENT_LOADING') + preventLoading: boolean = false; +} diff --git a/packages/cli/src/controllers/community-packages.controller.ts b/packages/cli/src/community-packages/community-packages.controller.ts similarity index 97% rename from packages/cli/src/controllers/community-packages.controller.ts rename to packages/cli/src/community-packages/community-packages.controller.ts index 01bec06a1fb..4a0112e4841 100644 --- a/packages/cli/src/controllers/community-packages.controller.ts +++ b/packages/cli/src/community-packages/community-packages.controller.ts @@ -1,20 +1,20 @@ -import type { InstalledPackages } from '@n8n/db'; -import { Delete, Get, Patch, Post, RestController, GlobalScope } from '@n8n/decorators'; - import { RESPONSE_ERROR_MESSAGES, STARTER_TEMPLATE_NAME, UNKNOWN_FAILURE_REASON, } from '@/constants'; +import type { InstalledPackages } from '@n8n/db'; +import { Delete, Get, Patch, Post, RestController, GlobalScope } from '@n8n/decorators'; + +import type { CommunityPackages } from './community-packages.types'; +import { CommunityNodeTypesService } from './community-node-types.service'; + +import { CommunityPackagesService } from '@/community-packages/community-packages.service'; import { BadRequestError } from '@/errors/response-errors/bad-request.error'; import { InternalServerError } from '@/errors/response-errors/internal-server.error'; import { EventService } from '@/events/event.service'; -import type { CommunityPackages } from '@/interfaces'; import { Push } from '@/push'; import { NodeRequest } from '@/requests'; -import { CommunityPackagesService } from '@/services/community-packages.service'; - -import { CommunityNodeTypesService } from '../services/community-node-types.service'; const { PACKAGE_NOT_INSTALLED, diff --git a/packages/cli/src/services/community-packages.service.ts b/packages/cli/src/community-packages/community-packages.service.ts similarity index 97% rename from packages/cli/src/services/community-packages.service.ts rename to packages/cli/src/community-packages/community-packages.service.ts index 24c1a3ba6f7..fd55a8dad55 100644 --- a/packages/cli/src/services/community-packages.service.ts +++ b/packages/cli/src/community-packages/community-packages.service.ts @@ -1,5 +1,4 @@ import { Logger } from '@n8n/backend-common'; -import { GlobalConfig } from '@n8n/config'; import { LICENSE_FEATURES } from '@n8n/constants'; import type { InstalledPackages } from '@n8n/db'; import { InstalledPackagesRepository } from '@n8n/db'; @@ -22,13 +21,14 @@ import { UNKNOWN_FAILURE_REASON, } from '@/constants'; import { FeatureNotLicensedError } from '@/errors/feature-not-licensed.error'; -import type { CommunityPackages } from '@/interfaces'; import { License } from '@/license'; import { LoadNodesAndCredentials } from '@/load-nodes-and-credentials'; import { Publisher } from '@/scaling/pubsub/publisher.service'; import { toError } from '@/utils'; -import { isVersionExists, verifyIntegrity } from '../utils/npm-utils'; +import { CommunityPackagesConfig } from './community-packages.config'; +import type { CommunityPackages } from './community-packages.types'; +import { isVersionExists, verifyIntegrity } from './npm-utils'; const DEFAULT_REGISTRY = 'https://registry.npmjs.org'; const NPM_COMMON_ARGS = ['--audit=false', '--fund=false']; @@ -57,7 +57,7 @@ const { const asyncExec = promisify(exec); -const INVALID_OR_SUSPICIOUS_PACKAGE_NAME = /[^0-9a-z@\-./]/; +const INVALID_OR_SUSPICIOUS_PACKAGE_NAME = /[^0-9a-z@\-._/]/; type PackageJson = { name: 'installed-nodes'; @@ -82,7 +82,7 @@ export class CommunityPackagesService { private readonly loadNodesAndCredentials: LoadNodesAndCredentials, private readonly publisher: Publisher, private readonly license: License, - private readonly globalConfig: GlobalConfig, + private readonly config: CommunityPackagesConfig, ) {} async init() { @@ -312,7 +312,7 @@ export class CommunityPackagesService { if (missingPackages.size === 0) return; - const { reinstallMissing } = this.globalConfig.nodes.communityPackages; + const { reinstallMissing } = this.config; if (reinstallMissing) { this.logger.info('Attempting to reinstall missing packages', { missingPackages }); try { @@ -365,7 +365,7 @@ export class CommunityPackagesService { } private getNpmRegistry() { - const { registry } = this.globalConfig.nodes.communityPackages; + const { registry } = this.config; if (registry !== DEFAULT_REGISTRY && !this.license.isCustomNpmRegistryEnabled()) { throw new FeatureNotLicensedError(LICENSE_FEATURES.COMMUNITY_NODES_CUSTOM_REGISTRY); } @@ -379,7 +379,7 @@ export class CommunityPackagesService { } private checkInstallPermissions(checksumProvided: boolean) { - if (!this.globalConfig.nodes.communityPackages.unverifiedEnabled && !checksumProvided) { + if (!this.config.unverifiedEnabled && !checksumProvided) { throw new UnexpectedError('Installation of unverified community packages is forbidden!'); } } diff --git a/packages/cli/src/community-packages/community-packages.types.ts b/packages/cli/src/community-packages/community-packages.types.ts new file mode 100644 index 00000000000..213313a51b2 --- /dev/null +++ b/packages/cli/src/community-packages/community-packages.types.ts @@ -0,0 +1,22 @@ +export namespace CommunityPackages { + export type ParsedPackageName = { + packageName: string; + rawString: string; + scope?: string; + version?: string; + }; + + export type AvailableUpdates = { + [packageName: string]: { + current: string; + wanted: string; + latest: string; + location: string; + }; + }; + + export type PackageStatusCheck = { + status: 'OK' | 'Banned'; + reason?: string; + }; +} diff --git a/packages/cli/src/utils/npm-utils.ts b/packages/cli/src/community-packages/npm-utils.ts similarity index 100% rename from packages/cli/src/utils/npm-utils.ts rename to packages/cli/src/community-packages/npm-utils.ts diff --git a/packages/cli/src/utils/strapi-utils.ts b/packages/cli/src/community-packages/strapi-utils.ts similarity index 100% rename from packages/cli/src/utils/strapi-utils.ts rename to packages/cli/src/community-packages/strapi-utils.ts diff --git a/packages/cli/src/config/schema.ts b/packages/cli/src/config/schema.ts index d7bfad28d3c..c20dad10384 100644 --- a/packages/cli/src/config/schema.ts +++ b/packages/cli/src/config/schema.ts @@ -139,22 +139,6 @@ export const schema = { }, }, - externalFrontendHooksUrls: { - doc: 'URLs to external frontend hooks files, ; separated', - format: String, - default: '', - env: 'EXTERNAL_FRONTEND_HOOKS_URLS', - }, - - redis: { - prefix: { - doc: 'Prefix for all n8n related keys', - format: String, - default: 'n8n', - env: 'N8N_REDIS_KEY_PREFIX', - }, - }, - /** * @important Do not remove until after cloud hooks are updated to stop using convict config. */ @@ -170,10 +154,8 @@ export const schema = { */ ai: { enabled: { - doc: 'Whether AI features are enabled', format: Boolean, - default: false, - env: 'N8N_AI_ENABLED', + default: Container.get(GlobalConfig).ai.enabled, }, }, }; diff --git a/packages/cli/src/controllers/__tests__/ai.controller.test.ts b/packages/cli/src/controllers/__tests__/ai.controller.test.ts index 200f5ddd86f..e931b35e442 100644 --- a/packages/cli/src/controllers/__tests__/ai.controller.test.ts +++ b/packages/cli/src/controllers/__tests__/ai.controller.test.ts @@ -152,6 +152,7 @@ describe('AiController', () => { }, }, request.user, + expect.any(AbortSignal), ); expect(response.header).toHaveBeenCalledWith('Content-type', 'application/json-lines'); expect(response.flush).toHaveBeenCalled(); @@ -241,5 +242,157 @@ describe('AiController', () => { expect(response.json).not.toHaveBeenCalled(); expect(response.end).toHaveBeenCalled(); }); + + describe('Abort handling', () => { + it('should create AbortController and handle connection close', async () => { + let abortHandler: (() => void) | undefined; + let abortSignalPassed: AbortSignal | undefined; + + // Mock response.on to capture the close handler + response.on.mockImplementation((event: string, handler: () => void) => { + if (event === 'close') { + abortHandler = handler; + } + return response; + }); + + // Create a generator that yields once then checks for abort + async function* testGenerator() { + yield { + messages: [{ role: 'assistant', type: 'message', text: 'Processing...' } as const], + }; + // Check if aborted and throw if so + if (abortSignalPassed?.aborted) { + throw new Error('Aborted'); + } + } + + workflowBuilderService.chat.mockImplementation((_payload, _user, signal) => { + abortSignalPassed = signal; + return testGenerator(); + }); + + // Start the request (but don't await it) + const buildPromise = controller.build(request, response, payload); + + // Wait a bit to ensure the generator is created and starts processing + await new Promise((resolve) => setTimeout(resolve, 50)); + + // Verify abort signal was passed to the service + expect(abortSignalPassed).toBeDefined(); + expect(abortSignalPassed).toBeInstanceOf(AbortSignal); + expect(abortSignalPassed?.aborted).toBe(false); + + // Verify close handler was registered + expect(response.on).toHaveBeenCalledWith('close', expect.any(Function)); + expect(abortHandler).toBeDefined(); + + // Simulate connection close + abortHandler!(); + + // Verify the signal was aborted + expect(abortSignalPassed?.aborted).toBe(true); + + // Wait for the promise to settle + await buildPromise.catch(() => { + // Expected to throw due to abort + }); + + // Verify response was ended + expect(response.end).toHaveBeenCalled(); + }); + + it('should pass abort signal to workflow builder service', async () => { + let capturedSignal: AbortSignal | undefined; + + async function* mockGenerator() { + yield { messages: [{ role: 'assistant', type: 'message', text: 'Test' } as const] }; + } + + workflowBuilderService.chat.mockImplementation((_payload, _user, signal) => { + capturedSignal = signal; + return mockGenerator(); + }); + + await controller.build(request, response, payload); + + expect(capturedSignal).toBeDefined(); + expect(capturedSignal).toBeInstanceOf(AbortSignal); + expect(workflowBuilderService.chat).toHaveBeenCalledWith( + expect.any(Object), + request.user, + capturedSignal, + ); + }); + + it('should handle stream interruption when connection closes', async () => { + let abortHandler: (() => void) | undefined; + let abortSignalPassed: AbortSignal | undefined; + + response.on.mockImplementation((event: string, handler: () => void) => { + if (event === 'close') { + abortHandler = handler; + } + return response; + }); + + // Create a generator that yields multiple chunks + async function* mockChatGenerator() { + yield { messages: [{ role: 'assistant', type: 'message', text: 'Chunk 1' } as const] }; + + // Check if aborted before yielding next chunk + if (abortSignalPassed?.aborted) { + throw new Error('Aborted'); + } + + // This second chunk should not be reached if aborted + yield { messages: [{ role: 'assistant', type: 'message', text: 'Chunk 2' } as const] }; + } + + workflowBuilderService.chat.mockImplementation((_payload, _user, signal) => { + abortSignalPassed = signal; + return mockChatGenerator(); + }); + + // Start the build process + const buildPromise = controller.build(request, response, payload); + + // Wait for first chunk to be written + await new Promise((resolve) => setTimeout(resolve, 20)); + + // Should have written at least one chunk + expect(response.write).toHaveBeenCalled(); + const writeCallsBeforeAbort = response.write.mock.calls.length; + + // Simulate connection close + abortHandler!(); + + // Wait for the build to complete + await buildPromise.catch(() => { + // Expected to catch abort error + }); + + // Should not have written additional chunks after abort + expect(response.write).toHaveBeenCalledTimes(writeCallsBeforeAbort); + expect(response.end).toHaveBeenCalled(); + }); + + it('should cleanup abort listener on successful completion', async () => { + const onSpy = jest.spyOn(response, 'on'); + const offSpy = jest.spyOn(response, 'off'); + + async function* mockGenerator() { + yield { messages: [{ role: 'assistant', type: 'message', text: 'Complete' } as const] }; + } + + workflowBuilderService.chat.mockReturnValue(mockGenerator()); + + await controller.build(request, response, payload); + + // Verify close handler was registered and then removed + expect(onSpy).toHaveBeenCalledWith('close', expect.any(Function)); + expect(offSpy).toHaveBeenCalledWith('close', expect.any(Function)); + }); + }); }); }); diff --git a/packages/cli/src/controllers/ai.controller.ts b/packages/cli/src/controllers/ai.controller.ts index d4fcf5abb27..1496db5865e 100644 --- a/packages/cli/src/controllers/ai.controller.ts +++ b/packages/cli/src/controllers/ai.controller.ts @@ -46,6 +46,13 @@ export class AiController { @Body payload: AiBuilderChatRequestDto, ) { try { + const abortController = new AbortController(); + const { signal } = abortController; + + const handleClose = () => abortController.abort(); + + res.on('close', handleClose); + const { text, workflowContext } = payload.payload; const aiResponse = this.workflowBuilderService.chat( { @@ -57,6 +64,7 @@ export class AiController { }, }, req.user, + signal, ); res.header('Content-type', 'application/json-lines').flush(); @@ -83,6 +91,9 @@ export class AiController { ], }; res.write(JSON.stringify(errorChunk) + 'β§‰β‡‹β‡‹βž½βŒ‘β§‰Β§Β§\n'); + } finally { + // Clean up event listener + res.off('close', handleClose); } res.end(); diff --git a/packages/cli/src/controllers/e2e.controller.ts b/packages/cli/src/controllers/e2e.controller.ts index 55b5ef622f8..6a7a91421c0 100644 --- a/packages/cli/src/controllers/e2e.controller.ts +++ b/packages/cli/src/controllers/e2e.controller.ts @@ -269,6 +269,7 @@ export class E2EController { private async resetLogStreaming() { for (const id in this.eventBus.destinations) { await this.eventBus.removeDestination(id, false); + await this.eventBus.deleteDestination(id); } } diff --git a/packages/cli/src/controllers/folder.controller.ts b/packages/cli/src/controllers/folder.controller.ts index 0a583c3eae0..51746e52d35 100644 --- a/packages/cli/src/controllers/folder.controller.ts +++ b/packages/cli/src/controllers/folder.controller.ts @@ -17,6 +17,7 @@ import { Query, Put, Param, + Licensed, } from '@n8n/decorators'; import { Response } from 'express'; import { UserError } from 'n8n-workflow'; @@ -37,6 +38,7 @@ export class ProjectController { @Post('/') @ProjectScope('folder:create') + @Licensed('feat:folders') async createFolder( req: AuthenticatedRequest<{ projectId: string }>, _res: Response, @@ -55,6 +57,7 @@ export class ProjectController { @Get('/:folderId/tree') @ProjectScope('folder:read') + @Licensed('feat:folders') async getFolderTree( req: AuthenticatedRequest<{ projectId: string; folderId: string }>, _res: Response, @@ -74,6 +77,7 @@ export class ProjectController { @Get('/:folderId/credentials') @ProjectScope('folder:read') + @Licensed('feat:folders') async getFolderUsedCredentials( req: AuthenticatedRequest<{ projectId: string; folderId: string }>, _res: Response, @@ -97,6 +101,7 @@ export class ProjectController { @Patch('/:folderId') @ProjectScope('folder:update') + @Licensed('feat:folders') async updateFolder( req: AuthenticatedRequest<{ projectId: string; folderId: string }>, _res: Response, @@ -118,6 +123,7 @@ export class ProjectController { @Delete('/:folderId') @ProjectScope('folder:delete') + @Licensed('feat:folders') async deleteFolder( req: AuthenticatedRequest<{ projectId: string; folderId: string }>, _res: Response, @@ -139,6 +145,7 @@ export class ProjectController { @Get('/') @ProjectScope('folder:list') + @Licensed('feat:folders') async listFolders( req: AuthenticatedRequest<{ projectId: string }>, res: Response, @@ -153,6 +160,7 @@ export class ProjectController { @Get('/:folderId/content') @ProjectScope('folder:read') + @Licensed('feat:folders') async getFolderContent(req: AuthenticatedRequest<{ projectId: string; folderId: string }>) { const { projectId, folderId } = req.params; @@ -174,6 +182,7 @@ export class ProjectController { @Put('/:folderId/transfer') @ProjectScope('folder:move') + @Licensed('feat:folders') async transferFolderToProject( req: AuthenticatedRequest, _res: unknown, diff --git a/packages/cli/src/controllers/oauth/__tests__/oauth2-credential.controller.test.ts b/packages/cli/src/controllers/oauth/__tests__/oauth2-credential.controller.test.ts index b9ba4c9becc..76fe241232b 100644 --- a/packages/cli/src/controllers/oauth/__tests__/oauth2-credential.controller.test.ts +++ b/packages/cli/src/controllers/oauth/__tests__/oauth2-credential.controller.test.ts @@ -243,6 +243,30 @@ describe('OAuth2CredentialController', () => { }); }); + it('should render the error page when code exchange fails, and the server responses with html', async () => { + credentialsRepository.findOneBy.mockResolvedValueOnce(credential); + credentialsHelper.getDecrypted.mockResolvedValueOnce({ csrfSecret }); + jest.spyOn(Csrf.prototype, 'verify').mockReturnValueOnce(true); + nock('https://example.domain') + .post( + '/token', + 'code=code&grant_type=authorization_code&redirect_uri=http%3A%2F%2Flocalhost%3A5678%2Frest%2Foauth2-credential%2Fcallback', + ) + .reply(403, 'Code could not be exchanged', { + 'Content-Type': 'text/html', + }); + + await controller.handleCallback(req, res); + + expect(externalHooks.run).toHaveBeenCalled(); + expect(res.render).toHaveBeenCalledWith('oauth-error-callback', { + error: { + message: 'Unsupported content type: text/html', + reason: '"Code could not be exchanged"', + }, + }); + }); + it('should exchange the code for a valid token, and save it to DB', async () => { credentialsRepository.findOneBy.mockResolvedValueOnce(credential); credentialsHelper.getDecrypted.mockResolvedValueOnce({ csrfSecret }); diff --git a/packages/cli/src/controllers/telemetry.controller.ts b/packages/cli/src/controllers/telemetry.controller.ts new file mode 100644 index 00000000000..178d4990d83 --- /dev/null +++ b/packages/cli/src/controllers/telemetry.controller.ts @@ -0,0 +1,59 @@ +import { GlobalConfig } from '@n8n/config'; +import { AuthenticatedRequest } from '@n8n/db'; +import { Get, Post, RestController } from '@n8n/decorators'; +import { NextFunction, Response } from 'express'; +import { createProxyMiddleware, fixRequestBody } from 'http-proxy-middleware'; + +@RestController('/telemetry') +export class TelemetryController { + proxy; + + constructor(private readonly globalConfig: GlobalConfig) { + this.proxy = createProxyMiddleware({ + target: this.globalConfig.diagnostics.frontendConfig.split(';')[1], + changeOrigin: true, + pathRewrite: { + '^/proxy/': '/', // /proxy/v1/track -> /v1/track + }, + on: { + proxyReq: (proxyReq, req) => { + proxyReq.removeHeader('cookie'); + fixRequestBody(proxyReq, req); + return; + }, + }, + }); + } + + @Post('/proxy/:version/track', { skipAuth: true, rateLimit: { limit: 100, windowMs: 60_000 } }) + async track(req: AuthenticatedRequest, res: Response, next: NextFunction) { + await this.proxy(req, res, next); + } + + @Post('/proxy/:version/identify', { skipAuth: true, rateLimit: true }) + async identify(req: AuthenticatedRequest, res: Response, next: NextFunction) { + await this.proxy(req, res, next); + } + + @Post('/proxy/:version/page', { skipAuth: true, rateLimit: { limit: 50, windowMs: 60_000 } }) + async page(req: AuthenticatedRequest, res: Response, next: NextFunction) { + await this.proxy(req, res, next); + } + @Get('/rudderstack/sourceConfig', { skipAuth: true, rateLimit: { limit: 50, windowMs: 60_000 } }) + async sourceConfig() { + const response = await fetch('https://api-rs.n8n.io/sourceConfig', { + headers: { + authorization: + 'Basic ' + btoa(`${this.globalConfig.diagnostics.frontendConfig.split(';')[0]}:`), + }, + }); + + if (!response.ok) { + throw new Error(`Failed to fetch source config: ${response.statusText}`); + } + + const config: unknown = await response.json(); + + return config; + } +} diff --git a/packages/cli/src/evaluation.ee/test-runner/__tests__/test-runner.service.ee.test.ts b/packages/cli/src/evaluation.ee/test-runner/__tests__/test-runner.service.ee.test.ts index e3fb7df8b36..cafed713226 100644 --- a/packages/cli/src/evaluation.ee/test-runner/__tests__/test-runner.service.ee.test.ts +++ b/packages/cli/src/evaluation.ee/test-runner/__tests__/test-runner.service.ee.test.ts @@ -1026,7 +1026,7 @@ describe('TestRunnerService', () => { } }); - it('should throw SET_METRICS_NODE_NOT_CONFIGURED when metrics node is disabled', () => { + it('should throw SET_METRICS_NODE_NOT_FOUND when metrics node is disabled', () => { const workflow = mock({ nodes: [ { @@ -1061,8 +1061,8 @@ describe('TestRunnerService', () => { (testRunnerService as any).validateSetMetricsNodes(workflow); } catch (error) { expect(error).toBeInstanceOf(TestRunError); - expect(error.code).toBe('SET_METRICS_NODE_NOT_CONFIGURED'); - expect(error.extra).toEqual({ node_name: 'Set Metrics' }); + expect(error.code).toBe('SET_METRICS_NODE_NOT_FOUND'); + expect(error.extra).toEqual({}); } }); diff --git a/packages/cli/src/evaluation.ee/test-runner/test-runner.service.ee.ts b/packages/cli/src/evaluation.ee/test-runner/test-runner.service.ee.ts index d21412f963c..8c79d7af412 100644 --- a/packages/cli/src/evaluation.ee/test-runner/test-runner.service.ee.ts +++ b/packages/cli/src/evaluation.ee/test-runner/test-runner.service.ee.ts @@ -7,6 +7,7 @@ import { EVALUATION_NODE_TYPE, EVALUATION_TRIGGER_NODE_TYPE, ExecutionCancelledError, + NodeConnectionTypes, } from 'n8n-workflow'; import type { IDataObject, @@ -31,6 +32,7 @@ import { Telemetry } from '@/telemetry'; import { WorkflowRunner } from '@/workflow-runner'; import { EvaluationMetrics } from './evaluation-metrics.ee'; +import { JsonObject } from 'openid-client'; export interface TestRunMetadata { testRunId: string; @@ -360,21 +362,32 @@ export class TestRunnerService { /** * Get the evaluation set metrics nodes from a workflow. */ - static getEvaluationMetricsNodes(workflow: IWorkflowBase) { + static getEvaluationNodes( + workflow: IWorkflowBase, + operation: 'setMetrics' | 'setOutputs' | 'setInputs', + { isDefaultOperation }: { isDefaultOperation: boolean } = { isDefaultOperation: false }, + ) { return workflow.nodes.filter( - (node) => node.type === EVALUATION_NODE_TYPE && node.parameters.operation === 'setMetrics', + (node) => + node.type === EVALUATION_NODE_TYPE && + node.disabled !== true && + (node.parameters.operation === operation || + (isDefaultOperation && node.parameters.operation === undefined)), ); } + /** + * Get the evaluation set metrics nodes from a workflow. + */ + static getEvaluationMetricsNodes(workflow: IWorkflowBase) { + return this.getEvaluationNodes(workflow, 'setMetrics'); + } + /** * Get the evaluation set outputs nodes from a workflow. */ static getEvaluationSetOutputsNodes(workflow: IWorkflowBase) { - return workflow.nodes.filter( - (node) => - node.type === EVALUATION_NODE_TYPE && - (node.parameters.operation === 'setOutputs' || node.parameters.operation === undefined), - ); + return this.getEvaluationNodes(workflow, 'setOutputs', { isDefaultOperation: true }); } /** @@ -392,7 +405,7 @@ export class TestRunnerService { }); } - const triggerOutput = triggerOutputData?.data?.main?.[0]; + const triggerOutput = triggerOutputData?.data?.[NodeConnectionTypes.Main]?.[0]; if (!triggerOutput || triggerOutput.length === 0) { throw new TestRunError('TEST_CASES_NOT_FOUND'); @@ -401,6 +414,22 @@ export class TestRunnerService { return triggerOutput; } + private getEvaluationData( + execution: IRun, + workflow: IWorkflowBase, + operation: 'setInputs' | 'setOutputs', + ): JsonObject { + const evalNodes = TestRunnerService.getEvaluationNodes(workflow, operation); + + return evalNodes.reduce((accu, node) => { + const runs = execution.data.resultData.runData[node.name]; + const data = runs?.[0]?.data?.[NodeConnectionTypes.Main]?.[0]?.[0]?.evaluationData ?? {}; + + Object.assign(accu, data); + return accu; + }, {}); + } + /** * Evaluation result is collected from all Evaluation Metrics nodes */ @@ -594,6 +623,9 @@ export class TestRunnerService { ...addedPredefinedMetrics, }; + const inputs = this.getEvaluationData(testCaseExecution, workflow, 'setInputs'); + const outputs = this.getEvaluationData(testCaseExecution, workflow, 'setOutputs'); + this.logger.debug( 'Test case metrics extracted (user-defined)', addedUserDefinedMetrics, @@ -609,6 +641,8 @@ export class TestRunnerService { completedAt, status: 'success', metrics: combinedMetrics, + inputs, + outputs, }); } } catch (e) { diff --git a/packages/cli/src/eventbus/event-bus.controller.ts b/packages/cli/src/eventbus/event-bus.controller.ts index cc748aa5251..271680bdbfe 100644 --- a/packages/cli/src/eventbus/event-bus.controller.ts +++ b/packages/cli/src/eventbus/event-bus.controller.ts @@ -124,7 +124,8 @@ export class EventBusController { @GlobalScope('eventBusDestination:delete') async deleteDestination(req: AuthenticatedRequest) { if (isWithIdString(req.query)) { - return await this.eventBus.removeDestination(req.query.id); + await this.eventBus.removeDestination(req.query.id); + return await this.eventBus.deleteDestination(req.query.id); } else { throw new BadRequestError('Query is missing id'); } diff --git a/packages/cli/src/eventbus/message-event-bus/message-event-bus.ts b/packages/cli/src/eventbus/message-event-bus/message-event-bus.ts index e154583ff72..1e1351a1a50 100644 --- a/packages/cli/src/eventbus/message-event-bus/message-event-bus.ts +++ b/packages/cli/src/eventbus/message-event-bus/message-event-bus.ts @@ -240,20 +240,20 @@ export class MessageEventBus extends EventEmitter { return result.sort((a, b) => (a.__type ?? '').localeCompare(b.__type ?? '')); } - async removeDestination( - id: string, - notifyWorkers: boolean = true, - ): Promise { - let result; + async removeDestination(id: string, notifyWorkers: boolean = true) { if (Object.keys(this.destinations).includes(id)) { await this.destinations[id].close(); - result = await this.destinations[id].deleteFromDb(); delete this.destinations[id]; } if (notifyWorkers) { void this.publisher.publishCommand({ command: 'restart-event-bus' }); } - return result; + } + + async deleteDestination(id: string): Promise { + return await this.eventDestinationsRepository.delete({ + id, + }); } private async trySendingUnsent(msgs?: EventMessageTypes[]) { diff --git a/packages/cli/src/interfaces.ts b/packages/cli/src/interfaces.ts index 4fe7c7ef145..d0148a99035 100644 --- a/packages/cli/src/interfaces.ts +++ b/packages/cli/src/interfaces.ts @@ -153,33 +153,6 @@ export interface IWorkflowStatisticsDataLoaded { dataLoaded: boolean; } -// ---------------------------------- -// community nodes -// ---------------------------------- - -export namespace CommunityPackages { - export type ParsedPackageName = { - packageName: string; - rawString: string; - scope?: string; - version?: string; - }; - - export type AvailableUpdates = { - [packageName: string]: { - current: string; - wanted: string; - latest: string; - location: string; - }; - }; - - export type PackageStatusCheck = { - status: 'OK' | 'Banned'; - reason?: string; - }; -} - // ---------------------------------- // telemetry // ---------------------------------- diff --git a/packages/cli/src/load-nodes-and-credentials.ts b/packages/cli/src/load-nodes-and-credentials.ts index 2985df30b68..e397429f7a8 100644 --- a/packages/cli/src/load-nodes-and-credentials.ts +++ b/packages/cli/src/load-nodes-and-credentials.ts @@ -31,6 +31,7 @@ import path from 'path'; import picocolors from 'picocolors'; import { CUSTOM_API_CALL_KEY, CUSTOM_API_CALL_NAME, CLI_DIR, inE2ETests } from '@/constants'; +import { CommunityPackagesConfig } from './community-packages/community-packages.config'; @Service() export class LoadNodesAndCredentials { @@ -88,7 +89,7 @@ export class LoadNodesAndCredentials { await this.loadNodesFromNodeModules(nodeModulesDir, '@n8n/n8n-nodes-langchain'); } - if (!this.globalConfig.nodes.communityPackages.preventLoading) { + if (!Container.get(CommunityPackagesConfig).preventLoading) { // Load nodes from any other `n8n-nodes-*` packages in the download directory // This includes the community nodes await this.loadNodesFromNodeModules( diff --git a/packages/cli/src/middlewares/cors.ts b/packages/cli/src/middlewares/cors.ts index d22b5a14f55..7998395133d 100644 --- a/packages/cli/src/middlewares/cors.ts +++ b/packages/cli/src/middlewares/cors.ts @@ -8,7 +8,7 @@ export const corsMiddleware: RequestHandler = (req, res, next) => { res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); res.header( 'Access-Control-Allow-Headers', - 'Origin, X-Requested-With, Content-Type, Accept, push-ref, browser-id', + 'Origin, X-Requested-With, Content-Type, Accept, push-ref, browser-id, anonymousid, authorization', ); } diff --git a/packages/cli/src/scaling/multi-main-setup.ee.ts b/packages/cli/src/scaling/multi-main-setup.ee.ts index d0d5e45c8dc..e926d4d2b72 100644 --- a/packages/cli/src/scaling/multi-main-setup.ee.ts +++ b/packages/cli/src/scaling/multi-main-setup.ee.ts @@ -5,7 +5,6 @@ import { MultiMainMetadata } from '@n8n/decorators'; import { Container, Service } from '@n8n/di'; import { InstanceSettings } from 'n8n-core'; -import config from '@/config'; import { Publisher } from '@/scaling/pubsub/publisher.service'; import { RedisClientService } from '@/services/redis-client.service'; import { TypedEmitter } from '@/typed-emitter'; @@ -48,7 +47,7 @@ export class MultiMainSetup extends TypedEmitter { private leaderCheckInterval: NodeJS.Timeout | undefined; async init() { - const prefix = config.getEnv('redis.prefix'); + const prefix = this.globalConfig.redis.prefix; const validPrefix = this.redisClientService.toValidPrefix(prefix); this.leaderKey = validPrefix + ':main_instance_leader'; diff --git a/packages/cli/src/security-audit/risk-reporters/instance-risk-reporter.ts b/packages/cli/src/security-audit/risk-reporters/instance-risk-reporter.ts index ed556ccd5cd..d236f0d16eb 100644 --- a/packages/cli/src/security-audit/risk-reporters/instance-risk-reporter.ts +++ b/packages/cli/src/security-audit/risk-reporters/instance-risk-reporter.ts @@ -1,7 +1,7 @@ import { inDevelopment, Logger } from '@n8n/backend-common'; import { GlobalConfig } from '@n8n/config'; import { separate } from '@n8n/db'; -import { Service } from '@n8n/di'; +import { Container, Service } from '@n8n/di'; import axios from 'axios'; import { InstanceSettings } from 'n8n-core'; import type { IWorkflowBase } from 'n8n-workflow'; @@ -16,6 +16,7 @@ import { } from '@/security-audit/constants'; import type { RiskReporter, Risk, n8n } from '@/security-audit/types'; import { toFlaggedNode } from '@/security-audit/utils'; +import { CommunityPackagesConfig } from '@/community-packages/community-packages.config'; @Service() export class InstanceRiskReporter implements RiskReporter { @@ -88,7 +89,7 @@ export class InstanceRiskReporter implements RiskReporter { const settings: Record = {}; settings.features = { - communityPackagesEnabled: this.globalConfig.nodes.communityPackages.enabled, + communityPackagesEnabled: Container.get(CommunityPackagesConfig).enabled, versionNotificationsEnabled: this.globalConfig.versionNotifications.enabled, templatesEnabled: this.globalConfig.templates.enabled, publicApiEnabled: isApiEnabled(), diff --git a/packages/cli/src/security-audit/risk-reporters/nodes-risk-reporter.ts b/packages/cli/src/security-audit/risk-reporters/nodes-risk-reporter.ts index 64206061f40..1ef9c739387 100644 --- a/packages/cli/src/security-audit/risk-reporters/nodes-risk-reporter.ts +++ b/packages/cli/src/security-audit/risk-reporters/nodes-risk-reporter.ts @@ -1,5 +1,4 @@ -import { GlobalConfig } from '@n8n/config'; -import { Service } from '@n8n/di'; +import { Container, Service } from '@n8n/di'; import glob from 'fast-glob'; import type { IWorkflowBase } from 'n8n-workflow'; import * as path from 'path'; @@ -14,14 +13,14 @@ import { } from '@/security-audit/constants'; import type { Risk, RiskReporter } from '@/security-audit/types'; import { getNodeTypes } from '@/security-audit/utils'; -import { CommunityPackagesService } from '@/services/community-packages.service'; +import { CommunityPackagesService } from '@/community-packages/community-packages.service'; +import { CommunityPackagesConfig } from '@/community-packages/community-packages.config'; @Service() export class NodesRiskReporter implements RiskReporter { constructor( private readonly loadNodesAndCredentials: LoadNodesAndCredentials, private readonly communityPackagesService: CommunityPackagesService, - private readonly globalConfig: GlobalConfig, ) {} async report(workflows: IWorkflowBase[]) { @@ -87,7 +86,7 @@ export class NodesRiskReporter implements RiskReporter { } private async getCommunityNodeDetails() { - if (!this.globalConfig.nodes.communityPackages.enabled) return []; + if (!Container.get(CommunityPackagesConfig).enabled) return []; const installedPackages = await this.communityPackagesService.getAllInstalledPackages(); diff --git a/packages/cli/src/server.ts b/packages/cli/src/server.ts index bd6a10fc1cd..0f9ff9502c9 100644 --- a/packages/cli/src/server.ts +++ b/packages/cli/src/server.ts @@ -62,7 +62,11 @@ import '@/evaluation.ee/test-runs.controller.ee'; import '@/workflows/workflow-history.ee/workflow-history.controller.ee'; import '@/workflows/workflows.controller'; import '@/webhooks/webhooks.controller'; + +import { ChatServer } from './chat/chat-server'; + import { MfaService } from './mfa/mfa.service'; +import { CommunityPackagesConfig } from './community-packages/community-packages.config'; @Service() export class Server extends AbstractServer { @@ -115,9 +119,9 @@ export class Server extends AbstractServer { await Container.get(LdapService).init(); } - if (this.globalConfig.nodes.communityPackages.enabled) { - await import('@/controllers/community-packages.controller'); - await import('@/controllers/community-node-types.controller'); + if (Container.get(CommunityPackagesConfig).enabled) { + await import('@/community-packages/community-packages.controller'); + await import('@/community-packages/community-node-types.controller'); } if (inE2ETests) { @@ -151,6 +155,10 @@ export class Server extends AbstractServer { this.logger.warn(`SAML initialization failed: ${(error as Error).message}`); } + if (this.globalConfig.diagnostics.enabled) { + await import('@/controllers/telemetry.controller'); + } + // ---------------------------------------- // OIDC // ---------------------------------------- @@ -286,7 +294,6 @@ export class Server extends AbstractServer { release: `n8n@${N8N_VERSION}`, }); const frontendConfig = [ - `window.BASE_PATH = '${this.globalConfig.path}';`, `window.REST_ENDPOINT = '${this.globalConfig.endpoints.rest}';`, `window.sentry = ${frontendSentryConfig};`, ].join('\n'); @@ -371,7 +378,7 @@ export class Server extends AbstractServer { if (filePath) { try { await fsAccess(filePath); - return res.sendFile(filePath, cacheOptions); + return res.sendFile(filePath, { ...cacheOptions, dotfiles: 'allow' }); } catch {} } res.sendStatus(404); @@ -474,5 +481,6 @@ export class Server extends AbstractServer { protected setupPushServer(): void { const { restEndpoint, server, app } = this; Container.get(Push).setupPushServer(restEndpoint, server, app); + Container.get(ChatServer).setup(server, app); } } diff --git a/packages/cli/src/services/__tests__/frontend.service.test.ts b/packages/cli/src/services/__tests__/frontend.service.test.ts index cf5207c27f8..68e6a965182 100644 --- a/packages/cli/src/services/__tests__/frontend.service.test.ts +++ b/packages/cli/src/services/__tests__/frontend.service.test.ts @@ -1,17 +1,19 @@ -import { mock } from 'jest-mock-extended'; -import type { GlobalConfig, SecurityConfig } from '@n8n/config'; import type { Logger, LicenseState, ModuleRegistry } from '@n8n/backend-common'; +import type { GlobalConfig, SecurityConfig } from '@n8n/config'; +import { mock } from 'jest-mock-extended'; import type { InstanceSettings, BinaryDataConfig } from 'n8n-core'; -import type { LoadNodesAndCredentials } from '@/load-nodes-and-credentials'; + import type { CredentialTypes } from '@/credential-types'; import type { CredentialsOverwrites } from '@/credentials-overwrites'; import type { License } from '@/license'; -import type { UserManagementMailer } from '@/user-management/email'; -import type { UrlService } from '@/services/url.service'; -import type { PushConfig } from '@/push/push.config'; +import type { LoadNodesAndCredentials } from '@/load-nodes-and-credentials'; import type { MfaService } from '@/mfa/mfa.service'; - +import type { PushConfig } from '@/push/push.config'; import { FrontendService } from '@/services/frontend.service'; +import type { UrlService } from '@/services/url.service'; +import type { UserManagementMailer } from '@/user-management/email'; +import { CommunityPackagesConfig } from '@/community-packages/community-packages.config'; +import { Container } from '@n8n/di'; describe('FrontendService', () => { let originalEnv: NodeJS.ProcessEnv; @@ -32,7 +34,7 @@ describe('FrontendService', () => { endpoints: { rest: 'rest' }, diagnostics: { enabled: false }, templates: { enabled: false, host: '' }, - nodes: { communityPackages: { enabled: false } }, + nodes: {}, tags: { disabled: false }, logging: { level: 'info' }, hiringBanner: { enabled: false }, @@ -64,6 +66,13 @@ describe('FrontendService', () => { }, }); + Container.set( + CommunityPackagesConfig, + mock({ + enabled: false, + }), + ); + const logger = mock(); const instanceSettings = mock({ isDocker: false, diff --git a/packages/cli/src/services/ai-workflow-builder.service.ts b/packages/cli/src/services/ai-workflow-builder.service.ts index 5728a9536fb..892d1afe9a5 100644 --- a/packages/cli/src/services/ai-workflow-builder.service.ts +++ b/packages/cli/src/services/ai-workflow-builder.service.ts @@ -48,9 +48,9 @@ export class WorkflowBuilderService { return this.service; } - async *chat(payload: ChatPayload, user: IUser) { + async *chat(payload: ChatPayload, user: IUser, abortSignal?: AbortSignal) { const service = await this.getService(); - yield* service.chat(payload, user); + yield* service.chat(payload, user, abortSignal); } async getSessions(workflowId: string | undefined, user: IUser) { diff --git a/packages/cli/src/services/cache/cache.service.ts b/packages/cli/src/services/cache/cache.service.ts index befbcceae5f..99fb71345d5 100644 --- a/packages/cli/src/services/cache/cache.service.ts +++ b/packages/cli/src/services/cache/cache.service.ts @@ -39,7 +39,7 @@ export class CacheService extends TypedEmitter { const { RedisClientService } = await import('../redis-client.service'); const redisClientService = Container.get(RedisClientService); - const prefixBase = config.getEnv('redis.prefix'); + const prefixBase = this.globalConfig.redis.prefix; const prefix = redisClientService.toValidPrefix( `${prefixBase}:${this.globalConfig.cache.redis.prefix}:`, ); diff --git a/packages/cli/src/services/frontend.service.ts b/packages/cli/src/services/frontend.service.ts index 40acd807cd0..6209b971658 100644 --- a/packages/cli/src/services/frontend.service.ts +++ b/packages/cli/src/services/frontend.service.ts @@ -10,6 +10,8 @@ import { BinaryDataConfig, InstanceSettings } from 'n8n-core'; import type { ICredentialType, INodeTypeBaseDescription } from 'n8n-workflow'; import path from 'path'; +import { CommunityPackagesConfig } from '@/community-packages/community-packages.config'; +import type { CommunityPackagesService } from '@/community-packages/community-packages.service'; import config from '@/config'; import { inE2ETests, N8N_VERSION } from '@/constants'; import { CredentialTypes } from '@/credential-types'; @@ -20,7 +22,6 @@ import { LoadNodesAndCredentials } from '@/load-nodes-and-credentials'; import { MfaService } from '@/mfa/mfa.service'; import { isApiEnabled } from '@/public-api'; import { PushConfig } from '@/push/push.config'; -import type { CommunityPackagesService } from '@/services/community-packages.service'; import { getSamlLoginLabel } from '@/sso.ee/saml/saml-helpers'; import { getCurrentAuthenticationMethod } from '@/sso.ee/sso-helpers'; import { UserManagementMailer } from '@/user-management/email'; @@ -59,10 +60,12 @@ export class FrontendService { this.initSettings(); - if (this.globalConfig.nodes.communityPackages.enabled) { - void import('@/services/community-packages.service').then(({ CommunityPackagesService }) => { - this.communityPackagesService = Container.get(CommunityPackagesService); - }); + if (Container.get(CommunityPackagesConfig).enabled) { + void import('@/community-packages/community-packages.service').then( + ({ CommunityPackagesService }) => { + this.communityPackagesService = Container.get(CommunityPackagesService); + }, + ); } } @@ -89,13 +92,15 @@ export class FrontendService { if (telemetrySettings.enabled) { const conf = this.globalConfig.diagnostics.frontendConfig; const [key, url] = conf.split(';'); + const proxy = `${instanceBaseUrl}/${restEndpoint}/telemetry/proxy`; + const sourceConfig = `${instanceBaseUrl}/${restEndpoint}/telemetry/rudderstack`; if (!key || !url) { this.logger.warn('Diagnostics frontend config is invalid'); telemetrySettings.enabled = false; } - telemetrySettings.config = { key, url }; + telemetrySettings.config = { key, url, proxy, sourceConfig }; } this.settings = { @@ -195,8 +200,8 @@ export class FrontendService { executionMode: config.getEnv('executions.mode'), isMultiMain: this.instanceSettings.isMultiMain, pushBackend: this.pushConfig.backend, - communityNodesEnabled: this.globalConfig.nodes.communityPackages.enabled, - unverifiedCommunityNodesEnabled: this.globalConfig.nodes.communityPackages.unverifiedEnabled, + communityNodesEnabled: Container.get(CommunityPackagesConfig).enabled, + unverifiedCommunityNodesEnabled: Container.get(CommunityPackagesConfig).unverifiedEnabled, deployment: { type: this.globalConfig.deployment.type, }, diff --git a/packages/cli/src/utils.ts b/packages/cli/src/utils.ts index f8cf5168a4d..35b351dbec7 100644 --- a/packages/cli/src/utils.ts +++ b/packages/cli/src/utils.ts @@ -89,6 +89,6 @@ export const shouldAssignExecuteMethod = (nodeType: INodeType) => { !nodeType.poll && !nodeType.trigger && (!nodeType.webhook || isDeclarativeNode) && - !nodeType.methods + (!nodeType.methods || isDeclarativeNode) ); }; diff --git a/packages/cli/src/webhooks/__tests__/webhook-helpers.test.ts b/packages/cli/src/webhooks/__tests__/webhook-helpers.test.ts index 268ee29cb6b..b223a427ce9 100644 --- a/packages/cli/src/webhooks/__tests__/webhook-helpers.test.ts +++ b/packages/cli/src/webhooks/__tests__/webhook-helpers.test.ts @@ -14,7 +14,12 @@ import type { IRunExecutionData, IExecuteData, } from 'n8n-workflow'; -import { createDeferredPromise, FORM_NODE_TYPE, WAIT_NODE_TYPE } from 'n8n-workflow'; +import { + createDeferredPromise, + FORM_NODE_TYPE, + WAIT_NODE_TYPE, + CHAT_TRIGGER_NODE_TYPE, +} from 'n8n-workflow'; import type { Readable } from 'stream'; import { finished } from 'stream/promises'; @@ -23,6 +28,7 @@ import { handleFormRedirectionCase, setupResponseNodePromise, prepareExecutionData, + handleHostedChatResponse, } from '../webhook-helpers'; import type { IWebhookResponseCallbackData } from '../webhook.types'; @@ -38,6 +44,15 @@ describe('autoDetectResponseMode', () => { workflow.nodes = {}; }); + test('should return hostedChat when start node is CHAT_TRIGGER_NODE_TYPE, method is POST, and public is true', () => { + const workflowStartNode = mock({ + type: CHAT_TRIGGER_NODE_TYPE, + parameters: { options: { responseMode: 'responseNodes' } }, + }); + const result = autoDetectResponseMode(workflowStartNode, workflow, 'POST'); + expect(result).toBe('hostedChat'); + }); + test('should return undefined if start node is WAIT_NODE_TYPE with resume not equal to form', () => { const workflowStartNode = mock({ type: WAIT_NODE_TYPE, @@ -259,6 +274,61 @@ describe('setupResponseNodePromise', () => { }); }); +describe('handleHostedChatResponse', () => { + it('should send executionStarted: true and executionId when responseMode is hostedChat and didSendResponse is false', async () => { + const res = { + send: jest.fn(), + end: jest.fn(), + } as unknown as express.Response; + const executionId = 'testExecutionId'; + let didSendResponse = false; + const responseMode = 'hostedChat'; + + (res.send as jest.Mock).mockImplementation((data) => { + expect(data).toEqual({ executionStarted: true, executionId }); + }); + + const result = handleHostedChatResponse(res, responseMode, didSendResponse, executionId); + + expect(res.send).toHaveBeenCalled(); + await new Promise((resolve) => setTimeout(resolve, 0)); + expect(res.end).toHaveBeenCalled(); + expect(result).toBe(true); + }); + + it('should not send response when responseMode is not hostedChat', () => { + const res = { + send: jest.fn(), + end: jest.fn(), + } as unknown as express.Response; + const executionId = 'testExecutionId'; + let didSendResponse = false; + const responseMode = 'responseNode'; + + const result = handleHostedChatResponse(res, responseMode, didSendResponse, executionId); + + expect(res.send).not.toHaveBeenCalled(); + expect(res.end).not.toHaveBeenCalled(); + expect(result).toBe(false); + }); + + it('should not send response when didSendResponse is true', () => { + const res = { + send: jest.fn(), + end: jest.fn(), + } as unknown as express.Response; + const executionId = 'testExecutionId'; + let didSendResponse = true; + const responseMode = 'hostedChat'; + + const result = handleHostedChatResponse(res, responseMode, didSendResponse, executionId); + + expect(res.send).not.toHaveBeenCalled(); + expect(res.end).not.toHaveBeenCalled(); + expect(result).toBe(true); + }); +}); + describe('prepareExecutionData', () => { const workflowStartNode = mock({ name: 'Start' }); const webhookResultData: IWebhookResponseData = { diff --git a/packages/cli/src/webhooks/webhook-helpers.ts b/packages/cli/src/webhooks/webhook-helpers.ts index 4392115b389..ac73b14d26a 100644 --- a/packages/cli/src/webhooks/webhook-helpers.ts +++ b/packages/cli/src/webhooks/webhook-helpers.ts @@ -32,6 +32,7 @@ import type { WebhookResponseData, } from 'n8n-workflow'; import { + CHAT_TRIGGER_NODE_TYPE, createDeferredPromise, ExecutionCancelledError, FORM_NODE_TYPE, @@ -70,6 +71,21 @@ import * as WorkflowExecuteAdditionalData from '@/workflow-execute-additional-da import * as WorkflowHelpers from '@/workflow-helpers'; import { WorkflowRunner } from '@/workflow-runner'; +export function handleHostedChatResponse( + res: express.Response, + responseMode: WebhookResponseMode, + didSendResponse: boolean, + executionId: string, +): boolean { + if (responseMode === 'hostedChat' && !didSendResponse) { + res.send({ executionStarted: true, executionId }); + process.nextTick(() => res.end()); + return true; + } + + return didSendResponse; +} + /** * Returns all the webhooks which should be created for the given workflow */ @@ -111,6 +127,23 @@ export function getWorkflowWebhooks( return returnData; } +const getChatResponseMode = (workflowStartNode: INode, method: string) => { + const parameters = workflowStartNode.parameters as { + public: boolean; + options?: { responseMode: string }; + }; + + if (workflowStartNode.type !== CHAT_TRIGGER_NODE_TYPE) return undefined; + + if (method === 'GET') return 'onReceived'; + + if (method === 'POST' && parameters.options?.responseMode === 'responseNodes') { + return 'hostedChat'; + } + + return undefined; +}; + // eslint-disable-next-line complexity export function autoDetectResponseMode( workflowStartNode: INode, @@ -133,6 +166,9 @@ export function autoDetectResponseMode( } } + const chatResponseMode = getChatResponseMode(workflowStartNode, method); + if (chatResponseMode) return chatResponseMode; + // If there are form nodes connected to a current form node we're dealing with a multipage form // and we need to return the formPage response mode when a second page of the form gets submitted // to be able to show potential form errors correctly. @@ -375,7 +411,11 @@ export async function executeWebhook( additionalKeys, ); - if (!['onReceived', 'lastNode', 'responseNode', 'formPage', 'streaming'].includes(responseMode)) { + if ( + !['onReceived', 'lastNode', 'responseNode', 'formPage', 'streaming', 'hostedChat'].includes( + responseMode, + ) + ) { // If the mode is not known we error. Is probably best like that instead of using // the default that people know as early as possible (probably already testing phase) // that something does not resolve properly. @@ -600,6 +640,8 @@ export async function executeWebhook( didSendResponse = true; } + didSendResponse = handleHostedChatResponse(res, responseMode, didSendResponse, executionId); + Container.get(Logger).debug( `Started execution of workflow "${workflow.name}" from webhook with execution ID ${executionId}`, { executionId }, diff --git a/packages/cli/src/webhooks/webhook-request-handler.ts b/packages/cli/src/webhooks/webhook-request-handler.ts index dd2eb671ad1..97c692d388b 100644 --- a/packages/cli/src/webhooks/webhook-request-handler.ts +++ b/packages/cli/src/webhooks/webhook-request-handler.ts @@ -151,7 +151,7 @@ class WebhookRequestHandler { } else { const needsSandbox = contentType && isHtmlRenderedContentType(contentType); if (needsSandbox) { - res.send(sandboxHtmlResponse(JSON.stringify(body))); + res.send(sandboxHtmlResponse(body)); } else { res.json(body); } diff --git a/packages/cli/src/workflow-runner.ts b/packages/cli/src/workflow-runner.ts index fa85c8149f4..5e31b1cc680 100644 --- a/packages/cli/src/workflow-runner.ts +++ b/packages/cli/src/workflow-runner.ts @@ -268,12 +268,10 @@ export class WorkflowRunner { }); if (data.streamingEnabled) { - if (data.executionMode !== 'manual') { - lifecycleHooks.addHandler('sendChunk', (chunk) => { - data.httpResponse?.write(JSON.stringify(chunk) + '\n'); - data.httpResponse?.flush?.(); - }); - } + lifecycleHooks.addHandler('sendChunk', (chunk) => { + data.httpResponse?.write(JSON.stringify(chunk) + '\n'); + data.httpResponse?.flush?.(); + }); } additionalData.setExecutionStatus = WorkflowExecuteAdditionalData.setExecutionStatus.bind({ diff --git a/packages/cli/src/workflows/workflow.service.ts b/packages/cli/src/workflows/workflow.service.ts index 73504dbe922..009eeba5082 100644 --- a/packages/cli/src/workflows/workflow.service.ts +++ b/packages/cli/src/workflows/workflow.service.ts @@ -557,4 +557,25 @@ export class WorkflowService { })), ); } + + async getWorkflowsWithNodesIncluded(user: User, nodeTypes: string[]) { + const foundWorkflows = await this.workflowRepository.findWorkflowsWithNodeType(nodeTypes); + + let { workflows } = await this.workflowRepository.getManyAndCount( + foundWorkflows.map((w) => w.id), + ); + + if (hasSharing(workflows)) { + workflows = await this.processSharedWorkflows(workflows); + } + + workflows = await this.addUserScopes(workflows, user); + + this.cleanupSharedField(workflows); + + return workflows.map((workflow) => ({ + resourceType: 'workflow', + ...workflow, + })); + } } diff --git a/packages/cli/src/workflows/workflows.controller.ts b/packages/cli/src/workflows/workflows.controller.ts index 036a7941e99..618d03fc4c8 100644 --- a/packages/cli/src/workflows/workflows.controller.ts +++ b/packages/cli/src/workflows/workflows.controller.ts @@ -1,6 +1,7 @@ import { ImportWorkflowFromUrlDto, ManualRunQueryDto, + ROLE, TransferWorkflowBodyDto, } from '@n8n/api-types'; import { Logger } from '@n8n/backend-common'; @@ -559,4 +560,31 @@ export class WorkflowsController { body.destinationParentFolderId, ); } + + @Post('/with-node-types') + async getWorkflowsWithNodesIncluded(req: AuthenticatedRequest, res: express.Response) { + try { + const hasPermission = req.user.role === ROLE.Owner || req.user.role === ROLE.Admin; + + if (!hasPermission) { + res.json({ data: [], count: 0 }); + return; + } + + const { nodeTypes } = req.body as { nodeTypes: string[] }; + const workflows = await this.workflowService.getWorkflowsWithNodesIncluded( + req.user, + nodeTypes, + ); + + res.json({ + data: workflows, + count: workflows.length, + }); + } catch (maybeError) { + const error = utils.toError(maybeError); + ResponseHelper.reportError(error); + ResponseHelper.sendErrorResponse(res, error); + } + } } diff --git a/packages/cli/templates/form-trigger.handlebars b/packages/cli/templates/form-trigger.handlebars index b44c416967e..f6532a869bf 100644 --- a/packages/cli/templates/form-trigger.handlebars +++ b/packages/cli/templates/form-trigger.handlebars @@ -43,6 +43,7 @@ --color-label: #555555; --color-input-border: #dbdfe7; --color-input-text: #71747A; + --color-input-bg: #ffffff; --color-focus-border: rgb(90, 76, 194); --color-submit-btn-bg: #ff6d5a; --color-submit-btn-text: #ffffff; @@ -174,6 +175,7 @@ width: 100%; font-size: var(--font-size-input); color: var(--color-input-text); + background-color: var(--color-input-bg); font-weight: 400; padding: var(--padding-form-input); } diff --git a/packages/cli/test/integration/commands/worker.cmd.test.ts b/packages/cli/test/integration/commands/worker.cmd.test.ts index f6dab5b59c6..520a1fee3f7 100644 --- a/packages/cli/test/integration/commands/worker.cmd.test.ts +++ b/packages/cli/test/integration/commands/worker.cmd.test.ts @@ -16,7 +16,7 @@ import { Push } from '@/push'; import { Publisher } from '@/scaling/pubsub/publisher.service'; import { Subscriber } from '@/scaling/pubsub/subscriber.service'; import { ScalingService } from '@/scaling/scaling.service'; -import { CommunityPackagesService } from '@/services/community-packages.service'; +import { CommunityPackagesService } from '@/community-packages/community-packages.service'; import { TaskBrokerServer } from '@/task-runners/task-broker/task-broker-server'; import { TaskRunnerProcess } from '@/task-runners/task-runner-process'; import { Telemetry } from '@/telemetry'; diff --git a/packages/cli/test/integration/community-packages.api.test.ts b/packages/cli/test/integration/community-packages.api.test.ts index d6c75610d38..ca929e51e08 100644 --- a/packages/cli/test/integration/community-packages.api.test.ts +++ b/packages/cli/test/integration/community-packages.api.test.ts @@ -3,7 +3,7 @@ import type { InstalledNodes, InstalledPackages } from '@n8n/db'; import path from 'path'; import { LoadNodesAndCredentials } from '@/load-nodes-and-credentials'; -import { CommunityPackagesService } from '@/services/community-packages.service'; +import { CommunityPackagesService } from '@/community-packages/community-packages.service'; import { COMMUNITY_PACKAGE_VERSION } from './shared/constants'; import { createOwner } from './shared/db/users'; diff --git a/packages/cli/test/integration/folder/folder.controller.test.ts b/packages/cli/test/integration/folder/folder.controller.test.ts index 18ca545cba2..1889d432b43 100644 --- a/packages/cli/test/integration/folder/folder.controller.test.ts +++ b/packages/cli/test/integration/folder/folder.controller.test.ts @@ -49,6 +49,8 @@ let workflowRepository: WorkflowRepository; const activeWorkflowManager = mockInstance(ActiveWorkflowManager); beforeEach(async () => { + testServer.license.enable('feat:folders'); + await testDb.truncate(['Folder', 'SharedWorkflow', 'TagEntity', 'Project', 'ProjectRelation']); projectRepository = Container.get(ProjectRepository); @@ -66,6 +68,18 @@ beforeEach(async () => { }); describe('POST /projects/:projectId/folders', () => { + test('should now create folder if license does not allow it', async () => { + testServer.license.disable('feat:folders'); + const project = await createTeamProject(undefined, owner); + await linkUserToProject(member, project, 'project:viewer'); + + const payload = { + name: 'Test Folder', + }; + + await authMemberAgent.post(`/projects/${project.id}/folders`).send(payload).expect(403); + }); + test('should not create folder when project does not exist', async () => { const payload = { name: 'Test Folder', @@ -235,6 +249,32 @@ describe('POST /projects/:projectId/folders', () => { }); describe('GET /projects/:projectId/folders/:folderId/tree', () => { + test('should not retrieve folder tree if license does not allow it', async () => { + testServer.license.disable('feat:folders'); + + const project = await createTeamProject('test', owner); + const rootFolder = await createFolder(project, { name: 'Root' }); + + const childFolder1 = await createFolder(project, { + name: 'Child 1', + parentFolder: rootFolder, + }); + + await createFolder(project, { + name: 'Child 2', + parentFolder: rootFolder, + }); + + const grandchildFolder = await createFolder(project, { + name: 'Grandchild', + parentFolder: childFolder1, + }); + + await authOwnerAgent + .get(`/projects/${project.id}/folders/${grandchildFolder.id}/tree`) + .expect(403); + }); + test('should not get folder tree when project does not exist', async () => { await authOwnerAgent.get('/projects/non-existing-id/folders/some-folder-id/tree').expect(403); }); @@ -311,6 +351,68 @@ describe('GET /projects/:projectId/folders/:folderId/tree', () => { }); describe('GET /projects/:projectId/folders/:folderId/credentials', () => { + test('should not retrieve folder tree if license does not allow it', async () => { + testServer.license.disable('feat:folders'); + + const project = await createTeamProject('test', owner); + const rootFolder = await createFolder(project, { name: 'Root' }); + + const childFolder1 = await createFolder(project, { + name: 'Child 1', + parentFolder: rootFolder, + }); + + await createFolder(project, { + name: 'Child 2', + parentFolder: rootFolder, + }); + + const grandchildFolder = await createFolder(project, { + name: 'Grandchild', + parentFolder: childFolder1, + }); + + for (const folder of [rootFolder, childFolder1, grandchildFolder]) { + const credential = await createCredentials( + { + name: `Test credential ${folder.name}`, + data: '', + type: 'test', + }, + project, + ); + + await createWorkflow( + { + name: 'Test Workflow', + parentFolder: folder, + active: false, + nodes: [ + { + parameters: {}, + type: '@n8n/n8n-nodes-langchain.lmChatOpenAi', + typeVersion: 1.2, + position: [0, 0], + id: faker.string.uuid(), + name: 'OpenAI Chat Model', + credentials: { + openAiApi: { + id: credential.id, + name: credential.name, + }, + }, + }, + ], + }, + owner, + ); + } + + await authOwnerAgent + .get(`/projects/${project.id}/folders/${childFolder1.id}/credentials`) + .expect(403); + }); + test('should not get folder credentials when project does not exist', async () => { await authOwnerAgent .get('/projects/non-existing-id/folders/some-folder-id/credentials') @@ -416,6 +518,23 @@ describe('GET /projects/:projectId/folders/:folderId/credentials', () => { }); describe('PATCH /projects/:projectId/folders/:folderId', () => { + test('should not update folder if license does not allow it', async () => { + testServer.license.disable('feat:folders'); + + const project = await createTeamProject(undefined, owner); + const folder = await createFolder(project, { name: 'Original Name' }); + await linkUserToProject(member, project, 'project:editor'); + + const payload = { + name: 'Updated Folder Name', + }; + + await authMemberAgent + .patch(`/projects/${project.id}/folders/${folder.id}`) + .send(payload) + .expect(403); + }); + test('should not update folder when project does not exist', async () => { const payload = { name: 'Updated Folder Name', @@ -868,6 +987,18 @@ describe('PATCH /projects/:projectId/folders/:folderId', () => { }); describe('DELETE /projects/:projectId/folders/:folderId', () => { + test('should not delete folder if license does not allow it', async () => { + testServer.license.disable('feat:folders'); + + const project = await createTeamProject(undefined, owner); + const folder = await createFolder(project); + + await authOwnerAgent + .delete(`/projects/${project.id}/folders/${folder.id}`) + .send({}) + .expect(403); + }); + test('should not delete folder when project does not exist', async () => { await authOwnerAgent .delete('/projects/non-existing-id/folders/some-folder-id') @@ -1159,6 +1290,16 @@ describe('DELETE /projects/:projectId/folders/:folderId', () => { }); describe('GET /projects/:projectId/folders', () => { + test('should not retrieve folder if license does not allow it', async () => { + testServer.license.disable('feat:folders'); + + const project = await createTeamProject('test project', owner); + await linkUserToProject(member, project, 'project:viewer'); + await createFolder(project, { name: 'Test Folder' }); + + await authMemberAgent.get(`/projects/${project.id}/folders`).expect(403); + }); + test('should not list folders when project does not exist', async () => { await authOwnerAgent.get('/projects/non-existing-id/folders').expect(403); }); @@ -1570,6 +1711,16 @@ describe('GET /projects/:projectId/folders', () => { }); describe('GET /projects/:projectId/folders/content', () => { + test('should not retrieve folder content if license does not allow it', async () => { + testServer.license.disable('feat:folders'); + + const project = await createTeamProject('test project', owner); + await linkUserToProject(member, project, 'project:viewer'); + const folder = await createFolder(project, { name: 'Test Folder' }); + + await authMemberAgent.get(`/projects/${project.id}/folders/${folder.id}/content`).expect(403); + }); + test('should not list folders when project does not exist', async () => { await authOwnerAgent .get('/projects/non-existing-id/folders/no-existing-id/content') @@ -1634,6 +1785,31 @@ describe('GET /projects/:projectId/folders/content', () => { }); describe('PUT /projects/:projectId/folders/:folderId/transfer', () => { + test('should not transfer folder if license does not allow it', async () => { + testServer.license.disable('feat:folders'); + + const admin = await createUser({ role: 'global:admin' }); + const sourceProject = await createTeamProject('source project', admin); + const destinationProject = await createTeamProject('destination project', member); + const sourceFolder1 = await createFolder(sourceProject, { name: 'Source Folder 1' }); + + const credential = await saveCredential(randomCredentialPayload(), { + project: sourceProject, + role: 'credential:owner', + }); + + // ACT + await testServer + .authAgentFor(owner) + .put(`/projects/${sourceProject.id}/folders/${sourceFolder1.id}/transfer`) + .send({ + destinationProjectId: destinationProject.id, + destinationParentFolderId: '0', + shareCredentials: [credential.id], + }) + .expect(403); + }); + test('cannot transfer into the same project', async () => { const sourceProject = await createTeamProject('source project', member); const destinationProject = await createTeamProject('Team Project', member); diff --git a/packages/cli/test/integration/security-audit/nodes-risk-reporter.test.ts b/packages/cli/test/integration/security-audit/nodes-risk-reporter.test.ts index 8fd6cb41eb6..4b9f6348505 100644 --- a/packages/cli/test/integration/security-audit/nodes-risk-reporter.test.ts +++ b/packages/cli/test/integration/security-audit/nodes-risk-reporter.test.ts @@ -9,7 +9,7 @@ import { NodeTypes } from '@/node-types'; import { OFFICIAL_RISKY_NODE_TYPES, NODES_REPORT } from '@/security-audit/constants'; import { SecurityAuditService } from '@/security-audit/security-audit.service'; import { toReportTitle } from '@/security-audit/utils'; -import { CommunityPackagesService } from '@/services/community-packages.service'; +import { CommunityPackagesService } from '@/community-packages/community-packages.service'; import { getRiskSection, MOCK_PACKAGE, saveManualTriggerWorkflow } from './utils'; diff --git a/packages/cli/test/integration/shared/utils/test-server.ts b/packages/cli/test/integration/shared/utils/test-server.ts index f95091a722a..c188119a1e4 100644 --- a/packages/cli/test/integration/shared/utils/test-server.ts +++ b/packages/cli/test/integration/shared/utils/test-server.ts @@ -228,7 +228,7 @@ export const setupTestServer = ({ break; case 'community-packages': - await import('@/controllers/community-packages.controller'); + await import('@/community-packages/community-packages.controller'); break; case 'me': diff --git a/packages/core/package.json b/packages/core/package.json index 200d40ce2ee..7e12d2f4095 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "n8n-core", - "version": "1.103.0", + "version": "1.104.0", "description": "Core functionality of n8n", "main": "dist/index", "types": "dist/index.d.ts", @@ -17,7 +17,7 @@ "format": "biome format --write .", "format:check": "biome ci .", "lint": "eslint . --quiet", - "lintfix": "eslint . --fix", + "lint:fix": "eslint . --fix", "watch": "tsc-watch -p tsconfig.build.json --onCompilationComplete \"tsc-alias -p tsconfig.build.json\"", "test": "jest", "test:dev": "jest --watch" @@ -27,6 +27,7 @@ "bin" ], "devDependencies": { + "@n8n/errors": "workspace:^", "@n8n/typescript-config": "workspace:*", "@types/express": "catalog:", "@types/jsonwebtoken": "catalog:", @@ -46,6 +47,7 @@ "@n8n/decorators": "workspace:*", "@n8n/di": "workspace:*", "@sentry/node": "catalog:", + "@sentry/node-native": "^9.42.1", "axios": "catalog:", "callsites": "catalog:", "chardet": "2.0.0", @@ -56,6 +58,7 @@ "http-proxy-agent": "catalog:", "https-proxy-agent": "catalog:", "iconv-lite": "catalog:", + "jsdom": "23.0.1", "jsonwebtoken": "catalog:", "lodash": "catalog:", "luxon": "catalog:", diff --git a/packages/core/src/__tests__/__snapshots__/html-sandbox.test.ts.snap b/packages/core/src/__tests__/__snapshots__/html-sandbox.test.ts.snap index e1eed34e3a9..2da8201f02c 100644 --- a/packages/core/src/__tests__/__snapshots__/html-sandbox.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/html-sandbox.test.ts.snap @@ -1,13 +1,13 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`sandboxHtmlResponse should handle HTML with special characters 1`] = ` -"" `; -exports[`sandboxHtmlResponse should handle empty HTML 1`] = ` -"" `; @@ -17,3 +17,21 @@ exports[`sandboxHtmlResponse should replace ampersands and double quotes in HTML style="position:fixed; top:0; left:0; width:100vw; height:100vh; border:none; overflow:auto;" allowtransparency="true">" `; + +exports[`sandboxHtmlResponse should sandbox even with no tag 1`] = ` +"" +`; + +exports[`sandboxHtmlResponse should sandbox when outside and tags 1`] = ` +"" +`; + +exports[`sandboxHtmlResponse should sandbox when outside tag 1`] = ` +"" +`; diff --git a/packages/core/src/__tests__/html-sandbox.test.ts b/packages/core/src/__tests__/html-sandbox.test.ts index a85013e0804..d93a9e8bf4f 100644 --- a/packages/core/src/__tests__/html-sandbox.test.ts +++ b/packages/core/src/__tests__/html-sandbox.test.ts @@ -1,3 +1,6 @@ +import type { SecurityConfig } from '@n8n/config'; +import { Container } from '@n8n/di'; +import { mock } from 'jest-mock-extended'; import { Readable } from 'stream'; import { @@ -18,21 +21,57 @@ async function consumeStreamToString(stream: NodeJS.ReadableStream): Promise(); + describe('sandboxHtmlResponse', () => { + beforeAll(() => { + securityConfig.disableIframeSandboxing = false; + jest.spyOn(Container, 'get').mockReturnValue(securityConfig); + }); + afterAll(() => { + jest.restoreAllMocks(); + }); it('should replace ampersands and double quotes in HTML', () => { const html = '
Content & more
'; expect(sandboxHtmlResponse(html)).toMatchSnapshot(); }); - it('should handle empty HTML', () => { - const html = ''; - expect(sandboxHtmlResponse(html)).toMatchSnapshot(); - }); - it('should handle HTML with special characters', () => { const html = '

Special characters: <>&"\'

'; expect(sandboxHtmlResponse(html)).toMatchSnapshot(); }); + + it.each([ + ['Hello World', 'Hello World'], + ['< not html >', '< not html >'], + ['# Test', '# Test'], + ['', ''], + [123, '123'], + [null, 'null'], + ])('should not sandbox if not html', (data, expected) => { + expect(sandboxHtmlResponse(data)).toBe(expected); + }); + + it('should sandbox even with no tag', () => { + const html = 'Test'; + expect(sandboxHtmlResponse(html)).toMatchSnapshot(); + }); + + it('should sandbox when outside and tags', () => { + const html = + 'Test'; + expect(sandboxHtmlResponse(html)).toMatchSnapshot(); + }); + + it('should sandbox when outside tag', () => { + const html = 'Test'; + expect(sandboxHtmlResponse(html)).toMatchSnapshot(); + }); + + it('should always sandbox if forceSandbox is true', () => { + const text = 'Hello World'; + expect(sandboxHtmlResponse(text, true)).toMatchSnapshot(); + }); }); describe('isHtmlRenderedContentType', () => { @@ -143,7 +182,7 @@ describe('bufferEscapeHtml', () => { describe('createHtmlSandboxTransformStream', () => { const getComparableHtml = (input: Buffer | string) => - sandboxHtmlResponse(input.toString()).replace(/\s+/g, ' '); + sandboxHtmlResponse(input.toString(), true).replace(/\s+/g, ' '); it('should wrap single chunk in iframe with proper escaping', async () => { const input = Buffer.from('Hello & "World"', 'utf8'); @@ -276,3 +315,61 @@ describe('createHtmlSandboxTransformStream', () => { expect(result).toEqual(getComparableHtml(input)); }); }); + +describe('sandboxHtmlResponse > not string types', () => { + beforeAll(() => { + securityConfig.disableIframeSandboxing = false; + jest.spyOn(Container, 'get').mockReturnValue(securityConfig); + }); + afterAll(() => { + jest.restoreAllMocks(); + }); + it('should not throw if data is number', () => { + const data = 123; + expect(() => sandboxHtmlResponse(data)).not.toThrow(); + }); + + it('should not throw if data is object', () => { + const data = {}; + expect(() => sandboxHtmlResponse(data)).not.toThrow(); + }); + + it('should not throw if data is boolean', () => { + const data = true; + expect(() => sandboxHtmlResponse(data)).not.toThrow(); + }); +}); + +describe('sandboxHtmlResponse > sandboxing disabled', () => { + beforeAll(() => { + securityConfig.disableIframeSandboxing = true; + jest.spyOn(Container, 'get').mockReturnValue(securityConfig); + }); + afterAll(() => { + jest.restoreAllMocks(); + }); + it('should return unchanged number data', () => { + const data = 123; + expect(sandboxHtmlResponse(data)).toEqual(data); + }); + + it('should return unchanged object data', () => { + const data = {}; + expect(sandboxHtmlResponse(data)).toEqual(data); + }); + + it('should return unchanged boolean data', () => { + const data = true; + expect(sandboxHtmlResponse(data)).toEqual(data); + }); + + it('should return unchanged text data', () => { + const data = 'string data'; + expect(sandboxHtmlResponse(data)).toEqual(data); + }); + + it('should return unchanged html data', () => { + const data = '

html data

'; + expect(sandboxHtmlResponse(data)).toEqual(data); + }); +}); diff --git a/packages/core/src/errors/__tests__/error-reporter.test.ts b/packages/core/src/errors/__tests__/error-reporter.test.ts index cc35d69e887..e2ebf809e54 100644 --- a/packages/core/src/errors/__tests__/error-reporter.test.ts +++ b/packages/core/src/errors/__tests__/error-reporter.test.ts @@ -1,6 +1,6 @@ import type { Logger } from '@n8n/backend-common'; import { QueryFailedError } from '@n8n/typeorm'; -import type { ErrorEvent } from '@sentry/types'; +import type { ErrorEvent } from '@sentry/core'; import { AxiosError } from 'axios'; import { mock } from 'jest-mock-extended'; import { ApplicationError, BaseError } from 'n8n-workflow'; @@ -194,5 +194,20 @@ describe('ErrorReporter', () => { errorReporter.error(error); expect(logger.error).toHaveBeenCalledWith('Test error', metadata); }); + + it.each([true, undefined])( + 'should log the error when shouldBeLogged is %s', + (shouldBeLogged) => { + error.level = 'error'; + errorReporter.error(error, { shouldBeLogged }); + expect(logger.error).toHaveBeenCalledTimes(1); + }, + ); + + it('should not log the error when shouldBeLogged is false', () => { + error.level = 'error'; + errorReporter.error(error, { shouldBeLogged: false }); + expect(logger.error).toHaveBeenCalledTimes(0); + }); }); }); diff --git a/packages/core/src/errors/abstract/binary-data.error.ts b/packages/core/src/errors/abstract/binary-data.error.ts index 061e95baf4c..58403d6d105 100644 --- a/packages/core/src/errors/abstract/binary-data.error.ts +++ b/packages/core/src/errors/abstract/binary-data.error.ts @@ -1,3 +1,3 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; export abstract class BinaryDataError extends ApplicationError {} diff --git a/packages/core/src/errors/abstract/filesystem.error.ts b/packages/core/src/errors/abstract/filesystem.error.ts index 5ee937af681..405f3610d58 100644 --- a/packages/core/src/errors/abstract/filesystem.error.ts +++ b/packages/core/src/errors/abstract/filesystem.error.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; export abstract class FileSystemError extends ApplicationError { constructor(message: string, filePath: string) { diff --git a/packages/core/src/errors/error-reporter.ts b/packages/core/src/errors/error-reporter.ts index 79a12ef4390..d5b68fcba38 100644 --- a/packages/core/src/errors/error-reporter.ts +++ b/packages/core/src/errors/error-reporter.ts @@ -1,10 +1,11 @@ import { inTest, Logger } from '@n8n/backend-common'; import type { InstanceType } from '@n8n/constants'; import { Service } from '@n8n/di'; +import type { ReportingOptions } from '@n8n/errors'; +import type { ErrorEvent, EventHint } from '@sentry/core'; import type { NodeOptions } from '@sentry/node'; -import type { ErrorEvent, EventHint } from '@sentry/types'; +import { eventLoopBlockIntegration } from '@sentry/node-native'; import { AxiosError } from 'axios'; -import type { ReportingOptions } from 'n8n-workflow'; import { ApplicationError, ExecutionCancelledError, BaseError } from 'n8n-workflow'; import { createHash } from 'node:crypto'; @@ -60,7 +61,10 @@ export class ErrorReporter { meta = e.extra; } const msg = [e.message + context, stack].join(''); - this.logger.error(msg, meta); + // Default to logging the error if option is not specified + if (options?.shouldBeLogged ?? true) { + this.logger.error(msg, meta); + } e = e.cause as Error; } while (e); } @@ -101,7 +105,7 @@ export class ErrorReporter { // eslint-disable-next-line @typescript-eslint/unbound-method this.report = this.defaultReport; } else { - setTimeout(checkForExpiration, ONE_DAY_IN_MS); + this.expirationTimer = setTimeout(checkForExpiration, ONE_DAY_IN_MS); } }; checkForExpiration(); @@ -127,7 +131,7 @@ export class ErrorReporter { dsn, release, environment, - enableTracing: false, + tracesSampleRate: 0, serverName, beforeBreadcrumb: () => null, beforeSend: this.beforeSend.bind(this) as NodeOptions['beforeSend'], @@ -141,9 +145,9 @@ export class ErrorReporter { headers: false, query_string: false, url: true, - user: false, }, }), + eventLoopBlockIntegration(), ], }); diff --git a/packages/core/src/errors/invalid-execution-metadata.error.ts b/packages/core/src/errors/invalid-execution-metadata.error.ts index 972703e0d19..088f4d12955 100644 --- a/packages/core/src/errors/invalid-execution-metadata.error.ts +++ b/packages/core/src/errors/invalid-execution-metadata.error.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; export class InvalidExecutionMetadataError extends ApplicationError { constructor( diff --git a/packages/core/src/errors/invalid-mode.error.ts b/packages/core/src/errors/invalid-mode.error.ts index 1e3a4f3594d..794f1ef4617 100644 --- a/packages/core/src/errors/invalid-mode.error.ts +++ b/packages/core/src/errors/invalid-mode.error.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; import { CONFIG_MODES } from '../binary-data/utils'; diff --git a/packages/core/src/execution-engine/__tests__/scheduled-task-manager.test.ts b/packages/core/src/execution-engine/__tests__/scheduled-task-manager.test.ts index 4c39d3afbcd..f3836a93768 100644 --- a/packages/core/src/execution-engine/__tests__/scheduled-task-manager.test.ts +++ b/packages/core/src/execution-engine/__tests__/scheduled-task-manager.test.ts @@ -1,3 +1,4 @@ +import type { Logger } from '@n8n/backend-common'; import { mock } from 'jest-mock-extended'; import type { Workflow } from 'n8n-workflow'; @@ -5,6 +6,8 @@ import type { InstanceSettings } from '@/instance-settings'; import { ScheduledTaskManager } from '../scheduled-task-manager'; +const logger = mock({ scoped: jest.fn().mockReturnValue(mock()) }); + describe('ScheduledTaskManager', () => { const instanceSettings = mock({ isLeader: true }); const workflow = mock({ timezone: 'GMT' }); @@ -16,14 +19,14 @@ describe('ScheduledTaskManager', () => { beforeEach(() => { jest.clearAllMocks(); jest.useFakeTimers(); - scheduledTaskManager = new ScheduledTaskManager(instanceSettings); + scheduledTaskManager = new ScheduledTaskManager(instanceSettings, logger, mock()); }); it('should throw when workflow timezone is invalid', () => { expect(() => scheduledTaskManager.registerCron( mock({ timezone: 'somewhere' }), - everyMinute, + { expression: everyMinute }, onTick, ), ).toThrow('Invalid timezone.'); @@ -36,17 +39,21 @@ describe('ScheduledTaskManager', () => { ).toThrow(); }); - it('should register valid CronJobs', async () => { - scheduledTaskManager.registerCron(workflow, everyMinute, onTick); + it('should register valid CronJobs', () => { + scheduledTaskManager.registerCron(workflow, { expression: everyMinute }, onTick); expect(onTick).not.toHaveBeenCalled(); jest.advanceTimersByTime(10 * 60 * 1000); // 10 minutes expect(onTick).toHaveBeenCalledTimes(10); }); - it('should should not invoke on follower instances', async () => { - scheduledTaskManager = new ScheduledTaskManager(mock({ isLeader: false })); - scheduledTaskManager.registerCron(workflow, everyMinute, onTick); + it('should not invoke on follower instances', () => { + scheduledTaskManager = new ScheduledTaskManager( + mock({ isLeader: false }), + logger, + mock(), + ); + scheduledTaskManager.registerCron(workflow, { expression: everyMinute }, onTick); expect(onTick).not.toHaveBeenCalled(); jest.advanceTimersByTime(10 * 60 * 1000); // 10 minutes @@ -54,18 +61,26 @@ describe('ScheduledTaskManager', () => { }); it('should deregister CronJobs for a workflow', async () => { - scheduledTaskManager.registerCron(workflow, everyMinute, onTick); - scheduledTaskManager.registerCron(workflow, everyMinute, onTick); - scheduledTaskManager.registerCron(workflow, everyMinute, onTick); + scheduledTaskManager.registerCron(workflow, { expression: everyMinute }, onTick); + scheduledTaskManager.registerCron(workflow, { expression: everyMinute }, onTick); + scheduledTaskManager.registerCron(workflow, { expression: everyMinute }, onTick); - expect(scheduledTaskManager.cronJobs.get(workflow.id)?.length).toBe(3); + expect(scheduledTaskManager.cronMap.get(workflow.id)).toHaveLength(3); scheduledTaskManager.deregisterCrons(workflow.id); - expect(scheduledTaskManager.cronJobs.get(workflow.id)?.length).toBe(0); + expect(scheduledTaskManager.cronMap.get(workflow.id)).toBeUndefined(); expect(onTick).not.toHaveBeenCalled(); jest.advanceTimersByTime(10 * 60 * 1000); // 10 minutes expect(onTick).not.toHaveBeenCalled(); }); + + it('should not set up log interval when activeInterval is 0', () => { + const configWithZeroInterval = mock({ activeInterval: 0 }); + const manager = new ScheduledTaskManager(instanceSettings, logger, configWithZeroInterval); + + // @ts-expect-error Private property + expect(manager.logInterval).toBeUndefined(); + }); }); diff --git a/packages/core/src/execution-engine/__tests__/triggers-and-pollers.test.ts b/packages/core/src/execution-engine/__tests__/triggers-and-pollers.test.ts index 25b1fddb266..bf7b59b69f4 100644 --- a/packages/core/src/execution-engine/__tests__/triggers-and-pollers.test.ts +++ b/packages/core/src/execution-engine/__tests__/triggers-and-pollers.test.ts @@ -1,5 +1,5 @@ +import { ApplicationError } from '@n8n/errors'; import { mock } from 'jest-mock-extended'; -import { ApplicationError } from 'n8n-workflow'; import type { Workflow, INode, diff --git a/packages/core/src/execution-engine/active-workflows.ts b/packages/core/src/execution-engine/active-workflows.ts index 2f4db747bb0..7fd1e6a0e98 100644 --- a/packages/core/src/execution-engine/active-workflows.ts +++ b/packages/core/src/execution-engine/active-workflows.ts @@ -149,7 +149,7 @@ export class ActiveWorkflows { }; // Get all the trigger times - const cronTimes = (pollTimes.item || []).map(toCronExpression); + const cronExpressions = (pollTimes.item || []).map(toCronExpression); // The trigger function to execute when the cron-time got reached const executeTrigger = async (testingTrigger = false) => { this.logger.debug(`Polling trigger initiated for workflow "${workflow.name}"`, { @@ -177,15 +177,15 @@ export class ActiveWorkflows { // Execute the trigger directly to be able to know if it works await executeTrigger(true); - for (const cronTime of cronTimes) { - const cronTimeParts = cronTime.split(' '); + for (const expression of cronExpressions) { + const cronTimeParts = expression.split(' '); if (cronTimeParts.length > 0 && cronTimeParts[0].includes('*')) { throw new ApplicationError( 'The polling interval is too short. It has to be at least a minute.', ); } - this.scheduledTaskManager.registerCron(workflow, cronTime, executeTrigger); + this.scheduledTaskManager.registerCron(workflow, { expression }, executeTrigger); } } diff --git a/packages/core/src/execution-engine/node-execution-context/__tests__/hook-context.test.ts b/packages/core/src/execution-engine/node-execution-context/__tests__/hook-context.test.ts index 1092198a23b..52defee3f61 100644 --- a/packages/core/src/execution-engine/node-execution-context/__tests__/hook-context.test.ts +++ b/packages/core/src/execution-engine/node-execution-context/__tests__/hook-context.test.ts @@ -1,3 +1,4 @@ +import { ApplicationError } from '@n8n/errors'; import { mock } from 'jest-mock-extended'; import type { Expression, @@ -13,7 +14,6 @@ import type { WorkflowActivateMode, WorkflowExecuteMode, } from 'n8n-workflow'; -import { ApplicationError } from 'n8n-workflow'; import { HookContext } from '../hook-context'; diff --git a/packages/core/src/execution-engine/node-execution-context/__tests__/node-execution-context.test.ts b/packages/core/src/execution-engine/node-execution-context/__tests__/node-execution-context.test.ts index 70e0a320899..1837080cc86 100644 --- a/packages/core/src/execution-engine/node-execution-context/__tests__/node-execution-context.test.ts +++ b/packages/core/src/execution-engine/node-execution-context/__tests__/node-execution-context.test.ts @@ -10,7 +10,7 @@ import type { Workflow, WorkflowExecuteMode, } from 'n8n-workflow'; -import { NodeConnectionTypes } from 'n8n-workflow'; +import { CHAT_TRIGGER_NODE_TYPE, NodeConnectionTypes } from 'n8n-workflow'; import { InstanceSettings } from '@/instance-settings'; @@ -115,6 +115,31 @@ describe('NodeExecutionContext', () => { }); }); + describe('getChatTrigger', () => { + it('should return a chat trigger node if it exists in the workflow', () => { + const chatNode = mock({ name: 'Chat', type: CHAT_TRIGGER_NODE_TYPE }); + + workflow.nodes = { + Chat: chatNode, + }; + + const result = testContext.getChatTrigger(); + + expect(result).toEqual(chatNode); + }); + it('should return a null if there is no chat trigger node in the workflow', () => { + const someNode = mock({ name: 'Some Node', type: 'someType' }); + + workflow.nodes = { + 'Some Node': someNode, + }; + + const result = testContext.getChatTrigger(); + + expect(result).toBeNull(); + }); + }); + describe('getKnownNodeTypes', () => { it('should call getKnownTypes method of nodeTypes', () => { testContext.getKnownNodeTypes(); diff --git a/packages/core/src/execution-engine/node-execution-context/hook-context.ts b/packages/core/src/execution-engine/node-execution-context/hook-context.ts index 0fdf1c59542..84bf787cd1a 100644 --- a/packages/core/src/execution-engine/node-execution-context/hook-context.ts +++ b/packages/core/src/execution-engine/node-execution-context/hook-context.ts @@ -1,3 +1,4 @@ +import { ApplicationError } from '@n8n/errors'; import type { ICredentialDataDecryptedObject, INode, @@ -9,7 +10,6 @@ import type { IWebhookData, WebhookType, } from 'n8n-workflow'; -import { ApplicationError } from 'n8n-workflow'; import { NodeExecutionContext } from './node-execution-context'; import { getRequestHelperFunctions } from './utils/request-helper-functions'; diff --git a/packages/core/src/execution-engine/node-execution-context/node-execution-context.ts b/packages/core/src/execution-engine/node-execution-context/node-execution-context.ts index 5b247199a31..8356d241014 100644 --- a/packages/core/src/execution-engine/node-execution-context/node-execution-context.ts +++ b/packages/core/src/execution-engine/node-execution-context/node-execution-context.ts @@ -25,6 +25,7 @@ import type { } from 'n8n-workflow'; import { ApplicationError, + CHAT_TRIGGER_NODE_TYPE, deepCopy, ExpressionError, NodeHelpers, @@ -106,22 +107,43 @@ export abstract class NodeExecutionContext implements Omit { // @ts-expect-error undefined property error.code = 'ENOENT'; (fsAccess as jest.Mock).mockRejectedValue(error); + (fsRealpath as jest.Mock).mockImplementation((path: string) => path); instanceSettings = Container.get(InstanceSettings); }); @@ -39,115 +40,125 @@ describe('isFilePathBlocked', () => { process.env[BLOCK_FILE_ACCESS_TO_N8N_FILES] = 'true'; }); - it('should return true for static cache dir', () => { + it('should return true for static cache dir', async () => { const filePath = instanceSettings.staticCacheDir; - expect(isFilePathBlocked(filePath)).toBe(true); + expect(await isFilePathBlocked(filePath)).toBe(true); }); - it('should return true for restricted paths', () => { + it('should return true for restricted paths', async () => { const restrictedPath = instanceSettings.n8nFolder; - expect(isFilePathBlocked(restrictedPath)).toBe(true); + expect(await isFilePathBlocked(restrictedPath)).toBe(true); }); - it('should handle empty allowed paths', () => { + it('should handle empty allowed paths', async () => { delete process.env[RESTRICT_FILE_ACCESS_TO]; - const result = isFilePathBlocked('/some/random/path'); + const result = await isFilePathBlocked('/some/random/path'); expect(result).toBe(false); }); - it('should handle multiple allowed paths', () => { + it('should handle multiple allowed paths', async () => { process.env[RESTRICT_FILE_ACCESS_TO] = '/path1;/path2;/path3'; const allowedPath = '/path2/somefile'; - expect(isFilePathBlocked(allowedPath)).toBe(false); + expect(await isFilePathBlocked(allowedPath)).toBe(false); }); - it('should handle empty strings in allowed paths', () => { + it('should handle empty strings in allowed paths', async () => { process.env[RESTRICT_FILE_ACCESS_TO] = '/path1;;/path2'; const allowedPath = '/path2/somefile'; - expect(isFilePathBlocked(allowedPath)).toBe(false); + expect(await isFilePathBlocked(allowedPath)).toBe(false); }); - it('should trim whitespace in allowed paths', () => { + it('should trim whitespace in allowed paths', async () => { process.env[RESTRICT_FILE_ACCESS_TO] = ' /path1 ; /path2 ; /path3 '; const allowedPath = '/path2/somefile'; - expect(isFilePathBlocked(allowedPath)).toBe(false); + expect(await isFilePathBlocked(allowedPath)).toBe(false); }); - it('should return false when BLOCK_FILE_ACCESS_TO_N8N_FILES is false', () => { + it('should return false when BLOCK_FILE_ACCESS_TO_N8N_FILES is false', async () => { process.env[BLOCK_FILE_ACCESS_TO_N8N_FILES] = 'false'; const restrictedPath = instanceSettings.n8nFolder; - expect(isFilePathBlocked(restrictedPath)).toBe(false); + expect(await isFilePathBlocked(restrictedPath)).toBe(false); }); - it('should return true when path is in allowed paths but still restricted', () => { + it('should return true when path is in allowed paths but still restricted', async () => { process.env[RESTRICT_FILE_ACCESS_TO] = '/some/allowed/path'; const restrictedPath = instanceSettings.n8nFolder; - expect(isFilePathBlocked(restrictedPath)).toBe(true); + expect(await isFilePathBlocked(restrictedPath)).toBe(true); }); - it('should return false when path is in allowed paths', () => { + it('should return false when path is in allowed paths', async () => { const allowedPath = '/some/allowed/path'; process.env[RESTRICT_FILE_ACCESS_TO] = allowedPath; - expect(isFilePathBlocked(allowedPath)).toBe(false); + expect(await isFilePathBlocked(allowedPath)).toBe(false); }); - it('should return true when file paths in CONFIG_FILES', () => { + it('should return true when file paths in CONFIG_FILES', async () => { process.env[CONFIG_FILES] = '/path/to/config1,/path/to/config2'; const configPath = '/path/to/config1/somefile'; - expect(isFilePathBlocked(configPath)).toBe(true); + expect(await isFilePathBlocked(configPath)).toBe(true); }); - it('should return true when file paths in CUSTOM_EXTENSION_ENV', () => { + it('should return true when file paths in CUSTOM_EXTENSION_ENV', async () => { process.env[CUSTOM_EXTENSION_ENV] = '/path/to/extensions1;/path/to/extensions2'; const extensionPath = '/path/to/extensions1/somefile'; - expect(isFilePathBlocked(extensionPath)).toBe(true); + expect(await isFilePathBlocked(extensionPath)).toBe(true); }); - it('should return true when file paths in BINARY_DATA_STORAGE_PATH', () => { + it('should return true when file paths in BINARY_DATA_STORAGE_PATH', async () => { process.env[BINARY_DATA_STORAGE_PATH] = '/path/to/binary/storage'; const binaryPath = '/path/to/binary/storage/somefile'; - expect(isFilePathBlocked(binaryPath)).toBe(true); + expect(await isFilePathBlocked(binaryPath)).toBe(true); }); - it('should block file paths in email template paths', () => { + it('should block file paths in email template paths', async () => { process.env[UM_EMAIL_TEMPLATES_INVITE] = '/path/to/invite/templates'; process.env[UM_EMAIL_TEMPLATES_PWRESET] = '/path/to/pwreset/templates'; const invitePath = '/path/to/invite/templates/invite.html'; const pwResetPath = '/path/to/pwreset/templates/reset.html'; - expect(isFilePathBlocked(invitePath)).toBe(true); - expect(isFilePathBlocked(pwResetPath)).toBe(true); + expect(await isFilePathBlocked(invitePath)).toBe(true); + expect(await isFilePathBlocked(pwResetPath)).toBe(true); }); - it('should block access to n8n files if restrict and block are set', () => { + it('should block access to n8n files if restrict and block are set', async () => { const homeVarName = process.platform === 'win32' ? 'USERPROFILE' : 'HOME'; const userHome = process.env.N8N_USER_FOLDER ?? process.env[homeVarName] ?? process.cwd(); process.env[RESTRICT_FILE_ACCESS_TO] = userHome; process.env[BLOCK_FILE_ACCESS_TO_N8N_FILES] = 'true'; const restrictedPath = instanceSettings.n8nFolder; - expect(isFilePathBlocked(restrictedPath)).toBe(true); + expect(await isFilePathBlocked(restrictedPath)).toBe(true); }); - it('should allow access to parent folder if restrict and block are set', () => { + it('should allow access to parent folder if restrict and block are set', async () => { const homeVarName = process.platform === 'win32' ? 'USERPROFILE' : 'HOME'; const userHome = process.env.N8N_USER_FOLDER ?? process.env[homeVarName] ?? process.cwd(); process.env[RESTRICT_FILE_ACCESS_TO] = userHome; process.env[BLOCK_FILE_ACCESS_TO_N8N_FILES] = 'true'; const restrictedPath = join(userHome, 'somefile.txt'); - expect(isFilePathBlocked(restrictedPath)).toBe(false); + expect(await isFilePathBlocked(restrictedPath)).toBe(false); }); - it('should not block similar paths', () => { + it('should not block similar paths', async () => { const homeVarName = process.platform === 'win32' ? 'USERPROFILE' : 'HOME'; const userHome = process.env.N8N_USER_FOLDER ?? process.env[homeVarName] ?? process.cwd(); process.env[RESTRICT_FILE_ACCESS_TO] = userHome; process.env[BLOCK_FILE_ACCESS_TO_N8N_FILES] = 'true'; const restrictedPath = join(userHome, '.n8n_x'); - expect(isFilePathBlocked(restrictedPath)).toBe(false); + expect(await isFilePathBlocked(restrictedPath)).toBe(false); + }); + + it('should return true for a symlink in a allowed path to a restricted path', async () => { + process.env[RESTRICT_FILE_ACCESS_TO] = '/path1'; + const allowedPath = '/path1/symlink'; + const actualPath = '/path2/realfile'; + (fsRealpath as jest.Mock).mockImplementation((path: string) => + path === allowedPath ? actualPath : path, + ); + expect(await isFilePathBlocked(allowedPath)).toBe(true); }); }); diff --git a/packages/core/src/execution-engine/node-execution-context/utils/__tests__/normalize-items.test.ts b/packages/core/src/execution-engine/node-execution-context/utils/__tests__/normalize-items.test.ts index 2664e1bf08e..88fc089f7c7 100644 --- a/packages/core/src/execution-engine/node-execution-context/utils/__tests__/normalize-items.test.ts +++ b/packages/core/src/execution-engine/node-execution-context/utils/__tests__/normalize-items.test.ts @@ -1,5 +1,5 @@ +import { ApplicationError } from '@n8n/errors'; import type { IBinaryData, INodeExecutionData } from 'n8n-workflow'; -import { ApplicationError } from 'n8n-workflow'; import { normalizeItems } from '../normalize-items'; diff --git a/packages/core/src/execution-engine/node-execution-context/utils/__tests__/scheduling-helper-functions.test.ts b/packages/core/src/execution-engine/node-execution-context/utils/__tests__/scheduling-helper-functions.test.ts index e9a5e63f58c..5c65225b257 100644 --- a/packages/core/src/execution-engine/node-execution-context/utils/__tests__/scheduling-helper-functions.test.ts +++ b/packages/core/src/execution-engine/node-execution-context/utils/__tests__/scheduling-helper-functions.test.ts @@ -19,11 +19,11 @@ describe('getSchedulingFunctions', () => { describe('registerCron', () => { it('should invoke scheduledTaskManager.registerCron', () => { - schedulingFunctions.registerCron(cronExpression, onTick); + schedulingFunctions.registerCron({ expression: cronExpression }, onTick); expect(scheduledTaskManager.registerCron).toHaveBeenCalledWith( workflow, - cronExpression, + { expression: cronExpression }, onTick, ); }); diff --git a/packages/core/src/execution-engine/node-execution-context/utils/file-system-helper-functions.ts b/packages/core/src/execution-engine/node-execution-context/utils/file-system-helper-functions.ts index e575b298454..60dc26460db 100644 --- a/packages/core/src/execution-engine/node-execution-context/utils/file-system-helper-functions.ts +++ b/packages/core/src/execution-engine/node-execution-context/utils/file-system-helper-functions.ts @@ -3,8 +3,11 @@ import { Container } from '@n8n/di'; import type { FileSystemHelperFunctions, INode } from 'n8n-workflow'; import { NodeOperationError } from 'n8n-workflow'; import { createReadStream } from 'node:fs'; -import { access as fsAccess, writeFile as fsWriteFile } from 'node:fs/promises'; -import { resolve } from 'node:path'; +import { + access as fsAccess, + writeFile as fsWriteFile, + realpath as fsRealpath, +} from 'node:fs/promises'; import { BINARY_DATA_STORAGE_PATH, @@ -29,9 +32,9 @@ const getAllowedPaths = () => { return allowedPaths; }; -export function isFilePathBlocked(filePath: string): boolean { +export async function isFilePathBlocked(filePath: string): Promise { const allowedPaths = getAllowedPaths(); - const resolvedFilePath = resolve(filePath); + const resolvedFilePath = await fsRealpath(filePath); const blockFileAccessToN8nFiles = process.env[BLOCK_FILE_ACCESS_TO_N8N_FILES] !== 'false'; const restrictedPaths = blockFileAccessToN8nFiles ? getN8nRestrictedPaths() : []; @@ -62,7 +65,7 @@ export const getFileSystemHelperFunctions = (node: INode): FileSystemHelperFunct }) : error; } - if (isFilePathBlocked(filePath as string)) { + if (await isFilePathBlocked(filePath as string)) { const allowedPaths = getAllowedPaths(); const message = allowedPaths.length ? ` Allowed paths: ${allowedPaths.join(', ')}` : ''; throw new NodeOperationError(node, `Access to the file is not allowed.${message}`, { @@ -77,7 +80,7 @@ export const getFileSystemHelperFunctions = (node: INode): FileSystemHelperFunct }, async writeContentToFile(filePath, content, flag) { - if (isFilePathBlocked(filePath as string)) { + if (await isFilePathBlocked(filePath as string)) { throw new NodeOperationError(node, `The file "${String(filePath)}" is not writable.`, { level: 'warning', }); diff --git a/packages/core/src/execution-engine/node-execution-context/utils/normalize-items.ts b/packages/core/src/execution-engine/node-execution-context/utils/normalize-items.ts index cafc9f6c426..cfb793e5dfe 100644 --- a/packages/core/src/execution-engine/node-execution-context/utils/normalize-items.ts +++ b/packages/core/src/execution-engine/node-execution-context/utils/normalize-items.ts @@ -1,5 +1,5 @@ +import { ApplicationError } from '@n8n/errors'; import type { INodeExecutionData, IDataObject } from 'n8n-workflow'; -import { ApplicationError } from 'n8n-workflow'; /** * Automatically put the objects under a 'json' key and don't error, diff --git a/packages/core/src/execution-engine/node-execution-context/utils/scheduling-helper-functions.ts b/packages/core/src/execution-engine/node-execution-context/utils/scheduling-helper-functions.ts index d2e0034dc0f..64363f6eb0a 100644 --- a/packages/core/src/execution-engine/node-execution-context/utils/scheduling-helper-functions.ts +++ b/packages/core/src/execution-engine/node-execution-context/utils/scheduling-helper-functions.ts @@ -6,7 +6,6 @@ import { ScheduledTaskManager } from '../../scheduled-task-manager'; export const getSchedulingFunctions = (workflow: Workflow): SchedulingFunctions => { const scheduledTaskManager = Container.get(ScheduledTaskManager); return { - registerCron: (cronExpression, onTick) => - scheduledTaskManager.registerCron(workflow, cronExpression, onTick), + registerCron: (cron, onTick) => scheduledTaskManager.registerCron(workflow, cron, onTick), }; }; diff --git a/packages/core/src/execution-engine/scheduled-task-manager.ts b/packages/core/src/execution-engine/scheduled-task-manager.ts index 1a20700b003..1dade519b88 100644 --- a/packages/core/src/execution-engine/scheduled-task-manager.ts +++ b/packages/core/src/execution-engine/scheduled-task-manager.ts @@ -1,44 +1,115 @@ +import { Logger } from '@n8n/backend-common'; +import { CronLoggingConfig } from '@n8n/config'; +import { Time } from '@n8n/constants'; import { Service } from '@n8n/di'; import { CronJob } from 'cron'; -import type { CronExpression, Workflow } from 'n8n-workflow'; +import type { Cron, Workflow } from 'n8n-workflow'; import { InstanceSettings } from '@/instance-settings'; @Service() export class ScheduledTaskManager { - constructor(private readonly instanceSettings: InstanceSettings) {} + readonly cronMap = new Map>(); - readonly cronJobs = new Map(); + private readonly logInterval?: NodeJS.Timeout; + + constructor( + private readonly instanceSettings: InstanceSettings, + private readonly logger: Logger, + private readonly config: CronLoggingConfig, + ) { + this.logger = this.logger.scoped('cron'); + + if (this.config.activeInterval === 0) return; + + this.logInterval = setInterval( + () => this.logActiveCrons(), + this.config.activeInterval * Time.minutes.toMilliseconds, + ); + } + + private logActiveCrons() { + const activeCrons: Record = {}; + for (const [workflowId, cronJobs] of this.cronMap) { + activeCrons[`workflow-${workflowId}`] = cronJobs.map( + ({ displayableCron }) => displayableCron, + ); + } + + if (Object.keys(activeCrons).length === 0) return; + + this.logger.debug('Currently active crons', { activeCrons }); + } + + registerCron(workflow: Workflow, { expression, recurrence }: Cron, onTick: () => void) { + const recurrenceStr = recurrence?.activated + ? `every ${recurrence.intervalSize} ${recurrence.typeInterval}` + : undefined; + + const displayableCron = recurrenceStr ? `${expression} (${recurrenceStr})` : expression; - registerCron(workflow: Workflow, cronExpression: CronExpression, onTick: () => void) { const cronJob = new CronJob( - cronExpression, + expression, () => { - if (this.instanceSettings.isLeader) onTick(); + if (this.instanceSettings.isLeader) { + this.logger.debug('Executing cron for workflow', { + workflowId: workflow.id, + cron: displayableCron, + instanceRole: this.instanceSettings.instanceRole, + }); + onTick(); + } }, undefined, true, workflow.timezone, ); - const cronJobsForWorkflow = this.cronJobs.get(workflow.id); - if (cronJobsForWorkflow) { - cronJobsForWorkflow.push(cronJob); + + const workflowCronEntries = this.cronMap.get(workflow.id); + const cronEntry = { job: cronJob, displayableCron }; + + if (workflowCronEntries) { + workflowCronEntries.push(cronEntry); } else { - this.cronJobs.set(workflow.id, [cronJob]); + this.cronMap.set(workflow.id, [cronEntry]); } + + this.logger.debug('Registered cron for workflow', { + workflowId: workflow.id, + cron: displayableCron, + instanceRole: this.instanceSettings.instanceRole, + }); } deregisterCrons(workflowId: string) { - const cronJobs = this.cronJobs.get(workflowId) ?? []; + const cronJobs = this.cronMap.get(workflowId) ?? []; + + if (cronJobs.length === 0) return; + + const crons: string[] = []; + while (cronJobs.length) { - const cronJob = cronJobs.pop(); - if (cronJob) cronJob.stop(); + const cronEntry = cronJobs.pop(); + if (cronEntry) { + crons.push(cronEntry.displayableCron); + cronEntry.job.stop(); + } } + + this.cronMap.delete(workflowId); + + this.logger.info('Deregistered all crons for workflow', { + workflowId, + crons, + instanceRole: this.instanceSettings.instanceRole, + }); } deregisterAllCrons() { - for (const workflowId of Object.keys(this.cronJobs)) { + for (const workflowId of this.cronMap.keys()) { this.deregisterCrons(workflowId); } + + if (this.logInterval) clearInterval(this.logInterval); } } diff --git a/packages/core/src/execution-engine/triggers-and-pollers.ts b/packages/core/src/execution-engine/triggers-and-pollers.ts index 9c903271498..1c6c8cc99cc 100644 --- a/packages/core/src/execution-engine/triggers-and-pollers.ts +++ b/packages/core/src/execution-engine/triggers-and-pollers.ts @@ -1,5 +1,5 @@ import { Service } from '@n8n/di'; -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; import type { Workflow, INode, diff --git a/packages/core/src/execution-engine/workflow-execute.ts b/packages/core/src/execution-engine/workflow-execute.ts index bbe842bd705..3fa64592eae 100644 --- a/packages/core/src/execution-engine/workflow-execute.ts +++ b/packages/core/src/execution-engine/workflow-execute.ts @@ -2,6 +2,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/prefer-nullish-coalescing */ +import { GlobalConfig } from '@n8n/config'; import { TOOL_EXECUTOR_NODE_NAME } from '@n8n/constants'; import { Container } from '@n8n/di'; import * as assert from 'assert/strict'; @@ -1211,13 +1212,13 @@ export class WorkflowExecute { : await nodeType.execute.call(context); } - // If data is not json compatible then log it as incorrect output - // Does not block the execution from continuing - const jsonCompatibleResult = isJsonCompatible(data); - if (!jsonCompatibleResult.isValid) { - Container.get(ErrorReporter).error( - new UnexpectedError('node execution output incorrect data'), - { + if (Container.get(GlobalConfig).sentry.backendDsn) { + // If data is not json compatible then log it as incorrect output + // Does not block the execution from continuing + const jsonCompatibleResult = isJsonCompatible(data, new Set(['pairedItem'])); + if (!jsonCompatibleResult.isValid) { + Container.get(ErrorReporter).error('node execution returned incorrect data', { + shouldBeLogged: false, extra: { nodeName: node.name, nodeType: node.type, @@ -1228,8 +1229,8 @@ export class WorkflowExecute { errorPath: jsonCompatibleResult.errorPath, errorMessage: jsonCompatibleResult.errorMessage, }, - }, - ); + }); + } } const closeFunctionsResults = await Promise.allSettled( diff --git a/packages/core/src/html-sandbox.ts b/packages/core/src/html-sandbox.ts index 2ecae9f8aae..db55546b3fb 100644 --- a/packages/core/src/html-sandbox.ts +++ b/packages/core/src/html-sandbox.ts @@ -1,14 +1,52 @@ +import { SecurityConfig } from '@n8n/config'; +import { Container } from '@n8n/di'; +import { JSDOM } from 'jsdom'; import type { TransformCallback } from 'stream'; import { Transform } from 'stream'; +export const isIframeSandboxDisabled = () => { + return Container.get(SecurityConfig).disableIframeSandboxing; +}; + /** - * Sandboxes the HTML response to prevent possible exploitation. Embeds the - * response in an iframe to make sure the HTML has a different origin. + * Checks if the given string contains HTML. */ -export const sandboxHtmlResponse = (html: string) => { +export const hasHtml = (str: string) => { + try { + const dom = new JSDOM(str); + return ( + dom.window.document.body.children.length > 0 || dom.window.document.head.children.length > 0 + ); + } catch { + return false; + } +}; + +/** + * Sandboxes the HTML response to prevent possible exploitation, if the data has HTML. + * If the data does not have HTML, it will be returned as is. + * Otherwise, it embeds the response in an iframe to make sure the HTML has a different origin. + * Env var `N8N_INSECURE_DISABLE_WEBHOOK_IFRAME_SANDBOX` can be used, in this case sandboxing is disabled. + * + * @param data - The data to sandbox. + * @param forceSandbox - Whether to force sandboxing even if the data does not contain HTML. + * @returns The sandboxed HTML response. + */ +export const sandboxHtmlResponse = (data: T, forceSandbox = false) => { + if (isIframeSandboxDisabled()) return data; + + let text; + if (typeof data !== 'string') { + text = JSON.stringify(data); + } else { + text = data; + } + + if (!forceSandbox && !hasHtml(text)) return text; + // Escape & and " as mentioned in the spec: // https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-iframe-element - const escapedHtml = html.replaceAll('&', '&').replaceAll('"', '"'); + const escapedHtml = text.replaceAll('&', '&').replaceAll('"', '"'); return `\n
\n\n`;\nreturn item;" + }, + "name": "FunctionItem", + "type": "n8n-nodes-base.functionItem", + "typeVersion": 1, + "position": [450, 300], + "notesInFlow": true, + "notes": "Set html data", + "id": "70ab3e66-cac8-45fd-917d-838e2538ad69" + }, + { + "parameters": { + "extractionValues": { + "values": [ + { + "key": "extracted", + "cssSelector": "li>a", + "returnArray": true + } + ] + }, + "options": { + "trimValues": true + } + }, + "name": "HTML Extract", + "type": "n8n-nodes-base.htmlExtract", + "typeVersion": 1, + "position": [650, 300], + "id": "f27a2f9c-1946-4cac-96fe-d980fe2e5077" + }, + { + "parameters": { + "functionCode": "testData = [ \"Quickstart\", \"Apps & nodes\", \"Workflows\", \"Docs\", \"Github\", \"Forum\", \"Blog\", \"Contribute\", \"n8n.cloud\", \"Sign in\", \"Register\", \"Quickstart\", \"Apps & nodes\", \"Workflows\", \"Docs\", \"Github\", \"Forum\", \"Blog\", \"Contribute\", \"n8n.cloud\", \"Sign in\", \"Register\" ].join('');\nresultData = $node[\"HTML Extract\"].json[\"extracted\"].join('')\nif(testData !== resultData){\n throw new Error('Error in extracting html from json data');\n}\nreturn items;" + }, + "name": "Function", + "type": "n8n-nodes-base.function", + "typeVersion": 1, + "position": [850, 300], + "notesInFlow": true, + "notes": "Verify the result", + "id": "97bc0163-8d74-4f5b-b65c-ec1354333908" + }, + { + "parameters": { + "mode": "jsonToBinary", + "convertAllData": false, + "options": { + "useRawData": true + } + }, + "name": "Move Binary Data", + "type": "n8n-nodes-base.moveBinaryData", + "typeVersion": 1, + "position": [650, 500], + "id": "c25511ef-8cbc-4d29-bc2f-3983d900e802" + }, + { + "parameters": { + "sourceData": "binary", + "extractionValues": { + "values": [ + { + "key": "extracted", + "cssSelector": "li>a", + "returnArray": true + } + ] + }, + "options": { + "trimValues": true + } + }, + "name": "HTML Extract1", + "type": "n8n-nodes-base.htmlExtract", + "typeVersion": 1, + "position": [850, 500], + "id": "9df0c1ed-008b-4820-958f-c87330a9000d" + }, + { + "parameters": { + "functionCode": "testData = [ \"Quickstart\", \"Apps & nodes\", \"Workflows\", \"Docs\", \"Github\", \"Forum\", \"Blog\", \"Contribute\", \"n8n.cloud\", \"Sign in\", \"Register\", \"Quickstart\", \"Apps & nodes\", \"Workflows\", \"Docs\", \"Github\", \"Forum\", \"Blog\", \"Contribute\", \"n8n.cloud\", \"Sign in\", \"Register\" ].join('');\nresultData = $node[\"HTML Extract1\"].json[\"extracted\"].join('')\nif(testData !== resultData){\n throw new Error('Error in extracting html from binary data');\n}\nreturn items;" + }, + "name": "Function1", + "type": "n8n-nodes-base.function", + "typeVersion": 1, + "position": [1050, 500], + "notesInFlow": true, + "notes": "Verify the result", + "id": "a36ed52d-5256-4cbf-b96f-596574b092fc" + } + ], + "connections": { + "FunctionItem": { + "main": [ + [ + { + "node": "HTML Extract", + "type": "main", + "index": 0 + }, + { + "node": "Move Binary Data", + "type": "main", + "index": 0 + } + ] + ] + }, + "Start": { + "main": [ + [ + { + "node": "FunctionItem", + "type": "main", + "index": 0 + } + ] + ] + }, + "HTML Extract": { + "main": [ + [ + { + "node": "Function", + "type": "main", + "index": 0 + } + ] + ] + }, + "Move Binary Data": { + "main": [ + [ + { + "node": "HTML Extract1", + "type": "main", + "index": 0 + } + ] + ] + }, + "HTML Extract1": { + "main": [ + [ + { + "node": "Function1", + "type": "main", + "index": 0 + } + ] + ] + } + }, + "settings": {}, + "staticData": null, + "meta": null, + "pinData": null, + "versionId": null, + "triggerCount": 0, + "tags": [] +} diff --git a/packages/testing/playwright/test-workflows/workflows/92.json b/packages/testing/playwright/test-workflows/workflows/92.json new file mode 100644 index 00000000000..6a5622bdc8f --- /dev/null +++ b/packages/testing/playwright/test-workflows/workflows/92.json @@ -0,0 +1,792 @@ +{ + "createdAt": "2021-03-03T12:12:08.076Z", + "updatedAt": "2021-03-03T12:18:09.812Z", + "id": "92", + "name": "IF", + "active": false, + "nodes": [ + { + "parameters": {}, + "name": "Start", + "type": "n8n-nodes-base.start", + "typeVersion": 1, + "position": [260, 300], + "id": "6ae1c6d7-2986-491e-9657-e173e8c700e0" + }, + { + "parameters": { + "conditions": { + "boolean": [ + { + "value1": true, + "operation": "notEqual" + } + ] + } + }, + "name": "IF", + "type": "n8n-nodes-base.if", + "typeVersion": 1, + "position": [450, 100], + "id": "744cd7d3-fe05-416b-afe4-3fd9f02d684b" + }, + { + "parameters": { + "conditions": { + "boolean": [], + "dateTime": [ + { + "value1": "2021-03-01T23:00:00.000Z", + "value2": "2021-02-28T23:00:00.000Z" + } + ] + } + }, + "name": "IF1", + "type": "n8n-nodes-base.if", + "typeVersion": 1, + "position": [450, 250], + "id": "d9d7145d-0f47-4ac1-b51d-cae45a77cbab" + }, + { + "parameters": { + "conditions": { + "boolean": [], + "dateTime": [], + "number": [ + { + "value1": 5, + "value2": 10 + } + ] + } + }, + "name": "IF2", + "type": "n8n-nodes-base.if", + "typeVersion": 1, + "position": [450, 410], + "id": "dceb69ae-c2d9-4a0a-aeb9-3ef388e64005" + }, + { + "parameters": { + "conditions": { + "boolean": [], + "dateTime": [], + "number": [], + "string": [ + { + "value1": "n8n.io", + "operation": "contains", + "value2": "io" + } + ] + } + }, + "name": "IF3", + "type": "n8n-nodes-base.if", + "typeVersion": 1, + "position": [450, 670], + "id": "9c377027-9b03-4d11-8405-f13c773efff1" + }, + { + "parameters": { + "conditions": { + "boolean": [ + { + "value1": true, + "value2": true + } + ] + } + }, + "name": "IF4", + "type": "n8n-nodes-base.if", + "typeVersion": 1, + "position": [620, 100], + "id": "c790a2e9-20de-45b9-b5be-f7d78e8f8e01" + }, + { + "parameters": { + "conditions": { + "boolean": [], + "dateTime": [ + { + "value1": "2021-02-27T23:00:00.000Z", + "operation": "before", + "value2": "2021-02-28T23:00:00.000Z" + } + ] + } + }, + "name": "IF5", + "type": "n8n-nodes-base.if", + "typeVersion": 1, + "position": [610, 250], + "id": "acc6b0b6-539c-4fdb-8275-da2ad32e18e5" + }, + { + "parameters": { + "conditions": { + "boolean": [], + "dateTime": [], + "number": [ + { + "value1": 5, + "operation": "smallerEqual", + "value2": 5 + } + ] + } + }, + "name": "IF6", + "type": "n8n-nodes-base.if", + "typeVersion": 1, + "position": [600, 410], + "id": "2132f7b3-cebc-4873-9eff-8b17e678947f" + }, + { + "parameters": { + "conditions": { + "boolean": [], + "dateTime": [], + "number": [ + { + "value1": 5, + "operation": "equal", + "value2": 5 + } + ] + } + }, + "name": "IF7", + "type": "n8n-nodes-base.if", + "typeVersion": 1, + "position": [750, 410], + "id": "668ff49b-0ab6-476e-987c-23ad3e31f01a" + }, + { + "parameters": { + "conditions": { + "boolean": [], + "dateTime": [], + "number": [ + { + "value1": 6, + "operation": "notEqual", + "value2": 5 + } + ] + } + }, + "name": "IF8", + "type": "n8n-nodes-base.if", + "typeVersion": 1, + "position": [900, 410], + "id": "86cb816b-0a96-4e04-baca-6fd0b81963bd" + }, + { + "parameters": { + "conditions": { + "boolean": [], + "dateTime": [], + "number": [ + { + "value1": 6, + "operation": "larger", + "value2": 5 + } + ] + } + }, + "name": "IF9", + "type": "n8n-nodes-base.if", + "typeVersion": 1, + "position": [1050, 410], + "id": "c7b5d37c-ef3d-4e52-b577-61e07b741943" + }, + { + "parameters": { + "conditions": { + "boolean": [], + "dateTime": [], + "number": [ + { + "value1": 6, + "operation": "largerEqual", + "value2": 5 + } + ] + } + }, + "name": "IF10", + "type": "n8n-nodes-base.if", + "typeVersion": 1, + "position": [1200, 410], + "id": "9058992b-0369-43fb-b03b-566a891e111b" + }, + { + "parameters": { + "conditions": { + "boolean": [], + "dateTime": [], + "number": [], + "string": [ + { + "value1": "n8n.io", + "operation": "endsWith", + "value2": "io" + } + ] + } + }, + "name": "IF11", + "type": "n8n-nodes-base.if", + "typeVersion": 1, + "position": [600, 670], + "id": "e59a8821-d56d-445f-948f-cdbf113d7185" + }, + { + "parameters": { + "conditions": { + "boolean": [], + "dateTime": [], + "number": [], + "string": [ + { + "value1": "n8n", + "value2": "n8n" + } + ] + } + }, + "name": "IF12", + "type": "n8n-nodes-base.if", + "typeVersion": 1, + "position": [750, 670], + "id": "e30e0fda-749f-4fa1-84d3-f662b35d14cd" + }, + { + "parameters": { + "conditions": { + "boolean": [], + "dateTime": [], + "number": [], + "string": [ + { + "value1": "n8n", + "operation": "notContains", + "value2": "9" + } + ] + } + }, + "name": "IF13", + "type": "n8n-nodes-base.if", + "typeVersion": 1, + "position": [900, 670], + "id": "680373c4-912e-4c35-8dd4-6682cc215914" + }, + { + "parameters": { + "conditions": { + "boolean": [], + "dateTime": [], + "number": [], + "string": [ + { + "value1": "n8n", + "operation": "notEqual", + "value2": "n9n" + } + ] + } + }, + "name": "IF14", + "type": "n8n-nodes-base.if", + "typeVersion": 1, + "position": [1050, 670], + "id": "1883b843-2bd0-44f1-8e1f-f371dcbb6276" + }, + { + "parameters": { + "conditions": { + "boolean": [], + "dateTime": [], + "number": [], + "string": [ + { + "value1": "n8n", + "operation": "regex", + "value2": "/n[1-8]n/i" + } + ] + } + }, + "name": "IF15", + "type": "n8n-nodes-base.if", + "typeVersion": 1, + "position": [1200, 670], + "id": "7b167295-0811-4aa6-a769-beaac7f91a24" + }, + { + "parameters": { + "conditions": { + "boolean": [], + "dateTime": [], + "number": [], + "string": [ + { + "value1": "n8n.io", + "operation": "startsWith", + "value2": "n8n" + } + ] + } + }, + "name": "IF16", + "type": "n8n-nodes-base.if", + "typeVersion": 1, + "position": [1350, 670], + "id": "39c6a9fd-c9ea-4528-b8ac-c9461e053ef5" + }, + { + "parameters": { + "conditions": { + "boolean": [], + "dateTime": [], + "number": [], + "string": [ + { + "operation": "isEmpty" + } + ] + } + }, + "name": "IF17", + "type": "n8n-nodes-base.if", + "typeVersion": 1, + "position": [1500, 670], + "id": "e0b3a955-6f8d-4a7b-bd09-8eb779d9bd42" + }, + { + "parameters": { + "conditions": { + "boolean": [], + "dateTime": [], + "number": [ + { + "value1": "={{}}", + "operation": "isEmpty" + } + ] + } + }, + "name": "IF18", + "type": "n8n-nodes-base.if", + "typeVersion": 1, + "position": [1350, 410], + "id": "1b87e5de-dd4e-40b5-b54c-4402edd94462" + }, + { + "parameters": { + "functionCode": "throw Error('Problem in boolean statement');\n" + }, + "name": "Function", + "type": "n8n-nodes-base.function", + "typeVersion": 1, + "position": [800, 90], + "notesInFlow": true, + "notes": "Boolean Error", + "id": "a2347b9b-db80-4e15-8863-32288e42f3d1" + }, + { + "parameters": { + "functionCode": "throw Error('Problem in Date&Time statement');\n" + }, + "name": "Function1", + "type": "n8n-nodes-base.function", + "typeVersion": 1, + "position": [790, 250], + "notesInFlow": true, + "notes": "Date&Time Error", + "id": "95f68b92-15db-48db-89a4-9c8e0465be49" + }, + { + "parameters": { + "functionCode": "throw Error('Problem in Number statement');\n" + }, + "name": "Function2", + "type": "n8n-nodes-base.function", + "typeVersion": 1, + "position": [840, 540], + "notesInFlow": true, + "notes": "Number Error", + "id": "33a9a8db-7c54-4154-ad8c-b03050b9341c" + }, + { + "parameters": { + "functionCode": "throw Error('Problem in String comparison statement');\n" + }, + "name": "Function3", + "type": "n8n-nodes-base.function", + "typeVersion": 1, + "position": [970, 840], + "notesInFlow": true, + "notes": "String Error", + "id": "919cfdb2-72b2-41b5-aaaf-5df780fe57ba" + } + ], + "connections": { + "Start": { + "main": [ + [ + { + "node": "IF", + "type": "main", + "index": 0 + }, + { + "node": "IF1", + "type": "main", + "index": 0 + }, + { + "node": "IF2", + "type": "main", + "index": 0 + }, + { + "node": "IF3", + "type": "main", + "index": 0 + } + ] + ] + }, + "IF": { + "main": [ + [ + { + "node": "IF4", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Function", + "type": "main", + "index": 0 + } + ] + ] + }, + "IF1": { + "main": [ + [ + { + "node": "IF5", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Function1", + "type": "main", + "index": 0 + } + ] + ] + }, + "IF2": { + "main": [ + [ + { + "node": "IF6", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Function2", + "type": "main", + "index": 0 + } + ] + ] + }, + "IF4": { + "main": [ + [], + [ + { + "node": "Function", + "type": "main", + "index": 0 + } + ] + ] + }, + "IF5": { + "main": [ + [], + [ + { + "node": "Function1", + "type": "main", + "index": 0 + } + ] + ] + }, + "IF10": { + "main": [ + [ + { + "node": "IF18", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Function2", + "type": "main", + "index": 0 + } + ] + ] + }, + "IF9": { + "main": [ + [ + { + "node": "IF10", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Function2", + "type": "main", + "index": 0 + } + ] + ] + }, + "IF8": { + "main": [ + [ + { + "node": "IF9", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Function2", + "type": "main", + "index": 0 + } + ] + ] + }, + "IF7": { + "main": [ + [ + { + "node": "IF8", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Function2", + "type": "main", + "index": 0 + } + ] + ] + }, + "IF6": { + "main": [ + [ + { + "node": "IF7", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Function2", + "type": "main", + "index": 0 + } + ] + ] + }, + "IF3": { + "main": [ + [ + { + "node": "IF11", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Function3", + "type": "main", + "index": 0 + } + ] + ] + }, + "IF11": { + "main": [ + [ + { + "node": "IF12", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Function3", + "type": "main", + "index": 0 + } + ] + ] + }, + "IF12": { + "main": [ + [ + { + "node": "IF13", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Function3", + "type": "main", + "index": 0 + } + ] + ] + }, + "IF13": { + "main": [ + [ + { + "node": "IF14", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Function3", + "type": "main", + "index": 0 + } + ] + ] + }, + "IF14": { + "main": [ + [ + { + "node": "IF15", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Function3", + "type": "main", + "index": 0 + } + ] + ] + }, + "IF15": { + "main": [ + [ + { + "node": "IF16", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Function3", + "type": "main", + "index": 0 + } + ] + ] + }, + "IF16": { + "main": [ + [ + { + "node": "IF17", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Function3", + "type": "main", + "index": 0 + } + ] + ] + }, + "IF18": { + "main": [ + [], + [ + { + "node": "Function2", + "type": "main", + "index": 0 + } + ] + ] + }, + "IF17": { + "main": [ + [], + [ + { + "node": "Function3", + "type": "main", + "index": 0 + } + ] + ] + } + }, + "settings": {}, + "staticData": null, + "meta": null, + "pinData": null, + "versionId": null, + "triggerCount": 0, + "tags": [] +} diff --git a/packages/testing/playwright/test-workflows/workflows/93.json b/packages/testing/playwright/test-workflows/workflows/93.json new file mode 100644 index 00000000000..723117831aa --- /dev/null +++ b/packages/testing/playwright/test-workflows/workflows/93.json @@ -0,0 +1,115 @@ +{ + "createdAt": "2021-03-03T13:27:06.481Z", + "updatedAt": "2021-03-03T13:32:50.258Z", + "id": "93", + "name": "Move Binary Data:toJSON:toBinary", + "active": false, + "nodes": [ + { + "parameters": {}, + "name": "Start", + "type": "n8n-nodes-base.start", + "typeVersion": 1, + "position": [250, 300], + "id": "490486f2-7ea9-410e-9281-84cd27836115" + }, + { + "parameters": { + "mode": "jsonToBinary", + "options": {} + }, + "name": "Move Binary Data", + "type": "n8n-nodes-base.moveBinaryData", + "typeVersion": 1, + "position": [600, 300], + "id": "9ddb3642-7086-4f67-8b20-9255bc2b99cc" + }, + { + "parameters": { + "functionCode": "item = {\n name:'test',\n indexes:[1,2,3],\n subobj:{\n name:'subtest'\n }\n};\nreturn item;" + }, + "name": "FunctionItem", + "type": "n8n-nodes-base.functionItem", + "typeVersion": 1, + "position": [450, 300], + "notesInFlow": true, + "notes": "Set json data", + "id": "8c99a563-2438-4822-b35d-3016c7524c50" + }, + { + "parameters": { + "options": {} + }, + "name": "Move Binary Data1", + "type": "n8n-nodes-base.moveBinaryData", + "typeVersion": 1, + "position": [750, 300], + "id": "43d6faba-afc5-45bd-b477-a28054b75ddf" + }, + { + "parameters": { + "functionCode": "if(JSON.stringify($node['FunctionItem'].json)!==JSON.stringify($node['Move Binary Data1'].json)){\n throw new Error('Problem in move binary node');\n}\n\nreturn items;" + }, + "name": "Function", + "type": "n8n-nodes-base.function", + "typeVersion": 1, + "position": [900, 300], + "notesInFlow": true, + "notes": "Evaluate the conversion result", + "id": "e4fbc1b7-b88e-49c3-bb0c-9dda8a447617" + } + ], + "connections": { + "Move Binary Data": { + "main": [ + [ + { + "node": "Move Binary Data1", + "type": "main", + "index": 0 + } + ] + ] + }, + "FunctionItem": { + "main": [ + [ + { + "node": "Move Binary Data", + "type": "main", + "index": 0 + } + ] + ] + }, + "Move Binary Data1": { + "main": [ + [ + { + "node": "Function", + "type": "main", + "index": 0 + } + ] + ] + }, + "Start": { + "main": [ + [ + { + "node": "FunctionItem", + "type": "main", + "index": 0 + } + ] + ] + } + }, + "settings": {}, + "staticData": null, + "meta": null, + "pinData": null, + "versionId": null, + "triggerCount": 0, + "tags": [] +} diff --git a/packages/testing/playwright/test-workflows/workflows/94.json b/packages/testing/playwright/test-workflows/workflows/94.json new file mode 100644 index 00000000000..7403720465c --- /dev/null +++ b/packages/testing/playwright/test-workflows/workflows/94.json @@ -0,0 +1,113 @@ +{ + "createdAt": "2021-03-03T14:18:03.010Z", + "updatedAt": "2021-03-03T14:18:09.549Z", + "id": "94", + "name": "XML:toJSON:toXML", + "active": false, + "nodes": [ + { + "parameters": {}, + "name": "Start", + "type": "n8n-nodes-base.start", + "typeVersion": 1, + "position": [250, 300], + "id": "50d8428b-c132-49cb-8f4c-2eeba448d666" + }, + { + "parameters": { + "mode": "jsonToxml", + "options": {} + }, + "name": "XML", + "type": "n8n-nodes-base.xml", + "typeVersion": 1, + "position": [650, 300], + "id": "664b8c25-5107-4715-a463-9a954965c096" + }, + { + "parameters": { + "functionCode": "item= {\n name:'testing xml',\n arr:[{key:'item1'},{key:'item2'}],\n subobj:{\n arr:[1,2,3,4,5],\n secondarr:[{key:'subitem1'},{key:'subitem2'},{key:'subitem3'}]\n }\n};\nreturn item;" + }, + "name": "FunctionItem", + "type": "n8n-nodes-base.functionItem", + "typeVersion": 1, + "position": [450, 300], + "id": "dfb38369-2fb3-4d92-b843-b663b3a4675a" + }, + { + "parameters": { + "options": { + "explicitRoot": false + } + }, + "name": "XML1", + "type": "n8n-nodes-base.xml", + "typeVersion": 1, + "position": [800, 350], + "id": "7085c1d8-a216-47a7-98d1-2f5e9e3eda47" + }, + { + "parameters": { + "functionCode": "if(JSON.stringify($node['FunctionItem'].json) !== JSON.stringify($node['XML1'].json) ){\n throw new Error('Problem in XML conversion');\n}\nreturn items;" + }, + "name": "Function", + "type": "n8n-nodes-base.function", + "typeVersion": 1, + "position": [990, 350], + "id": "f03b8331-fa37-4aeb-97c9-0a3514942f96" + } + ], + "connections": { + "XML": { + "main": [ + [ + { + "node": "XML1", + "type": "main", + "index": 0 + } + ] + ] + }, + "FunctionItem": { + "main": [ + [ + { + "node": "XML", + "type": "main", + "index": 0 + } + ] + ] + }, + "XML1": { + "main": [ + [ + { + "node": "Function", + "type": "main", + "index": 0 + } + ] + ] + }, + "Start": { + "main": [ + [ + { + "node": "FunctionItem", + "type": "main", + "index": 0 + } + ] + ] + } + }, + "settings": {}, + "staticData": null, + "meta": null, + "pinData": null, + "versionId": null, + "triggerCount": 0, + "tags": [] +} diff --git a/packages/testing/playwright/test-workflows/workflows/95.json b/packages/testing/playwright/test-workflows/workflows/95.json new file mode 100644 index 00000000000..fff9ff83144 --- /dev/null +++ b/packages/testing/playwright/test-workflows/workflows/95.json @@ -0,0 +1,78 @@ +{ + "createdAt": "2021-03-03T14:28:28.227Z", + "updatedAt": "2021-03-03T14:28:29.476Z", + "id": "95", + "name": "Set", + "active": false, + "nodes": [ + { + "parameters": {}, + "name": "Start", + "type": "n8n-nodes-base.start", + "typeVersion": 1, + "position": [250, 300], + "id": "32be2fcf-b143-442e-877f-96b51b0b5148" + }, + { + "parameters": { + "values": { + "string": [ + { + "name": "name", + "value": "test" + } + ] + }, + "options": {} + }, + "name": "Set", + "type": "n8n-nodes-base.set", + "typeVersion": 1, + "position": [430, 300], + "id": "17c6fa30-1a0e-4d29-8c73-ef9357d5f877" + }, + { + "parameters": { + "functionCode": "testData = JSON.stringify({\n name: \"test\"\n});\n\nif(JSON.stringify($node['Set'].json)!==testData){\n throw new Error('Error in Set node');\n}\nreturn items;" + }, + "name": "Function", + "type": "n8n-nodes-base.function", + "typeVersion": 1, + "position": [600, 300], + "notesInFlow": true, + "notes": "Verify the result of set node", + "id": "c6e9a289-5551-4db5-8d32-a11953bc92d6" + } + ], + "connections": { + "Set": { + "main": [ + [ + { + "node": "Function", + "type": "main", + "index": 0 + } + ] + ] + }, + "Start": { + "main": [ + [ + { + "node": "Set", + "type": "main", + "index": 0 + } + ] + ] + } + }, + "settings": {}, + "staticData": null, + "meta": null, + "pinData": null, + "versionId": null, + "triggerCount": 0, + "tags": [] +} diff --git a/packages/testing/playwright/test-workflows/workflows/96.json b/packages/testing/playwright/test-workflows/workflows/96.json new file mode 100644 index 00000000000..3dec5b15963 --- /dev/null +++ b/packages/testing/playwright/test-workflows/workflows/96.json @@ -0,0 +1,77 @@ +{ + "createdAt": "2021-03-03T14:48:52.147Z", + "updatedAt": "2021-03-03T14:49:01.728Z", + "id": "96", + "name": "MessageBird:Sms:send:Balance:get", + "active": false, + "nodes": [ + { + "parameters": {}, + "name": "Start", + "type": "n8n-nodes-base.start", + "typeVersion": 1, + "position": [250, 300], + "id": "a19a2b96-9d4e-40dc-ae19-ffa7d1de094c" + }, + { + "parameters": { + "resource": "balance" + }, + "name": "MessageBird", + "type": "n8n-nodes-base.messageBird", + "typeVersion": 1, + "position": [500, 240], + "credentials": { + "messageBirdApi": { + "id": "61", + "name": "MessageBird creds" + } + }, + "id": "ab3e0402-21cc-4699-8ba3-b995dd5f17bc" + }, + { + "parameters": { + "originator": "4930270504079 ", + "recipients": "4930270504079 ", + "message": "TestMessage", + "additionalFields": {} + }, + "name": "MessageBird1", + "type": "n8n-nodes-base.messageBird", + "typeVersion": 1, + "position": [500, 400], + "credentials": { + "messageBirdApi": { + "id": "61", + "name": "MessageBird creds" + } + }, + "id": "67922f27-a0c3-49c9-a48f-98495a45e9e3" + } + ], + "connections": { + "Start": { + "main": [ + [ + { + "node": "MessageBird", + "type": "main", + "index": 0 + }, + { + "node": "MessageBird1", + "type": "main", + "index": 0 + } + ] + ] + } + }, + "settings": {}, + "staticData": null, + "meta": null, + "pinData": null, + "versionId": null, + "triggerCount": 0, + "tags": [] +} diff --git a/packages/testing/playwright/test-workflows/workflows/97.json b/packages/testing/playwright/test-workflows/workflows/97.json new file mode 100644 index 00000000000..899ea00ba31 --- /dev/null +++ b/packages/testing/playwright/test-workflows/workflows/97.json @@ -0,0 +1,443 @@ +{ + "createdAt": "2024-02-14T09:47:52.295Z", + "updatedAt": "2024-02-14T09:47:52.295Z", + "id": "97", + "name": "Crypto", + "active": false, + "nodes": [ + { + "parameters": {}, + "name": "Start", + "type": "n8n-nodes-base.start", + "typeVersion": 1, + "position": [880, 760], + "id": "17f0290e-2fc4-4bb8-a8fe-da8b0ad82d11" + }, + { + "parameters": { + "type": "SHA256", + "value": "n8n" + }, + "name": "Crypto1", + "type": "n8n-nodes-base.crypto", + "typeVersion": 1, + "position": [1380, 560], + "id": "8853a37b-fcf3-4ac7-913e-964a48497339" + }, + { + "parameters": { + "type": "SHA384", + "value": "n8n" + }, + "name": "Crypto2", + "type": "n8n-nodes-base.crypto", + "typeVersion": 1, + "position": [1530, 560], + "id": "cf4718ee-852d-48f0-b96e-048283221cbd" + }, + { + "parameters": { + "type": "SHA512", + "value": "n8n" + }, + "name": "Crypto3", + "type": "n8n-nodes-base.crypto", + "typeVersion": 1, + "position": [1680, 560], + "id": "8d05e80a-e7ff-4ae8-9f04-8a4f33579308" + }, + { + "parameters": { + "functionCode": "testData = ['5877e26c078d6409fde54d508bf25721','636396f02b6571e40d8fe91cba550515c0cdc0e7d314c210e00b02256375a796','c7049c8950ea211bec236edffb37cbecf2aa338443c5e048c1cbb4e2ee20eb60fa9a1d34699d7a86e7362b010bb4ffe7','a8a7eec953f1f31484a479c84982d52847de602d7f220ac3903518369a7536693d60882e5eb782599e72024fb649cc03aa0a19ebce632e9039b4f604335834af']\n\nfor(let i=0;i<4;i++){\n if($node[`Crypto${i}`].json['data'] !== testData[i]){\n throw new Error(`Error in HASH: ${$node[`Crypto${i}`].parameter[\"type\"]} operation`);\n }\n}\nreturn items;" + }, + "name": "Function", + "type": "n8n-nodes-base.function", + "typeVersion": 1, + "position": [1880, 560], + "notesInFlow": true, + "id": "d4232a52-6eed-494e-b99a-13668c58f05b", + "notes": "Verify hash values" + }, + { + "parameters": { + "value": "n8n" + }, + "name": "Crypto0", + "type": "n8n-nodes-base.crypto", + "typeVersion": 1, + "position": [1230, 560], + "id": "3c6f13f3-1202-4629-be6d-8a2ecd973752" + }, + { + "parameters": { + "action": "hmac", + "value": "n8n", + "secret": "secrect" + }, + "name": "Crypto4", + "type": "n8n-nodes-base.crypto", + "typeVersion": 1, + "position": [1230, 710], + "id": "9cc4ea7c-2c71-4a2c-bdb8-208576381724" + }, + { + "parameters": { + "action": "hmac", + "type": "SHA256", + "value": "n8n", + "secret": "secrect" + }, + "name": "Crypto5", + "type": "n8n-nodes-base.crypto", + "typeVersion": 1, + "position": [1380, 710], + "id": "0b318b49-fd2f-4ad7-9927-4048ad87009d" + }, + { + "parameters": { + "action": "hmac", + "type": "SHA384", + "value": "n8n", + "secret": "secrect" + }, + "name": "Crypto6", + "type": "n8n-nodes-base.crypto", + "typeVersion": 1, + "position": [1530, 710], + "id": "e4fc0137-576a-4401-8caf-5198ab0970e9" + }, + { + "parameters": { + "action": "hmac", + "type": "SHA512", + "value": "n8n", + "secret": "secrect" + }, + "name": "Crypto7", + "type": "n8n-nodes-base.crypto", + "typeVersion": 1, + "position": [1680, 710], + "id": "f1193f43-762d-4659-9444-ebea098c897e" + }, + { + "parameters": { + "functionCode": "testData = ['3fb7c95bca84c0bf49045b4e6a279dc0','a8066096944b87daa8d0459629d8f3958d35fa453c310e7370b619d0b81ce48e','08bec8212275cd79a1c6bf52cad5b31ccd46ec87c7a8a9d1c8589c816f8a7124313528040b138229e15c32c1b3c82b80','0f53f3a374314123991b32e47159ad44e1c61d1c0e96809c1f19d54a5e955c06d5b633f376f2a8419e36ea4b63346fcb39d389714c344771140fd512ac55723a']\n\nfor(let i=4;i<8;i++){\n if($node[`Crypto${i}`].json['data'] !== testData[i-4]){\n throw new Error(`Error in Hmac: ${$node[`Crypto${i}`].parameter[\"type\"]} operation`);\n }\n}\nreturn items;" + }, + "name": "Function1", + "type": "n8n-nodes-base.function", + "typeVersion": 1, + "position": [1880, 710], + "notesInFlow": true, + "id": "b4c78dc0-9064-4de6-9c9d-1e6d6ce4b716", + "notes": "Verify hmac values" + }, + { + "parameters": { + "action": "sign", + "value": "n8n", + "algorithm": "ripemd", + "privateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQDuY4lRGHHAW9mXYY57m/CUzM4zqQ1e0W9D3e76YpipgF6rWtUn\nS8aSD+DxGxp4MldazZTwPPcpJHcV/Hr3A/KezsY9aOpXdnUdquV85969OgyGCRJk\nBv2gowSGfy4ueomfm4PFTPF0anPir+X1IZzAyzO6igL5ZE0Y5rcVrOgLKwIDAQAB\nAoGARfQ4he8d5jwt0HHkzVoX0Zp+AgPgNAxSUcCNEbWgJdFRNoh7l0HxvcfiEu6I\nqG/hWXiNdaf2QYD9XxrNfLIQXj+2MVOh4wpeqbO1DlqiGa9J8y7rLOVO+64ODXGt\nbZns6kcWLx8gYnhwqIJHnqfzvAsFjEKuKiSxpyeK8EvjDW0CQQD91J9DzhSXyvwE\nNaZT4Y9BcEbazVv+xUVhkSs7WRWStimeb57eIrIcXPE9heiT+6QpAnm6EZQR7RWN\n48PiAfbnAkEA8G0gwMWsnpmtb9VbF2uuQxs4Bw5Nuzb6l/+0zTqMELSVCaHIGnxk\nkV08NHfnck1jp1RU9MiUFI1yfRrN6vz1HQJBAMWQ8w3Rn1Gumo2kPHvZeqlSfLPd\nV5drcF9KoL2mzxXMV4SMGLmJg9xzswlR6v8TxGhvFtPuzrNNN5OjDlohcU0CQBOC\nZ3P9FmLQSZiXkYq2/C8J2GQKLxiP/4myADPfGlqIrMdZT2mGyopZLHd9e1R1Hy8G\n0tYCKLH6QF4SfL8iw6kCQCV81eZ/3JthrEfsIMv9lxvTLaRrprI5Eei8Rl+cFhNH\nziv/tOUxppOn1SkHvxXni5F5dbNR9u4mjaCLDau+qIg=\n-----END RSA PRIVATE KEY-----" + }, + "name": "Crypto11", + "type": "n8n-nodes-base.crypto", + "typeVersion": 1, + "position": [1400, 900], + "alwaysOutputData": true, + "id": "95830d32-cbdc-4fe9-914b-0b799ff503a7" + }, + { + "parameters": { + "action": "sign", + "value": "n8n", + "algorithm": "ripemd160", + "privateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQDuY4lRGHHAW9mXYY57m/CUzM4zqQ1e0W9D3e76YpipgF6rWtUn\nS8aSD+DxGxp4MldazZTwPPcpJHcV/Hr3A/KezsY9aOpXdnUdquV85969OgyGCRJk\nBv2gowSGfy4ueomfm4PFTPF0anPir+X1IZzAyzO6igL5ZE0Y5rcVrOgLKwIDAQAB\nAoGARfQ4he8d5jwt0HHkzVoX0Zp+AgPgNAxSUcCNEbWgJdFRNoh7l0HxvcfiEu6I\nqG/hWXiNdaf2QYD9XxrNfLIQXj+2MVOh4wpeqbO1DlqiGa9J8y7rLOVO+64ODXGt\nbZns6kcWLx8gYnhwqIJHnqfzvAsFjEKuKiSxpyeK8EvjDW0CQQD91J9DzhSXyvwE\nNaZT4Y9BcEbazVv+xUVhkSs7WRWStimeb57eIrIcXPE9heiT+6QpAnm6EZQR7RWN\n48PiAfbnAkEA8G0gwMWsnpmtb9VbF2uuQxs4Bw5Nuzb6l/+0zTqMELSVCaHIGnxk\nkV08NHfnck1jp1RU9MiUFI1yfRrN6vz1HQJBAMWQ8w3Rn1Gumo2kPHvZeqlSfLPd\nV5drcF9KoL2mzxXMV4SMGLmJg9xzswlR6v8TxGhvFtPuzrNNN5OjDlohcU0CQBOC\nZ3P9FmLQSZiXkYq2/C8J2GQKLxiP/4myADPfGlqIrMdZT2mGyopZLHd9e1R1Hy8G\n0tYCKLH6QF4SfL8iw6kCQCV81eZ/3JthrEfsIMv9lxvTLaRrprI5Eei8Rl+cFhNH\nziv/tOUxppOn1SkHvxXni5F5dbNR9u4mjaCLDau+qIg=\n-----END RSA PRIVATE KEY-----" + }, + "name": "Crypto12", + "type": "n8n-nodes-base.crypto", + "typeVersion": 1, + "position": [1580, 900], + "alwaysOutputData": true, + "id": "66906a33-ae4d-4e65-b809-614fecbc2c56" + }, + { + "parameters": { + "action": "sign", + "value": "n8n", + "algorithm": "rmd160", + "privateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQDuY4lRGHHAW9mXYY57m/CUzM4zqQ1e0W9D3e76YpipgF6rWtUn\nS8aSD+DxGxp4MldazZTwPPcpJHcV/Hr3A/KezsY9aOpXdnUdquV85969OgyGCRJk\nBv2gowSGfy4ueomfm4PFTPF0anPir+X1IZzAyzO6igL5ZE0Y5rcVrOgLKwIDAQAB\nAoGARfQ4he8d5jwt0HHkzVoX0Zp+AgPgNAxSUcCNEbWgJdFRNoh7l0HxvcfiEu6I\nqG/hWXiNdaf2QYD9XxrNfLIQXj+2MVOh4wpeqbO1DlqiGa9J8y7rLOVO+64ODXGt\nbZns6kcWLx8gYnhwqIJHnqfzvAsFjEKuKiSxpyeK8EvjDW0CQQD91J9DzhSXyvwE\nNaZT4Y9BcEbazVv+xUVhkSs7WRWStimeb57eIrIcXPE9heiT+6QpAnm6EZQR7RWN\n48PiAfbnAkEA8G0gwMWsnpmtb9VbF2uuQxs4Bw5Nuzb6l/+0zTqMELSVCaHIGnxk\nkV08NHfnck1jp1RU9MiUFI1yfRrN6vz1HQJBAMWQ8w3Rn1Gumo2kPHvZeqlSfLPd\nV5drcF9KoL2mzxXMV4SMGLmJg9xzswlR6v8TxGhvFtPuzrNNN5OjDlohcU0CQBOC\nZ3P9FmLQSZiXkYq2/C8J2GQKLxiP/4myADPfGlqIrMdZT2mGyopZLHd9e1R1Hy8G\n0tYCKLH6QF4SfL8iw6kCQCV81eZ/3JthrEfsIMv9lxvTLaRrprI5Eei8Rl+cFhNH\nziv/tOUxppOn1SkHvxXni5F5dbNR9u4mjaCLDau+qIg=\n-----END RSA PRIVATE KEY-----" + }, + "name": "Crypto13", + "type": "n8n-nodes-base.crypto", + "typeVersion": 1, + "position": [1780, 900], + "alwaysOutputData": true, + "id": "6832df1e-f3ff-479a-ac25-f04ed8be05ac" + }, + { + "parameters": { + "action": "sign", + "value": "n8n", + "algorithm": "sha1", + "privateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQDuY4lRGHHAW9mXYY57m/CUzM4zqQ1e0W9D3e76YpipgF6rWtUn\nS8aSD+DxGxp4MldazZTwPPcpJHcV/Hr3A/KezsY9aOpXdnUdquV85969OgyGCRJk\nBv2gowSGfy4ueomfm4PFTPF0anPir+X1IZzAyzO6igL5ZE0Y5rcVrOgLKwIDAQAB\nAoGARfQ4he8d5jwt0HHkzVoX0Zp+AgPgNAxSUcCNEbWgJdFRNoh7l0HxvcfiEu6I\nqG/hWXiNdaf2QYD9XxrNfLIQXj+2MVOh4wpeqbO1DlqiGa9J8y7rLOVO+64ODXGt\nbZns6kcWLx8gYnhwqIJHnqfzvAsFjEKuKiSxpyeK8EvjDW0CQQD91J9DzhSXyvwE\nNaZT4Y9BcEbazVv+xUVhkSs7WRWStimeb57eIrIcXPE9heiT+6QpAnm6EZQR7RWN\n48PiAfbnAkEA8G0gwMWsnpmtb9VbF2uuQxs4Bw5Nuzb6l/+0zTqMELSVCaHIGnxk\nkV08NHfnck1jp1RU9MiUFI1yfRrN6vz1HQJBAMWQ8w3Rn1Gumo2kPHvZeqlSfLPd\nV5drcF9KoL2mzxXMV4SMGLmJg9xzswlR6v8TxGhvFtPuzrNNN5OjDlohcU0CQBOC\nZ3P9FmLQSZiXkYq2/C8J2GQKLxiP/4myADPfGlqIrMdZT2mGyopZLHd9e1R1Hy8G\n0tYCKLH6QF4SfL8iw6kCQCV81eZ/3JthrEfsIMv9lxvTLaRrprI5Eei8Rl+cFhNH\nziv/tOUxppOn1SkHvxXni5F5dbNR9u4mjaCLDau+qIg=\n-----END RSA PRIVATE KEY-----" + }, + "name": "Crypto14", + "type": "n8n-nodes-base.crypto", + "typeVersion": 1, + "position": [2040, 900], + "alwaysOutputData": true, + "id": "4549f4f2-eadb-4df0-8e27-701d62f7d750" + }, + { + "parameters": { + "action": "sign", + "value": "n8n", + "algorithm": "sha224", + "privateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQDuY4lRGHHAW9mXYY57m/CUzM4zqQ1e0W9D3e76YpipgF6rWtUn\nS8aSD+DxGxp4MldazZTwPPcpJHcV/Hr3A/KezsY9aOpXdnUdquV85969OgyGCRJk\nBv2gowSGfy4ueomfm4PFTPF0anPir+X1IZzAyzO6igL5ZE0Y5rcVrOgLKwIDAQAB\nAoGARfQ4he8d5jwt0HHkzVoX0Zp+AgPgNAxSUcCNEbWgJdFRNoh7l0HxvcfiEu6I\nqG/hWXiNdaf2QYD9XxrNfLIQXj+2MVOh4wpeqbO1DlqiGa9J8y7rLOVO+64ODXGt\nbZns6kcWLx8gYnhwqIJHnqfzvAsFjEKuKiSxpyeK8EvjDW0CQQD91J9DzhSXyvwE\nNaZT4Y9BcEbazVv+xUVhkSs7WRWStimeb57eIrIcXPE9heiT+6QpAnm6EZQR7RWN\n48PiAfbnAkEA8G0gwMWsnpmtb9VbF2uuQxs4Bw5Nuzb6l/+0zTqMELSVCaHIGnxk\nkV08NHfnck1jp1RU9MiUFI1yfRrN6vz1HQJBAMWQ8w3Rn1Gumo2kPHvZeqlSfLPd\nV5drcF9KoL2mzxXMV4SMGLmJg9xzswlR6v8TxGhvFtPuzrNNN5OjDlohcU0CQBOC\nZ3P9FmLQSZiXkYq2/C8J2GQKLxiP/4myADPfGlqIrMdZT2mGyopZLHd9e1R1Hy8G\n0tYCKLH6QF4SfL8iw6kCQCV81eZ/3JthrEfsIMv9lxvTLaRrprI5Eei8Rl+cFhNH\nziv/tOUxppOn1SkHvxXni5F5dbNR9u4mjaCLDau+qIg=\n-----END RSA PRIVATE KEY-----" + }, + "name": "Crypto15", + "type": "n8n-nodes-base.crypto", + "typeVersion": 1, + "position": [2170, 900], + "alwaysOutputData": true, + "id": "07643489-a8fa-40c7-a1df-b3b910a5c83a" + }, + { + "parameters": { + "action": "sign", + "value": "n8n", + "algorithm": "sha256", + "privateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQDuY4lRGHHAW9mXYY57m/CUzM4zqQ1e0W9D3e76YpipgF6rWtUn\nS8aSD+DxGxp4MldazZTwPPcpJHcV/Hr3A/KezsY9aOpXdnUdquV85969OgyGCRJk\nBv2gowSGfy4ueomfm4PFTPF0anPir+X1IZzAyzO6igL5ZE0Y5rcVrOgLKwIDAQAB\nAoGARfQ4he8d5jwt0HHkzVoX0Zp+AgPgNAxSUcCNEbWgJdFRNoh7l0HxvcfiEu6I\nqG/hWXiNdaf2QYD9XxrNfLIQXj+2MVOh4wpeqbO1DlqiGa9J8y7rLOVO+64ODXGt\nbZns6kcWLx8gYnhwqIJHnqfzvAsFjEKuKiSxpyeK8EvjDW0CQQD91J9DzhSXyvwE\nNaZT4Y9BcEbazVv+xUVhkSs7WRWStimeb57eIrIcXPE9heiT+6QpAnm6EZQR7RWN\n48PiAfbnAkEA8G0gwMWsnpmtb9VbF2uuQxs4Bw5Nuzb6l/+0zTqMELSVCaHIGnxk\nkV08NHfnck1jp1RU9MiUFI1yfRrN6vz1HQJBAMWQ8w3Rn1Gumo2kPHvZeqlSfLPd\nV5drcF9KoL2mzxXMV4SMGLmJg9xzswlR6v8TxGhvFtPuzrNNN5OjDlohcU0CQBOC\nZ3P9FmLQSZiXkYq2/C8J2GQKLxiP/4myADPfGlqIrMdZT2mGyopZLHd9e1R1Hy8G\n0tYCKLH6QF4SfL8iw6kCQCV81eZ/3JthrEfsIMv9lxvTLaRrprI5Eei8Rl+cFhNH\nziv/tOUxppOn1SkHvxXni5F5dbNR9u4mjaCLDau+qIg=\n-----END RSA PRIVATE KEY-----" + }, + "name": "Crypto16", + "type": "n8n-nodes-base.crypto", + "typeVersion": 1, + "position": [2300, 900], + "alwaysOutputData": true, + "id": "bde3009c-b253-4ff6-b7bc-89d3b02ef2b6" + }, + { + "parameters": { + "functionCode": "testData = [\n '9d0bc120a967882743370f715dfa90789c4d9322a4faf691d1f80b306c6bd900bfcba5f62946ef88ba7e1fdd008ff3efe8545b979299b14e0e0eccd3e33b1afa11397494526e31968f13d2ac3e3deaa2bc4a27862b7025444c91ebed5f1b98d2c0390630d8eabc6a7662a9ab069cb3aab273ae1c09f20f51fa8e04af4bcccbc6',\n '0b494c8146f7efd7aa53b418a7057a3a57317a0380c06c7d18114077a03fc6441b57ca8c03edff4ca6fdc2394d026893258b97d34bf0c5c44bc20bd264899eb1316da1e624db1455c73c9054ff732464f775b473b3ba67250ffd74ee42b1acfdf5539bf793d7002327d8d156424444624a625f8dd3f013d40a7ba7b6726186a9',\n '0b494c8146f7efd7aa53b418a7057a3a57317a0380c06c7d18114077a03fc6441b57ca8c03edff4ca6fdc2394d026893258b97d34bf0c5c44bc20bd264899eb1316da1e624db1455c73c9054ff732464f775b473b3ba67250ffd74ee42b1acfdf5539bf793d7002327d8d156424444624a625f8dd3f013d40a7ba7b6726186a9',\n '0b494c8146f7efd7aa53b418a7057a3a57317a0380c06c7d18114077a03fc6441b57ca8c03edff4ca6fdc2394d026893258b97d34bf0c5c44bc20bd264899eb1316da1e624db1455c73c9054ff732464f775b473b3ba67250ffd74ee42b1acfdf5539bf793d7002327d8d156424444624a625f8dd3f013d40a7ba7b6726186a9',\n 'b9d0c7c4acb8ef55b5c323f82755fb420e5145bafe4de34925e86c53c9f652eb08ec0d87a9be95ca0c0d90b16dd1b55f1200d87c13e4cdb1ae902f41998314f7b85ffc82f0f1d5296119bd92e23ae685b8b59a3a4ba4b8d54db2314c077b1b238c4ac582e36b51c18c0b5474f0d68c1f42e01c08985111ded4cfd3463068d89a',\n '1387958052cf887bd50925a8d44bbf8f138cdd23f51a3422028edf39ad413a1591f5ebd653c4f225298cd6857044648bcfb768113674e7bd11c632fb0fc40cfa646301934b8fcf4da9799272a737155a239e1f8db5e92a23bfa2aeabc6732f5be14078a5815fff542842efed681ac3b919f9d42bfc822b0fd611c0b22286f241',\n '922659a8d40b12f81080425a8676830be06f26dd8cd18cad25d02055332c94b8b9634598ef5b172ee53e53788d33c183bf0984ae3b48d792f426a601dbf2eb4771bc844bc2464de8ca5b6746bbdc2f1713a1e1d57a6970568f033e588c759e4b179b791b7fcb75d323c98cc5c6f33c3659410b159c94bc13834e81ce297ce98d'\n]\n\nfor(let i=10;i<17;i++){\n if($node[`Crypto${i}`].json['data'] !== testData[i-10]){\n throw new Error(`Error in Hmac: ${$node[`Crypto${i}`].parameter[\"algorithm\"]} operation (node:Crypto${i})`);\n }\n}\nreturn items;" + }, + "name": "Function2", + "type": "n8n-nodes-base.function", + "typeVersion": 1, + "position": [2470, 900], + "alwaysOutputData": true, + "notesInFlow": true, + "id": "ae850710-ba68-44a1-892f-62dc2f270e53", + "notes": "Verify signing values" + }, + { + "parameters": { + "action": "sign", + "value": "n8n", + "algorithm": "md5", + "privateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQDuY4lRGHHAW9mXYY57m/CUzM4zqQ1e0W9D3e76YpipgF6rWtUn\nS8aSD+DxGxp4MldazZTwPPcpJHcV/Hr3A/KezsY9aOpXdnUdquV85969OgyGCRJk\nBv2gowSGfy4ueomfm4PFTPF0anPir+X1IZzAyzO6igL5ZE0Y5rcVrOgLKwIDAQAB\nAoGARfQ4he8d5jwt0HHkzVoX0Zp+AgPgNAxSUcCNEbWgJdFRNoh7l0HxvcfiEu6I\nqG/hWXiNdaf2QYD9XxrNfLIQXj+2MVOh4wpeqbO1DlqiGa9J8y7rLOVO+64ODXGt\nbZns6kcWLx8gYnhwqIJHnqfzvAsFjEKuKiSxpyeK8EvjDW0CQQD91J9DzhSXyvwE\nNaZT4Y9BcEbazVv+xUVhkSs7WRWStimeb57eIrIcXPE9heiT+6QpAnm6EZQR7RWN\n48PiAfbnAkEA8G0gwMWsnpmtb9VbF2uuQxs4Bw5Nuzb6l/+0zTqMELSVCaHIGnxk\nkV08NHfnck1jp1RU9MiUFI1yfRrN6vz1HQJBAMWQ8w3Rn1Gumo2kPHvZeqlSfLPd\nV5drcF9KoL2mzxXMV4SMGLmJg9xzswlR6v8TxGhvFtPuzrNNN5OjDlohcU0CQBOC\nZ3P9FmLQSZiXkYq2/C8J2GQKLxiP/4myADPfGlqIrMdZT2mGyopZLHd9e1R1Hy8G\n0tYCKLH6QF4SfL8iw6kCQCV81eZ/3JthrEfsIMv9lxvTLaRrprI5Eei8Rl+cFhNH\nziv/tOUxppOn1SkHvxXni5F5dbNR9u4mjaCLDau+qIg=\n-----END RSA PRIVATE KEY-----" + }, + "name": "Crypto10", + "type": "n8n-nodes-base.crypto", + "typeVersion": 1, + "position": [1220, 900], + "alwaysOutputData": true, + "id": "1c33cc3f-7124-4156-99ce-47c8d79408da" + } + ], + "connections": { + "Start": { + "main": [ + [ + { + "node": "Crypto0", + "type": "main", + "index": 0 + }, + { + "node": "Crypto4", + "type": "main", + "index": 0 + }, + { + "node": "Crypto10", + "type": "main", + "index": 0 + } + ] + ] + }, + "Crypto1": { + "main": [ + [ + { + "node": "Crypto2", + "type": "main", + "index": 0 + } + ] + ] + }, + "Crypto2": { + "main": [ + [ + { + "node": "Crypto3", + "type": "main", + "index": 0 + } + ] + ] + }, + "Crypto3": { + "main": [ + [ + { + "node": "Function", + "type": "main", + "index": 0 + } + ] + ] + }, + "Crypto0": { + "main": [ + [ + { + "node": "Crypto1", + "type": "main", + "index": 0 + } + ] + ] + }, + "Crypto4": { + "main": [ + [ + { + "node": "Crypto5", + "type": "main", + "index": 0 + } + ] + ] + }, + "Crypto5": { + "main": [ + [ + { + "node": "Crypto6", + "type": "main", + "index": 0 + } + ] + ] + }, + "Crypto6": { + "main": [ + [ + { + "node": "Crypto7", + "type": "main", + "index": 0 + } + ] + ] + }, + "Crypto7": { + "main": [ + [ + { + "node": "Function1", + "type": "main", + "index": 0 + } + ] + ] + }, + "Crypto11": { + "main": [ + [ + { + "node": "Crypto12", + "type": "main", + "index": 0 + } + ] + ] + }, + "Crypto12": { + "main": [ + [ + { + "node": "Crypto13", + "type": "main", + "index": 0 + } + ] + ] + }, + "Crypto13": { + "main": [ + [ + { + "node": "Crypto14", + "type": "main", + "index": 0 + } + ] + ] + }, + "Crypto14": { + "main": [ + [ + { + "node": "Crypto15", + "type": "main", + "index": 0 + } + ] + ] + }, + "Crypto15": { + "main": [ + [ + { + "node": "Crypto16", + "type": "main", + "index": 0 + } + ] + ] + }, + "Crypto16": { + "main": [ + [ + { + "node": "Function2", + "type": "main", + "index": 0 + } + ] + ] + }, + "Crypto10": { + "main": [ + [ + { + "node": "Crypto11", + "type": "main", + "index": 0 + } + ] + ] + } + }, + "settings": {}, + "staticData": null, + "meta": { + "instanceId": "8e9416f42a954d0a370d988ac3c0f916f44074a6e45189164b1a8559394a7516" + }, + "pinData": {}, + "versionId": "25a0d83c-9242-42bd-8613-6157d43d59a4", + "triggerCount": 0, + "tags": [] +} diff --git a/packages/testing/playwright/test-workflows/workflows/98.json b/packages/testing/playwright/test-workflows/workflows/98.json new file mode 100644 index 00000000000..d6780f4204e --- /dev/null +++ b/packages/testing/playwright/test-workflows/workflows/98.json @@ -0,0 +1,150 @@ +{ + "createdAt": "2021-03-04T08:38:05.147Z", + "updatedAt": "2021-03-04T08:38:05.147Z", + "id": "98", + "name": "Disqus:Forum:get getCategories getThreads getPosts", + "active": false, + "nodes": [ + { + "parameters": {}, + "name": "Start", + "type": "n8n-nodes-base.start", + "typeVersion": 1, + "position": [250, 300], + "id": "9468a1d9-c07c-4001-804d-f308db6f79a3" + }, + { + "parameters": { + "id": "disqus-demo-page", + "additionalFields": {} + }, + "name": "Disqus", + "type": "n8n-nodes-base.disqus", + "typeVersion": 1, + "position": [500, 300], + "credentials": { + "disqusApi": { + "id": "5", + "name": "Disqus token" + } + }, + "id": "8c4e3006-b4d8-4015-9eeb-5cb77b7a46aa" + }, + { + "parameters": { + "operation": "getCategories", + "id": "disqus-demo-page", + "limit": 1, + "additionalFields": { + "order": "asc" + } + }, + "name": "Disqus1", + "type": "n8n-nodes-base.disqus", + "typeVersion": 1, + "position": [650, 300], + "credentials": { + "disqusApi": { + "id": "5", + "name": "Disqus token" + } + }, + "id": "f1db25d5-8f78-4f29-a4f3-d27a3571370e" + }, + { + "parameters": { + "operation": "getThreads", + "id": "disqus-demo-page", + "limit": 1, + "additionalFields": { + "order": "desc" + } + }, + "name": "Disqus2", + "type": "n8n-nodes-base.disqus", + "typeVersion": 1, + "position": [800, 300], + "credentials": { + "disqusApi": { + "id": "5", + "name": "Disqus token" + } + }, + "id": "4fcd6985-5dc8-4425-b852-25824964082a" + }, + { + "parameters": { + "operation": "getPosts", + "id": "disqus-demo-page", + "limit": 1, + "additionalFields": { + "order": "desc" + } + }, + "name": "Disqus3", + "type": "n8n-nodes-base.disqus", + "typeVersion": 1, + "position": [950, 300], + "credentials": { + "disqusApi": { + "id": "5", + "name": "Disqus token" + } + }, + "id": "0dfe850e-186a-4072-b722-f35e15deeb16" + } + ], + "connections": { + "Disqus2": { + "main": [ + [ + { + "node": "Disqus3", + "type": "main", + "index": 0 + } + ] + ] + }, + "Disqus1": { + "main": [ + [ + { + "node": "Disqus2", + "type": "main", + "index": 0 + } + ] + ] + }, + "Disqus": { + "main": [ + [ + { + "node": "Disqus1", + "type": "main", + "index": 0 + } + ] + ] + }, + "Start": { + "main": [ + [ + { + "node": "Disqus", + "type": "main", + "index": 0 + } + ] + ] + } + }, + "settings": {}, + "staticData": null, + "meta": null, + "pinData": null, + "versionId": null, + "triggerCount": 0, + "tags": [] +} diff --git a/packages/testing/playwright/tests/1-workflows.spec.ts b/packages/testing/playwright/tests/1-workflows.spec.ts index a544f1ae2e0..1887a885661 100644 --- a/packages/testing/playwright/tests/1-workflows.spec.ts +++ b/packages/testing/playwright/tests/1-workflows.spec.ts @@ -1,11 +1,151 @@ import { test, expect } from '../fixtures/base'; -// Example of importing a workflow from a file +const NOTIFICATIONS = { + CREATED: 'Workflow successfully created', + ARCHIVED: 'archived', + UNARCHIVED: 'unarchived', + DELETED: 'deleted', +}; + test.describe('Workflows', () => { - test('should create a new workflow using empty state card @db:reset', async ({ n8n }) => { + test.beforeEach(async ({ n8n }) => { await n8n.goHome(); + }); + + test('should create a new workflow using empty state card @db:reset', async ({ n8n }) => { await n8n.workflows.clickNewWorkflowCard(); - await n8n.workflows.importWorkflow('Test_workflow_1.json', 'Empty State Card Workflow'); - await expect(n8n.workflows.workflowTags()).toHaveText(['some-tag-1', 'some-tag-2']); + await n8n.canvas.importWorkflow('Test_workflow_1.json', 'Empty State Card Workflow'); + await expect(n8n.canvas.getWorkflowTags()).toHaveText(['some-tag-1', 'some-tag-2']); + }); + + test('should create a new workflow using add workflow button', async ({ n8n }) => { + await n8n.workflows.clickAddWorkflowButton(); + + const workflowName = `Test Workflow ${Date.now()}`; + await n8n.canvas.setWorkflowName(workflowName); + await n8n.canvas.clickSaveWorkflowButton(); + + await expect( + n8n.notifications.notificationContainerByText(NOTIFICATIONS.CREATED), + ).toBeVisible(); + }); + + test('should search for workflows', async ({ n8n }) => { + const date = Date.now(); + const specificName = `Specific Test ${date}`; + const genericName = `Generic Test ${date}`; + + await n8n.workflowComposer.createWorkflow(specificName); + await n8n.goHome(); + await n8n.workflowComposer.createWorkflow(genericName); + await n8n.goHome(); + + // Search for specific workflow + await n8n.workflows.searchWorkflows(specificName); + await expect(n8n.workflows.getWorkflowItems()).toHaveCount(1); + await expect(n8n.workflows.getWorkflowByName(specificName)).toBeVisible(); + + // Search with partial term + await n8n.workflows.clearSearch(); + await n8n.workflows.searchWorkflows(date.toString()); + await expect(n8n.workflows.getWorkflowItems()).toHaveCount(2); + + // Search for non-existent + await n8n.workflows.clearSearch(); + await n8n.workflows.searchWorkflows('NonExistentWorkflow123'); + await expect(n8n.workflows.getWorkflowItems()).toHaveCount(0); + await expect(n8n.page.getByText('No workflows found')).toBeVisible(); + }); + + test('should archive and unarchive a workflow', async ({ n8n }) => { + const workflowName = `Archive Test ${Date.now()}`; + await n8n.workflowComposer.createWorkflow(workflowName); + await n8n.goHome(); + + // Create a second workflow so we can still see filters + await n8n.workflowComposer.createWorkflow(); + await n8n.goHome(); + + const workflow = n8n.workflows.getWorkflowByName(workflowName); + await n8n.workflows.archiveWorkflow(workflow); + await expect( + n8n.notifications.notificationContainerByText(NOTIFICATIONS.ARCHIVED), + ).toBeVisible(); + + await expect(workflow).toBeHidden(); + await n8n.workflows.toggleShowArchived(); + await expect(workflow).toBeVisible(); + + await n8n.workflows.unarchiveWorkflow(workflow); + await expect( + n8n.notifications.notificationContainerByText(NOTIFICATIONS.UNARCHIVED), + ).toBeVisible(); + }); + + test('should delete an archived workflow', async ({ n8n }) => { + const workflowName = `Delete Test ${Date.now()}`; + await n8n.workflowComposer.createWorkflow(workflowName); + await n8n.goHome(); + await n8n.workflowComposer.createWorkflow(); + await n8n.goHome(); + + const workflow = n8n.workflows.getWorkflowByName(workflowName); + await n8n.workflows.archiveWorkflow(workflow); + await expect( + n8n.notifications.notificationContainerByText(NOTIFICATIONS.ARCHIVED), + ).toBeVisible(); + + await n8n.workflows.toggleShowArchived(); + + await n8n.workflows.deleteWorkflow(workflow); + await expect( + n8n.notifications.notificationContainerByText(NOTIFICATIONS.DELETED), + ).toBeVisible(); + + await expect(workflow).toBeHidden(); + }); + + test('should filter workflows by tag @db:reset', async ({ n8n }) => { + const taggedWorkflow = + await n8n.workflowComposer.createWorkflowFromJsonFile('Test_workflow_1.json'); + await n8n.workflowComposer.createWorkflowFromJsonFile('Test_workflow_2.json'); + + await n8n.goHome(); + await n8n.workflows.filterByTag('some-tag-1'); + + await expect(n8n.workflows.getWorkflowByName(taggedWorkflow.workflowName)).toBeVisible(); + }); + + test('should preserve search and filters in URL @db:reset', async ({ n8n }) => { + const date = Date.now(); + await n8n.workflowComposer.createWorkflowFromJsonFile( + 'Test_workflow_2.json', + `My Tagged Workflow ${date}`, + ); + await n8n.goHome(); + + // Apply search + await n8n.workflows.searchWorkflows('Tagged'); + + // Apply tag filter + await n8n.workflows.filterByTag('other-tag-1'); + + // Verify URL contains filters + await expect(n8n.page).toHaveURL(/search=Tagged/); + + // Reload and verify filters persist + await n8n.page.reload(); + + await expect(n8n.workflows.getSearchBar()).toHaveValue('Tagged'); + await expect(n8n.workflows.getWorkflowByName(`My Tagged Workflow ${date}`)).toBeVisible(); + }); + + test('should share a workflow', async ({ n8n }) => { + const workflowName = `Share Test ${Date.now()}`; + await n8n.workflowComposer.createWorkflow(workflowName); + await n8n.goHome(); + + await n8n.workflows.shareWorkflow(workflowName); + await expect(n8n.workflowSharingModal.getModal()).toBeVisible(); }); }); diff --git a/packages/testing/playwright/tests/28-debug.spec.ts b/packages/testing/playwright/tests/28-debug.spec.ts index 2cd5cd8fd5b..8d8475ee85e 100644 --- a/packages/testing/playwright/tests/28-debug.spec.ts +++ b/packages/testing/playwright/tests/28-debug.spec.ts @@ -1,4 +1,5 @@ import { test, expect } from '../fixtures/base'; +import type { n8nPage } from '../pages/n8nPage'; // Example of using helper functions inside a test test.describe('Debug mode', () => { @@ -22,8 +23,8 @@ test.describe('Debug mode', () => { }); // Helper function to create basic workflow - async function createBasicWorkflow(n8n, url = URLS.FAILING) { - await n8n.workflows.clickAddWorklowButton(); + async function createBasicWorkflow(n8n: n8nPage, url = URLS.FAILING) { + await n8n.workflows.clickAddWorkflowButton(); await n8n.canvas.addNode('Manual Trigger'); await n8n.canvas.addNode('HTTP Request'); await n8n.ndv.fillParameterInput('URL', url); @@ -33,7 +34,7 @@ test.describe('Debug mode', () => { } // Helper function to import execution for debugging - async function importExecutionForDebugging(n8n) { + async function importExecutionForDebugging(n8n: n8nPage) { await n8n.canvas.clickExecutionsTab(); await n8n.executions.clickDebugInEditorButton(); await n8n.notifications.waitForNotificationAndClose(NOTIFICATIONS.EXECUTION_IMPORTED); @@ -105,7 +106,7 @@ test.describe('Debug mode', () => { expect(n8n.page.url()).toContain('/debug'); }); - async function attemptCopyToEditor(n8n) { + async function attemptCopyToEditor(n8n: n8nPage) { await n8n.canvas.clickExecutionsTab(); await n8n.executions.clickLastExecutionItem(); await n8n.executions.clickCopyToEditorButton(); diff --git a/packages/testing/playwright/tests/39-projects.spec.ts b/packages/testing/playwright/tests/39-projects.spec.ts index d382b98cc08..9c86c804382 100644 --- a/packages/testing/playwright/tests/39-projects.spec.ts +++ b/packages/testing/playwright/tests/39-projects.spec.ts @@ -85,7 +85,7 @@ test.describe('Projects @db:reset', () => { await subn8n.canvas.saveWorkflow(); await subn8n.page.goto('/home/workflows'); - await subn8n.projectWorkflows.clickProjectMenuItem(projectName); + await subn8n.sideBar.clickProjectMenuItem(projectName); await subn8n.page.getByRole('link', { name: 'Workflows' }).click(); // Get Workflow Count diff --git a/packages/testing/playwright/tests/pdf.spec.ts b/packages/testing/playwright/tests/pdf.spec.ts index 74cd0ac7307..107f6ed6c1d 100644 --- a/packages/testing/playwright/tests/pdf.spec.ts +++ b/packages/testing/playwright/tests/pdf.spec.ts @@ -5,8 +5,8 @@ test.describe('PDF Test', () => { // eslint-disable-next-line playwright/no-skipped-test test.skip('Can read and write PDF files and extract text', async ({ n8n }) => { await n8n.goHome(); - await n8n.workflows.clickAddWorklowButton(); - await n8n.workflows.importWorkflow('test_pdf_workflow.json', 'PDF Workflow'); + await n8n.workflows.clickAddWorkflowButton(); + await n8n.canvas.importWorkflow('test_pdf_workflow.json', 'PDF Workflow'); await n8n.canvas.clickExecuteWorkflowButton(); await expect( n8n.notifications.notificationContainerByText('Workflow executed successfully'), diff --git a/packages/testing/playwright/tests/performance/README.md b/packages/testing/playwright/tests/performance/README.md new file mode 100644 index 00000000000..9b0b427780e --- /dev/null +++ b/packages/testing/playwright/tests/performance/README.md @@ -0,0 +1,118 @@ +# Performance Testing Helper + +A simple toolkit for measuring and asserting performance in Playwright tests. + +## Quick Start + +### "I just want to measure how long something takes" +```typescript +const duration = await measurePerformance(page, 'open-node', async () => { + await n8n.canvas.openNode('Code'); +}); +console.log(`Opening node took ${duration.toFixed(1)}ms`); +``` + +### "I want to ensure an action completes within a time limit" +```typescript +const openNodeDuration = await measurePerformance(page, 'open-node', async () => { + await n8n.canvas.openNode('Code'); +}); +expect(openNodeDuration).toBeLessThan(2000); // Must complete in under 2 seconds +``` + +### "I want to measure the same action multiple times" +```typescript +const stats = []; +for (let i = 0; i < 20; i++) { + const duration = await measurePerformance(page, `open-node-${i}`, async () => { + await n8n.canvas.openNode('Code'); + }); + await n8n.ndv.clickBackToCanvasButton(); + stats.push(duration); +} +const average = stats.reduce((a, b) => a + b, 0) / stats.length; +console.log(`Average: ${average.toFixed(1)}ms`); +expect(average).toBeLessThan(2000); +``` + +### "I want to set performance budgets for different actions" +```typescript +const budgets = { + triggerWorkflow: 8000, // 8 seconds + openLargeNode: 2500, // 2.5 seconds +}; + +// Measure workflow execution +const triggerDuration = await measurePerformance(page, 'trigger-workflow', async () => { + await n8n.workflowComposer.executeWorkflowAndWaitForNotification('Successful'); +}); +expect(triggerDuration).toBeLessThan(budgets.triggerWorkflow); + +// Measure node opening +const openDuration = await measurePerformance(page, 'open-large-node', async () => { + await n8n.canvas.openNode('Code'); +}); +expect(openDuration).toBeLessThan(budgets.openLargeNode); +``` + +### "I want to test performance with different data sizes" +```typescript +const testData = [ + { size: 30000, budgets: { triggerWorkflow: 8000, openLargeNode: 2500 } }, + { size: 60000, budgets: { triggerWorkflow: 15000, openLargeNode: 6000 } }, +]; + +testData.forEach(({ size, budgets }) => { + test(`performance - ${size.toLocaleString()} items`, async ({ page }) => { + // Setup test with specific data size + await setupTest(size); + + // Measure against size-specific budgets + const duration = await measurePerformance(page, 'trigger-workflow', async () => { + await n8n.workflowComposer.executeWorkflowAndWaitForNotification('Successful') + }); + expect(duration).toBeLessThan(budgets.triggerWorkflow); + }); +}); +``` + +### "I want to see all performance metrics from my test" +```typescript +// After running various performance measurements... +const allMetrics = await getAllPerformanceMetrics(page); +console.log('All performance metrics:', allMetrics); +// Output: { 'open-node': 1234.5, 'save-workflow': 567.8, ... } +``` + +### "I want to attach performance results to my test report" +```typescript +const allMetrics = await getAllPerformanceMetrics(page); +await test.info().attach('performance-metrics', { + body: JSON.stringify({ + dataSize: 30000, + metrics: allMetrics, + budgets: { triggerWorkflow: 8000, openLargeNode: 2500 }, + passed: { + triggerWorkflow: allMetrics['trigger-workflow'] < 8000, + openNode: allMetrics['open-large-node'] < 2500, + } + }, null, 2), + contentType: 'application/json', +}); +``` + +## API Reference + +### `measurePerformance(page, actionName, actionFn)` +Measures the duration of an async action using the Performance API. +- **Returns:** `Promise` - Duration in milliseconds + +### `getAllPerformanceMetrics(page)` +Retrieves all performance measurements from the current page. +- **Returns:** `Promise>` - Map of action names to durations + +## Tips + +- Use unique names for measurements in loops (e.g., `open-node-${i}`) to avoid conflicts +- Set realistic budgets - add some buffer to account for variance +- Consider different budgets for different data sizes or environments diff --git a/packages/testing/playwright/tests/performance/perf-examples.spec.ts b/packages/testing/playwright/tests/performance/perf-examples.spec.ts new file mode 100644 index 00000000000..6989d451cda --- /dev/null +++ b/packages/testing/playwright/tests/performance/perf-examples.spec.ts @@ -0,0 +1,127 @@ +import { test, expect } from '../../fixtures/base'; +import type { n8nPage } from '../../pages/n8nPage'; +import { getAllPerformanceMetrics, measurePerformance } from '../../utils/performance-helper'; + +async function setupPerformanceTest(n8n: n8nPage, size: number) { + await n8n.goHome(); + await n8n.workflows.clickNewWorkflowCard(); + await n8n.workflows.importWorkflow('large.json', 'Large Workflow'); + await n8n.notifications.closeNotificationByText('Successful'); + + // Configure data size + await n8n.canvas.openNode('Edit Fields'); + await n8n.page + .getByTestId('parameter-input-value') + .getByTestId('parameter-input-field') + .fill(size.toString()); + await n8n.ndv.clickBackToCanvasButton(); +} + +test.describe('Performance Example: Multiple sets}', () => { + const testData = [ + { + size: 30000, + timeout: 40000, + budgets: { + triggerWorkflow: 8000, // 8s budget (actual: 6.4s) + openLargeNode: 2500, // 2.5s budget (actual: 1.6s) + }, + }, + { + size: 60000, + timeout: 60000, + budgets: { + triggerWorkflow: 15000, // 15s budget (actual: 12.4s) + openLargeNode: 6000, // 6s budget (actual: 4.9s) + }, + }, + ]; + + testData.forEach(({ size, timeout, budgets }) => { + test(`workflow performance - ${size.toLocaleString()} items @db:reset`, async ({ n8n }) => { + test.setTimeout(timeout); + + // Setup workflow + await setupPerformanceTest(n8n, size); + + // Measure workflow execution + const triggerDuration = await measurePerformance(n8n.page, 'trigger-workflow', async () => { + await n8n.workflowComposer.executeWorkflowAndWaitForNotification('Successful', { + timeout: budgets.triggerWorkflow + 5000, // Add buffer + }); + }); + + // Assert trigger performance + expect(triggerDuration).toBeLessThan(budgets.triggerWorkflow); + console.log( + `βœ“ Trigger workflow (${size} items): ${triggerDuration.toFixed(1)}ms < ${budgets.triggerWorkflow}ms`, + ); + + // Measure node opening + const openNodeDuration = await measurePerformance(n8n.page, 'open-large-node', async () => { + await n8n.canvas.openNode('Code'); + }); + + // Assert node opening performance + expect(openNodeDuration).toBeLessThan(budgets.openLargeNode); + console.log( + `βœ“ Open node (${size} items): ${openNodeDuration.toFixed(1)}ms < ${budgets.openLargeNode}ms`, + ); + + // Get all metrics and attach to test report + const allMetrics = await getAllPerformanceMetrics(n8n.page); + console.log(`\nAll performance metrics for ${size.toLocaleString()} items:`, allMetrics); + + // Attach metrics to test report + await test.info().attach('performance-metrics', { + body: JSON.stringify( + { + dataSize: size, + metrics: allMetrics, + budgets, + passed: { + triggerWorkflow: triggerDuration < budgets.triggerWorkflow, + openNode: openNodeDuration < budgets.openLargeNode, + }, + }, + null, + 2, + ), + contentType: 'application/json', + }); + }); + }); +}); + +test('Performance Example: Multiple Loops in a single test @db:reset', async ({ n8n }) => { + await setupPerformanceTest(n8n, 30000); + const loopSize = 20; + const stats = []; + + await n8n.workflowComposer.executeWorkflowAndWaitForNotification('Successful'); + + for (let i = 0; i < loopSize; i++) { + // Measure node opening + const openNodeDuration = await measurePerformance(n8n.page, `open-node-${i}`, async () => { + await n8n.canvas.openNode('Code'); + }); + + stats.push(openNodeDuration); + await n8n.ndv.clickBackToCanvasButton(); + + console.log(`βœ“ Open node (${i + 1} of ${loopSize}): ${openNodeDuration.toFixed(1)}ms`); + } + // Get the average of the stats + const average = stats.reduce((a, b) => a + b, 0) / stats.length; + console.log(`Average open node duration: ${average.toFixed(1)}ms`); + expect(average).toBeLessThan(2000); +}); + +test('Performance Example: Aserting on a performance metric @db:reset', async ({ n8n }) => { + await setupPerformanceTest(n8n, 30000); + await n8n.workflowComposer.executeWorkflowAndWaitForNotification('Successful'); + const openNodeDuration = await measurePerformance(n8n.page, 'open-node', async () => { + await n8n.canvas.openNode('Code'); + }); + expect(openNodeDuration).toBeLessThan(2000); +}); diff --git a/packages/testing/playwright/utils/performance-helper.ts b/packages/testing/playwright/utils/performance-helper.ts new file mode 100644 index 00000000000..789dc248347 --- /dev/null +++ b/packages/testing/playwright/utils/performance-helper.ts @@ -0,0 +1,30 @@ +import type { Page } from '@playwright/test'; + +export async function measurePerformance( + page: Page, + actionName: string, + actionFn: () => Promise, +): Promise { + // Mark start + await page.evaluate((name) => performance.mark(`${name}-start`), actionName); + + // Execute action + await actionFn(); + + // Mark end and get duration + return await page.evaluate((name) => { + performance.mark(`${name}-end`); + performance.measure(name, `${name}-start`, `${name}-end`); + const measure = performance.getEntriesByName(name)[0] as PerformanceMeasure; + return measure.duration; + }, actionName); +} + +export async function getAllPerformanceMetrics(page: Page) { + return await page.evaluate(() => { + const metrics: Record = {}; + const measures = performance.getEntriesByType('measure') as PerformanceMeasure[]; + measures.forEach((m) => (metrics[m.name] = m.duration)); + return metrics; + }); +} diff --git a/packages/testing/playwright/workflows/Test_workflow_2.json b/packages/testing/playwright/workflows/Test_workflow_2.json new file mode 100644 index 00000000000..ea5a0001740 --- /dev/null +++ b/packages/testing/playwright/workflows/Test_workflow_2.json @@ -0,0 +1,55 @@ +{ + "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, + "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/packages/testing/playwright/workflows/large.json b/packages/testing/playwright/workflows/large.json new file mode 100644 index 00000000000..ab7c6d298c6 --- /dev/null +++ b/packages/testing/playwright/workflows/large.json @@ -0,0 +1,149 @@ +{ + "nodes": [ + { + "parameters": {}, + "type": "n8n-nodes-base.manualTrigger", + "typeVersion": 1, + "position": [-496, 192], + "id": "eb667a4b-8428-455e-9a09-2bc4b9d43ee6", + "name": "When clicking β€˜Execute workflow’" + }, + { + "parameters": { + "jsCode": "// The array to hold our user data\nconst items = [];\nconst numberOfItems = Number($input.first().json.itemCount)\n\n// Loop 500 times to create 500 user objects\nfor (let i = 1; i <= numberOfItems; i++) {\n const user = {\n id: i,\n firstName: 'User',\n lastName: `${i}`,\n email: `user.${i}@example.com`,\n };\n items.push(user);\n}\n\n// Return the data in the format n8n expects.\n// Each object in the array becomes a separate item in the n8n workflow.\nreturn items.map(item => ({ json: item }));" + }, + "type": "n8n-nodes-base.code", + "typeVersion": 2, + "position": [-80, 192], + "id": "abb04bd3-f0c7-490c-a86f-76e473b9ece3", + "name": "Code" + }, + { + "parameters": { + "conditions": { + "options": { + "caseSensitive": true, + "leftValue": "", + "typeValidation": "strict", + "version": 2 + }, + "conditions": [ + { + "id": "90606208-ab4b-4b4e-a73e-d01f8c53a142", + "leftValue": "={{ $json.id }}", + "rightValue": 3000, + "operator": { + "type": "number", + "operation": "lt" + } + } + ], + "combinator": "and" + }, + "options": {} + }, + "type": "n8n-nodes-base.if", + "typeVersion": 2.2, + "position": [208, 0], + "id": "3a218f47-a535-4b6a-b8c8-5b21c48e578c", + "name": "If" + }, + { + "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();" + }, + "type": "n8n-nodes-base.code", + "typeVersion": 2, + "position": [480, 272], + "id": "7df7bf46-4a1b-4cb5-a5ff-140eff995129", + "name": "Code1" + }, + { + "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();" + }, + "type": "n8n-nodes-base.code", + "typeVersion": 2, + "position": [480, 80], + "id": "ab5a4ad6-bbf5-4b6b-a5ba-f6d46e14f598", + "name": "Code2" + }, + { + "parameters": { + "assignments": { + "assignments": [ + { + "id": "99ed2132-dca6-4e9f-b7e3-5612ad22ee29", + "name": "itemCount", + "value": "10000", + "type": "string" + } + ] + }, + "options": {} + }, + "type": "n8n-nodes-base.set", + "typeVersion": 3.4, + "position": [-288, 192], + "id": "ff650b7e-9b79-4403-b66f-0b11755d7999", + "name": "Edit Fields" + } + ], + "connections": { + "When clicking β€˜Execute workflow’": { + "main": [ + [ + { + "node": "Edit Fields", + "type": "main", + "index": 0 + } + ] + ] + }, + "Code": { + "main": [ + [ + { + "node": "If", + "type": "main", + "index": 0 + } + ] + ] + }, + "If": { + "main": [ + [ + { + "node": "Code2", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Code1", + "type": "main", + "index": 0 + } + ] + ] + }, + "Edit Fields": { + "main": [ + [ + { + "node": "Code", + "type": "main", + "index": 0 + } + ] + ] + } + }, + "pinData": {}, + "meta": { + "instanceId": "9864951ea4472b9d0ea716c66bb2527efb446aa6309ab9f74077ab1db432402b" + } +} diff --git a/packages/workflow/package.json b/packages/workflow/package.json index 48fceeb0667..8403de7895a 100644 --- a/packages/workflow/package.json +++ b/packages/workflow/package.json @@ -1,6 +1,6 @@ { "name": "n8n-workflow", - "version": "1.101.0", + "version": "1.102.0", "description": "Workflow base code of n8n", "types": "dist/esm/index.d.ts", "module": "dist/esm/index.js", @@ -11,6 +11,11 @@ "import": "./dist/esm/index.js", "require": "./dist/cjs/index.js" }, + "./common": { + "types": "./dist/esm/common/index.d.ts", + "import": "./dist/esm/common/index.js", + "require": "./dist/cjs/common/index.js" + }, "./*": "./*" }, "scripts": { @@ -22,7 +27,7 @@ "format": "biome format --write .", "format:check": "biome ci .", "lint": "eslint src --quiet", - "lintfix": "eslint src --fix", + "lint:fix": "eslint src --fix", "watch": "tsc --build tsconfig.build.esm.json tsconfig.build.cjs.json --watch", "test": "vitest run", "test:dev": "vitest --watch" @@ -33,8 +38,8 @@ "devDependencies": { "@langchain/core": "catalog:", "@n8n/config": "workspace:*", - "@n8n/vitest-config": "workspace:*", "@n8n/typescript-config": "workspace:*", + "@n8n/vitest-config": "workspace:*", "@types/express": "catalog:", "@types/jmespath": "^0.15.0", "@types/lodash": "catalog:", @@ -45,6 +50,7 @@ "vitest-mock-extended": "catalog:" }, "dependencies": { + "@n8n/errors": "workspace:^", "@n8n/tournament": "1.0.6", "ast-types": "0.15.2", "callsites": "catalog:", diff --git a/packages/workflow/src/common/get-child-nodes.ts b/packages/workflow/src/common/get-child-nodes.ts new file mode 100644 index 00000000000..49dd85d66d0 --- /dev/null +++ b/packages/workflow/src/common/get-child-nodes.ts @@ -0,0 +1,12 @@ +import { getConnectedNodes } from './get-connected-nodes'; +import { NodeConnectionTypes } from '../interfaces'; +import type { IConnections, NodeConnectionType } from '../interfaces'; + +export function getChildNodes( + connectionsBySourceNode: IConnections, + nodeName: string, + type: NodeConnectionType | 'ALL' | 'ALL_NON_MAIN' = NodeConnectionTypes.Main, + depth = -1, +): string[] { + return getConnectedNodes(connectionsBySourceNode, nodeName, type, depth); +} diff --git a/packages/workflow/src/common/get-connected-nodes.ts b/packages/workflow/src/common/get-connected-nodes.ts new file mode 100644 index 00000000000..e58d23996a3 --- /dev/null +++ b/packages/workflow/src/common/get-connected-nodes.ts @@ -0,0 +1,98 @@ +import { NodeConnectionTypes } from '../interfaces'; +import type { IConnections, NodeConnectionType } from '../interfaces'; + +/** + * Gets all the nodes which are connected nodes starting from + * the given one + * + * @param {NodeConnectionType} [type='main'] + * @param {*} [depth=-1] + */ +export function getConnectedNodes( + connections: IConnections, + nodeName: string, + connectionType: NodeConnectionType | 'ALL' | 'ALL_NON_MAIN' = NodeConnectionTypes.Main, + depth = -1, + checkedNodesIncoming?: string[], +): string[] { + const newDepth = depth === -1 ? depth : depth - 1; + if (depth === 0) { + // Reached max depth + return []; + } + + if (!connections.hasOwnProperty(nodeName)) { + // Node does not have incoming connections + return []; + } + + let types: NodeConnectionType[]; + if (connectionType === 'ALL') { + types = Object.keys(connections[nodeName]) as NodeConnectionType[]; + } else if (connectionType === 'ALL_NON_MAIN') { + types = Object.keys(connections[nodeName]).filter( + (type) => type !== 'main', + ) as NodeConnectionType[]; + } else { + types = [connectionType]; + } + + let addNodes: string[]; + let nodeIndex: number; + let i: number; + let parentNodeName: string; + const returnNodes: string[] = []; + + types.forEach((type) => { + if (!connections[nodeName].hasOwnProperty(type)) { + // Node does not have incoming connections of given type + return; + } + + const checkedNodes = checkedNodesIncoming ? [...checkedNodesIncoming] : []; + + if (checkedNodes.includes(nodeName)) { + // Node got checked already before + return; + } + + checkedNodes.push(nodeName); + + connections[nodeName][type].forEach((connectionsByIndex) => { + connectionsByIndex?.forEach((connection) => { + if (checkedNodes.includes(connection.node)) { + // Node got checked already before + return; + } + + returnNodes.unshift(connection.node); + + addNodes = getConnectedNodes( + connections, + connection.node, + connectionType, + newDepth, + checkedNodes, + ); + + for (i = addNodes.length; i--; i > 0) { + // Because nodes can have multiple parents it is possible that + // parts of the tree is parent of both and to not add nodes + // twice check first if they already got added before. + parentNodeName = addNodes[i]; + nodeIndex = returnNodes.indexOf(parentNodeName); + + if (nodeIndex !== -1) { + // Node got found before so remove it from current location + // that node-order stays correct + returnNodes.splice(nodeIndex, 1); + } + + returnNodes.unshift(parentNodeName); + } + }); + }); + }); + + return returnNodes; +} diff --git a/packages/workflow/src/common/get-node-by-name.ts b/packages/workflow/src/common/get-node-by-name.ts new file mode 100644 index 00000000000..566d2f8fb1a --- /dev/null +++ b/packages/workflow/src/common/get-node-by-name.ts @@ -0,0 +1,19 @@ +import type { INode, INodes } from '../interfaces'; + +/** + * Returns the node with the given name if it exists else null + * + * @param {INodes} nodes Nodes to search in + * @param {string} name Name of the node to return + */ +export function getNodeByName(nodes: INodes | INode[], name: string) { + if (Array.isArray(nodes)) { + return nodes.find((node) => node.name === name) || null; + } + + if (nodes.hasOwnProperty(name)) { + return nodes[name]; + } + + return null; +} diff --git a/packages/workflow/src/common/get-parent-nodes.ts b/packages/workflow/src/common/get-parent-nodes.ts new file mode 100644 index 00000000000..c40d4766bbe --- /dev/null +++ b/packages/workflow/src/common/get-parent-nodes.ts @@ -0,0 +1,18 @@ +import { getConnectedNodes } from './get-connected-nodes'; +import { NodeConnectionTypes } from '../interfaces'; +import type { IConnections, NodeConnectionType } from '../interfaces'; + +/** + * Returns all the nodes before the given one + * + * @param {NodeConnectionType} [type='main'] + * @param {*} [depth=-1] + */ +export function getParentNodes( + connectionsByDestinationNode: IConnections, + nodeName: string, + type: NodeConnectionType | 'ALL' | 'ALL_NON_MAIN' = NodeConnectionTypes.Main, + depth = -1, +): string[] { + return getConnectedNodes(connectionsByDestinationNode, nodeName, type, depth); +} diff --git a/packages/workflow/src/common/index.ts b/packages/workflow/src/common/index.ts new file mode 100644 index 00000000000..196ec09a377 --- /dev/null +++ b/packages/workflow/src/common/index.ts @@ -0,0 +1,5 @@ +export * from './get-child-nodes'; +export * from './get-connected-nodes'; +export * from './get-node-by-name'; +export * from './get-parent-nodes'; +export * from './map-connections-by-destination'; diff --git a/packages/workflow/src/common/map-connections-by-destination.ts b/packages/workflow/src/common/map-connections-by-destination.ts new file mode 100644 index 00000000000..c37370bfab5 --- /dev/null +++ b/packages/workflow/src/common/map-connections-by-destination.ts @@ -0,0 +1,49 @@ +/* eslint-disable @typescript-eslint/no-for-in-array */ + +import type { IConnections, NodeConnectionType } from '../interfaces'; + +export function mapConnectionsByDestination(connections: IConnections) { + const returnConnection: IConnections = {}; + + let connectionInfo; + let maxIndex: number; + for (const sourceNode in connections) { + if (!connections.hasOwnProperty(sourceNode)) { + continue; + } + + for (const type of Object.keys(connections[sourceNode]) as NodeConnectionType[]) { + if (!connections[sourceNode].hasOwnProperty(type)) { + continue; + } + + for (const inputIndex in connections[sourceNode][type]) { + if (!connections[sourceNode][type].hasOwnProperty(inputIndex)) { + continue; + } + + for (connectionInfo of connections[sourceNode][type][inputIndex] ?? []) { + if (!returnConnection.hasOwnProperty(connectionInfo.node)) { + returnConnection[connectionInfo.node] = {}; + } + if (!returnConnection[connectionInfo.node].hasOwnProperty(connectionInfo.type)) { + returnConnection[connectionInfo.node][connectionInfo.type] = []; + } + + maxIndex = returnConnection[connectionInfo.node][connectionInfo.type].length - 1; + for (let j = maxIndex; j < connectionInfo.index; j++) { + returnConnection[connectionInfo.node][connectionInfo.type].push([]); + } + + returnConnection[connectionInfo.node][connectionInfo.type][connectionInfo.index]?.push({ + node: sourceNode, + type, + index: parseInt(inputIndex, 10), + }); + } + } + } + } + + return returnConnection; +} diff --git a/packages/workflow/src/constants.ts b/packages/workflow/src/constants.ts index 810574a2880..92773cf2589 100644 --- a/packages/workflow/src/constants.ts +++ b/packages/workflow/src/constants.ts @@ -42,6 +42,7 @@ export const FORM_NODE_TYPE = 'n8n-nodes-base.form'; export const FORM_TRIGGER_NODE_TYPE = 'n8n-nodes-base.formTrigger'; export const CHAT_TRIGGER_NODE_TYPE = '@n8n/n8n-nodes-langchain.chatTrigger'; export const WAIT_NODE_TYPE = 'n8n-nodes-base.wait'; +export const RESPOND_TO_WEBHOOK_NODE_TYPE = 'n8n-nodes-base.respondToWebhook'; export const HTML_NODE_TYPE = 'n8n-nodes-base.html'; export const MAILGUN_NODE_TYPE = 'n8n-nodes-base.mailgun'; export const POSTGRES_NODE_TYPE = 'n8n-nodes-base.postgres'; @@ -118,3 +119,5 @@ export const FROM_AI_AUTO_GENERATED_MARKER = '/*n8n-auto-generated-fromAI-overri export const PROJECT_ROOT = '0'; export const WAITING_FORMS_EXECUTION_STATUS = 'n8n-execution-status'; + +export const CHAT_WAIT_USER_REPLY = 'waitUserReply'; diff --git a/packages/workflow/src/errors/abstract/execution-base.error.ts b/packages/workflow/src/errors/abstract/execution-base.error.ts index 83faed8a6db..93f86cbd03a 100644 --- a/packages/workflow/src/errors/abstract/execution-base.error.ts +++ b/packages/workflow/src/errors/abstract/execution-base.error.ts @@ -1,6 +1,6 @@ +import { ApplicationError, type ReportingOptions } from '@n8n/errors'; + import type { Functionality, IDataObject, JsonObject } from '../../interfaces'; -import { ApplicationError } from '../application.error'; -import type { ReportingOptions } from '../error.types'; interface ExecutionBaseErrorOptions extends ReportingOptions { cause?: Error; diff --git a/packages/workflow/src/errors/base/base.error.ts b/packages/workflow/src/errors/base/base.error.ts index 97b25a5c253..f460688bf46 100644 --- a/packages/workflow/src/errors/base/base.error.ts +++ b/packages/workflow/src/errors/base/base.error.ts @@ -1,7 +1,7 @@ import type { Event } from '@sentry/node'; import callsites from 'callsites'; -import type { ErrorTags, ErrorLevel, ReportingOptions } from '../error.types'; +import type { ErrorTags, ErrorLevel, ReportingOptions } from '@n8n/errors'; export type BaseErrorOptions = { description?: string | undefined | null } & ErrorOptions & ReportingOptions; diff --git a/packages/workflow/src/errors/db-connection-timeout-error.ts b/packages/workflow/src/errors/db-connection-timeout-error.ts index 901b9d36b75..36f3846ddd0 100644 --- a/packages/workflow/src/errors/db-connection-timeout-error.ts +++ b/packages/workflow/src/errors/db-connection-timeout-error.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from './application.error'; +import { ApplicationError } from '@n8n/errors'; export type DbConnectionTimeoutErrorOpts = { configuredTimeoutInMs: number; diff --git a/packages/workflow/src/errors/expression.error.ts b/packages/workflow/src/errors/expression.error.ts index 8b8bb6ef869..9e97418e92e 100644 --- a/packages/workflow/src/errors/expression.error.ts +++ b/packages/workflow/src/errors/expression.error.ts @@ -28,6 +28,25 @@ export interface ExpressionErrorOptions { /** * Class for instantiating an expression error */ +// Expression error constants +export const EXPRESSION_ERROR_MESSAGES = { + NODE_NOT_FOUND: 'Error finding the referenced node', + NODE_REFERENCE_TEMPLATE: + 'Make sure the node you referenced is spelled correctly and is a parent of this node', + NO_EXECUTION_DATA: 'No execution data available', +} as const; + +export const EXPRESSION_ERROR_TYPES = { + PAIRED_ITEM_NO_CONNECTION: 'paired_item_no_connection', +} as const; + +export const EXPRESSION_DESCRIPTION_KEYS = { + NODE_NOT_FOUND: 'nodeNotFound', + NO_NODE_EXECUTION_DATA: 'noNodeExecutionData', + PAIRED_ITEM_NO_CONNECTION: 'pairedItemNoConnection', + PAIRED_ITEM_NO_CONNECTION_CODE_NODE: 'pairedItemNoConnectionCodeNode', +} as const; + export class ExpressionError extends ExecutionBaseError { constructor(message: string, options?: ExpressionErrorOptions) { super(message, { cause: options?.cause, level: 'warning' }); diff --git a/packages/workflow/src/errors/index.ts b/packages/workflow/src/errors/index.ts index db3245608e9..3000d22d321 100644 --- a/packages/workflow/src/errors/index.ts +++ b/packages/workflow/src/errors/index.ts @@ -1,9 +1,8 @@ -export type * from './error.types'; export { BaseError, type BaseErrorOptions } from './base/base.error'; export { OperationalError, type OperationalErrorOptions } from './base/operational.error'; export { UnexpectedError, type UnexpectedErrorOptions } from './base/unexpected.error'; export { UserError, type UserErrorOptions } from './base/user.error'; -export { ApplicationError } from './application.error'; +export { ApplicationError } from '@n8n/errors'; export { ExpressionError } from './expression.error'; export { ExecutionCancelledError } from './execution-cancelled.error'; export { NodeApiError } from './node-api.error'; diff --git a/packages/workflow/src/errors/node-api.error.ts b/packages/workflow/src/errors/node-api.error.ts index 39eabc3b86f..5a70b144fcc 100644 --- a/packages/workflow/src/errors/node-api.error.ts +++ b/packages/workflow/src/errors/node-api.error.ts @@ -4,7 +4,7 @@ import type { AxiosError } from 'axios'; import { parseString } from 'xml2js'; import { NodeError } from './abstract/node.error'; -import type { ErrorLevel } from './error.types'; +import type { ErrorLevel } from '@n8n/errors'; import { NO_OP_NODE_TYPE, UNKNOWN_ERROR_DESCRIPTION, diff --git a/packages/workflow/src/errors/node-operation.error.ts b/packages/workflow/src/errors/node-operation.error.ts index 3c019088491..3bb564726a6 100644 --- a/packages/workflow/src/errors/node-operation.error.ts +++ b/packages/workflow/src/errors/node-operation.error.ts @@ -1,5 +1,5 @@ import { NodeError } from './abstract/node.error'; -import { ApplicationError } from './application.error'; +import { ApplicationError } from '@n8n/errors'; import type { NodeOperationErrorOptions } from './node-api.error'; import type { INode, JsonObject } from '../interfaces'; diff --git a/packages/workflow/src/errors/trigger-close.error.ts b/packages/workflow/src/errors/trigger-close.error.ts index 083c050be63..b8931d62f2d 100644 --- a/packages/workflow/src/errors/trigger-close.error.ts +++ b/packages/workflow/src/errors/trigger-close.error.ts @@ -1,5 +1,4 @@ -import { ApplicationError } from './application.error'; -import type { ErrorLevel } from './error.types'; +import { ApplicationError, type ErrorLevel } from '@n8n/errors'; import type { INode } from '../interfaces'; interface TriggerCloseErrorOptions extends ErrorOptions { diff --git a/packages/workflow/src/errors/workflow-activation.error.ts b/packages/workflow/src/errors/workflow-activation.error.ts index 68893dbe3ce..b0d9d496970 100644 --- a/packages/workflow/src/errors/workflow-activation.error.ts +++ b/packages/workflow/src/errors/workflow-activation.error.ts @@ -1,5 +1,5 @@ import { ExecutionBaseError } from './abstract/execution-base.error'; -import type { ApplicationError } from './application.error'; +import type { ApplicationError } from '@n8n/errors'; import type { INode } from '../interfaces'; interface WorkflowActivationErrorOptions { diff --git a/packages/workflow/src/expression.ts b/packages/workflow/src/expression.ts index 1f68d88cb49..30271b729de 100644 --- a/packages/workflow/src/expression.ts +++ b/packages/workflow/src/expression.ts @@ -1,6 +1,6 @@ import { DateTime, Duration, Interval } from 'luxon'; -import { ApplicationError } from './errors/application.error'; +import { ApplicationError } from '@n8n/errors'; import { ExpressionExtensionError } from './errors/expression-extension.error'; import { ExpressionError } from './errors/expression.error'; import { evaluateExpression, setErrorHandler } from './expression-evaluator-proxy'; diff --git a/packages/workflow/src/index.ts b/packages/workflow/src/index.ts index 2c6d1ae9312..4be0cbb82a9 100644 --- a/packages/workflow/src/index.ts +++ b/packages/workflow/src/index.ts @@ -5,6 +5,7 @@ import * as TelemetryHelpers from './telemetry-helpers'; export * from './errors'; export * from './constants'; +export * from './common'; export * from './cron'; export * from './deferred-promise'; export * from './global-state'; diff --git a/packages/workflow/src/interfaces.ts b/packages/workflow/src/interfaces.ts index 12e0afc9259..2f9d5106366 100644 --- a/packages/workflow/src/interfaces.ts +++ b/packages/workflow/src/interfaces.ts @@ -843,8 +843,19 @@ type CronUnit = number | '*' | `*/${number}`; export type CronExpression = `${CronUnit} ${CronUnit} ${CronUnit} ${CronUnit} ${CronUnit} ${CronUnit}`; +type RecurrenceRule = + | { activated: false } + | { + activated: true; + index: number; + intervalSize: number; + typeInterval: 'hours' | 'days' | 'weeks' | 'months'; + }; + +export type Cron = { expression: CronExpression; recurrence?: RecurrenceRule }; + export interface SchedulingFunctions { - registerCron(cronExpression: CronExpression, onTick: () => void): void; + registerCron(cron: Cron, onTick: () => void): void; } export type NodeTypeAndVersion = { @@ -874,10 +885,14 @@ export interface FunctionsBase { nodeName: string, options?: { includeNodeParameters?: boolean }, ): NodeTypeAndVersion[]; - getParentNodes(nodeName: string): NodeTypeAndVersion[]; + getParentNodes( + nodeName: string, + options?: { includeNodeParameters?: boolean }, + ): NodeTypeAndVersion[]; getKnownNodeTypes(): IDataObject; getMode?: () => WorkflowExecuteMode; getActivationMode?: () => WorkflowActivateMode; + getChatTrigger: () => INode | null; /** @deprecated */ prepareOutputData(outputData: INodeExecutionData[]): Promise; @@ -1201,6 +1216,7 @@ export interface INodeExecutionData { | NodeApiError | NodeOperationError | number + | string | undefined; json: IDataObject; binary?: IBinaryKeyData; @@ -1209,6 +1225,17 @@ export interface INodeExecutionData { metadata?: { subExecution: RelatedExecution; }; + evaluationData?: Record; + /** + * Use this key to send a message to the chat. + * + * - Workflow has to be started by a chat node. + * - Put execution to wait after sending. + * + * See example in + * packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/Chat.node.ts + */ + sendMessage?: string; /** * @deprecated This key was added by accident and should not be used as it @@ -1364,6 +1391,7 @@ export interface ResourceMapperTypeOptionsBase { hint?: string; }; showTypeConversionOptions?: boolean; + allowEmptyValues?: boolean; } // Enforce at least one of resourceMapperMethod or localResourceMapperMethod @@ -1624,6 +1652,11 @@ export interface INodeType { description: INodeTypeDescription; supplyData?(this: ISupplyDataFunctions, itemIndex: number): Promise; execute?(this: IExecuteFunctions): Promise; + /** + * A function called when a node receives a chat message. Allows it to react + * to the message before it gets executed. + */ + onMessage?(context: IExecuteFunctions, data: INodeExecutionData): Promise; poll?(this: IPollFunctions): Promise; trigger?(this: ITriggerFunctions): Promise; webhook?(this: IWebhookFunctions): Promise; @@ -2110,11 +2143,28 @@ export interface IWebhookResponseData { } export type WebhookResponseData = 'allEntries' | 'firstEntryJson' | 'firstEntryBinary' | 'noData'; + +/** + * Defines how and when response should be sent: + * + * onReceived: Response is sent immidiatly after node done executing + * + * lastNode: Response is sent after the last node finishes executing + * + * responseNode: Response is sent from the Responde to Webhook node + * + * formPage: Special response with executionId sent to the form trigger node + * + * hostedChat: Special response with executionId sent to the hosted chat trigger node + * + * streaming: Response added to runData to httpResponse and streamingEnabled set to true + */ export type WebhookResponseMode = | 'onReceived' | 'lastNode' | 'responseNode' | 'formPage' + | 'hostedChat' | 'streaming'; export interface INodeTypes { diff --git a/packages/workflow/src/node-helpers.ts b/packages/workflow/src/node-helpers.ts index 920011028a7..6449bbb305e 100644 --- a/packages/workflow/src/node-helpers.ts +++ b/packages/workflow/src/node-helpers.ts @@ -7,7 +7,7 @@ import get from 'lodash/get'; import isEqual from 'lodash/isEqual'; import { EXECUTE_WORKFLOW_NODE_TYPE, WORKFLOW_TOOL_LANGCHAIN_NODE_TYPE } from './constants'; -import { ApplicationError } from './errors/application.error'; +import { ApplicationError } from '@n8n/errors'; import { NodeConnectionTypes } from './interfaces'; import type { FieldType, @@ -835,6 +835,10 @@ export function getNodeParameters( // Multiple can be set so will be an array const tempArrayValue: INodeParameters[] = []; + // Collection values should always be an object + if (typeof propertyValues !== 'object' || Array.isArray(propertyValues)) { + continue; + } // Iterate over all items as it contains multiple ones for (const nodeValue of (propertyValues as INodeParameters)[ itemName diff --git a/packages/workflow/src/node-parameters/filter-parameter.ts b/packages/workflow/src/node-parameters/filter-parameter.ts index 75f97ae84c1..767eb26c8cf 100644 --- a/packages/workflow/src/node-parameters/filter-parameter.ts +++ b/packages/workflow/src/node-parameters/filter-parameter.ts @@ -1,6 +1,6 @@ import type { DateTime } from 'luxon'; -import { ApplicationError } from '../errors/application.error'; +import { ApplicationError } from '@n8n/errors'; import type { FilterConditionValue, FilterOperatorType, diff --git a/packages/workflow/src/telemetry-helpers.ts b/packages/workflow/src/telemetry-helpers.ts index 30cc0567cdd..d59b01438a4 100644 --- a/packages/workflow/src/telemetry-helpers.ts +++ b/packages/workflow/src/telemetry-helpers.ts @@ -22,7 +22,7 @@ import { WEBHOOK_NODE_TYPE, WORKFLOW_TOOL_LANGCHAIN_NODE_TYPE, } from './constants'; -import { ApplicationError } from './errors/application.error'; +import { ApplicationError } from '@n8n/errors'; import type { NodeApiError } from './errors/node-api.error'; import type { IConnection, diff --git a/packages/workflow/src/utils.ts b/packages/workflow/src/utils.ts index 7809f6b5f46..152bceb737b 100644 --- a/packages/workflow/src/utils.ts +++ b/packages/workflow/src/utils.ts @@ -4,7 +4,7 @@ import FormData from 'form-data'; import merge from 'lodash/merge'; import { ALPHABET } from './constants'; -import { ApplicationError } from './errors/application.error'; +import { ApplicationError } from '@n8n/errors'; import { ExecutionCancelledError } from './errors/execution-cancelled.error'; import type { BinaryFileType, IDisplayOptions, INodeProperties, JsonObject } from './interfaces'; diff --git a/packages/workflow/src/workflow-data-proxy.ts b/packages/workflow/src/workflow-data-proxy.ts index 27872819325..8256a1b9cc6 100644 --- a/packages/workflow/src/workflow-data-proxy.ts +++ b/packages/workflow/src/workflow-data-proxy.ts @@ -7,8 +7,14 @@ import { DateTime, Duration, Interval, Settings } from 'luxon'; import { augmentArray, augmentObject } from './augment-object'; import { AGENT_LANGCHAIN_NODE_TYPE, SCRIPTING_NODE_TYPES } from './constants'; -import { ApplicationError } from './errors/application.error'; -import { ExpressionError, type ExpressionErrorOptions } from './errors/expression.error'; +import { ApplicationError } from '@n8n/errors'; +import { + ExpressionError, + type ExpressionErrorOptions, + EXPRESSION_ERROR_MESSAGES, + EXPRESSION_ERROR_TYPES, + EXPRESSION_DESCRIPTION_KEYS, +} from './errors/expression.error'; import { getGlobalState } from './global-state'; import { NodeConnectionTypes } from './interfaces'; import type { @@ -390,11 +396,13 @@ export class WorkflowDataProxy { } if (!that.workflow.getNode(nodeName)) { - throw new ExpressionError("Referenced node doesn't exist", { + throw new ExpressionError(EXPRESSION_ERROR_MESSAGES.NODE_NOT_FOUND, { + messageTemplate: EXPRESSION_ERROR_MESSAGES.NODE_REFERENCE_TEMPLATE, runIndex: that.runIndex, itemIndex: that.itemIndex, nodeCause: nodeName, - descriptionKey: 'nodeNotFound', + descriptionKey: EXPRESSION_DESCRIPTION_KEYS.NODE_NOT_FOUND, + type: EXPRESSION_ERROR_TYPES.PAIRED_ITEM_NO_CONNECTION, }); } @@ -402,11 +410,12 @@ export class WorkflowDataProxy { !that.runExecutionData.resultData.runData.hasOwnProperty(nodeName) && !getPinDataIfManualExecution(that.workflow, nodeName, that.mode) ) { - throw new ExpressionError('Referenced node is unexecuted', { + throw new ExpressionError(EXPRESSION_ERROR_MESSAGES.NODE_NOT_FOUND, { + messageTemplate: EXPRESSION_ERROR_MESSAGES.NODE_REFERENCE_TEMPLATE, runIndex: that.runIndex, itemIndex: that.itemIndex, - type: 'no_node_execution_data', - descriptionKey: 'noNodeExecutionData', + type: EXPRESSION_ERROR_TYPES.PAIRED_ITEM_NO_CONNECTION, + descriptionKey: EXPRESSION_DESCRIPTION_KEYS.NO_NODE_EXECUTION_DATA, nodeCause: nodeName, }); } @@ -496,11 +505,16 @@ export class WorkflowDataProxy { name = name.toString(); if (!node) { - throw new ExpressionError("Referenced node doesn't exist", { + throw new ExpressionError(EXPRESSION_ERROR_MESSAGES.NODE_NOT_FOUND, { + messageTemplate: EXPRESSION_ERROR_MESSAGES.NODE_REFERENCE_TEMPLATE, + functionality: 'pairedItem', + descriptionKey: isScriptingNode(nodeName, that.workflow) + ? EXPRESSION_DESCRIPTION_KEYS.PAIRED_ITEM_NO_CONNECTION_CODE_NODE + : EXPRESSION_DESCRIPTION_KEYS.PAIRED_ITEM_NO_CONNECTION, + type: EXPRESSION_ERROR_TYPES.PAIRED_ITEM_NO_CONNECTION, + nodeCause: nodeName, runIndex: that.runIndex, itemIndex: that.itemIndex, - nodeCause: nodeName, - descriptionKey: 'nodeNotFound', }); } @@ -516,7 +530,7 @@ export class WorkflowDataProxy { if (executionData.length === 0) { if (that.workflow.getParentNodes(nodeName).length === 0) { - throw new ExpressionError('No execution data available', { + throw new ExpressionError(EXPRESSION_ERROR_MESSAGES.NO_EXECUTION_DATA, { messageTemplate: 'No execution data available to expression under β€˜%%PARAMETER%%’', descriptionKey: 'noInputConnection', @@ -527,7 +541,7 @@ export class WorkflowDataProxy { }); } - throw new ExpressionError('No execution data available', { + throw new ExpressionError(EXPRESSION_ERROR_MESSAGES.NO_EXECUTION_DATA, { runIndex: that.runIndex, itemIndex: that.itemIndex, type: 'no_execution_data', @@ -693,11 +707,16 @@ export class WorkflowDataProxy { const nodeName = name.toString(); if (that.workflow.getNode(nodeName) === null) { - throw new ExpressionError("Referenced node doesn't exist", { + throw new ExpressionError(EXPRESSION_ERROR_MESSAGES.NODE_NOT_FOUND, { + messageTemplate: EXPRESSION_ERROR_MESSAGES.NODE_REFERENCE_TEMPLATE, + functionality: 'pairedItem', + descriptionKey: isScriptingNode(nodeName, that.workflow) + ? EXPRESSION_DESCRIPTION_KEYS.PAIRED_ITEM_NO_CONNECTION_CODE_NODE + : EXPRESSION_DESCRIPTION_KEYS.PAIRED_ITEM_NO_CONNECTION, + type: EXPRESSION_ERROR_TYPES.PAIRED_ITEM_NO_CONNECTION, + nodeCause: nodeName, runIndex: that.runIndex, itemIndex: that.itemIndex, - nodeCause: nodeName, - descriptionKey: 'nodeNotFound', }); } @@ -814,14 +833,14 @@ export class WorkflowDataProxy { }); }; - const createNoConnectionError = (nodeCause: string) => { - return createExpressionError('Invalid expression', { - messageTemplate: 'No path back to referenced node', + const createNodeReferenceError = (nodeCause: string) => { + return createExpressionError(EXPRESSION_ERROR_MESSAGES.NODE_NOT_FOUND, { + messageTemplate: EXPRESSION_ERROR_MESSAGES.NODE_REFERENCE_TEMPLATE, functionality: 'pairedItem', descriptionKey: isScriptingNode(nodeCause, that.workflow) - ? 'pairedItemNoConnectionCodeNode' - : 'pairedItemNoConnection', - type: 'paired_item_no_connection', + ? EXPRESSION_DESCRIPTION_KEYS.PAIRED_ITEM_NO_CONNECTION_CODE_NODE + : EXPRESSION_DESCRIPTION_KEYS.PAIRED_ITEM_NO_CONNECTION, + type: EXPRESSION_ERROR_TYPES.PAIRED_ITEM_NO_CONNECTION, moreInfoLink: true, nodeCause, }); @@ -990,7 +1009,7 @@ export class WorkflowDataProxy { const matchedItems = results.filter((result) => result.ok).map((result) => result.result); if (matchedItems.length === 0) { - if (sourceArray.length === 0) throw createNoConnectionError(destinationNodeName); + if (sourceArray.length === 0) throw createNodeReferenceError(destinationNodeName); throw createBranchNotFoundError(sourceData.previousNode, pairedItem.item, nodeBeforeLast); } @@ -1031,7 +1050,7 @@ export class WorkflowDataProxy { inputData?.[NodeConnectionTypes.AiTool]?.[0]?.[itemIndex].json; if (!placeholdersDataInputData) { - throw new ExpressionError('No execution data available', { + throw new ExpressionError(EXPRESSION_ERROR_MESSAGES.NO_EXECUTION_DATA, { runIndex, itemIndex, type: 'no_execution_data', @@ -1053,12 +1072,7 @@ export class WorkflowDataProxy { const referencedNode = that.workflow.getNode(nodeName); if (referencedNode === null) { - throw createExpressionError("Referenced node doesn't exist", { - runIndex: that.runIndex, - itemIndex: that.itemIndex, - nodeCause: nodeName, - descriptionKey: 'nodeNotFound', - }); + throw createNodeReferenceError(nodeName); } const ensureNodeExecutionData = () => { @@ -1066,16 +1080,38 @@ export class WorkflowDataProxy { !that?.runExecutionData?.resultData?.runData.hasOwnProperty(nodeName) && !getPinDataIfManualExecution(that.workflow, nodeName, that.mode) ) { - throw createExpressionError('Referenced node is unexecuted', { + // Always show helpful "Execute node for preview" message + throw new ExpressionError(EXPRESSION_ERROR_MESSAGES.NO_EXECUTION_DATA, { + messageTemplate: `Execute node "${nodeName}" for preview`, + nodeCause: nodeName, runIndex: that.runIndex, itemIndex: that.itemIndex, - type: 'no_node_execution_data', - descriptionKey: 'noNodeExecutionData', - nodeCause: nodeName, }); } }; + const ensureValidPath = () => { + // Check path before execution data + const referencedNode = that.workflow.getNode(nodeName); + if (!referencedNode) { + throw createNodeReferenceError(nodeName); + } + + const activeNode = that.workflow.getNode(that.activeNodeName); + let contextNode = that.contextNodeName; + if (activeNode) { + const parentMainInputNode = that.workflow.getParentMainInputNode(activeNode); + contextNode = parentMainInputNode?.name ?? contextNode; + } + + // For .first(), .last(), .all() methods, use unidirectional path checking + // (forward only) to maintain traditional paired item behavior + const hasForwardPath = that.workflow.getChildNodes(nodeName).includes(contextNode); + if (!hasForwardPath) { + throw createNodeReferenceError(nodeName); + } + }; + return new Proxy( {}, { @@ -1108,17 +1144,24 @@ export class WorkflowDataProxy { property === PAIRED_ITEM_METHOD.ITEM ) { // Before resolving the pairedItem make sure that the requested node comes in the - // graph before the current one + // graph before the current one or exists in the workflow + const referencedNode = that.workflow.getNode(nodeName); + if (!referencedNode) { + // Node doesn't exist in the workflow (could be trimmed manual execution) + throw createNodeReferenceError(nodeName); + } + const activeNode = that.workflow.getNode(that.activeNodeName); let contextNode = that.contextNodeName; if (activeNode) { const parentMainInputNode = that.workflow.getParentMainInputNode(activeNode); - contextNode = parentMainInputNode.name ?? contextNode; + contextNode = parentMainInputNode?.name ?? contextNode; } - const parentNodes = that.workflow.getParentNodes(contextNode); - if (!parentNodes.includes(nodeName)) { - throw createNoConnectionError(nodeName); + + // Use bidirectional path checking to handle AI/tool nodes properly + if (!that.workflow.hasPath(nodeName, contextNode)) { + throw createNodeReferenceError(nodeName); } ensureNodeExecutionData(); @@ -1199,6 +1242,7 @@ export class WorkflowDataProxy { } if (property === 'first') { + ensureValidPath(); ensureNodeExecutionData(); return (branchIndex?: number, runIndex?: number) => { branchIndex = @@ -1217,6 +1261,7 @@ export class WorkflowDataProxy { }; } if (property === 'last') { + ensureValidPath(); ensureNodeExecutionData(); return (branchIndex?: number, runIndex?: number) => { branchIndex = @@ -1238,6 +1283,7 @@ export class WorkflowDataProxy { }; } if (property === 'all') { + ensureValidPath(); ensureNodeExecutionData(); return (branchIndex?: number, runIndex?: number) => { branchIndex = @@ -1276,7 +1322,7 @@ export class WorkflowDataProxy { if (property === 'isProxy') return true; if (that.connectionInputData.length === 0) { - throw createExpressionError('No execution data available', { + throw createExpressionError(EXPRESSION_ERROR_MESSAGES.NO_EXECUTION_DATA, { runIndex: that.runIndex, itemIndex: that.itemIndex, type: 'no_execution_data', diff --git a/packages/workflow/src/workflow.ts b/packages/workflow/src/workflow.ts index 906c0d0997a..b08bab43424 100644 --- a/packages/workflow/src/workflow.ts +++ b/packages/workflow/src/workflow.ts @@ -1,6 +1,14 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-return */ /* eslint-disable @typescript-eslint/no-for-in-array */ +import { + getNodeByName, + getConnectedNodes, + getChildNodes, + getParentNodes, + mapConnectionsByDestination, +} from './common'; + import { MANUAL_CHAT_TRIGGER_LANGCHAIN_NODE_TYPE, NODES_WITH_RENAMABLE_CONTENT, @@ -9,7 +17,7 @@ import { STARTING_NODE_TYPES, } from './constants'; import { UserError } from './errors'; -import { ApplicationError } from './errors/application.error'; +import { ApplicationError } from '@n8n/errors'; import { Expression } from './expression'; import { getGlobalState } from './global-state'; import type { @@ -28,7 +36,6 @@ import type { INodeConnection, IObservableObject, NodeParameterValueType, - INodeOutputConfiguration, NodeConnectionType, } from './interfaces'; import { NodeConnectionTypes } from './interfaces'; @@ -123,9 +130,7 @@ export class Workflow { this.connectionsBySourceNode = parameters.connections; // Save also the connections by the destination nodes - this.connectionsByDestinationNode = Workflow.getConnectionsByDestination( - parameters.connections, - ); + this.connectionsByDestinationNode = mapConnectionsByDestination(parameters.connections); this.active = parameters.active || false; @@ -146,11 +151,6 @@ export class Workflow { this.staticData.__dataChanged = true; } - /** - * The default connections are by source node. This function rewrites them by destination nodes - * to easily find parent nodes. - * - */ static getConnectionsByDestination(connections: IConnections): IConnections { const returnConnection: IConnections = {}; @@ -288,11 +288,7 @@ export class Workflow { * @param {string} nodeName Name of the node to return */ getNode(nodeName: string): INode | null { - if (this.nodes.hasOwnProperty(nodeName)) { - return this.nodes[nodeName]; - } - - return null; + return getNodeByName(this.nodes, nodeName); } /** @@ -477,9 +473,7 @@ export class Workflow { } // Use the updated connections to create updated connections by destination nodes - this.connectionsByDestinationNode = Workflow.getConnectionsByDestination( - this.connectionsBySourceNode, - ); + this.connectionsByDestinationNode = mapConnectionsByDestination(this.connectionsBySourceNode); } /** @@ -576,7 +570,7 @@ export class Workflow { type: NodeConnectionType | 'ALL' | 'ALL_NON_MAIN' = NodeConnectionTypes.Main, depth = -1, ): string[] { - return this.getConnectedNodes(this.connectionsBySourceNode, nodeName, type, depth); + return getChildNodes(this.connectionsBySourceNode, nodeName, type, depth); } /** @@ -590,7 +584,7 @@ export class Workflow { type: NodeConnectionType | 'ALL' | 'ALL_NON_MAIN' = NodeConnectionTypes.Main, depth = -1, ): string[] { - return this.getConnectedNodes(this.connectionsByDestinationNode, nodeName, type, depth); + return getParentNodes(this.connectionsByDestinationNode, nodeName, type, depth); } /** @@ -607,87 +601,7 @@ export class Workflow { depth = -1, checkedNodesIncoming?: string[], ): string[] { - depth = depth === -1 ? -1 : depth; - const newDepth = depth === -1 ? depth : depth - 1; - if (depth === 0) { - // Reached max depth - return []; - } - - if (!connections.hasOwnProperty(nodeName)) { - // Node does not have incoming connections - return []; - } - - let types: NodeConnectionType[]; - if (connectionType === 'ALL') { - types = Object.keys(connections[nodeName]) as NodeConnectionType[]; - } else if (connectionType === 'ALL_NON_MAIN') { - types = Object.keys(connections[nodeName]).filter( - (type) => type !== 'main', - ) as NodeConnectionType[]; - } else { - types = [connectionType]; - } - - let addNodes: string[]; - let nodeIndex: number; - let i: number; - let parentNodeName: string; - const returnNodes: string[] = []; - - types.forEach((type) => { - if (!connections[nodeName].hasOwnProperty(type)) { - // Node does not have incoming connections of given type - return; - } - - const checkedNodes = checkedNodesIncoming ? [...checkedNodesIncoming] : []; - - if (checkedNodes.includes(nodeName)) { - // Node got checked already before - return; - } - - checkedNodes.push(nodeName); - - connections[nodeName][type].forEach((connectionsByIndex) => { - connectionsByIndex?.forEach((connection) => { - if (checkedNodes.includes(connection.node)) { - // Node got checked already before - return; - } - - returnNodes.unshift(connection.node); - - addNodes = this.getConnectedNodes( - connections, - connection.node, - connectionType, - newDepth, - checkedNodes, - ); - - for (i = addNodes.length; i--; i > 0) { - // Because nodes can have multiple parents it is possible that - // parts of the tree is parent of both and to not add nodes - // twice check first if they already got added before. - parentNodeName = addNodes[i]; - nodeIndex = returnNodes.indexOf(parentNodeName); - - if (nodeIndex !== -1) { - // Node got found before so remove it from current location - // that node-order stays correct - returnNodes.splice(nodeIndex, 1); - } - - returnNodes.unshift(parentNodeName); - } - }); - }); - }); - - return returnNodes; + return getConnectedNodes(connections, nodeName, connectionType, depth, checkedNodesIncoming); } /** @@ -762,40 +676,39 @@ export class Workflow { return returnConns; } - getParentMainInputNode(node: INode): INode { - if (node) { - const nodeType = this.nodeTypes.getByNameAndVersion(node.type, node.typeVersion); - const outputs = NodeHelpers.getNodeOutputs(this, node, nodeType.description); + getParentMainInputNode( + node: INode | null | undefined, + visitedNodes: Set = new Set(), + ): INode | null | undefined { + if (!node) return node; - if ( - outputs.find( - (output) => - ((output as INodeOutputConfiguration)?.type ?? output) !== NodeConnectionTypes.Main, - ) - ) { - // Get the first node which is connected to a non-main output - const nonMainNodesConnected = outputs?.reduce((acc, outputName) => { - const parentNodes = this.getChildNodes( - node.name, - (outputName as INodeOutputConfiguration)?.type ?? outputName, - ); - if (parentNodes.length > 0) { - acc.push(...parentNodes); + // Prevent infinite recursion by tracking visited nodes + if (visitedNodes.has(node.name)) { + return node; + } + visitedNodes.add(node.name); + + const nodeConnections = this.connectionsBySourceNode[node.name]; + if (!nodeConnections) { + return node; + } + + // Get non-main connection types that this node connects TO (outgoing connections) + const nonMainConnectionTypes = Object.keys(nodeConnections).filter( + (type) => type !== NodeConnectionTypes.Main, + ); + + for (const connectionType of nonMainConnectionTypes) { + const connections = nodeConnections[connectionType] ?? []; + for (const connectionGroup of connections) { + for (const connection of connectionGroup ?? []) { + if (connection?.node) { + const returnNode = this.getNode(connection.node); + if (!returnNode) { + throw new ApplicationError(`Node "${connection.node}" not found`); + } + return this.getParentMainInputNode(returnNode, visitedNodes); } - return acc; - }, [] as string[]); - - if (nonMainNodesConnected.length) { - const returnNode = this.getNode(nonMainNodesConnected[0]); - if (returnNode === null) { - // This should theoretically never happen as the node is connected - // but who knows and it makes TS happy - throw new ApplicationError(`Node "${nonMainNodesConnected[0]}" not found`); - } - - // The chain of non-main nodes is potentially not finished yet so - // keep on going - return this.getParentMainInputNode(returnNode); } } } @@ -1004,4 +917,64 @@ export class Workflow { return result; } + + /** + * Checks if there's a bidirectional path between two nodes. + * This handles AI/tool nodes that have complex connection patterns + * where simple parent-child traversal doesn't work. + * + * @param fromNodeName The starting node name + * @param toNodeName The target node name + * @param maxDepth Maximum depth to search (default: 50) + * @returns true if there's a path between the nodes + */ + hasPath(fromNodeName: string, toNodeName: string, maxDepth = 50): boolean { + if (fromNodeName === toNodeName) return true; + + // Get connection types that actually exist in this workflow + // We need both source and destination connection types for bidirectional search + const connectionTypes = new Set(); + for (const nodeConnections of Object.values(this.connectionsBySourceNode).concat( + Object.values(this.connectionsByDestinationNode), + )) { + for (const type of Object.keys(nodeConnections)) { + connectionTypes.add(type as NodeConnectionType); + } + } + + const visited = new Set(); + const queue: Array<{ nodeName: string; depth: number }> = [ + { nodeName: fromNodeName, depth: 0 }, + ]; + + while (queue.length > 0) { + const { nodeName, depth } = queue.shift()!; + + if (depth > maxDepth) continue; + if (visited.has(nodeName)) continue; + if (nodeName === toNodeName) return true; + + visited.add(nodeName); + + for (const connectionType of connectionTypes) { + // Get children (forward direction) + const children = this.getChildNodes(nodeName, connectionType); + for (const childName of children) { + if (!visited.has(childName)) { + queue.push({ nodeName: childName, depth: depth + 1 }); + } + } + + // Get parents (backward direction) + const parents = this.getParentNodes(nodeName, connectionType); + for (const parentName of parents) { + if (!visited.has(parentName)) { + queue.push({ nodeName: parentName, depth: depth + 1 }); + } + } + } + } + + return false; + } } diff --git a/packages/workflow/test/common.test.ts b/packages/workflow/test/common.test.ts new file mode 100644 index 00000000000..eb1cb330108 --- /dev/null +++ b/packages/workflow/test/common.test.ts @@ -0,0 +1,112 @@ +import type { IConnections, IConnection } from '../src/interfaces'; +import { NodeConnectionTypes } from '../src/interfaces'; +import { mapConnectionsByDestination } from '../src/common'; + +describe('getConnectionsByDestination', () => { + it('should return empty object when there are no connections', () => { + const result = mapConnectionsByDestination({}); + + expect(result).toEqual({}); + }); + + it('should return connections by destination node', () => { + const connections: IConnections = { + Node1: { + [NodeConnectionTypes.Main]: [ + [ + { node: 'Node2', type: NodeConnectionTypes.Main, index: 0 }, + { node: 'Node3', type: NodeConnectionTypes.Main, index: 1 }, + ], + ], + }, + }; + const result = mapConnectionsByDestination(connections); + expect(result).toEqual({ + Node2: { + [NodeConnectionTypes.Main]: [[{ node: 'Node1', type: NodeConnectionTypes.Main, index: 0 }]], + }, + Node3: { + [NodeConnectionTypes.Main]: [ + [], + [{ node: 'Node1', type: NodeConnectionTypes.Main, index: 0 }], + ], + }, + }); + }); + + it('should handle multiple connection types', () => { + const connections: IConnections = { + Node1: { + [NodeConnectionTypes.Main]: [[{ node: 'Node2', type: NodeConnectionTypes.Main, index: 0 }]], + [NodeConnectionTypes.AiAgent]: [ + [{ node: 'Node3', type: NodeConnectionTypes.AiAgent, index: 0 }], + ], + }, + }; + + const result = mapConnectionsByDestination(connections); + expect(result).toEqual({ + Node2: { + [NodeConnectionTypes.Main]: [[{ node: 'Node1', type: NodeConnectionTypes.Main, index: 0 }]], + }, + Node3: { + [NodeConnectionTypes.AiAgent]: [ + [{ node: 'Node1', type: NodeConnectionTypes.AiAgent, index: 0 }], + ], + }, + }); + }); + + it('should handle nodes with no connections', () => { + const connections: IConnections = { + Node1: { + [NodeConnectionTypes.Main]: [[]], + }, + }; + + const result = mapConnectionsByDestination(connections); + expect(result).toEqual({}); + }); + + // @issue https://linear.app/n8n/issue/N8N-7880/cannot-load-some-templates + it('should handle nodes with null connections', () => { + const connections: IConnections = { + Node1: { + [NodeConnectionTypes.Main]: [ + null as unknown as IConnection[], + [{ node: 'Node2', type: NodeConnectionTypes.Main, index: 0 }], + ], + }, + }; + + const result = mapConnectionsByDestination(connections); + expect(result).toEqual({ + Node2: { + [NodeConnectionTypes.Main]: [[{ node: 'Node1', type: NodeConnectionTypes.Main, index: 1 }]], + }, + }); + }); + + it('should handle nodes with multiple input connections', () => { + const connections: IConnections = { + Node1: { + [NodeConnectionTypes.Main]: [[{ node: 'Node2', type: NodeConnectionTypes.Main, index: 0 }]], + }, + Node3: { + [NodeConnectionTypes.Main]: [[{ node: 'Node2', type: NodeConnectionTypes.Main, index: 0 }]], + }, + }; + + const result = mapConnectionsByDestination(connections); + expect(result).toEqual({ + Node2: { + [NodeConnectionTypes.Main]: [ + [ + { node: 'Node1', type: NodeConnectionTypes.Main, index: 0 }, + { node: 'Node3', type: NodeConnectionTypes.Main, index: 0 }, + ], + ], + }, + }); + }); +}); diff --git a/packages/workflow/test/node-helpers.test.ts b/packages/workflow/test/node-helpers.test.ts index b9e893d6260..156b7cf2dfa 100644 --- a/packages/workflow/test/node-helpers.test.ts +++ b/packages/workflow/test/node-helpers.test.ts @@ -3416,6 +3416,104 @@ describe('NodeHelpers', () => { }, }, }, + { + description: + 'fixedCollection with multipleValues: true - skip when propertyValues is not an object or is an array', + input: { + nodePropertiesArray: [ + { + displayName: 'Values', + name: 'values', + type: 'fixedCollection', + typeOptions: { + multipleValues: true, + }, + default: {}, + options: [ + { + name: 'option1', + displayName: 'Option 1', + values: [ + { + displayName: 'String', + name: 'string1', + type: 'string', + default: 'default string', + }, + ], + }, + ], + }, + ], + nodeValues: { + // This simulates when propertyValues is incorrectly set as an array instead of an object + values: [] as any, + }, + }, + output: { + noneDisplayedFalse: { + defaultsFalse: {}, + defaultsTrue: { + values: {}, + }, + }, + noneDisplayedTrue: { + defaultsFalse: {}, + defaultsTrue: { + values: {}, + }, + }, + }, + }, + { + description: + 'fixedCollection with multipleValues: true - skip when propertyValues is a string', + input: { + nodePropertiesArray: [ + { + displayName: 'Values', + name: 'values', + type: 'fixedCollection', + typeOptions: { + multipleValues: true, + }, + default: {}, + options: [ + { + name: 'option1', + displayName: 'Option 1', + values: [ + { + displayName: 'String', + name: 'string1', + type: 'string', + default: 'default string', + }, + ], + }, + ], + }, + ], + nodeValues: { + // This simulates when propertyValues is incorrectly set as a string + values: 'invalid value' as any, + }, + }, + output: { + noneDisplayedFalse: { + defaultsFalse: {}, + defaultsTrue: { + values: {}, + }, + }, + noneDisplayedTrue: { + defaultsFalse: {}, + defaultsTrue: { + values: {}, + }, + }, + }, + }, ]; for (const testData of tests) { diff --git a/packages/workflow/test/paired-item-path-detection.test.ts b/packages/workflow/test/paired-item-path-detection.test.ts new file mode 100644 index 00000000000..a1e94fc5a4b --- /dev/null +++ b/packages/workflow/test/paired-item-path-detection.test.ts @@ -0,0 +1,1233 @@ +import { NodeTypes } from './helpers'; +import { ExpressionError } from '../src/errors/expression.error'; +import type { IExecuteData, INode, IWorkflowBase, IRun, IConnections } from '../src/interfaces'; +import { NodeConnectionTypes } from '../src/interfaces'; +import { Workflow } from '../src/workflow'; +import { WorkflowDataProxy } from '../src/workflow-data-proxy'; + +describe('Paired Item Path Detection', () => { + /** + * Helper to create a minimal workflow for testing + */ + const createWorkflow = (nodes: INode[], connections: IConnections = {}): IWorkflowBase => ({ + id: '1', + name: 'test-workflow', + nodes, + connections, + active: false, + settings: {}, + isArchived: false, + updatedAt: new Date(), + createdAt: new Date(), + }); + + /** + * Helper to create a WorkflowDataProxy for testing + */ + const createProxy = ( + workflow: IWorkflowBase, + activeNodeName: string, + run?: IRun | null, + executeData?: IExecuteData, + ) => { + const wf = new Workflow({ + id: workflow.id, + name: workflow.name, + nodes: workflow.nodes, + connections: workflow.connections, + active: workflow.active, + nodeTypes: NodeTypes(), + settings: workflow.settings, + }); + + return new WorkflowDataProxy( + wf, + run?.data ?? null, + 0, // runIndex + 0, // itemIndex + activeNodeName, + [], // connectionInputData + {}, // siblingParameters + 'manual', // mode + {}, // additionalKeys + executeData, + ).getDataProxy(); + }; + + describe('AI/Tool Node Scenarios', () => { + test('should detect path in bidirectional AI/tool node setup', () => { + // Scenario: Code1 -> Vector Store <- Default Data Loader + const nodes: INode[] = [ + { + id: '1', + name: 'Code1', + type: 'n8n-nodes-base.code', + typeVersion: 1, + position: [100, 100], + parameters: {}, + }, + { + id: '2', + name: 'Vector Store', + type: 'n8n-nodes-langchain.vectorStore', + typeVersion: 1, + position: [300, 100], + parameters: {}, + }, + { + id: '3', + name: 'Default Data Loader', + type: 'n8n-nodes-langchain.documentDefaultDataLoader', + typeVersion: 1, + position: [100, 200], + parameters: {}, + }, + { + id: '4', + name: 'Code2', + type: 'n8n-nodes-base.code', + typeVersion: 1, + position: [500, 100], + parameters: { + jsCode: '// Reference Code1 using $()\nreturn $("Code1").all();', + }, + }, + ]; + + const connections = { + Code1: { + [NodeConnectionTypes.Main]: [ + [{ node: 'Vector Store', type: NodeConnectionTypes.AiVectorStore, index: 0 }], + ], + }, + 'Default Data Loader': { + [NodeConnectionTypes.Main]: [ + [{ node: 'Vector Store', type: NodeConnectionTypes.AiDocument, index: 0 }], + ], + }, + 'Vector Store': { + [NodeConnectionTypes.Main]: [ + [{ node: 'Code2', type: NodeConnectionTypes.Main, index: 0 }], + ], + }, + }; + + const workflow = createWorkflow(nodes, connections); + const wf = new Workflow({ + id: workflow.id, + name: workflow.name, + nodes: workflow.nodes, + connections: workflow.connections, + active: workflow.active, + nodeTypes: NodeTypes(), + settings: workflow.settings, + }); + + // Test bidirectional path detection + expect(wf.hasPath('Code1', 'Code2')).toBe(true); + expect(wf.hasPath('Default Data Loader', 'Code2')).toBe(true); + expect(wf.hasPath('Code1', 'Default Data Loader')).toBe(true); // Via Vector Store + + // Test that unconnected nodes return false + const unconnectedNode: INode = { + id: '5', + name: 'Unconnected', + type: 'n8n-nodes-base.code', + typeVersion: 1, + position: [700, 100], + parameters: {}, + }; + const workflowWithUnconnected = createWorkflow([...nodes, unconnectedNode], connections); + const wfWithUnconnected = new Workflow({ + id: workflowWithUnconnected.id, + name: workflowWithUnconnected.name, + nodes: workflowWithUnconnected.nodes, + connections: workflowWithUnconnected.connections, + active: workflowWithUnconnected.active, + nodeTypes: NodeTypes(), + settings: workflowWithUnconnected.settings, + }); + + expect(wfWithUnconnected.hasPath('Code1', 'Unconnected')).toBe(false); + }); + + test('should handle complex AI tool connection patterns', () => { + // More complex AI scenario with multiple connection types + const nodes: INode[] = [ + { + id: '1', + name: 'Agent', + type: 'n8n-nodes-langchain.agent', + typeVersion: 1, + position: [300, 300], + parameters: {}, + }, + { + id: '2', + name: 'Tool1', + type: 'n8n-nodes-langchain.toolHttpRequest', + typeVersion: 1, + position: [100, 200], + parameters: {}, + }, + { + id: '3', + name: 'Tool2', + type: 'n8n-nodes-langchain.toolCalculator', + typeVersion: 1, + position: [100, 400], + parameters: {}, + }, + { + id: '4', + name: 'Memory', + type: 'n8n-nodes-langchain.memoryBufferMemory', + typeVersion: 1, + position: [200, 100], + parameters: {}, + }, + ]; + + const connections = { + Tool1: { + [NodeConnectionTypes.AiTool]: [ + [{ node: 'Agent', type: NodeConnectionTypes.AiTool, index: 0 }], + ], + }, + Tool2: { + [NodeConnectionTypes.AiTool]: [ + [{ node: 'Agent', type: NodeConnectionTypes.AiTool, index: 1 }], + ], + }, + Memory: { + [NodeConnectionTypes.AiMemory]: [ + [{ node: 'Agent', type: NodeConnectionTypes.AiMemory, index: 0 }], + ], + }, + }; + + const workflow = createWorkflow(nodes, connections); + const wf = new Workflow({ + id: workflow.id, + name: workflow.name, + nodes: workflow.nodes, + connections: workflow.connections, + active: workflow.active, + nodeTypes: NodeTypes(), + settings: workflow.settings, + }); + + // Test all tools can reach the agent + expect(wf.hasPath('Tool1', 'Agent')).toBe(true); + expect(wf.hasPath('Tool2', 'Agent')).toBe(true); + expect(wf.hasPath('Memory', 'Agent')).toBe(true); + + // Test bidirectional paths + expect(wf.hasPath('Agent', 'Tool1')).toBe(true); + expect(wf.hasPath('Agent', 'Tool2')).toBe(true); + expect(wf.hasPath('Agent', 'Memory')).toBe(true); + + // Test indirect connections + expect(wf.hasPath('Tool1', 'Tool2')).toBe(true); // Via Agent + expect(wf.hasPath('Memory', 'Tool1')).toBe(true); // Via Agent + }); + }); + + describe('Manual Execution Node-Not-Found Scenarios', () => { + test('should throw "No path back to referenced node" when node does not exist in trimmed workflow', () => { + // Simulate manual execution scenario where node D is not in the trimmed workflow + const nodes: INode[] = [ + { + id: '1', + name: 'A', + type: 'n8n-nodes-base.start', + typeVersion: 1, + position: [100, 100], + parameters: {}, + }, + { + id: '2', + name: 'B', + type: 'n8n-nodes-base.code', + typeVersion: 1, + position: [300, 100], + parameters: { + jsCode: 'return $("D").all(); // Reference missing node D', + }, + }, + { + id: '3', + name: 'C', + type: 'n8n-nodes-base.code', + typeVersion: 1, + position: [500, 100], + parameters: {}, + }, + ]; + + const connections = { + A: { + [NodeConnectionTypes.Main]: [[{ node: 'B', type: NodeConnectionTypes.Main, index: 0 }]], + }, + B: { + [NodeConnectionTypes.Main]: [[{ node: 'C', type: NodeConnectionTypes.Main, index: 0 }]], + }, + }; + + const workflow = createWorkflow(nodes, connections); + const proxy = createProxy(workflow, 'B'); + + // Should throw error when trying to access non-existent node D + expect(() => proxy.$('D')).toThrowError(ExpressionError); + expect(() => proxy.$('D')).toThrow(/Error finding the referenced node/); + }); + + test('should throw "No path back to referenced node" when node exists but has no path', () => { + // Node D exists but is not connected + const nodes: INode[] = [ + { + id: '1', + name: 'A', + type: 'n8n-nodes-base.start', + typeVersion: 1, + position: [100, 100], + parameters: {}, + }, + { + id: '2', + name: 'B', + type: 'n8n-nodes-base.code', + typeVersion: 1, + position: [300, 100], + parameters: { + jsCode: 'return $("D").all(); // Reference unconnected node D', + }, + }, + { + id: '3', + name: 'C', + type: 'n8n-nodes-base.code', + typeVersion: 1, + position: [500, 100], + parameters: {}, + }, + { + id: '4', + name: 'D', + type: 'n8n-nodes-base.code', + typeVersion: 1, + position: [100, 300], + parameters: {}, + }, + ]; + + const connections = { + A: { + [NodeConnectionTypes.Main]: [[{ node: 'B', type: NodeConnectionTypes.Main, index: 0 }]], + }, + B: { + [NodeConnectionTypes.Main]: [[{ node: 'C', type: NodeConnectionTypes.Main, index: 0 }]], + }, + // D is not connected + }; + + const workflow = createWorkflow(nodes, connections); + + // Create executeData to simulate a real execution context + const executeData: IExecuteData = { + data: { + main: [[]], + }, + node: nodes.find((n) => n.name === 'B')!, + source: { + main: [ + { + previousNode: 'A', + previousNodeOutput: 0, + previousNodeRun: 0, + }, + ], + }, + }; + + const proxy = createProxy(workflow, 'B', null, executeData); + + // Should throw error when trying to access paired item from unconnected node D + let error: ExpressionError | undefined; + try { + proxy.$('D').item; + } catch (e) { + error = e as ExpressionError; + } + + expect(error).toBeDefined(); + expect(error).toBeInstanceOf(ExpressionError); + expect(error!.context.type).toBe('paired_item_no_connection'); + expect(error!.context.descriptionKey).toBe('pairedItemNoConnectionCodeNode'); + }); + }); + + describe('Workflow.hasPath method', () => { + test('should handle self-reference', () => { + const nodes: INode[] = [ + { + id: '1', + name: 'A', + type: 'n8n-nodes-base.start', + typeVersion: 1, + position: [100, 100], + parameters: {}, + }, + ]; + + const workflow = createWorkflow(nodes, {}); + const wf = new Workflow({ + id: workflow.id, + name: workflow.name, + nodes: workflow.nodes, + connections: workflow.connections, + active: workflow.active, + nodeTypes: NodeTypes(), + settings: workflow.settings, + }); + + expect(wf.hasPath('A', 'A')).toBe(true); + }); + + test('should respect maximum depth limit', () => { + const nodes: INode[] = [ + { + id: '1', + name: 'A', + type: 'n8n-nodes-base.start', + typeVersion: 1, + position: [100, 100], + parameters: {}, + }, + { + id: '2', + name: 'B', + type: 'n8n-nodes-base.code', + typeVersion: 1, + position: [300, 100], + parameters: {}, + }, + ]; + + const connections = { + A: { + [NodeConnectionTypes.Main]: [[{ node: 'B', type: NodeConnectionTypes.Main, index: 0 }]], + }, + }; + + const workflow = createWorkflow(nodes, connections); + const wf = new Workflow({ + id: workflow.id, + name: workflow.name, + nodes: workflow.nodes, + connections: workflow.connections, + active: workflow.active, + nodeTypes: NodeTypes(), + settings: workflow.settings, + }); + + // Should find path with sufficient depth + expect(wf.hasPath('A', 'B', 10)).toBe(true); + + // Should not find path with insufficient depth + expect(wf.hasPath('A', 'B', 0)).toBe(false); + }); + + test('should handle cycles without infinite loops', () => { + const nodes: INode[] = [ + { + id: '1', + name: 'A', + type: 'n8n-nodes-base.start', + typeVersion: 1, + position: [100, 100], + parameters: {}, + }, + { + id: '2', + name: 'B', + type: 'n8n-nodes-base.code', + typeVersion: 1, + position: [300, 100], + parameters: {}, + }, + { + id: '3', + name: 'C', + type: 'n8n-nodes-base.code', + typeVersion: 1, + position: [500, 100], + parameters: {}, + }, + ]; + + // Create a cycle: A -> B -> C -> A + const connections = { + A: { + [NodeConnectionTypes.Main]: [[{ node: 'B', type: NodeConnectionTypes.Main, index: 0 }]], + }, + B: { + [NodeConnectionTypes.Main]: [[{ node: 'C', type: NodeConnectionTypes.Main, index: 0 }]], + }, + C: { + [NodeConnectionTypes.Main]: [[{ node: 'A', type: NodeConnectionTypes.Main, index: 0 }]], + }, + }; + + const workflow = createWorkflow(nodes, connections); + const wf = new Workflow({ + id: workflow.id, + name: workflow.name, + nodes: workflow.nodes, + connections: workflow.connections, + active: workflow.active, + nodeTypes: NodeTypes(), + settings: workflow.settings, + }); + + // Should handle cycles correctly + expect(wf.hasPath('A', 'C')).toBe(true); + expect(wf.hasPath('B', 'A')).toBe(true); + expect(wf.hasPath('C', 'B')).toBe(true); + }); + }); + + describe('Actual workflow', () => { + test('should show correct error message for disconnected nodes', () => { + // Recreate the exact scenario from the user's workflow + const nodes: INode[] = [ + { + id: 'afc0fc26-d521-4464-9f90-3327559bd4a6', + name: 'On form submission', + type: 'n8n-nodes-base.formTrigger', + typeVersion: 2.2, + position: [0, 0], + parameters: { + formTitle: 'Submit BBS application', + }, + }, + { + id: 'c5861385-d513-4d74-8fe3-e5acbe08a90a', + name: 'Code', + type: 'n8n-nodes-base.code', + typeVersion: 2, + position: [288, 432], + parameters: { + jsCode: "\nreturn $('On form submission').all();", + }, + }, + { + id: '523b019b-e456-4784-a50a-18558c858c3b', + name: "When clicking 'Test workflow'", + type: 'n8n-nodes-base.manualTrigger', + typeVersion: 1, + position: [0, 288], + parameters: {}, + }, + { + id: '3057aebb-d87a-4142-8354-f298e41ab919', + name: 'Edit Fields', + type: 'n8n-nodes-base.set', + typeVersion: 3.4, + position: [288, 128], + parameters: { + assignments: { + assignments: [ + { + id: '9c260756-a7ce-41ba-ad9b-0eb1ceeaf02b', + name: 'test', + value: "={{ $('On form submission').item.json }}", + type: 'string', + }, + ], + }, + }, + }, + ]; + + const connections = { + 'On form submission': { + [NodeConnectionTypes.Main]: [[]], + }, + "When clicking 'Test workflow'": { + [NodeConnectionTypes.Main]: [ + [ + { node: 'Code', type: NodeConnectionTypes.Main, index: 0 }, + { node: 'Edit Fields', type: NodeConnectionTypes.Main, index: 0 }, + ], + ], + }, + }; + + const workflow = createWorkflow(nodes, connections); + const proxy = createProxy(workflow, 'Code'); + + // Should throw the correct error when trying to access disconnected node + let error: ExpressionError | undefined; + try { + proxy.$('On form submission').all(); + } catch (e) { + error = e as ExpressionError; + } + + expect(error).toBeDefined(); + expect(error).toBeInstanceOf(ExpressionError); + expect(error!.context.type).toBe('paired_item_no_connection'); + expect(error!.context.descriptionKey).toBe('pairedItemNoConnection'); + expect(error!.message).toBe('Error finding the referenced node'); + expect(error!.context.messageTemplate).toBe( + 'Make sure the node you referenced is spelled correctly and is a parent of this node', + ); + }); + + test('should also show correct error for Edit Fields node', () => { + // Test the Edit Fields node as well + const nodes: INode[] = [ + { + id: 'afc0fc26-d521-4464-9f90-3327559bd4a6', + name: 'On form submission', + type: 'n8n-nodes-base.formTrigger', + typeVersion: 2.2, + position: [0, 0], + parameters: { + formTitle: 'Submit BBS application', + }, + }, + { + id: 'c5861385-d513-4d74-8fe3-e5acbe08a90a', + name: 'Code', + type: 'n8n-nodes-base.code', + typeVersion: 2, + position: [288, 432], + parameters: { + jsCode: "\nreturn $('On form submission').all();", + }, + }, + { + id: '523b019b-e456-4784-a50a-18558c858c3b', + name: "When clicking 'Test workflow'", + type: 'n8n-nodes-base.manualTrigger', + typeVersion: 1, + position: [0, 288], + parameters: {}, + }, + { + id: '3057aebb-d87a-4142-8354-f298e41ab919', + name: 'Edit Fields', + type: 'n8n-nodes-base.set', + typeVersion: 3.4, + position: [288, 128], + parameters: { + assignments: { + assignments: [ + { + id: '9c260756-a7ce-41ba-ad9b-0eb1ceeaf02b', + name: 'test', + value: "={{ $('On form submission').item.json }}", + type: 'string', + }, + ], + }, + }, + }, + ]; + + const connections = { + 'On form submission': { + [NodeConnectionTypes.Main]: [[]], + }, + "When clicking 'Test workflow'": { + [NodeConnectionTypes.Main]: [ + [ + { node: 'Code', type: NodeConnectionTypes.Main, index: 0 }, + { node: 'Edit Fields', type: NodeConnectionTypes.Main, index: 0 }, + ], + ], + }, + }; + + const workflow = createWorkflow(nodes, connections); + const proxy = createProxy(workflow, 'Edit Fields'); + + // Should throw the correct error when trying to access disconnected node + let error: ExpressionError | undefined; + try { + proxy.$('On form submission').item; + } catch (e) { + error = e as ExpressionError; + } + + expect(error).toBeDefined(); + expect(error).toBeInstanceOf(ExpressionError); + expect(error!.context.type).toBe('paired_item_no_connection'); + expect(error!.context.descriptionKey).toBe('pairedItemNoConnection'); + expect(error!.message).toBe('Error finding the referenced node'); + expect(error!.context.messageTemplate).toBe( + 'Make sure the node you referenced is spelled correctly and is a parent of this node', + ); + }); + + test('should show correct error in runtime execution context', () => { + // Test with execution data to simulate real runtime + const nodes: INode[] = [ + { + id: 'afc0fc26-d521-4464-9f90-3327559bd4a6', + name: 'On form submission', + type: 'n8n-nodes-base.formTrigger', + typeVersion: 2.2, + position: [0, 0], + parameters: { + formTitle: 'Submit BBS application', + }, + }, + { + id: 'c5861385-d513-4d74-8fe3-e5acbe08a90a', + name: 'Code', + type: 'n8n-nodes-base.code', + typeVersion: 2, + position: [288, 432], + parameters: { + jsCode: "\nreturn $('On form submission').all();", + }, + }, + { + id: '523b019b-e456-4784-a50a-18558c858c3b', + name: "When clicking 'Test workflow'", + type: 'n8n-nodes-base.manualTrigger', + typeVersion: 1, + position: [0, 288], + parameters: {}, + }, + ]; + + const connections = { + 'On form submission': { + [NodeConnectionTypes.Main]: [[]], + }, + "When clicking 'Test workflow'": { + [NodeConnectionTypes.Main]: [ + [{ node: 'Code', type: NodeConnectionTypes.Main, index: 0 }], + ], + }, + }; + + const workflow = createWorkflow(nodes, connections); + + // Create execution data to simulate real workflow execution + const executeData: IExecuteData = { + data: { + main: [[]], + }, + node: nodes.find((n) => n.name === 'Code')!, + source: { + main: [ + { + previousNode: "When clicking 'Test workflow'", + previousNodeOutput: 0, + previousNodeRun: 0, + }, + ], + }, + }; + + const proxy = createProxy(workflow, 'Code', null, executeData); + + // Should throw the correct error when trying to access disconnected node during execution + let error: ExpressionError | undefined; + try { + proxy.$('On form submission').all(); + } catch (e) { + error = e as ExpressionError; + } + + expect(error).toBeDefined(); + expect(error).toBeInstanceOf(ExpressionError); + expect(error!.context.type).toBe('paired_item_no_connection'); + expect(error!.message).toBe('Error finding the referenced node'); + expect(error!.context.messageTemplate).toBe( + 'Make sure the node you referenced is spelled correctly and is a parent of this node', + ); + }); + }); + + describe('AI/Tool Node Path Detection Fix', () => { + test('should properly detect paths in complex Telegram workflow scenario', () => { + // Recreate the exact workflow structure from the reported issue + const nodes: INode[] = [ + { + id: 'cb00be8d-004b-4d3d-986e-60386516c67a', + name: 'Telegram Trigger', + type: 'n8n-nodes-base.telegramTrigger', + typeVersion: 1.2, + position: [0, 0], + parameters: { + updates: ['message'], + additionalFields: { download: true }, + }, + }, + { + id: 'c5bf285a-d6a5-4767-b369-a48ef504a38e', + name: 'AI Agent', + type: '@n8n/n8n-nodes-langchain.agent', + typeVersion: 2.1, + position: [208, 0], + parameters: { + promptType: 'define', + text: '={{ $json.message.text }}', + options: {}, + }, + }, + { + id: 'eab6fbe5-1998-46f8-9804-8f04147f9624', + name: 'Anthropic Chat Model', + type: '@n8n/n8n-nodes-langchain.lmChatAnthropic', + typeVersion: 1.3, + position: [32, 368], + parameters: { + model: { + __rl: true, + mode: 'list', + value: 'claude-sonnet-4-20250514', + }, + options: {}, + }, + }, + { + id: '1923ef8d-d459-4d4b-a6bb-0317ab54c2be', + name: 'Zep', + type: '@n8n/n8n-nodes-langchain.memoryZep', + typeVersion: 1.3, + position: [192, 384], + parameters: { + sessionIdType: 'customKey', + sessionKey: "={{ $('Telegram Trigger').item.json.message.chat.id }}", + }, + }, + { + id: '8015fce3-73e2-443b-8dfa-26e6effdc596', + name: 'AI Agent Tool', + type: '@n8n/n8n-nodes-langchain.agentTool', + typeVersion: 2.2, + position: [368, 208], + parameters: { + toolDescription: + 'AI Agent that can call get emails from Gmail and create drafts in Gmail', + text: "={{ $fromAI('Prompt__User_Message_', ``, 'string') }}", + options: {}, + }, + }, + { + id: '201385a6-8adb-4946-92d5-8d46267750b5', + name: 'Send a text message', + type: 'n8n-nodes-base.telegram', + typeVersion: 1.2, + position: [576, 0], + parameters: { + chatId: "={{ $('Telegram Trigger').item.json.message.chat.id }}", + text: '={{ $json.output }}', + additionalFields: { appendAttribution: false }, + }, + }, + ]; + + const connections = { + 'Telegram Trigger': { + [NodeConnectionTypes.Main]: [ + [{ node: 'AI Agent', type: NodeConnectionTypes.Main, index: 0 }], + ], + }, + 'AI Agent': { + [NodeConnectionTypes.Main]: [ + [{ node: 'Send a text message', type: NodeConnectionTypes.Main, index: 0 }], + ], + }, + 'Anthropic Chat Model': { + [NodeConnectionTypes.AiLanguageModel]: [ + [ + { node: 'AI Agent', type: NodeConnectionTypes.AiLanguageModel, index: 0 }, + { node: 'AI Agent Tool', type: NodeConnectionTypes.AiLanguageModel, index: 0 }, + ], + ], + }, + Zep: { + [NodeConnectionTypes.AiMemory]: [ + [ + { node: 'AI Agent', type: NodeConnectionTypes.AiMemory, index: 0 }, + { node: 'AI Agent Tool', type: NodeConnectionTypes.AiMemory, index: 0 }, + ], + ], + }, + 'AI Agent Tool': { + [NodeConnectionTypes.AiTool]: [ + [{ node: 'AI Agent', type: NodeConnectionTypes.AiTool, index: 0 }], + ], + }, + }; + + const workflow = createWorkflow(nodes, connections); + const wf = new Workflow({ + id: workflow.id, + name: workflow.name, + nodes: workflow.nodes, + connections: workflow.connections, + active: workflow.active, + nodeTypes: NodeTypes(), + settings: workflow.settings, + }); + + // Test the key path detections that were failing before the fix + expect(wf.hasPath('Telegram Trigger', 'Zep')).toBe(true); + expect(wf.hasPath('Telegram Trigger', 'AI Agent')).toBe(true); + expect(wf.hasPath('Telegram Trigger', 'Send a text message')).toBe(true); + expect(wf.hasPath('Telegram Trigger', 'AI Agent Tool')).toBe(true); + expect(wf.hasPath('Telegram Trigger', 'Anthropic Chat Model')).toBe(true); + + // Test reverse paths (bidirectional) + expect(wf.hasPath('Zep', 'Telegram Trigger')).toBe(true); + expect(wf.hasPath('AI Agent', 'Telegram Trigger')).toBe(true); + expect(wf.hasPath('Send a text message', 'Telegram Trigger')).toBe(true); + expect(wf.hasPath('AI Agent Tool', 'AI Agent')).toBe(true); + expect(wf.hasPath('Anthropic Chat Model', 'AI Agent')).toBe(true); + + // Test getParentMainInputNode for AI/tool nodes + const zepNode = wf.getNode('Zep'); + const zepParent = wf.getParentMainInputNode(zepNode); + expect(zepParent?.name).toBe('AI Agent'); + + const toolNode = wf.getNode('AI Agent Tool'); + const toolParent = wf.getParentMainInputNode(toolNode); + expect(toolParent?.name).toBe('AI Agent'); + + const modelNode = wf.getNode('Anthropic Chat Model'); + const modelParent = wf.getParentMainInputNode(modelNode); + expect(modelParent?.name).toBe('AI Agent'); + }); + + test('should handle getParentMainInputNode with cycle detection', () => { + // Create a scenario where AI/tool nodes could create cycles + const nodes: INode[] = [ + { + id: '1', + name: 'Agent1', + type: '@n8n/n8n-nodes-langchain.agent', + typeVersion: 2.1, + position: [100, 100], + parameters: {}, + }, + { + id: '2', + name: 'Agent2', + type: '@n8n/n8n-nodes-langchain.agent', + typeVersion: 2.1, + position: [300, 100], + parameters: {}, + }, + { + id: '3', + name: 'Tool1', + type: '@n8n/n8n-nodes-langchain.toolCalculator', + typeVersion: 1, + position: [200, 200], + parameters: {}, + }, + ]; + + // Create connections that could form a cycle + const connections = { + Agent1: { + [NodeConnectionTypes.AiTool]: [ + [{ node: 'Agent2', type: NodeConnectionTypes.AiTool, index: 0 }], + ], + }, + Agent2: { + [NodeConnectionTypes.AiTool]: [ + [{ node: 'Tool1', type: NodeConnectionTypes.AiTool, index: 0 }], + ], + }, + Tool1: { + [NodeConnectionTypes.AiTool]: [ + [{ node: 'Agent1', type: NodeConnectionTypes.AiTool, index: 0 }], + ], + }, + }; + + const workflow = createWorkflow(nodes, connections); + const wf = new Workflow({ + id: workflow.id, + name: workflow.name, + nodes: workflow.nodes, + connections: workflow.connections, + active: workflow.active, + nodeTypes: NodeTypes(), + settings: workflow.settings, + }); + + // This should not cause infinite recursion due to cycle detection + const agent1Node = wf.getNode('Agent1'); + const agent1Parent = wf.getParentMainInputNode(agent1Node); + expect(agent1Parent?.name).toBe('Agent1'); // Returns self due to cycle detection + + const tool1Node = wf.getNode('Tool1'); + const tool1Parent = wf.getParentMainInputNode(tool1Node); + expect(tool1Parent?.name).toBe('Tool1'); // Returns self due to cycle detection + }); + + test('should correctly identify parent main input nodes in complex AI scenarios', () => { + // Test complex scenario with multiple connection types + const nodes: INode[] = [ + { + id: '1', + name: 'Trigger', + type: 'n8n-nodes-base.manualTrigger', + typeVersion: 1, + position: [0, 0], + parameters: {}, + }, + { + id: '2', + name: 'MainAgent', + type: '@n8n/n8n-nodes-langchain.agent', + typeVersion: 2.1, + position: [200, 0], + parameters: {}, + }, + { + id: '3', + name: 'Memory', + type: '@n8n/n8n-nodes-langchain.memoryBufferMemory', + typeVersion: 1, + position: [100, 200], + parameters: {}, + }, + { + id: '4', + name: 'ChatModel', + type: '@n8n/n8n-nodes-langchain.lmChatOpenAi', + typeVersion: 1, + position: [300, 200], + parameters: {}, + }, + ]; + + const connections = { + Trigger: { + [NodeConnectionTypes.Main]: [ + [{ node: 'MainAgent', type: NodeConnectionTypes.Main, index: 0 }], + ], + }, + Memory: { + [NodeConnectionTypes.AiMemory]: [ + [{ node: 'MainAgent', type: NodeConnectionTypes.AiMemory, index: 0 }], + ], + }, + ChatModel: { + [NodeConnectionTypes.AiLanguageModel]: [ + [{ node: 'MainAgent', type: NodeConnectionTypes.AiLanguageModel, index: 0 }], + ], + }, + }; + + const workflow = createWorkflow(nodes, connections); + const wf = new Workflow({ + id: workflow.id, + name: workflow.name, + nodes: workflow.nodes, + connections: workflow.connections, + active: workflow.active, + nodeTypes: NodeTypes(), + settings: workflow.settings, + }); + + // Memory node should trace back to MainAgent as its parent main input + const memoryNode = wf.getNode('Memory'); + const memoryParent = wf.getParentMainInputNode(memoryNode); + expect(memoryParent?.name).toBe('MainAgent'); + + // ChatModel node should trace back to MainAgent as its parent main input + const chatModelNode = wf.getNode('ChatModel'); + const chatModelParent = wf.getParentMainInputNode(chatModelNode); + expect(chatModelParent?.name).toBe('MainAgent'); + + // MainAgent should trace back to itself (no further parent main input) + const mainAgentNode = wf.getNode('MainAgent'); + const mainAgentParent = wf.getParentMainInputNode(mainAgentNode); + expect(mainAgentParent?.name).toBe('MainAgent'); + }); + + test('should handle workflow with multiple AI connections', () => { + const nodes: INode[] = [ + { + id: '85056f63-f461-4b64-a8ca-807b019b30da', + name: 'Telegram Trigger', + type: 'n8n-nodes-base.telegramTrigger', + typeVersion: 1.2, + position: [-272, 16], + parameters: {}, + }, + { + id: '9670cb60-8926-40d0-bcba-efab28b477ee', + name: 'AI Agent', + type: '@n8n/n8n-nodes-langchain.agent', + typeVersion: 2.1, + position: [1056, 0], + parameters: {}, + }, + { + id: '7fe1aa70-3418-4ad7-940d-af0b7f9b6fb2', + name: 'Anthropic Chat Model', + type: '@n8n/n8n-nodes-langchain.lmChatAnthropic', + typeVersion: 1.3, + position: [1072, 224], + parameters: {}, + }, + { + id: 'e7820a46-6f6e-48b2-8dfe-744d3515af79', + name: 'Zep', + type: '@n8n/n8n-nodes-langchain.memoryZep', + typeVersion: 1.3, + position: [1200, 224], + parameters: {}, + }, + { + id: 'f259429d-3a70-4746-945e-c8056160408c', + name: 'Send a text message', + type: 'n8n-nodes-base.telegram', + typeVersion: 1.2, + position: [1696, 0], + parameters: {}, + }, + { + id: '92756ecf-546f-454c-9423-ae273f07a2f2', + name: 'AI Agent Tool', + type: '@n8n/n8n-nodes-langchain.agentTool', + typeVersion: 2.2, + position: [1536, 272], + parameters: {}, + }, + { + id: '193c4482-8477-4a72-9bdb-cc8dc46fe34c', + name: 'Anthropic Chat Model1', + type: '@n8n/n8n-nodes-langchain.lmChatAnthropic', + typeVersion: 1.3, + position: [1424, 480], + parameters: {}, + }, + { + id: '141264f6-dcfa-4a50-9212-a4fbc76fead6', + name: 'Switch', + type: 'n8n-nodes-base.switch', + typeVersion: 3.2, + position: [160, 16], + parameters: {}, + }, + { + id: 'b9498c03-f517-43e8-830b-7b694be1199f', + name: 'Edit Fields', + type: 'n8n-nodes-base.set', + typeVersion: 3.4, + position: [368, 112], + parameters: {}, + }, + { + id: '564bfeaf-85a6-46f7-bc00-b6ed4e305c8f', + name: 'Typing ...', + type: 'n8n-nodes-base.telegram', + typeVersion: 1.2, + position: [-64, 16], + parameters: {}, + }, + ]; + + const connections = { + 'Telegram Trigger': { + [NodeConnectionTypes.Main]: [ + [{ node: 'Typing ...', type: NodeConnectionTypes.Main, index: 0 }], + ], + }, + 'AI Agent': { + [NodeConnectionTypes.Main]: [ + [{ node: 'Send a text message', type: NodeConnectionTypes.Main, index: 0 }], + ], + }, + 'Anthropic Chat Model': { + [NodeConnectionTypes.AiLanguageModel]: [ + [{ node: 'AI Agent', type: NodeConnectionTypes.AiLanguageModel, index: 0 }], + ], + }, + Zep: { + [NodeConnectionTypes.AiMemory]: [ + [{ node: 'AI Agent', type: NodeConnectionTypes.AiMemory, index: 0 }], + ], + }, + 'Anthropic Chat Model1': { + [NodeConnectionTypes.AiLanguageModel]: [ + [{ node: 'AI Agent Tool', type: NodeConnectionTypes.AiLanguageModel, index: 0 }], + ], + }, + 'AI Agent Tool': { + [NodeConnectionTypes.AiTool]: [ + [{ node: 'AI Agent', type: NodeConnectionTypes.AiTool, index: 0 }], + ], + }, + Switch: { + [NodeConnectionTypes.Main]: [ + [{ node: 'Edit Fields', type: NodeConnectionTypes.Main, index: 1 }], + ], + }, + 'Edit Fields': { + [NodeConnectionTypes.Main]: [ + [{ node: 'AI Agent', type: NodeConnectionTypes.Main, index: 0 }], + ], + }, + 'Typing ...': { + [NodeConnectionTypes.Main]: [ + [{ node: 'Switch', type: NodeConnectionTypes.Main, index: 0 }], + ], + }, + }; + + const workflow = createWorkflow(nodes, connections); + const wf = new Workflow({ + id: workflow.id, + name: workflow.name, + nodes: workflow.nodes, + connections: workflow.connections, + active: workflow.active, + nodeTypes: NodeTypes(), + settings: workflow.settings, + }); + + // Test bidirectional path detection for the complex workflow + // Main flow: Telegram Trigger -> Typing ... -> Switch -> Edit Fields -> AI Agent -> Send a text message + expect(wf.hasPath('Telegram Trigger', 'Send a text message')).toBe(true); + expect(wf.hasPath('Typing ...', 'AI Agent')).toBe(true); + expect(wf.hasPath('Switch', 'AI Agent')).toBe(true); + expect(wf.hasPath('Edit Fields', 'AI Agent')).toBe(true); + + // Test AI connections that should be reachable via bidirectional path detection + expect(wf.hasPath('Zep', 'Send a text message')).toBe(true); // ai_memory -> AI Agent -> Send a text message + expect(wf.hasPath('Anthropic Chat Model', 'Send a text message')).toBe(true); // ai_languageModel -> AI Agent -> Send a text message + expect(wf.hasPath('AI Agent Tool', 'Send a text message')).toBe(true); // ai_tool -> AI Agent -> Send a text message + expect(wf.hasPath('Anthropic Chat Model1', 'Send a text message')).toBe(true); // ai_languageModel -> AI Agent Tool -> AI Agent -> Send a text message + + // Test WorkflowDataProxy access from 'Send a text message' to all other nodes + const proxy = createProxy(workflow, 'Send a text message'); + + // These should all work without throwing path detection errors + expect(() => proxy.$('Telegram Trigger')).not.toThrow(); + expect(() => proxy.$('Typing ...')).not.toThrow(); + expect(() => proxy.$('Switch')).not.toThrow(); + expect(() => proxy.$('Edit Fields')).not.toThrow(); + expect(() => proxy.$('AI Agent')).not.toThrow(); + expect(() => proxy.$('Zep')).not.toThrow(); + expect(() => proxy.$('Anthropic Chat Model')).not.toThrow(); + expect(() => proxy.$('AI Agent Tool')).not.toThrow(); + expect(() => proxy.$('Anthropic Chat Model1')).not.toThrow(); + }); + }); +}); diff --git a/packages/workflow/test/utils.test.ts b/packages/workflow/test/utils.test.ts index 116b911cb8d..22ff18eb037 100644 --- a/packages/workflow/test/utils.test.ts +++ b/packages/workflow/test/utils.test.ts @@ -1,5 +1,5 @@ import { ALPHABET } from '../src/constants'; -import { ApplicationError } from '../src/errors/application.error'; +import { ApplicationError } from '@n8n/errors'; import { ExecutionCancelledError } from '../src/errors/execution-cancelled.error'; import { jsonParse, diff --git a/packages/workflow/test/workflow-data-proxy.test.ts b/packages/workflow/test/workflow-data-proxy.test.ts index c4365653097..f3a8b3bc349 100644 --- a/packages/workflow/test/workflow-data-proxy.test.ts +++ b/packages/workflow/test/workflow-data-proxy.test.ts @@ -235,7 +235,7 @@ describe('WorkflowDataProxy', () => { } catch (error) { expect(error).toBeInstanceOf(ExpressionError); const exprError = error as ExpressionError; - expect(exprError.message).toEqual("Referenced node doesn't exist"); + expect(exprError.message).toEqual('Error finding the referenced node'); } }); @@ -246,7 +246,7 @@ describe('WorkflowDataProxy', () => { } catch (error) { expect(error).toBeInstanceOf(ExpressionError); const exprError = error as ExpressionError; - expect(exprError.message).toEqual('Invalid expression'); + expect(exprError.message).toEqual('Error finding the referenced node'); expect(exprError.context.type).toEqual('paired_item_no_connection'); } }); @@ -262,8 +262,8 @@ describe('WorkflowDataProxy', () => { } catch (error) { expect(error).toBeInstanceOf(ExpressionError); const exprError = error as ExpressionError; - expect(exprError.message).toEqual('Referenced node is unexecuted'); - expect(exprError.context.type).toEqual('no_node_execution_data'); + expect(exprError.message).toEqual('Error finding the referenced node'); + expect(exprError.context.type).toEqual('paired_item_no_connection'); } }); @@ -286,8 +286,10 @@ describe('WorkflowDataProxy', () => { } catch (error) { expect(error).toBeInstanceOf(ExpressionError); const exprError = error as ExpressionError; - expect(exprError.message).toEqual('Referenced node is unexecuted'); - expect(exprError.context.type).toEqual('no_node_execution_data'); + expect(exprError.message).toEqual('No execution data available'); + expect(exprError.context.messageTemplate).toEqual( + 'Execute node "Impossible if" for preview', + ); } }); @@ -826,4 +828,207 @@ describe('WorkflowDataProxy', () => { expect(proxy.$('Set main variable').item.json.main_variable).toEqual(2); }); }); + + describe('Improved error messages for missing execution data', () => { + test('should show helpful error message when accessing node without execution data', () => { + // Create a simple workflow with two connected nodes + const workflow: IWorkflowBase = { + id: '1', + name: 'test-workflow', + nodes: [ + { + id: '1', + name: 'Telegram Trigger', + type: 'n8n-nodes-base.telegramTrigger', + typeVersion: 1.2, + position: [0, 0], + parameters: {}, + }, + { + id: '2', + name: 'Send a text message', + type: 'n8n-nodes-base.telegram', + typeVersion: 1.2, + position: [576, 0], + parameters: { + chatId: "={{ $('Telegram Trigger').item.json.message.chat.id }}", + text: 'Test message', + }, + }, + ], + connections: { + 'Telegram Trigger': { + main: [[{ node: 'Send a text message', type: NodeConnectionTypes.Main, index: 0 }]], + }, + }, + active: false, + isArchived: false, + createdAt: new Date(), + updatedAt: new Date(), + }; + + // Create run data without execution data for Telegram Trigger + const run = { + data: { + resultData: { + runData: {}, // Empty - no nodes have executed + }, + }, + mode: 'manual' as const, + startedAt: new Date(), + status: 'success' as const, + }; + + const proxy = getProxyFromFixture(workflow, run, 'Send a text message'); + + // Should throw helpful error when trying to access Telegram Trigger data + let error: ExpressionError | undefined; + try { + proxy.$('Telegram Trigger').item; + } catch (e) { + error = e as ExpressionError; + } + + expect(error).toBeDefined(); + expect(error).toBeInstanceOf(ExpressionError); + expect(error!.message).toBe('No execution data available'); + expect(error!.context.messageTemplate).toBe('Execute node "Telegram Trigger" for preview'); + expect(error!.context.nodeCause).toBe('Telegram Trigger'); + }); + + test('should show helpful error message for different node names', () => { + const workflow: IWorkflowBase = { + id: '1', + name: 'test-workflow', + nodes: [ + { + id: '1', + name: 'HTTP Request', + type: 'n8n-nodes-base.httpRequest', + typeVersion: 1, + position: [0, 0], + parameters: {}, + }, + { + id: '2', + name: 'Process Data', + type: 'n8n-nodes-base.code', + typeVersion: 2, + position: [300, 0], + parameters: { + jsCode: "return $('HTTP Request').all();", + }, + }, + ], + connections: { + 'HTTP Request': { + main: [[{ node: 'Process Data', type: NodeConnectionTypes.Main, index: 0 }]], + }, + }, + active: false, + isArchived: false, + createdAt: new Date(), + updatedAt: new Date(), + }; + + const run = { + data: { + resultData: { + runData: {}, // Empty - no nodes have executed + }, + }, + mode: 'manual' as const, + startedAt: new Date(), + status: 'success' as const, + }; + + const proxy = getProxyFromFixture(workflow, run, 'Process Data'); + + let error: ExpressionError | undefined; + try { + proxy.$('HTTP Request').item; + } catch (e) { + error = e as ExpressionError; + } + + expect(error).toBeDefined(); + expect(error!.context.messageTemplate).toBe('Execute node "HTTP Request" for preview'); + expect(error!.context.nodeCause).toBe('HTTP Request'); + }); + + test('should use improved error for first(), last(), and all() methods', () => { + const workflow: IWorkflowBase = { + id: '1', + name: 'test-workflow', + nodes: [ + { + id: '1', + name: 'Start Node', + type: 'n8n-nodes-base.manualTrigger', + typeVersion: 1, + position: [0, 0], + parameters: {}, + }, + { + id: '2', + name: 'End Node', + type: 'n8n-nodes-base.noOp', + typeVersion: 1, + position: [300, 0], + parameters: {}, + }, + ], + connections: { + 'Start Node': { + main: [[{ node: 'End Node', type: NodeConnectionTypes.Main, index: 0 }]], + }, + }, + active: false, + isArchived: false, + createdAt: new Date(), + updatedAt: new Date(), + }; + + const run = { + data: { + resultData: { + runData: {}, // Empty - no nodes have executed + }, + }, + mode: 'manual' as const, + startedAt: new Date(), + status: 'success' as const, + }; + + const proxy = getProxyFromFixture(workflow, run, 'End Node'); + + // Test first() method + let error: ExpressionError | undefined; + try { + proxy.$('Start Node').first(); + } catch (e) { + error = e as ExpressionError; + } + expect(error).toBeDefined(); + expect(error!.context.messageTemplate).toBe('Execute node "Start Node" for preview'); + + // Test last() method + try { + proxy.$('Start Node').last(); + } catch (e) { + error = e as ExpressionError; + } + expect(error).toBeDefined(); + expect(error!.context.messageTemplate).toBe('Execute node "Start Node" for preview'); + + // Test all() method + try { + proxy.$('Start Node').all(); + } catch (e) { + error = e as ExpressionError; + } + expect(error).toBeDefined(); + expect(error!.context.messageTemplate).toBe('Execute node "Start Node" for preview'); + }); + }); }); diff --git a/packages/workflow/test/workflow.test.ts b/packages/workflow/test/workflow.test.ts index 0c37c3a02fc..02cf9873b1b 100644 --- a/packages/workflow/test/workflow.test.ts +++ b/packages/workflow/test/workflow.test.ts @@ -2106,127 +2106,6 @@ describe('Workflow', () => { }); }); - describe('getConnectionsByDestination', () => { - it('should return empty object when there are no connections', () => { - const result = Workflow.getConnectionsByDestination({}); - - expect(result).toEqual({}); - }); - - it('should return connections by destination node', () => { - const connections: IConnections = { - Node1: { - [NodeConnectionTypes.Main]: [ - [ - { node: 'Node2', type: NodeConnectionTypes.Main, index: 0 }, - { node: 'Node3', type: NodeConnectionTypes.Main, index: 1 }, - ], - ], - }, - }; - const result = Workflow.getConnectionsByDestination(connections); - expect(result).toEqual({ - Node2: { - [NodeConnectionTypes.Main]: [ - [{ node: 'Node1', type: NodeConnectionTypes.Main, index: 0 }], - ], - }, - Node3: { - [NodeConnectionTypes.Main]: [ - [], - [{ node: 'Node1', type: NodeConnectionTypes.Main, index: 0 }], - ], - }, - }); - }); - - it('should handle multiple connection types', () => { - const connections: IConnections = { - Node1: { - [NodeConnectionTypes.Main]: [ - [{ node: 'Node2', type: NodeConnectionTypes.Main, index: 0 }], - ], - [NodeConnectionTypes.AiAgent]: [ - [{ node: 'Node3', type: NodeConnectionTypes.AiAgent, index: 0 }], - ], - }, - }; - - const result = Workflow.getConnectionsByDestination(connections); - expect(result).toEqual({ - Node2: { - [NodeConnectionTypes.Main]: [ - [{ node: 'Node1', type: NodeConnectionTypes.Main, index: 0 }], - ], - }, - Node3: { - [NodeConnectionTypes.AiAgent]: [ - [{ node: 'Node1', type: NodeConnectionTypes.AiAgent, index: 0 }], - ], - }, - }); - }); - - it('should handle nodes with no connections', () => { - const connections: IConnections = { - Node1: { - [NodeConnectionTypes.Main]: [[]], - }, - }; - - const result = Workflow.getConnectionsByDestination(connections); - expect(result).toEqual({}); - }); - - // @issue https://linear.app/n8n/issue/N8N-7880/cannot-load-some-templates - it('should handle nodes with null connections', () => { - const connections: IConnections = { - Node1: { - [NodeConnectionTypes.Main]: [ - null as unknown as IConnection[], - [{ node: 'Node2', type: NodeConnectionTypes.Main, index: 0 }], - ], - }, - }; - - const result = Workflow.getConnectionsByDestination(connections); - expect(result).toEqual({ - Node2: { - [NodeConnectionTypes.Main]: [ - [{ node: 'Node1', type: NodeConnectionTypes.Main, index: 1 }], - ], - }, - }); - }); - - it('should handle nodes with multiple input connections', () => { - const connections: IConnections = { - Node1: { - [NodeConnectionTypes.Main]: [ - [{ node: 'Node2', type: NodeConnectionTypes.Main, index: 0 }], - ], - }, - Node3: { - [NodeConnectionTypes.Main]: [ - [{ node: 'Node2', type: NodeConnectionTypes.Main, index: 0 }], - ], - }, - }; - - const result = Workflow.getConnectionsByDestination(connections); - expect(result).toEqual({ - Node2: { - [NodeConnectionTypes.Main]: [ - [ - { node: 'Node1', type: NodeConnectionTypes.Main, index: 0 }, - { node: 'Node3', type: NodeConnectionTypes.Main, index: 0 }, - ], - ], - }, - }); - }); - }); - describe('getHighestNode', () => { const createNode = (name: string, disabled = false) => ({ @@ -2483,6 +2362,479 @@ describe('Workflow', () => { const result = WORKFLOW_WITH_LOOPS.getParentMainInputNode(set1Node); expect(result).toBe(set1Node); }); + + describe('nodes with only main outputs', () => { + test('should return the same node when it only has main outputs', () => { + const nodes: INode[] = [ + { + id: '1', + name: 'SimpleNode', + type: 'test.set', + typeVersion: 1, + position: [100, 100], + parameters: {}, + }, + { + id: '2', + name: 'TargetNode', + type: 'test.set', + typeVersion: 1, + position: [200, 100], + parameters: {}, + }, + ]; + + const connections = { + SimpleNode: { + [NodeConnectionTypes.Main]: [ + [{ node: 'TargetNode', type: NodeConnectionTypes.Main, index: 0 }], + ], + }, + }; + + const workflow = new Workflow({ + id: 'test', + nodes, + connections, + active: false, + nodeTypes, + }); + + const simpleNode = workflow.getNode('SimpleNode')!; + const result = workflow.getParentMainInputNode(simpleNode); + + expect(result).toBe(simpleNode); + expect(result!.name).toBe('SimpleNode'); + }); + + test('should return the same node when it has no connections', () => { + const workflow = new Workflow({ + id: 'test', + nodes: [ + { + id: '1', + name: 'IsolatedNode', + type: 'test.set', + typeVersion: 1, + position: [100, 100], + parameters: {}, + }, + ], + connections: {}, + active: false, + nodeTypes, + }); + + const isolatedNode = workflow.getNode('IsolatedNode')!; + const result = workflow.getParentMainInputNode(isolatedNode); + + expect(result).toBe(isolatedNode); + expect(result!.name).toBe('IsolatedNode'); + }); + }); + + describe('nodes with non-main outputs (AI/Tool connections)', () => { + test('should follow AI tool connection to find main input node', () => { + const workflow = new Workflow({ + id: 'test', + nodes: [ + { + id: '1', + name: 'ToolNode', + type: 'test.set', + typeVersion: 1, + position: [100, 100], + parameters: {}, + }, + { + id: '2', + name: 'AgentNode', + type: 'test.set', + typeVersion: 1, + position: [200, 100], + parameters: {}, + }, + ], + connections: { + ToolNode: { + [NodeConnectionTypes.AiTool]: [ + [{ node: 'AgentNode', type: NodeConnectionTypes.AiTool, index: 0 }], + ], + }, + }, + active: false, + nodeTypes, + }); + + const toolNode = workflow.getNode('ToolNode')!; + const result = workflow.getParentMainInputNode(toolNode); + + expect(result!.name).toBe('AgentNode'); + }); + + test('should follow AI memory connection to find main input node', () => { + const workflow = new Workflow({ + id: 'test', + nodes: [ + { + id: '1', + name: 'MemoryNode', + type: 'test.set', + typeVersion: 1, + position: [100, 100], + parameters: {}, + }, + { + id: '2', + name: 'ChatNode', + type: 'test.set', + typeVersion: 1, + position: [200, 100], + parameters: {}, + }, + ], + connections: { + MemoryNode: { + [NodeConnectionTypes.AiMemory]: [ + [{ node: 'ChatNode', type: NodeConnectionTypes.AiMemory, index: 0 }], + ], + }, + }, + active: false, + nodeTypes, + }); + + const memoryNode = workflow.getNode('MemoryNode')!; + const result = workflow.getParentMainInputNode(memoryNode); + + expect(result!.name).toBe('ChatNode'); + }); + + test('should handle mixed main and non-main outputs', () => { + const workflow = new Workflow({ + id: 'test', + nodes: [ + { + id: '1', + name: 'MixedNode', + type: 'test.set', + typeVersion: 1, + position: [100, 100], + parameters: {}, + }, + { + id: '2', + name: 'MainTarget', + type: 'test.set', + typeVersion: 1, + position: [200, 100], + parameters: {}, + }, + { + id: '3', + name: 'ToolTarget', + type: 'test.set', + typeVersion: 1, + position: [200, 200], + parameters: {}, + }, + ], + connections: { + MixedNode: { + [NodeConnectionTypes.Main]: [ + [{ node: 'MainTarget', type: NodeConnectionTypes.Main, index: 0 }], + ], + [NodeConnectionTypes.AiTool]: [ + [{ node: 'ToolTarget', type: NodeConnectionTypes.AiTool, index: 0 }], + ], + }, + }, + active: false, + nodeTypes, + }); + + const mixedNode = workflow.getNode('MixedNode')!; + const result = workflow.getParentMainInputNode(mixedNode); + + // Should follow the first non-main connection (AiTool) + expect(result!.name).toBe('ToolTarget'); + }); + }); + + describe('chain traversal scenarios', () => { + test('should follow a chain of AI connections until reaching main input node', () => { + const workflow = new Workflow({ + id: 'test', + nodes: [ + { + id: '1', + name: 'StartTool', + type: 'test.set', + typeVersion: 1, + position: [100, 100], + parameters: {}, + }, + { + id: '2', + name: 'MiddleTool', + type: 'test.set', + typeVersion: 1, + position: [200, 100], + parameters: {}, + }, + { + id: '3', + name: 'FinalAgent', + type: 'test.set', + typeVersion: 1, + position: [300, 100], + parameters: {}, + }, + ], + connections: { + StartTool: { + [NodeConnectionTypes.AiTool]: [ + [{ node: 'MiddleTool', type: NodeConnectionTypes.AiTool, index: 0 }], + ], + }, + MiddleTool: { + [NodeConnectionTypes.AiTool]: [ + [{ node: 'FinalAgent', type: NodeConnectionTypes.AiTool, index: 0 }], + ], + }, + }, + active: false, + nodeTypes, + }); + + const startTool = workflow.getNode('StartTool')!; + const result = workflow.getParentMainInputNode(startTool); + + expect(result!.name).toBe('FinalAgent'); + }); + + test('should handle chain that ends with a node having only main outputs', () => { + const workflow = new Workflow({ + id: 'test', + nodes: [ + { + id: '1', + name: 'ToolNode', + type: 'test.set', + typeVersion: 1, + position: [100, 100], + parameters: {}, + }, + { + id: '2', + name: 'IntermediateNode', + type: 'test.set', + typeVersion: 1, + position: [200, 100], + parameters: {}, + }, + { + id: '3', + name: 'EndNode', + type: 'test.set', + typeVersion: 1, + position: [300, 100], + parameters: {}, + }, + ], + connections: { + ToolNode: { + [NodeConnectionTypes.AiTool]: [ + [{ node: 'IntermediateNode', type: NodeConnectionTypes.AiTool, index: 0 }], + ], + }, + IntermediateNode: { + [NodeConnectionTypes.Main]: [ + [{ node: 'EndNode', type: NodeConnectionTypes.Main, index: 0 }], + ], + }, + }, + active: false, + nodeTypes, + }); + + const toolNode = workflow.getNode('ToolNode')!; + const result = workflow.getParentMainInputNode(toolNode); + + expect(result!.name).toBe('IntermediateNode'); + }); + + test('should handle complex multi-branch AI connections', () => { + const workflow = new Workflow({ + id: 'test', + nodes: [ + { + id: '1', + name: 'MultiTool', + type: 'test.set', + typeVersion: 1, + position: [100, 100], + parameters: {}, + }, + { + id: '2', + name: 'Agent1', + type: 'test.set', + typeVersion: 1, + position: [200, 50], + parameters: {}, + }, + { + id: '3', + name: 'Agent2', + type: 'test.set', + typeVersion: 1, + position: [200, 150], + parameters: {}, + }, + ], + connections: { + MultiTool: { + [NodeConnectionTypes.AiTool]: [ + [ + { node: 'Agent1', type: NodeConnectionTypes.AiTool, index: 0 }, + { node: 'Agent2', type: NodeConnectionTypes.AiTool, index: 0 }, + ], + ], + }, + }, + active: false, + nodeTypes, + }); + + const multiTool = workflow.getNode('MultiTool')!; + const result = workflow.getParentMainInputNode(multiTool); + + // Should follow the first connection in the array + expect(result!.name).toBe('Agent1'); + }); + }); + + describe('edge cases', () => { + test('should handle null node input', () => { + const workflow = new Workflow({ + id: 'test', + nodes: [], + connections: {}, + active: false, + nodeTypes, + }); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + const result = workflow.getParentMainInputNode(null as any); + expect(result).toBeNull(); + }); + + test('should handle undefined node input', () => { + const workflow = new Workflow({ + id: 'test', + nodes: [], + connections: {}, + active: false, + nodeTypes, + }); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + const result = workflow.getParentMainInputNode(undefined as any); + expect(result).toBeUndefined(); + }); + + test('should throw error when connected node does not exist in workflow', () => { + const workflow = new Workflow({ + id: 'test', + nodes: [ + { + id: '1', + name: 'ToolNode', + type: 'test.set', + typeVersion: 1, + position: [100, 100], + parameters: {}, + }, + ], + connections: { + ToolNode: { + [NodeConnectionTypes.AiTool]: [ + [{ node: 'NonExistentNode', type: NodeConnectionTypes.AiTool, index: 0 }], + ], + }, + }, + active: false, + nodeTypes, + }); + + const toolNode = workflow.getNode('ToolNode')!; + + expect(() => { + workflow.getParentMainInputNode(toolNode); + }).toThrow('Node "NonExistentNode" not found'); + }); + + test('should handle empty connection arrays', () => { + const workflow = new Workflow({ + id: 'test', + nodes: [ + { + id: '1', + name: 'EmptyConnectionNode', + type: 'test.set', + typeVersion: 1, + position: [100, 100], + parameters: {}, + }, + ], + connections: { + EmptyConnectionNode: { + [NodeConnectionTypes.AiTool]: [ + [], // Empty connection array + ], + }, + }, + active: false, + nodeTypes, + }); + + const emptyConnectionNode = workflow.getNode('EmptyConnectionNode')!; + const result = workflow.getParentMainInputNode(emptyConnectionNode); + + expect(result).toBe(emptyConnectionNode); + }); + + test('should handle null connections in connection array', () => { + const workflow = new Workflow({ + id: 'test', + nodes: [ + { + id: '1', + name: 'NullConnectionNode', + type: 'test.set', + typeVersion: 1, + position: [100, 100], + parameters: {}, + }, + ], + connections: { + NullConnectionNode: { + [NodeConnectionTypes.AiTool]: [ + [{ node: '', type: NodeConnectionTypes.AiTool, index: 0 }], // Connection with empty node name + ], + }, + }, + active: false, + nodeTypes, + }); + + const nullConnectionNode = workflow.getNode('NullConnectionNode')!; + const result = workflow.getParentMainInputNode(nullConnectionNode); + + expect(result).toBe(nullConnectionNode); + }); + }); }); describe('getNodeConnectionIndexes', () => { @@ -2890,4 +3242,346 @@ describe('Workflow', () => { expect(result).toEqual([]); }); }); + + describe('hasPath method', () => { + test('should return true for self-reference', () => { + const workflow = new Workflow({ + id: 'test', + nodes: [ + { + id: 'Node1', + name: 'Node1', + type: 'test.set', + typeVersion: 1, + position: [0, 0], + parameters: {}, + }, + ], + connections: {}, + active: false, + nodeTypes, + }); + + expect(workflow.hasPath('Node1', 'Node1')).toBe(true); + }); + + test('should return false when nodes are not connected', () => { + const workflow = new Workflow({ + id: 'test', + nodes: [ + { + id: 'Node1', + name: 'Node1', + type: 'test.set', + typeVersion: 1, + position: [0, 0], + parameters: {}, + }, + { + id: 'Node2', + name: 'Node2', + type: 'test.set', + typeVersion: 1, + position: [100, 0], + parameters: {}, + }, + ], + connections: {}, + active: false, + nodeTypes, + }); + + expect(workflow.hasPath('Node1', 'Node2')).toBe(false); + }); + + test('should return true for directly connected nodes', () => { + const workflow = new Workflow({ + id: 'test', + nodes: [ + { + id: 'Node1', + name: 'Node1', + type: 'test.set', + typeVersion: 1, + position: [0, 0], + parameters: {}, + }, + { + id: 'Node2', + name: 'Node2', + type: 'test.set', + typeVersion: 1, + position: [100, 0], + parameters: {}, + }, + ], + connections: { + Node1: { + [NodeConnectionTypes.Main]: [ + [{ node: 'Node2', type: NodeConnectionTypes.Main, index: 0 }], + ], + }, + }, + active: false, + nodeTypes, + }); + + expect(workflow.hasPath('Node1', 'Node2')).toBe(true); + expect(workflow.hasPath('Node2', 'Node1')).toBe(true); + }); + + test('should respect maximum depth limit', () => { + const workflow = new Workflow({ + id: 'test', + nodes: [ + { + id: 'Node1', + name: 'Node1', + type: 'test.set', + typeVersion: 1, + position: [0, 0], + parameters: {}, + }, + { + id: 'Node2', + name: 'Node2', + type: 'test.set', + typeVersion: 1, + position: [100, 0], + parameters: {}, + }, + ], + connections: { + Node1: { + [NodeConnectionTypes.Main]: [ + [{ node: 'Node2', type: NodeConnectionTypes.Main, index: 0 }], + ], + }, + }, + active: false, + nodeTypes, + }); + + // Should find path with sufficient depth + expect(workflow.hasPath('Node1', 'Node2', 5)).toBe(true); + expect(workflow.hasPath('Node1', 'Node2', 1)).toBe(true); + + // Should not find path with insufficient depth + expect(workflow.hasPath('Node1', 'Node2', 0)).toBe(false); + }); + + test('should handle AI connection types', () => { + const workflow = new Workflow({ + id: 'test', + nodes: [ + { + id: 'Agent', + name: 'Agent', + type: 'test.ai.agent', + typeVersion: 1, + position: [0, 0], + parameters: {}, + }, + { + id: 'Tool1', + name: 'Tool1', + type: 'test.ai.tool', + typeVersion: 1, + position: [100, 0], + parameters: {}, + }, + { + id: 'Memory', + name: 'Memory', + type: 'test.ai.memory', + typeVersion: 1, + position: [200, 0], + parameters: {}, + }, + ], + connections: { + Tool1: { + [NodeConnectionTypes.AiTool]: [ + [{ node: 'Agent', type: NodeConnectionTypes.AiTool, index: 0 }], + ], + }, + Memory: { + [NodeConnectionTypes.AiMemory]: [ + [{ node: 'Agent', type: NodeConnectionTypes.AiMemory, index: 0 }], + ], + }, + }, + active: false, + nodeTypes, + }); + + expect(workflow.hasPath('Tool1', 'Agent')).toBe(true); + expect(workflow.hasPath('Memory', 'Agent')).toBe(true); + expect(workflow.hasPath('Tool1', 'Memory')).toBe(true); + }); + + test('should handle complex paths with multiple connection types', () => { + const workflow = new Workflow({ + id: 'test', + nodes: [ + { + id: 'Start', + name: 'Start', + type: 'test.start', + typeVersion: 1, + position: [0, 0], + parameters: {}, + }, + { + id: 'VectorStore', + name: 'VectorStore', + type: 'test.vectorstore', + typeVersion: 1, + position: [100, 0], + parameters: {}, + }, + { + id: 'Document', + name: 'Document', + type: 'test.document', + typeVersion: 1, + position: [200, 0], + parameters: {}, + }, + { + id: 'End', + name: 'End', + type: 'test.end', + typeVersion: 1, + position: [300, 0], + parameters: {}, + }, + ], + connections: { + Start: { + [NodeConnectionTypes.Main]: [ + [{ node: 'VectorStore', type: NodeConnectionTypes.AiVectorStore, index: 0 }], + ], + }, + Document: { + [NodeConnectionTypes.Main]: [ + [{ node: 'VectorStore', type: NodeConnectionTypes.AiDocument, index: 0 }], + ], + }, + VectorStore: { + [NodeConnectionTypes.Main]: [ + [{ node: 'End', type: NodeConnectionTypes.Main, index: 0 }], + ], + }, + }, + active: false, + nodeTypes, + }); + + expect(workflow.hasPath('Start', 'End')).toBe(true); + expect(workflow.hasPath('Document', 'End')).toBe(true); + expect(workflow.hasPath('Start', 'Document')).toBe(true); + }); + + test('should handle cyclic graphs without infinite loops', () => { + const workflow = new Workflow({ + id: 'test', + nodes: [ + { + id: 'Node1', + name: 'Node1', + type: 'test.set', + typeVersion: 1, + position: [0, 0], + parameters: {}, + }, + { + id: 'Node2', + name: 'Node2', + type: 'test.set', + typeVersion: 1, + position: [100, 0], + parameters: {}, + }, + { + id: 'Node3', + name: 'Node3', + type: 'test.set', + typeVersion: 1, + position: [200, 0], + parameters: {}, + }, + ], + connections: { + Node1: { + [NodeConnectionTypes.Main]: [ + [{ node: 'Node2', type: NodeConnectionTypes.Main, index: 0 }], + ], + }, + Node2: { + [NodeConnectionTypes.Main]: [ + [{ node: 'Node3', type: NodeConnectionTypes.Main, index: 0 }], + ], + }, + Node3: { + [NodeConnectionTypes.Main]: [ + [{ node: 'Node1', type: NodeConnectionTypes.Main, index: 0 }], + ], + }, + }, + active: false, + nodeTypes, + }); + + expect(workflow.hasPath('Node1', 'Node3')).toBe(true); + expect(workflow.hasPath('Node2', 'Node1')).toBe(true); + expect(workflow.hasPath('Node3', 'Node2')).toBe(true); + }); + + test('should handle empty workflow', () => { + const workflow = new Workflow({ + id: 'test', + nodes: [], + connections: {}, + active: false, + nodeTypes, + }); + + expect(workflow.hasPath('NonExistent1', 'NonExistent2')).toBe(false); + }); + + test('should handle nodes with no outgoing connections', () => { + const workflow = new Workflow({ + id: 'test', + nodes: [ + { + id: 'Node1', + name: 'Node1', + type: 'test.set', + typeVersion: 1, + position: [0, 0], + parameters: {}, + }, + { + id: 'Node2', + name: 'Node2', + type: 'test.set', + typeVersion: 1, + position: [100, 0], + parameters: {}, + }, + ], + connections: { + Node1: { + [NodeConnectionTypes.Main]: [[]], + }, + }, + active: false, + nodeTypes, + }); + + expect(workflow.hasPath('Node1', 'Node2')).toBe(false); + expect(workflow.hasPath('Node2', 'Node1')).toBe(false); + }); + }); }); diff --git a/patches/@lezer__highlight.patch b/patches/@lezer__highlight.patch new file mode 100644 index 00000000000..f7b5f5a4f84 --- /dev/null +++ b/patches/@lezer__highlight.patch @@ -0,0 +1,12 @@ +diff --git a/package.json b/package.json +index 2d52edb23f0c7defdfbf5f95ad1ee1fa75672b41..8d9dcbdc07cb5c73e629e22696235b19db98940d 100644 +--- a/package.json ++++ b/package.json +@@ -5,6 +5,7 @@ + "main": "dist/index.cjs", + "type": "module", + "exports": { ++ "types": "./dist/highlight.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.cjs" + }, diff --git a/patches/v-code-diff.patch b/patches/v-code-diff.patch new file mode 100644 index 00000000000..c8523bb9e58 --- /dev/null +++ b/patches/v-code-diff.patch @@ -0,0 +1,21 @@ +diff --git a/package.json b/package.json +index 7dc91b25fae9cd1e81afa279629b6e2ffa80fa77..8cd22b5a1fa243e1048211a297c645806723df04 100644 +--- a/package.json ++++ b/package.json +@@ -7,12 +7,12 @@ + "exports": { + ".": { + "types": "./types/index.d.ts", +- "import": "./dist/index.es.js", +- "require": "./dist/index.cjs.js" ++ "import": "./dist/v3/index.es.js", ++ "require": "./dist/v3/index.cjs.js" + } + }, +- "main": "dist/index.cjs", +- "module": "dist/index.es.js", ++ "main": "dist/v3/index.cjs", ++ "module": "dist/v3/index.es.js", + "types": "./types/index.d.ts", + "files": [ + "dist", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d031341d28e..2e00693ebbd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,8 +25,8 @@ catalogs: specifier: 1.15.0 version: 1.15.0 '@sentry/node': - specifier: 8.52.1 - version: 8.52.1 + specifier: ^9.42.1 + version: 9.42.1 '@types/basic-auth': specifier: ^1.1.3 version: 1.1.3 @@ -66,9 +66,6 @@ catalogs: flatted: specifier: 3.2.7 version: 3.2.7 - form-data: - specifier: 4.0.0 - version: 4.0.0 http-proxy-agent: specifier: 7.0.2 version: 7.0.2 @@ -134,8 +131,8 @@ catalogs: version: 3.23.3 frontend: '@sentry/vue': - specifier: ^8.33.1 - version: 8.33.1 + specifier: ^9.42.1 + version: 9.42.1 '@testing-library/jest-dom': specifier: ^6.6.3 version: 6.6.3 @@ -184,10 +181,11 @@ catalogs: overrides: '@azure/identity': ^4.3.0 + '@n8n/typeorm>@sentry/node': ^9.42.1 '@types/node': ^20.17.50 chokidar: ^4.0.1 esbuild: ^0.24.0 - multer: ^2.0.1 + multer: ^2.0.2 prebuild-install: 7.1.3 pug: ^3.0.3 semver: ^7.5.4 @@ -202,8 +200,12 @@ overrides: brace-expansion@2: 2.0.2 date-fns: 2.30.0 date-fns-tz: 2.0.0 + form-data: 4.0.4 patchedDependencies: + '@lezer/highlight': + hash: 97f85e6fe46f23015ea0dd420e33d584bc2dc71633910cf131321da31b27ca8c + path: patches/@lezer__highlight.patch '@types/express-serve-static-core@5.0.6': hash: d602248fcd302cf5a794d1e85a411633ba9635ea5d566d6f2e0429c7ae0fa3eb path: patches/@types__express-serve-static-core@5.0.6.patch @@ -234,6 +236,9 @@ patchedDependencies: pkce-challenge@5.0.0: hash: 651e785d0b7bbf5be9210e1e895c39a16dc3ce8a5a3843b4819565fb6e175b90 path: patches/pkce-challenge@5.0.0.patch + v-code-diff: + hash: 21588de80e591bbc1e5a068d9bce311db5254686443652945d2c7887fdafe9d9 + path: patches/v-code-diff.patch vue-tsc@2.2.8: hash: e2aee939ccac8a57fe449bfd92bedd8117841579526217bc39aca26c6b8c317f path: patches/vue-tsc@2.2.8.patch @@ -386,16 +391,16 @@ importers: dependencies: '@langchain/anthropic': specifier: 'catalog:' - version: 0.3.23(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) + version: 0.3.23(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) '@langchain/core': specifier: 'catalog:' - version: 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + version: 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) '@langchain/langgraph': specifier: 0.2.74 - version: 0.2.74(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(react@18.2.0)(zod-to-json-schema@3.24.5(zod@3.25.67)) + version: 0.2.74(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(react@18.2.0)(zod-to-json-schema@3.24.5(zod@3.25.67)) '@langchain/openai': specifier: 'catalog:' - version: 0.5.16(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(ws@8.18.2) + version: 0.5.16(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(ws@8.18.2) '@n8n/backend-common': specifier: workspace:^ version: link:../backend-common @@ -410,7 +415,7 @@ importers: version: 1.15.0 langsmith: specifier: ^0.3.45 - version: 0.3.45(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + version: 0.3.45(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) n8n-workflow: specifier: workspace:* version: link:../../workflow @@ -497,10 +502,19 @@ importers: winston: specifier: 3.14.2 version: 3.14.2 + yargs-parser: + specifier: 21.1.1 + version: 21.1.1 devDependencies: '@n8n/typescript-config': specifier: workspace:* version: link:../typescript-config + '@types/yargs-parser': + specifier: 21.0.0 + version: 21.0.0 + zod: + specifier: 'catalog:' + version: 3.25.67 packages/@n8n/backend-test-utils: dependencies: @@ -524,7 +538,7 @@ importers: version: link:../permissions '@n8n/typeorm': specifier: 'catalog:' - version: 0.3.20-12(@sentry/node@8.52.1)(ioredis@5.3.2)(mssql@10.0.2)(mysql2@3.11.0)(pg@8.12.0)(redis@4.6.14)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) + version: 0.3.20-12(@sentry/node@9.42.1)(ioredis@5.3.2)(mssql@10.0.2)(mysql2@3.11.0)(pg@8.12.0)(redis@4.6.14)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) jest-mock-extended: specifier: ^3.0.4 version: 3.0.4(jest@29.6.2(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)))(typescript@5.8.3) @@ -587,7 +601,7 @@ importers: version: 6.9.3 '@lezer/highlight': specifier: '*' - version: 1.1.1 + version: 1.1.1(patch_hash=97f85e6fe46f23015ea0dd420e33d584bc2dc71633910cf131321da31b27ca8c) '@lezer/lr': specifier: ^1.4.0 version: 1.4.0 @@ -621,6 +635,12 @@ importers: specifier: workspace:* version: link:../typescript-config + packages/@n8n/create-node: + dependencies: + '@n8n/node-cli': + specifier: workspace:* + version: link:../node-cli + packages/@n8n/db: dependencies: '@n8n/api-types': @@ -646,7 +666,7 @@ importers: version: link:../permissions '@n8n/typeorm': specifier: 'catalog:' - version: 0.3.20-12(@sentry/node@8.52.1)(ioredis@5.3.2)(mssql@10.0.2)(mysql2@3.11.0)(pg@8.12.0)(redis@4.6.14)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) + version: 0.3.20-12(@sentry/node@9.42.1)(ioredis@5.3.2)(mssql@10.0.2)(mysql2@3.11.0)(pg@8.12.0)(redis@4.6.14)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) class-validator: specifier: 0.14.0 version: 0.14.0 @@ -727,10 +747,17 @@ importers: version: link:../typescript-config packages/@n8n/errors: + dependencies: + callsites: + specifier: 'catalog:' + version: 3.1.0 devDependencies: '@n8n/typescript-config': specifier: workspace:* version: link:../typescript-config + '@sentry/node': + specifier: 'catalog:' + version: 9.42.1 packages/@n8n/eslint-config: dependencies: @@ -891,6 +918,25 @@ importers: specifier: 'catalog:' version: 3.25.67 + packages/@n8n/node-cli: + dependencies: + '@oclif/core': + specifier: ^4.5.2 + version: 4.5.2 + prompts: + specifier: ^2.4.2 + version: 2.4.2 + devDependencies: + '@n8n/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@n8n/vitest-config': + specifier: workspace:* + version: link:../vitest-config + '@oclif/test': + specifier: ^4.1.13 + version: 4.1.13(@oclif/core@4.5.2) + packages/@n8n/nodes-langchain: dependencies: '@aws-sdk/client-sso-oidc': @@ -901,7 +947,7 @@ importers: version: 4.3.0 '@getzep/zep-cloud': specifier: 1.0.12 - version: 1.0.12(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13)(langchain@0.3.29(f70fa75ddbb47652add7d0f11a5bc120)) + version: 1.0.12(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13)(langchain@0.3.29(e83255224da9386305dfb90eaf104268)) '@getzep/zep-js': specifier: 0.9.0 version: 0.9.0 @@ -919,55 +965,55 @@ importers: version: 2.8.0 '@langchain/anthropic': specifier: 'catalog:' - version: 0.3.23(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) + version: 0.3.23(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) '@langchain/aws': specifier: 0.1.11 - version: 0.1.11(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) + version: 0.1.11(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) '@langchain/cohere': specifier: 0.3.4 - version: 0.3.4(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13) + version: 0.3.4(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13) '@langchain/community': specifier: 'catalog:' - version: 0.3.47(61ef7247b42783317a27f57d3dd83a45) + version: 0.3.47(dc9073baf40e018f46d70486a38ca362) '@langchain/core': specifier: 'catalog:' - version: 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + version: 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) '@langchain/google-genai': specifier: 0.2.13 - version: 0.2.13(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) + version: 0.2.13(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) '@langchain/google-vertexai': specifier: 0.2.13 - version: 0.2.13(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) + version: 0.2.13(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) '@langchain/groq': specifier: 0.2.3 - version: 0.2.3(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13) + version: 0.2.3(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13) '@langchain/mistralai': specifier: 0.2.1 - version: 0.2.1(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(zod@3.25.67) + version: 0.2.1(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(zod@3.25.67) '@langchain/mongodb': specifier: ^0.1.0 - version: 0.1.0(@aws-sdk/credential-providers@3.808.0)(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.3) + version: 0.1.0(@aws-sdk/credential-providers@3.808.0)(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.3) '@langchain/ollama': specifier: 0.2.3 - version: 0.2.3(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) + version: 0.2.3(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) '@langchain/openai': specifier: 'catalog:' - version: 0.5.16(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(ws@8.18.2) + version: 0.5.16(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(ws@8.18.2) '@langchain/pinecone': specifier: 0.2.0 - version: 0.2.0(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(@pinecone-database/pinecone@5.1.2) + version: 0.2.0(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(@pinecone-database/pinecone@5.1.2) '@langchain/qdrant': specifier: 0.1.2 - version: 0.1.2(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(typescript@5.8.3) + version: 0.1.2(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(typescript@5.8.3) '@langchain/redis': specifier: 0.1.1 - version: 0.1.1(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) + version: 0.1.1(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) '@langchain/textsplitters': specifier: 0.1.0 - version: 0.1.0(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) + version: 0.1.0(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) '@langchain/weaviate': specifier: 0.2.0 - version: 0.2.0(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13) + version: 0.2.0(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13) '@modelcontextprotocol/sdk': specifier: 1.12.0 version: 1.12.0 @@ -977,12 +1023,15 @@ importers: '@n8n/client-oauth2': specifier: workspace:* version: link:../client-oauth2 + '@n8n/errors': + specifier: workspace:^ + version: link:../errors '@n8n/json-schema-to-zod': specifier: workspace:* version: link:../json-schema-to-zod '@n8n/typeorm': specifier: 0.3.20-12 - version: 0.3.20-12(@sentry/node@8.52.1)(ioredis@5.3.2)(mongodb@6.11.0(@aws-sdk/credential-providers@3.808.0)(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.3))(mssql@10.0.2)(mysql2@3.11.0)(pg@8.12.0)(redis@4.6.12)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) + version: 0.3.20-12(@sentry/node@9.42.1)(ioredis@5.3.2)(mongodb@6.11.0(@aws-sdk/credential-providers@3.808.0)(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.3))(mssql@10.0.2)(mysql2@3.11.0)(pg@8.12.0)(redis@4.6.12)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) '@n8n/typescript-config': specifier: workspace:* version: link:../typescript-config @@ -1020,8 +1069,8 @@ importers: specifier: 3.0.2 version: 3.0.2(ts-toolbelt@9.6.0) form-data: - specifier: 'catalog:' - version: 4.0.0 + specifier: 4.0.4 + version: 4.0.4 generate-schema: specifier: 2.6.0 version: 2.6.0 @@ -1031,6 +1080,9 @@ importers: https-proxy-agent: specifier: 'catalog:' version: 7.0.6 + ignore: + specifier: ^5.2.0 + version: 5.2.4 js-tiktoken: specifier: ^1.0.12 version: 1.0.12 @@ -1039,7 +1091,7 @@ importers: version: 23.0.1 langchain: specifier: 0.3.29 - version: 0.3.29(f70fa75ddbb47652add7d0f11a5bc120) + version: 0.3.29(e83255224da9386305dfb90eaf104268) lodash: specifier: 'catalog:' version: 4.17.21 @@ -1198,9 +1250,12 @@ importers: '@n8n/di': specifier: workspace:* version: link:../di + '@n8n/errors': + specifier: workspace:^ + version: link:../errors '@sentry/node': specifier: 'catalog:' - version: 8.52.1 + version: 9.42.1 acorn: specifier: 8.14.0 version: 8.14.0 @@ -1338,19 +1393,19 @@ importers: version: link:../@n8n/task-runner '@n8n/typeorm': specifier: 'catalog:' - version: 0.3.20-12(@sentry/node@8.52.1)(ioredis@5.3.2)(mssql@10.0.2)(mysql2@3.11.0)(pg@8.12.0)(redis@4.6.14)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) + version: 0.3.20-12(@sentry/node@9.42.1)(ioredis@5.3.2)(mssql@10.0.2)(mysql2@3.11.0)(pg@8.12.0)(redis@4.6.14)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) '@n8n_io/ai-assistant-sdk': specifier: 'catalog:' version: 1.15.0 '@n8n_io/license-sdk': - specifier: 2.22.0 - version: 2.22.0 + specifier: 2.23.0 + version: 2.23.0 '@rudderstack/rudder-sdk-node': specifier: 2.1.4 version: 2.1.4(tslib@2.8.1) '@sentry/node': specifier: 'catalog:' - version: 8.52.1 + version: 9.42.1 aws4: specifier: 1.11.0 version: 1.11.0 @@ -1376,8 +1431,8 @@ importers: specifier: 0.14.0 version: 0.14.0 compression: - specifier: 1.8.0 - version: 1.8.0 + specifier: 1.8.1 + version: 1.8.1 convict: specifier: 6.2.4 version: 6.2.4 @@ -1423,6 +1478,9 @@ importers: helmet: specifier: 8.1.0 version: 8.1.0 + http-proxy-middleware: + specifier: ^3.0.5 + version: 3.0.5 infisical-node: specifier: 1.3.0 version: 1.3.0 @@ -1675,7 +1733,7 @@ importers: version: 3.808.0 '@langchain/core': specifier: 'catalog:' - version: 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + version: 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) '@n8n/backend-common': specifier: workspace:^ version: link:../@n8n/backend-common @@ -1696,7 +1754,10 @@ importers: version: link:../@n8n/di '@sentry/node': specifier: 'catalog:' - version: 8.52.1 + version: 9.42.1 + '@sentry/node-native': + specifier: ^9.42.1 + version: 9.42.1 axios: specifier: 'catalog:' version: 1.8.3 @@ -1716,8 +1777,8 @@ importers: specifier: 16.5.4 version: 16.5.4 form-data: - specifier: 'catalog:' - version: 4.0.0 + specifier: 4.0.4 + version: 4.0.4 http-proxy-agent: specifier: 'catalog:' version: 7.0.2 @@ -1727,6 +1788,9 @@ importers: iconv-lite: specifier: 'catalog:' version: 0.6.3 + jsdom: + specifier: 23.0.1 + version: 23.0.1 jsonwebtoken: specifier: 'catalog:' version: 9.0.2 @@ -1779,6 +1843,9 @@ importers: specifier: 'catalog:' version: 3.25.67 devDependencies: + '@n8n/errors': + specifier: workspace:^ + version: link:../@n8n/errors '@n8n/typescript-config': specifier: workspace:* version: link:../@n8n/typescript-config @@ -2345,7 +2412,7 @@ importers: version: 6.5.3(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3) '@sentry/vue': specifier: catalog:frontend - version: 8.33.1(vue@3.5.13(typescript@5.8.3)) + version: 9.42.1(pinia@2.2.4(typescript@5.8.3)(vue@3.5.13(typescript@5.8.3)))(vue@3.5.13(typescript@5.8.3)) '@types/semver': specifier: ^7.7.0 version: 7.7.0 @@ -2354,19 +2421,19 @@ importers: version: 1.6.0(typescript@5.8.3) '@vue-flow/background': specifier: ^1.3.2 - version: 1.3.2(@vue-flow/core@1.42.1(vue@3.5.13(typescript@5.8.3)))(vue@3.5.13(typescript@5.8.3)) + version: 1.3.2(@vue-flow/core@1.45.0(vue@3.5.13(typescript@5.8.3)))(vue@3.5.13(typescript@5.8.3)) '@vue-flow/controls': specifier: ^1.1.2 - version: 1.1.2(@vue-flow/core@1.42.1(vue@3.5.13(typescript@5.8.3)))(vue@3.5.13(typescript@5.8.3)) + version: 1.1.2(@vue-flow/core@1.45.0(vue@3.5.13(typescript@5.8.3)))(vue@3.5.13(typescript@5.8.3)) '@vue-flow/core': - specifier: ^1.42.1 - version: 1.42.1(vue@3.5.13(typescript@5.8.3)) + specifier: ^1.45.0 + version: 1.45.0(vue@3.5.13(typescript@5.8.3)) '@vue-flow/minimap': specifier: ^1.5.2 - version: 1.5.2(@vue-flow/core@1.42.1(vue@3.5.13(typescript@5.8.3)))(vue@3.5.13(typescript@5.8.3)) + version: 1.5.2(@vue-flow/core@1.45.0(vue@3.5.13(typescript@5.8.3)))(vue@3.5.13(typescript@5.8.3)) '@vue-flow/node-resizer': specifier: ^1.4.0 - version: 1.4.0(@vue-flow/core@1.42.1(vue@3.5.13(typescript@5.8.3)))(vue@3.5.13(typescript@5.8.3)) + version: 1.4.0(@vue-flow/core@1.45.0(vue@3.5.13(typescript@5.8.3)))(vue@3.5.13(typescript@5.8.3)) '@vueuse/components': specifier: ^10.11.0 version: 10.11.0(vue@3.5.13(typescript@5.8.3)) @@ -2463,6 +2530,9 @@ importers: uuid: specifier: 'catalog:' version: 10.0.0 + v-code-diff: + specifier: ^1.13.1 + version: 1.13.1(patch_hash=21588de80e591bbc1e5a068d9bce311db5254686443652945d2c7887fdafe9d9)(vue@3.5.13(typescript@5.8.3)) v3-infinite-loading: specifier: ^1.2.2 version: 1.2.2 @@ -2530,6 +2600,9 @@ importers: '@pinia/testing': specifier: ^0.1.6 version: 0.1.6(pinia@2.2.4(typescript@5.8.3)(vue@3.5.13(typescript@5.8.3)))(vue@3.5.13(typescript@5.8.3)) + '@testing-library/vue': + specifier: catalog:frontend + version: 8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.8.3)) '@types/dateformat': specifier: ^3.0.0 version: 3.0.1 @@ -2651,6 +2724,9 @@ importers: '@n8n/di': specifier: workspace:* version: link:../@n8n/di + '@n8n/errors': + specifier: workspace:^ + version: link:../@n8n/errors '@n8n/imap': specifier: workspace:* version: link:../@n8n/imap @@ -2958,12 +3034,21 @@ importers: eslint-plugin-playwright: specifier: 2.2.0 version: 2.2.0(eslint@9.29.0(jiti@1.21.7)) + generate-schema: + specifier: 2.6.0 + version: 2.6.0 + json-diff: + specifier: 1.0.6 + version: 1.0.6 n8n-containers: specifier: workspace:* version: link:../containers packages/workflow: dependencies: + '@n8n/errors': + specifier: workspace:^ + version: link:../@n8n/errors '@n8n/tournament': specifier: 1.0.6 version: 1.0.6 @@ -2977,8 +3062,8 @@ importers: specifier: 5.8.4 version: 5.8.4 form-data: - specifier: 'catalog:' - version: 4.0.0 + specifier: 4.0.4 + version: 4.0.4 jmespath: specifier: 0.16.0 version: 0.16.0 @@ -3015,7 +3100,7 @@ importers: devDependencies: '@langchain/core': specifier: 'catalog:' - version: 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + version: 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) '@n8n/config': specifier: workspace:* version: link:../@n8n/config @@ -5504,7 +5589,7 @@ packages: '@google-cloud/spanner': ^5.18.0 '@libsql/client': ^0.4.2 '@sap/hana-client': ^2.12.25 - '@sentry/node': <=8.x + '@sentry/node': ^9.42.1 better-sqlite3: ^7.1.2 || ^8.0.0 || ^9.0.0 hdb-pool: ^0.1.6 ioredis: ^5.0.4 @@ -5569,8 +5654,8 @@ packages: resolution: {integrity: sha512-M/bNnxyVGxwLGU/mzQrZOkZK4NkR9x8cUMZHfVJlv1z6YTlHX56BYH+0jSlb2c15DEwPkku9l0RFVLTTt0ExQQ==} engines: {node: '>=20.15', pnpm: '>=8.14'} - '@n8n_io/license-sdk@2.22.0': - resolution: {integrity: sha512-dysK0bzZXjgBmtDvPU+ZIIcwEeGoQgG4tZAH8E0A1Rs265U7FLe8eg9wyvwLa3RJ4T+qmZrMxR/WSqqtAlCPaQ==} + '@n8n_io/license-sdk@2.23.0': + resolution: {integrity: sha512-WsABHT9yDgz672It1T/B9jfl3EDcCQ7b68HaiB2q0k5u2vIKyDa9HYQQUlPbYoqhzj+kaEpaTVcQt734AvdxbQ==} engines: {node: '>=18.12.1'} '@n8n_io/riot-tmpl@4.0.1': @@ -5674,6 +5759,16 @@ packages: resolution: {integrity: sha512-sU4Dx+RXCWAkrMw8tQFYAL6VfcHYKLPxVC9iKfgTXr4aDhcCssDwrbgpx0Di1dnNxvQlDGUhuCEInZuIY/nNfw==} engines: {node: '>=18.0.0'} + '@oclif/core@4.5.2': + resolution: {integrity: sha512-eQcKyrEcDYeZJKu4vUWiu0ii/1Gfev6GF4FsLSgNez5/+aQyAUCjg3ZWlurf491WiYZTXCWyKAxyPWk8DKv2MA==} + engines: {node: '>=18.0.0'} + + '@oclif/test@4.1.13': + resolution: {integrity: sha512-pulrTiJRhoAKizFf6y5WeHvM2JyoRiZKV0H8qqYEoE0UHDKqInNmfGJyp8Ip6lTVQeMv1U8YCAXOS/HiWPVWeg==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@oclif/core': '>= 3.0.0' + '@one-ini/wasm@0.1.1': resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} @@ -5686,182 +5781,160 @@ packages: '@open-draft/until@2.1.0': resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - '@opentelemetry/api-logs@0.53.0': - resolution: {integrity: sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==} - engines: {node: '>=14'} - - '@opentelemetry/api-logs@0.56.0': - resolution: {integrity: sha512-Wr39+94UNNG3Ei9nv3pHd4AJ63gq5nSemMRpCd8fPwDL9rN3vK26lzxfH27mw16XzOSO+TpyQwBAMaLxaPWG0g==} + '@opentelemetry/api-logs@0.57.2': + resolution: {integrity: sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A==} engines: {node: '>=14'} '@opentelemetry/api@1.9.0': resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} - '@opentelemetry/context-async-hooks@1.29.0': - resolution: {integrity: sha512-TKT91jcFXgHyIDF1lgJF3BHGIakn6x0Xp7Tq3zoS3TMPzT9IlP0xEavWP8C1zGjU9UmZP2VR1tJhW9Az1A3w8Q==} + '@opentelemetry/context-async-hooks@1.30.1': + resolution: {integrity: sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/core@1.29.0': - resolution: {integrity: sha512-gmT7vAreXl0DTHD2rVZcw3+l2g84+5XiHIqdBUxXbExymPCvSsGOpiwMmn8nkiJur28STV31wnhIDrzWDPzjfA==} + '@opentelemetry/core@1.30.1': + resolution: {integrity: sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/instrumentation-amqplib@0.45.0': - resolution: {integrity: sha512-SlKLsOS65NGMIBG1Lh/hLrMDU9WzTUF25apnV6ZmWZB1bBmUwan7qrwwrTu1cL5LzJWCXOdZPuTaxP7pC9qxnQ==} + '@opentelemetry/instrumentation-amqplib@0.46.1': + resolution: {integrity: sha512-AyXVnlCf/xV3K/rNumzKxZqsULyITJH6OVLiW6730JPRqWA7Zc9bvYoVNpN6iOpTU8CasH34SU/ksVJmObFibQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-connect@0.42.0': - resolution: {integrity: sha512-bOoYHBmbnq/jFaLHmXJ55VQ6jrH5fHDMAPjFM0d3JvR0dvIqW7anEoNC33QqYGFYUfVJ50S0d/eoyF61ALqQuA==} + '@opentelemetry/instrumentation-connect@0.43.1': + resolution: {integrity: sha512-ht7YGWQuV5BopMcw5Q2hXn3I8eG8TH0J/kc/GMcW4CuNTgiP6wCu44BOnucJWL3CmFWaRHI//vWyAhaC8BwePw==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-dataloader@0.15.0': - resolution: {integrity: sha512-5fP35A2jUPk4SerVcduEkpbRAIoqa2PaP5rWumn01T1uSbavXNccAr3Xvx1N6xFtZxXpLJq4FYqGFnMgDWgVng==} + '@opentelemetry/instrumentation-dataloader@0.16.1': + resolution: {integrity: sha512-K/qU4CjnzOpNkkKO4DfCLSQshejRNAJtd4esgigo/50nxCB6XCyi1dhAblUHM9jG5dRm8eu0FB+t87nIo99LYQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-express@0.46.0': - resolution: {integrity: sha512-BCEClDj/HPq/1xYRAlOr6z+OUnbp2eFp18DSrgyQz4IT9pkdYk8eWHnMi9oZSqlC6J5mQzkFmaW5RrKb1GLQhg==} + '@opentelemetry/instrumentation-express@0.47.1': + resolution: {integrity: sha512-QNXPTWteDclR2B4pDFpz0TNghgB33UMjUt14B+BZPmtH1MwUFAfLHBaP5If0Z5NZC+jaH8oF2glgYjrmhZWmSw==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-fastify@0.43.0': - resolution: {integrity: sha512-Lmdsg7tYiV+K3/NKVAQfnnLNGmakUOFdB0PhoTh2aXuSyCmyNnnDvhn2MsArAPTZ68wnD5Llh5HtmiuTkf+DyQ==} + '@opentelemetry/instrumentation-fs@0.19.1': + resolution: {integrity: sha512-6g0FhB3B9UobAR60BGTcXg4IHZ6aaYJzp0Ki5FhnxyAPt8Ns+9SSvgcrnsN2eGmk3RWG5vYycUGOEApycQL24A==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-fs@0.18.0': - resolution: {integrity: sha512-kC40y6CEMONm8/MWwoF5GHWIC7gOdF+g3sgsjfwJaUkgD6bdWV+FgG0XApqSbTQndICKzw3RonVk8i7s6mHqhA==} + '@opentelemetry/instrumentation-generic-pool@0.43.1': + resolution: {integrity: sha512-M6qGYsp1cURtvVLGDrPPZemMFEbuMmCXgQYTReC/IbimV5sGrLBjB+/hANUpRZjX67nGLdKSVLZuQQAiNz+sww==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-generic-pool@0.42.0': - resolution: {integrity: sha512-J4QxqiQ1imtB9ogzsOnHra0g3dmmLAx4JCeoK3o0rFes1OirljNHnO8Hsj4s1jAir8WmWvnEEQO1y8yk6j2tog==} + '@opentelemetry/instrumentation-graphql@0.47.1': + resolution: {integrity: sha512-EGQRWMGqwiuVma8ZLAZnExQ7sBvbOx0N/AE/nlafISPs8S+QtXX+Viy6dcQwVWwYHQPAcuY3bFt3xgoAwb4ZNQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-graphql@0.46.0': - resolution: {integrity: sha512-tplk0YWINSECcK89PGM7IVtOYenXyoOuhOQlN0X0YrcDUfMS4tZMKkVc0vyhNWYYrexnUHwNry2YNBNugSpjlQ==} + '@opentelemetry/instrumentation-hapi@0.45.2': + resolution: {integrity: sha512-7Ehow/7Wp3aoyCrZwQpU7a2CnoMq0XhIcioFuKjBb0PLYfBfmTsFTUyatlHu0fRxhwcRsSQRTvEhmZu8CppBpQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-hapi@0.44.0': - resolution: {integrity: sha512-4HdNIMNXWK1O6nsaQOrACo83QWEVoyNODTdVDbUqtqXiv2peDfD0RAPhSQlSGWLPw3S4d9UoOmrV7s2HYj6T2A==} + '@opentelemetry/instrumentation-http@0.57.2': + resolution: {integrity: sha512-1Uz5iJ9ZAlFOiPuwYg29Bf7bJJc/GeoeJIFKJYQf67nTVKFe8RHbEtxgkOmK4UGZNHKXcpW4P8cWBYzBn1USpg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-http@0.56.0': - resolution: {integrity: sha512-/bWHBUAq8VoATnH9iLk5w8CE9+gj+RgYSUphe7hry472n6fYl7+4PvuScoQMdmSUTprKq/gyr2kOWL6zrC7FkQ==} + '@opentelemetry/instrumentation-ioredis@0.47.1': + resolution: {integrity: sha512-OtFGSN+kgk/aoKgdkKQnBsQFDiG8WdCxu+UrHr0bXScdAmtSzLSraLo7wFIb25RVHfRWvzI5kZomqJYEg/l1iA==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-ioredis@0.46.0': - resolution: {integrity: sha512-sOdsq8oGi29V58p1AkefHvuB3l2ymP1IbxRIX3y4lZesQWKL8fLhBmy8xYjINSQ5gHzWul2yoz7pe7boxhZcqQ==} + '@opentelemetry/instrumentation-kafkajs@0.7.1': + resolution: {integrity: sha512-OtjaKs8H7oysfErajdYr1yuWSjMAectT7Dwr+axIoZqT9lmEOkD/H/3rgAs8h/NIuEi2imSXD+vL4MZtOuJfqQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-kafkajs@0.6.0': - resolution: {integrity: sha512-MGQrzqEUAl0tacKJUFpuNHJesyTi51oUzSVizn7FdvJplkRIdS11FukyZBZJEscofSEdk7Ycmg+kNMLi5QHUFg==} + '@opentelemetry/instrumentation-knex@0.44.1': + resolution: {integrity: sha512-U4dQxkNhvPexffjEmGwCq68FuftFK15JgUF05y/HlK3M6W/G2iEaACIfXdSnwVNe9Qh0sPfw8LbOPxrWzGWGMQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-knex@0.43.0': - resolution: {integrity: sha512-mOp0TRQNFFSBj5am0WF67fRO7UZMUmsF3/7HSDja9g3H4pnj+4YNvWWyZn4+q0rGrPtywminAXe0rxtgaGYIqg==} + '@opentelemetry/instrumentation-koa@0.47.1': + resolution: {integrity: sha512-l/c+Z9F86cOiPJUllUCt09v+kICKvT+Vg1vOAJHtHPsJIzurGayucfCMq2acd/A/yxeNWunl9d9eqZ0G+XiI6A==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-koa@0.46.0': - resolution: {integrity: sha512-RcWXMQdJQANnPUaXbHY5G0Fg6gmleZ/ZtZeSsekWPaZmQq12FGk0L1UwodIgs31OlYfviAZ4yTeytoSUkgo5vQ==} + '@opentelemetry/instrumentation-lru-memoizer@0.44.1': + resolution: {integrity: sha512-5MPkYCvG2yw7WONEjYj5lr5JFehTobW7wX+ZUFy81oF2lr9IPfZk9qO+FTaM0bGEiymwfLwKe6jE15nHn1nmHg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-lru-memoizer@0.43.0': - resolution: {integrity: sha512-fZc+1eJUV+tFxaB3zkbupiA8SL3vhDUq89HbDNg1asweYrEb9OlHIB+Ot14ZiHUc1qCmmWmZHbPTwa56mVVwzg==} + '@opentelemetry/instrumentation-mongodb@0.52.0': + resolution: {integrity: sha512-1xmAqOtRUQGR7QfJFfGV/M2kC7wmI2WgZdpru8hJl3S0r4hW0n3OQpEHlSGXJAaNFyvT+ilnwkT+g5L4ljHR6g==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-mongodb@0.50.0': - resolution: {integrity: sha512-DtwJMjYFXFT5auAvv8aGrBj1h3ciA/dXQom11rxL7B1+Oy3FopSpanvwYxJ+z0qmBrQ1/iMuWELitYqU4LnlkQ==} + '@opentelemetry/instrumentation-mongoose@0.46.1': + resolution: {integrity: sha512-3kINtW1LUTPkiXFRSSBmva1SXzS/72we/jL22N+BnF3DFcoewkdkHPYOIdAAk9gSicJ4d5Ojtt1/HeibEc5OQg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-mongoose@0.45.0': - resolution: {integrity: sha512-zHgNh+A01C5baI2mb5dAGyMC7DWmUpOfwpV8axtC0Hd5Uzqv+oqKgKbVDIVhOaDkPxjgVJwYF9YQZl2pw2qxIA==} + '@opentelemetry/instrumentation-mysql2@0.45.2': + resolution: {integrity: sha512-h6Ad60FjCYdJZ5DTz1Lk2VmQsShiViKe0G7sYikb0GHI0NVvApp2XQNRHNjEMz87roFttGPLHOYVPlfy+yVIhQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-mysql2@0.44.0': - resolution: {integrity: sha512-e9QY4AGsjGFwmfHd6kBa4yPaQZjAq2FuxMb0BbKlXCAjG+jwqw+sr9xWdJGR60jMsTq52hx3mAlE3dUJ9BipxQ==} + '@opentelemetry/instrumentation-mysql@0.45.1': + resolution: {integrity: sha512-TKp4hQ8iKQsY7vnp/j0yJJ4ZsP109Ht6l4RHTj0lNEG1TfgTrIH5vJMbgmoYXWzNHAqBH2e7fncN12p3BP8LFg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-mysql@0.44.0': - resolution: {integrity: sha512-al7jbXvT/uT1KV8gdNDzaWd5/WXf+mrjrsF0/NtbnqLa0UUFGgQnoK3cyborgny7I+KxWhL8h7YPTf6Zq4nKsg==} + '@opentelemetry/instrumentation-pg@0.51.1': + resolution: {integrity: sha512-QxgjSrxyWZc7Vk+qGSfsejPVFL1AgAJdSBMYZdDUbwg730D09ub3PXScB9d04vIqPriZ+0dqzjmQx0yWKiCi2Q==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-nestjs-core@0.43.0': - resolution: {integrity: sha512-NEo4RU7HTjiaXk3curqXUvCb9alRiFWxQY//+hvDXwWLlADX2vB6QEmVCeEZrKO+6I/tBrI4vNdAnbCY9ldZVg==} + '@opentelemetry/instrumentation-redis-4@0.46.1': + resolution: {integrity: sha512-UMqleEoabYMsWoTkqyt9WAzXwZ4BlFZHO40wr3d5ZvtjKCHlD4YXLm+6OLCeIi/HkX7EXvQaz8gtAwkwwSEvcQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-pg@0.49.0': - resolution: {integrity: sha512-3alvNNjPXVdAPdY1G7nGRVINbDxRK02+KAugDiEpzw0jFQfU8IzFkSWA4jyU4/GbMxKvHD+XIOEfSjpieSodKw==} + '@opentelemetry/instrumentation-tedious@0.18.1': + resolution: {integrity: sha512-5Cuy/nj0HBaH+ZJ4leuD7RjgvA844aY2WW+B5uLcWtxGjRZl3MNLuxnNg5DYWZNPO+NafSSnra0q49KWAHsKBg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-redis-4@0.45.0': - resolution: {integrity: sha512-Sjgym1xn3mdxPRH5CNZtoz+bFd3E3NlGIu7FoYr4YrQouCc9PbnmoBcmSkEdDy5LYgzNildPgsjx9l0EKNjKTQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-tedious@0.17.0': - resolution: {integrity: sha512-yRBz2409an03uVd1Q2jWMt3SqwZqRFyKoWYYX3hBAtPDazJ4w5L+1VOij71TKwgZxZZNdDBXImTQjii+VeuzLg==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-undici@0.9.0': - resolution: {integrity: sha512-lxc3cpUZ28CqbrWcUHxGW/ObDpMOYbuxF/ZOzeFZq54P9uJ2Cpa8gcrC9F716mtuiMaekwk8D6n34vg/JtkkxQ==} + '@opentelemetry/instrumentation-undici@0.10.1': + resolution: {integrity: sha512-rkOGikPEyRpMCmNu9AQuV5dtRlDmJp2dK5sw8roVshAGoB6hH/3QjDtRhdwd75SsJwgynWUNRUYe0wAkTo16tQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.7.0 - '@opentelemetry/instrumentation@0.53.0': - resolution: {integrity: sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation@0.56.0': - resolution: {integrity: sha512-2KkGBKE+FPXU1F0zKww+stnlUxUTlBvLCiWdP63Z9sqXYeNI/ziNzsxAp4LAdUcTQmXjw1IWgvm5CAb/BHy99w==} + '@opentelemetry/instrumentation@0.57.2': + resolution: {integrity: sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 @@ -5870,26 +5943,26 @@ packages: resolution: {integrity: sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==} engines: {node: '>=14'} - '@opentelemetry/resources@1.29.0': - resolution: {integrity: sha512-s7mLXuHZE7RQr1wwweGcaRp3Q4UJJ0wazeGlc/N5/XSe6UyXfsh1UQGMADYeg7YwD+cEdMtU1yJAUXdnFzYzyQ==} + '@opentelemetry/resources@1.30.1': + resolution: {integrity: sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/sdk-trace-base@1.29.0': - resolution: {integrity: sha512-hEOpAYLKXF3wGJpXOtWsxEtqBgde0SCv+w+jvr3/UusR4ll3QrENEGnSl1WDCyRrpqOQ5NCNOvZch9UFVa7MnQ==} + '@opentelemetry/sdk-trace-base@1.30.1': + resolution: {integrity: sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/semantic-conventions@1.27.0': - resolution: {integrity: sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==} - engines: {node: '>=14'} - '@opentelemetry/semantic-conventions@1.28.0': resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==} engines: {node: '>=14'} + '@opentelemetry/semantic-conventions@1.36.0': + resolution: {integrity: sha512-TtxJSRD8Ohxp6bKkhrm27JRHAxPczQA7idtcTOMYI+wQRRrfgqxHv1cFbCApcSnNjtXkmzFozn6jQtFrOmbjPQ==} + engines: {node: '>=14'} + '@opentelemetry/sql-common@0.40.1': resolution: {integrity: sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==} engines: {node: '>=14'} @@ -6017,8 +6090,10 @@ packages: engines: {node: '>=18'} hasBin: true - '@prisma/instrumentation@5.22.0': - resolution: {integrity: sha512-LxccF392NN37ISGxIurUljZSh1YWnphO34V5a0+T7FVQG2u9bhAXRTJpgmQ3483woVhkraQZFF7cbRrpbw/F4Q==} + '@prisma/instrumentation@6.11.1': + resolution: {integrity: sha512-mrZOev24EDhnefmnZX7WVVT7v+r9LttPRqf54ONvj6re4XMF7wFTpK2tLJi4XHB7fFp/6xhYbgRel8YV7gQiyA==} + peerDependencies: + '@opentelemetry/api': ^1.8 '@protobufjs/aspromise@1.1.2': resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} @@ -6269,61 +6344,73 @@ packages: '@selderee/plugin-htmlparser2@0.11.0': resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} - '@sentry-internal/browser-utils@8.33.1': - resolution: {integrity: sha512-TW6/r+Gl5jiXv54iK1xZ3mlVgTS/jaBp4vcQ0xGMdgiQ3WchEPcFSeYovL+YHT3tSud0GZqVtDQCz+5i76puqA==} - engines: {node: '>=14.18'} + '@sentry-internal/browser-utils@9.42.1': + resolution: {integrity: sha512-RWLpPDApHKWo5m4ig6M27b0vx3bLyPPU9Ra6FbwBhIdyb0ihd4wSddtNFA2VgLOePpurN+HU1Thcq+D3776GIA==} + engines: {node: '>=18'} - '@sentry-internal/feedback@8.33.1': - resolution: {integrity: sha512-qauMRTm3qDaLqZ3ibI03cj4gLF40y0ij65nj+cns6iWxGCtPrO8tjvXFWuQsE7Aye9dGMnBgmv7uN+NTUtC3RA==} - engines: {node: '>=14.18'} + '@sentry-internal/feedback@9.42.1': + resolution: {integrity: sha512-ocyN85ndnWRHMtS6kJpYbQiovvXT09UJLIzZfsyj/cIl/kBYaljDVoPHhSWMaMVUWQrP/Ut2Zuse9wnowDvXWg==} + engines: {node: '>=18'} - '@sentry-internal/replay-canvas@8.33.1': - resolution: {integrity: sha512-nsxTFTPCT10Ty/v6+AiST3+yotGP1sUb8xqfKB9fPnS1hZHFryp0NnEls7xFjBsBbZPU1GpFkzrk/E6JFzixDQ==} - engines: {node: '>=14.18'} + '@sentry-internal/node-native-stacktrace@0.2.2': + resolution: {integrity: sha512-ZRS+a1Ik+w6awjp9na5vHBqLNkIxysfGDswLVAkjtVdBUxtfsEVI8OA6r8PijJC5Gm1oAJJap2e9H7TSiCUQIQ==} + engines: {node: '>=18'} - '@sentry-internal/replay@8.33.1': - resolution: {integrity: sha512-fm4coIOjmanU29NOVN9MyaP4fUCOYytbtFqVSKRFNZQ/xAgNeySiBIbUd6IjujMmnOk9bY0WEUMcdm3Uotjdog==} - engines: {node: '>=14.18'} + '@sentry-internal/replay-canvas@9.42.1': + resolution: {integrity: sha512-z2Pm7vl5SaK1k/MhYV/CRkDYT32Y6q/CLlV3toKphAK1gZFmJ8FGjYE6DU2Zju2upb9ulgyoU8bLU5DLLZCsZA==} + engines: {node: '>=18'} - '@sentry/browser@8.33.1': - resolution: {integrity: sha512-c6zI/igexkLwZuGk+u8Rj26ChjxGgkhe6ZbKFsXCYaKAp5ep5X7HQRkkqgbxApiqlC0LduHdd/ymzh139JLg8w==} - engines: {node: '>=14.18'} + '@sentry-internal/replay@9.42.1': + resolution: {integrity: sha512-IbKf4L4qxcupM3+FfKYcap4bM4Q6khSIc8X31btmUqPnDT/UuekN5CZmL7Xf42h5L7aMA8Oh8s97powY+hPLQQ==} + engines: {node: '>=18'} - '@sentry/core@8.33.1': - resolution: {integrity: sha512-3SS41suXLFzxL3OQvTMZ6q92ZapELVq2l2SoWlZopcamWhog2Ru0dp2vkunq97kFHb2TzKRTlFH4+4gbT8SJug==} - engines: {node: '>=14.18'} + '@sentry/browser@9.42.1': + resolution: {integrity: sha512-iFlHpuHGK7pexHdmvmJeMlIIUFcGjGW12bwhPyIb8T7Ziu16B8yOjIv0EQgfxMyiyv9MWqG2Un7efXjXSlIzrg==} + engines: {node: '>=18'} - '@sentry/core@8.52.1': - resolution: {integrity: sha512-FG0P9I03xk4jBI4O7NBkw8uqLGH9/RWOSFoRH3eYvUTyBLhkk9IaCFbAAGBNZhojky8T7gqYwnuRbFNlrAiuSA==} - engines: {node: '>=14.18'} + '@sentry/core@9.42.1': + resolution: {integrity: sha512-9jWgjgZ8EvIYMTL5HzG8PYRo7+/vv3qwPabPVV2EfGPOjU65GFcT7N+oitg+0rAI/fTMsLaQXC77WmKzhRBSdw==} + engines: {node: '>=18'} - '@sentry/node@8.52.1': - resolution: {integrity: sha512-we9fIfn5Q0c6U4VPrXhNtJ7uz5HkTlnOQV7hP/GG09tmKa6hrL20tkhCosObl3XZ/qlIbD/GQMv4WmhOgNzgkQ==} - engines: {node: '>=14.18'} - - '@sentry/opentelemetry@8.52.1': - resolution: {integrity: sha512-xaGm/KlfFi3yxK6PP+IRLnvfnd8Hp3yvJIdp3Mvc2aHW1Dh7zz+VTNNmWFZQmAbWrNqIoqZG2s1tZOeJwMHPpg==} - engines: {node: '>=14.18'} + '@sentry/node-core@9.42.1': + resolution: {integrity: sha512-Z5igPnqlap0u4nDHqp83If7/ZPCKuBSAtR2l71CNG2pISCD2JudKseSl3ZpGlZ8/tzyhIDCtb1yMTZ/SStLgRA==} + engines: {node: '>=18'} peerDependencies: '@opentelemetry/api': ^1.9.0 - '@opentelemetry/core': ^1.29.0 - '@opentelemetry/instrumentation': ^0.56.0 - '@opentelemetry/sdk-trace-base': ^1.29.0 - '@opentelemetry/semantic-conventions': ^1.28.0 + '@opentelemetry/context-async-hooks': ^1.30.1 || ^2.0.0 + '@opentelemetry/core': ^1.30.1 || ^2.0.0 + '@opentelemetry/instrumentation': '>=0.57.1 <1' + '@opentelemetry/resources': ^1.30.1 || ^2.0.0 + '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.0.0 + '@opentelemetry/semantic-conventions': ^1.34.0 - '@sentry/types@8.33.1': - resolution: {integrity: sha512-GjoAMvwtpIemoF/IiwZ7A60g4nQv3qwzR21GvJqDVUoKD0e8pv9OLX+HyXoUat4wEDGSuDUcUyUKD2G+od73QA==} - engines: {node: '>=14.18'} + '@sentry/node-native@9.42.1': + resolution: {integrity: sha512-K64I5I5tqqLeH0CFJitoVP+mPOA558dxvC9Vm6x79fl/W8mgFCGiRROjdpeF0aUWghRGAJUbNREFbI3VrIlUOg==} + engines: {node: '>=18'} - '@sentry/utils@8.33.1': - resolution: {integrity: sha512-uzuYpiiJuFY3N4WNHMBWUQX5oNv2t/TbG0OHRp3Rr7yeu+HSfD542TIp9/gMZ+G0Cxd8AmVO3wkKIFbk0TL4Qg==} - engines: {node: '>=14.18'} + '@sentry/node@9.42.1': + resolution: {integrity: sha512-6alU59CUp3NzRWt0zaHl3A1Rv9PeABhtj8cD9fdI5QYj5oFQnxbERY/Y/V9R+pNx3ejwCQRbd+SDApfYeQgejg==} + engines: {node: '>=18'} - '@sentry/vue@8.33.1': - resolution: {integrity: sha512-Ec3Z/KM96PhSdc3NSQUkKRETSipnIy55M35ujGCbdMnlGr95TjmInxVIxQGZap8S0EVzcpGCWFTGlzUR/pmVJQ==} - engines: {node: '>=14.18'} + '@sentry/opentelemetry@9.42.1': + resolution: {integrity: sha512-SncdmGuBVMbCEEG8pC+alyNh5kwRfNkkNH4zf/Rl6pSp7wmNK+LKZQUZFQGl5LUBoNOxmoI8J1pLjW+9PueWTA==} + engines: {node: '>=18'} peerDependencies: + '@opentelemetry/api': ^1.9.0 + '@opentelemetry/context-async-hooks': ^1.30.1 || ^2.0.0 + '@opentelemetry/core': ^1.30.1 || ^2.0.0 + '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.0.0 + '@opentelemetry/semantic-conventions': ^1.34.0 + + '@sentry/vue@9.42.1': + resolution: {integrity: sha512-m6wEwDzaErKnebeX+giMMvRAU0i4SLW7taW2DyxNHAADI0mcjgjiQWYiEMid2M/O57CJtKq8LISzi38rvF1JTQ==} + engines: {node: '>=18'} + peerDependencies: + pinia: 2.x || 3.x vue: 2.x || 3.x + peerDependenciesMeta: + pinia: + optional: true '@sevinf/maybe@0.5.0': resolution: {integrity: sha512-ARhyoYDnY1LES3vYI0fiG6e9esWfTNcXcO6+MPJJXcnyMV3bim4lnFt45VXouV7y82F4x3YH8nOQ6VztuvUiWg==} @@ -7012,6 +7099,9 @@ packages: '@types/connect@3.4.36': resolution: {integrity: sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==} + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + '@types/convict@6.1.1': resolution: {integrity: sha512-R+JLaTvhsD06p4jyjUDtbd5xMtZTRE3c0iI+lrFWZogSVEjgTWPYwvJPVf+t92E+yrlbXa4X4Eg9ro6gPdUt4w==} @@ -7077,6 +7167,9 @@ packages: '@types/html-to-text@9.0.4': resolution: {integrity: sha512-pUY3cKH/Nm2yYrEmDlPR1mR7yszjGx4DrwPjQ702C4/D5CwHuZTgZdIdwPkRbcuhs7BAh2L5rg3CL5cbRiGTCQ==} + '@types/http-proxy@1.17.16': + resolution: {integrity: sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==} + '@types/humanize-duration@3.27.1': resolution: {integrity: sha512-K3e+NZlpCKd6Bd/EIdqjFJRFHbrq5TzPPLwREk5Iv/YoIjQrs6ljdAUCo+Lb2xFlGNOjGSE0dqsVD19cZL137w==} @@ -7694,8 +7787,8 @@ packages: '@vue-flow/core': ^1.23.0 vue: ^3.3.0 - '@vue-flow/core@1.42.1': - resolution: {integrity: sha512-QzzTxMAXfOeETKc+N3XMp5XpiPxKBHK5kq98avgTsE6MXyeU2E8EkANwwgSB/hvJ/k36RjU0Y7BOwCHiqiI1tw==} + '@vue-flow/core@1.45.0': + resolution: {integrity: sha512-+Qd4fTnCfrhfYQzlHyf5Jt7rNE4PlDnEJEJZH9v6hDZoTOeOy1RhS85cSxKYxdsJ31Ttj2v3yabhoVfBf+bmJA==} peerDependencies: vue: ^3.3.0 @@ -7989,6 +8082,10 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} + ansis@3.17.0: + resolution: {integrity: sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==} + engines: {node: '>=14'} + ansis@3.2.0: resolution: {integrity: sha512-Yk3BkHH9U7oPyCN3gL5Tc7CpahG/+UFv/6UG03C311Vy9lzRmA5uoxDTpU9CO3rGHL6KzJz/pdDeXZCZ5Mu/Sg==} engines: {node: '>=15'} @@ -8899,8 +8996,8 @@ packages: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} - compression@1.8.0: - resolution: {integrity: sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==} + compression@1.8.1: + resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} engines: {node: '>= 0.8.0'} concat-map@0.0.1: @@ -9486,6 +9583,9 @@ packages: didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + diff-match-patch@1.0.5: + resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==} + diff-sequences@29.6.3: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -9494,6 +9594,10 @@ packages: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + diff@7.0.0: resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==} engines: {node: '>=0.3.1'} @@ -10346,16 +10450,8 @@ packages: resolution: {integrity: sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw==} engines: {node: '>= 18'} - form-data@2.5.1: - resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==} - engines: {node: '>= 0.12'} - - form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} - engines: {node: '>= 6'} - - form-data@4.0.2: - resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} + form-data@4.0.4: + resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} engines: {node: '>= 6'} formdata-node@4.4.1: @@ -10485,10 +10581,6 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} - get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -10761,6 +10853,10 @@ packages: help-me@5.0.0: resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} + highlight.js@11.11.1: + resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} + engines: {node: '>=12.0.0'} + highlight.js@11.9.0: resolution: {integrity: sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==} engines: {node: '>=12.0.0'} @@ -10826,6 +10922,14 @@ packages: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} + http-proxy-middleware@3.0.5: + resolution: {integrity: sha512-GLZZm1X38BPY4lkXA01jhwxvDoOkkXqjgVyUzVxiEK4iuRu03PZoYHhHRwxnfhQMDuaxi3vVri0YgSro/1oWqg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + http-proxy@1.18.1: + 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'} @@ -10913,8 +11017,8 @@ packages: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} - import-in-the-middle@1.11.3: - resolution: {integrity: sha512-tNpKEb4AjZrCyrxi+Eyu43h5ig0O8ZRFSXPHh/00/o+4P4pKzVEW/m5lsVtsAT7fCIgmQOAPjdqecGDsBXRxsw==} + import-in-the-middle@1.14.2: + resolution: {integrity: sha512-5tCuY9BV8ujfOpwtAGgsTx9CGUapcFMEEyByLv1B+v2+6DhAcw+Zr0nhQT7uwaZ7DiourxFEscghOR8e1aPLQw==} import-lazy@4.0.0: resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} @@ -11051,9 +11155,6 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} - is-core-module@2.16.1: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} @@ -12624,8 +12725,8 @@ packages: muggle-string@0.4.1: resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} - multer@2.0.1: - resolution: {integrity: sha512-Ug8bXeTIUlxurg8xLTEskKShvcKDZALo1THEX5E41pYCD2sCVub5/kIRIGqWNoqV6szyLyQKV6mD4QUrWE5GCQ==} + multer@2.0.2: + resolution: {integrity: sha512-u7f2xaZ/UG8oLXHvtF/oWTRvT44p9ecwBBqTwgJVq0+4BW1g8OW01TyMEGWBHbyMOYVHXslaut7qEQ1meATXgw==} engines: {node: '>= 10.16.0'} mustache@4.2.0: @@ -12717,6 +12818,10 @@ packages: resolution: {integrity: sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA==} engines: {node: '>=10'} + node-abi@3.75.0: + resolution: {integrity: sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==} + engines: {node: '>=10'} + node-abort-controller@3.1.1: resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} @@ -12975,8 +13080,8 @@ packages: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} - on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + on-headers@1.1.0: + resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} engines: {node: '>= 0.8'} once@1.4.0: @@ -15523,6 +15628,15 @@ packages: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true + v-code-diff@1.13.1: + resolution: {integrity: sha512-9LTV1dZhC1oYTntyB94vfumGgsfIX5u0fEDSI2Txx4vCE5sI5LkgeLJRRy2SsTVZmDcV+R73sBr0GpPn0TJxMw==} + peerDependencies: + '@vue/composition-api': ^1.4.9 + vue: ^2.6.0 || >=3.0.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + v3-infinite-loading@1.2.2: resolution: {integrity: sha512-MWJc6yChnqeUasBFJ3Enu8IGPcQgRMSTrAEtT1MsHBEx+QjwvNTaY8o+8V9DgVt1MVhQSl3MC55hsaWLJmpRMw==} @@ -15731,8 +15845,8 @@ packages: vue-component-type-helpers@2.2.10: resolution: {integrity: sha512-iDUO7uQK+Sab2tYuiP9D1oLujCWlhHELHMgV/cB13cuGbG4qwkLHvtfWb6FzvxrIOPDnU0oHsz2MlQjhYDeaHA==} - vue-component-type-helpers@3.0.3: - resolution: {integrity: sha512-koiBu7lO8e6w/UlbZAAIW11qcFQocYIl7Nh/SVwGZ804ej5KrncU32bRxi2zfU2Kyf6HWuk1CeeVP2rhIL+vyQ==} + vue-component-type-helpers@3.0.4: + resolution: {integrity: sha512-WtR3kPk8vqKYfCK/HGyT47lK/T3FaVyWxaCNuosaHYE8h9/k0lYRZ/PI/+T/z2wP+uuNKmL6z30rOcBboOu/YA==} vue-demi@0.14.10: resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} @@ -17228,7 +17342,7 @@ snapshots: '@azure/core-tracing': 1.0.1 '@azure/core-util': 1.7.0 '@azure/logger': 1.0.3 - form-data: 4.0.2 + form-data: 4.0.4 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 tslib: 2.8.1 @@ -18238,7 +18352,7 @@ snapshots: '@codemirror/state': 6.4.1 '@codemirror/view': 6.26.3 '@lezer/common': 1.1.0 - '@lezer/highlight': 1.1.1 + '@lezer/highlight': 1.1.1(patch_hash=97f85e6fe46f23015ea0dd420e33d584bc2dc71633910cf131321da31b27ca8c) '@lezer/lr': 1.4.0 style-mod: 4.1.0 @@ -18247,7 +18361,7 @@ snapshots: '@codemirror/state': 6.3.3 '@codemirror/view': 6.22.3 '@lezer/common': 1.1.0 - '@lezer/highlight': 1.1.1 + '@lezer/highlight': 1.1.1(patch_hash=97f85e6fe46f23015ea0dd420e33d584bc2dc71633910cf131321da31b27ca8c) '@lezer/lr': 1.4.0 style-mod: 4.1.0 @@ -18369,7 +18483,7 @@ snapshots: combined-stream: 1.0.8 extend: 3.0.2 forever-agent: 0.6.1 - form-data: 4.0.2 + form-data: 4.0.4 http-signature: 1.4.0 is-typedarray: 1.0.0 isstream: 0.1.2 @@ -18618,16 +18732,16 @@ snapshots: '@gar/promisify@1.1.3': optional: true - '@getzep/zep-cloud@1.0.12(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13)(langchain@0.3.29(f70fa75ddbb47652add7d0f11a5bc120))': + '@getzep/zep-cloud@1.0.12(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13)(langchain@0.3.29(e83255224da9386305dfb90eaf104268))': dependencies: - form-data: 4.0.0 + form-data: 4.0.4 node-fetch: 2.7.0(encoding@0.1.13) qs: 6.11.2 url-join: 4.0.1 zod: 3.25.67 optionalDependencies: - '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) - langchain: 0.3.29(f70fa75ddbb47652add7d0f11a5bc120) + '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + langchain: 0.3.29(e83255224da9386305dfb90eaf104268) transitivePeerDependencies: - encoding @@ -18909,14 +19023,14 @@ snapshots: '@jest/test-result': 29.6.2 '@jest/transform': 29.6.2 '@jest/types': 29.6.1 - '@types/node': 20.17.57 + '@types/node': 20.19.1 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.8.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.5.0 - jest-config: 29.6.2(@types/node@20.17.57)(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.8.3)) + jest-config: 29.6.2(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.8.3)) jest-haste-map: 29.6.2 jest-message-util: 29.6.2 jest-regex-util: 29.4.3 @@ -18944,14 +19058,14 @@ snapshots: '@jest/test-result': 29.6.2 '@jest/transform': 29.6.2 '@jest/types': 29.6.1 - '@types/node': 20.17.57 + '@types/node': 20.19.1 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.8.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.5.0 - jest-config: 29.6.2(@types/node@20.17.57)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) + jest-config: 29.6.2(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) jest-haste-map: 29.6.2 jest-message-util: 29.6.2 jest-regex-util: 29.4.3 @@ -18976,7 +19090,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.6.2 '@jest/types': 29.6.1 - '@types/node': 20.17.57 + '@types/node': 20.19.1 jest-mock: 29.6.2 '@jest/expect-utils@29.6.2': @@ -18994,7 +19108,7 @@ snapshots: dependencies: '@jest/types': 29.6.1 '@sinonjs/fake-timers': 10.0.2 - '@types/node': 20.17.57 + '@types/node': 20.19.1 jest-message-util: 29.6.2 jest-mock: 29.6.2 jest-util: 29.6.2 @@ -19094,7 +19208,7 @@ snapshots: '@jest/schemas': 29.6.0 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 20.17.57 + '@types/node': 20.19.1 '@types/yargs': 17.0.19 chalk: 4.1.2 @@ -19156,45 +19270,45 @@ snapshots: '@kwsites/promise-deferred@1.1.1': {} - '@langchain/anthropic@0.3.23(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))': + '@langchain/anthropic@0.3.23(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))': dependencies: '@anthropic-ai/sdk': 0.52.0 - '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) fast-xml-parser: 4.4.1 - '@langchain/aws@0.1.11(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))': + '@langchain/aws@0.1.11(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))': dependencies: '@aws-sdk/client-bedrock-agent-runtime': 3.808.0 '@aws-sdk/client-bedrock-runtime': 3.808.0 '@aws-sdk/client-kendra': 3.808.0 '@aws-sdk/credential-provider-node': 3.808.0 - '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) transitivePeerDependencies: - aws-crt - '@langchain/cohere@0.3.4(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13)': + '@langchain/cohere@0.3.4(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13)': dependencies: - '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) cohere-ai: 7.14.0(encoding@0.1.13) uuid: 10.0.0 transitivePeerDependencies: - aws-crt - encoding - '@langchain/community@0.3.47(61ef7247b42783317a27f57d3dd83a45)': + '@langchain/community@0.3.47(dc9073baf40e018f46d70486a38ca362)': dependencies: '@browserbasehq/stagehand': 1.9.0(@playwright/test@1.53.0)(deepmerge@4.3.1)(dotenv@16.5.0)(encoding@0.1.13)(openai@5.8.1(ws@8.18.2)(zod@3.25.67))(zod@3.25.67) '@ibm-cloud/watsonx-ai': 1.1.2 - '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) - '@langchain/openai': 0.5.16(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(ws@8.18.2) - '@langchain/weaviate': 0.2.0(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13) + '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + '@langchain/openai': 0.5.16(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(ws@8.18.2) + '@langchain/weaviate': 0.2.0(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13) binary-extensions: 2.2.0 expr-eval: 2.0.2 flat: 5.0.2 ibm-cloud-sdk-core: 5.3.2 js-yaml: 4.1.0 - langchain: 0.3.29(f70fa75ddbb47652add7d0f11a5bc120) - langsmith: 0.3.45(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + langchain: 0.3.29(e83255224da9386305dfb90eaf104268) + langsmith: 0.3.45(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) openai: 5.8.1(ws@8.18.2)(zod@3.25.67) uuid: 10.0.0 zod: 3.25.67 @@ -19207,7 +19321,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.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13)(langchain@0.3.29(f70fa75ddbb47652add7d0f11a5bc120)) + '@getzep/zep-cloud': 1.0.12(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13)(langchain@0.3.29(e83255224da9386305dfb90eaf104268)) '@getzep/zep-js': 0.9.0 '@google-ai/generativelanguage': 2.6.0(encoding@0.1.13) '@google-cloud/storage': 7.12.1(encoding@0.1.13) @@ -19265,14 +19379,14 @@ snapshots: - handlebars - peggy - '@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))': + '@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))': dependencies: '@cfworker/json-schema': 4.1.0 ansi-styles: 5.2.0 camelcase: 6.3.0 decamelize: 1.2.0 js-tiktoken: 1.0.12 - langsmith: 0.3.45(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + langsmith: 0.3.45(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) mustache: 4.2.0 p-queue: 6.6.2 p-retry: 4.6.2 @@ -19285,60 +19399,60 @@ snapshots: - '@opentelemetry/sdk-trace-base' - openai - '@langchain/google-common@0.2.13(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))': + '@langchain/google-common@0.2.13(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))': dependencies: - '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) uuid: 10.0.0 - '@langchain/google-gauth@0.2.13(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))': + '@langchain/google-gauth@0.2.13(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))': dependencies: - '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) - '@langchain/google-common': 0.2.13(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) + '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + '@langchain/google-common': 0.2.13(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) google-auth-library: 10.1.0 transitivePeerDependencies: - supports-color - '@langchain/google-genai@0.2.13(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))': + '@langchain/google-genai@0.2.13(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))': dependencies: '@google/generative-ai': 0.24.1 - '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) uuid: 11.1.0 - '@langchain/google-vertexai@0.2.13(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))': + '@langchain/google-vertexai@0.2.13(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))': dependencies: - '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) - '@langchain/google-gauth': 0.2.13(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) + '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + '@langchain/google-gauth': 0.2.13(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) transitivePeerDependencies: - supports-color - '@langchain/groq@0.2.3(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13)': + '@langchain/groq@0.2.3(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13)': dependencies: - '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) groq-sdk: 0.19.0(encoding@0.1.13) zod: 3.25.67 transitivePeerDependencies: - encoding - '@langchain/langgraph-checkpoint@0.0.17(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))': + '@langchain/langgraph-checkpoint@0.0.17(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))': dependencies: - '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) uuid: 10.0.0 - '@langchain/langgraph-sdk@0.0.70(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(react@18.2.0)': + '@langchain/langgraph-sdk@0.0.70(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(react@18.2.0)': dependencies: '@types/json-schema': 7.0.15 p-queue: 6.6.2 p-retry: 4.6.2 uuid: 9.0.1 optionalDependencies: - '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) react: 18.2.0 - '@langchain/langgraph@0.2.74(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(react@18.2.0)(zod-to-json-schema@3.24.5(zod@3.25.67))': + '@langchain/langgraph@0.2.74(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(react@18.2.0)(zod-to-json-schema@3.24.5(zod@3.25.67))': dependencies: - '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) - '@langchain/langgraph-checkpoint': 0.0.17(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) - '@langchain/langgraph-sdk': 0.0.70(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(react@18.2.0) + '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + '@langchain/langgraph-checkpoint': 0.0.17(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) + '@langchain/langgraph-sdk': 0.0.70(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(react@18.2.0) uuid: 10.0.0 zod: 3.25.67 optionalDependencies: @@ -19346,17 +19460,17 @@ snapshots: transitivePeerDependencies: - react - '@langchain/mistralai@0.2.1(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(zod@3.25.67)': + '@langchain/mistralai@0.2.1(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(zod@3.25.67)': dependencies: - '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) '@mistralai/mistralai': 1.3.4(zod@3.25.67) uuid: 10.0.0 transitivePeerDependencies: - zod - '@langchain/mongodb@0.1.0(@aws-sdk/credential-providers@3.808.0)(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.3)': + '@langchain/mongodb@0.1.0(@aws-sdk/credential-providers@3.808.0)(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.3)': dependencies: - '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) mongodb: 6.11.0(@aws-sdk/credential-providers@3.808.0)(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.3) transitivePeerDependencies: - '@aws-sdk/credential-providers' @@ -19367,49 +19481,49 @@ snapshots: - snappy - socks - '@langchain/ollama@0.2.3(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))': + '@langchain/ollama@0.2.3(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))': dependencies: - '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) ollama: 0.5.16 uuid: 10.0.0 - '@langchain/openai@0.5.16(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(ws@8.18.2)': + '@langchain/openai@0.5.16(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(ws@8.18.2)': dependencies: - '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) js-tiktoken: 1.0.12 openai: 5.8.1(ws@8.18.2)(zod@3.25.67) zod: 3.25.67 transitivePeerDependencies: - ws - '@langchain/pinecone@0.2.0(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(@pinecone-database/pinecone@5.1.2)': + '@langchain/pinecone@0.2.0(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(@pinecone-database/pinecone@5.1.2)': dependencies: - '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) '@pinecone-database/pinecone': 5.1.2 flat: 5.0.2 uuid: 10.0.0 - '@langchain/qdrant@0.1.2(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(typescript@5.8.3)': + '@langchain/qdrant@0.1.2(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(typescript@5.8.3)': dependencies: - '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) '@qdrant/js-client-rest': 1.14.1(typescript@5.8.3) uuid: 10.0.0 transitivePeerDependencies: - typescript - '@langchain/redis@0.1.1(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))': + '@langchain/redis@0.1.1(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))': dependencies: - '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) redis: 4.6.14 - '@langchain/textsplitters@0.1.0(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))': + '@langchain/textsplitters@0.1.0(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))': dependencies: - '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) js-tiktoken: 1.0.12 - '@langchain/weaviate@0.2.0(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13)': + '@langchain/weaviate@0.2.0(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13)': dependencies: - '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) uuid: 10.0.0 weaviate-client: 3.6.2(encoding@0.1.13) transitivePeerDependencies: @@ -19421,7 +19535,7 @@ snapshots: '@lezer/css@1.1.1': dependencies: - '@lezer/highlight': 1.1.1 + '@lezer/highlight': 1.1.1(patch_hash=97f85e6fe46f23015ea0dd420e33d584bc2dc71633910cf131321da31b27ca8c) '@lezer/lr': 1.4.0 '@lezer/generator@1.7.0': @@ -19429,24 +19543,24 @@ snapshots: '@lezer/common': 1.1.0 '@lezer/lr': 1.4.0 - '@lezer/highlight@1.1.1': + '@lezer/highlight@1.1.1(patch_hash=97f85e6fe46f23015ea0dd420e33d584bc2dc71633910cf131321da31b27ca8c)': dependencies: '@lezer/common': 1.1.0 '@lezer/html@1.3.0': dependencies: '@lezer/common': 1.1.0 - '@lezer/highlight': 1.1.1 + '@lezer/highlight': 1.1.1(patch_hash=97f85e6fe46f23015ea0dd420e33d584bc2dc71633910cf131321da31b27ca8c) '@lezer/lr': 1.4.0 '@lezer/javascript@1.0.2': dependencies: - '@lezer/highlight': 1.1.1 + '@lezer/highlight': 1.1.1(patch_hash=97f85e6fe46f23015ea0dd420e33d584bc2dc71633910cf131321da31b27ca8c) '@lezer/lr': 1.4.0 '@lezer/json@1.0.0': dependencies: - '@lezer/highlight': 1.1.1 + '@lezer/highlight': 1.1.1(patch_hash=97f85e6fe46f23015ea0dd420e33d584bc2dc71633910cf131321da31b27ca8c) '@lezer/lr': 1.4.0 '@lezer/lr@1.4.0': @@ -19455,7 +19569,7 @@ snapshots: '@lezer/python@1.1.5': dependencies: - '@lezer/highlight': 1.1.1 + '@lezer/highlight': 1.1.1(patch_hash=97f85e6fe46f23015ea0dd420e33d584bc2dc71633910cf131321da31b27ca8c) '@lezer/lr': 1.4.0 '@mdx-js/react@3.0.1(@types/react@18.0.27)(react@18.2.0)': @@ -19483,7 +19597,7 @@ snapshots: '@rushstack/ts-command-line': 4.23.6(@types/node@20.19.1) lodash: 4.17.21 minimatch: 3.0.8 - resolve: 1.22.8 + resolve: 1.22.10 semver: 7.7.2 source-map: 0.6.1 typescript: 5.8.3 @@ -19495,7 +19609,7 @@ snapshots: '@microsoft/tsdoc': 0.15.1 ajv: 8.12.0 jju: 1.4.0 - resolve: 1.22.8 + resolve: 1.22.10 '@microsoft/tsdoc@0.15.1': {} @@ -19559,7 +19673,7 @@ snapshots: '@codemirror/autocomplete': 6.16.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3)(@lezer/common@1.1.0) '@codemirror/language': 6.10.1 '@codemirror/state': 6.4.1 - '@lezer/highlight': 1.1.1 + '@lezer/highlight': 1.1.1(patch_hash=97f85e6fe46f23015ea0dd420e33d584bc2dc71633910cf131321da31b27ca8c) '@lezer/lr': 1.4.0 transitivePeerDependencies: - '@codemirror/view' @@ -19585,7 +19699,7 @@ snapshots: esprima-next: 5.8.4 recast: 0.22.0 - '@n8n/typeorm@0.3.20-12(@sentry/node@8.52.1)(ioredis@5.3.2)(mongodb@6.11.0(@aws-sdk/credential-providers@3.808.0)(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.3))(mssql@10.0.2)(mysql2@3.11.0)(pg@8.12.0)(redis@4.6.12)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3))': + '@n8n/typeorm@0.3.20-12(@sentry/node@9.42.1)(ioredis@5.3.2)(mongodb@6.11.0(@aws-sdk/credential-providers@3.808.0)(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.3))(mssql@10.0.2)(mysql2@3.11.0)(pg@8.12.0)(redis@4.6.12)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3))': dependencies: '@n8n/p-retry': 6.2.0-2 '@sqltools/formatter': 1.2.5 @@ -19605,7 +19719,7 @@ snapshots: uuid: 9.0.1 yargs: 17.7.2 optionalDependencies: - '@sentry/node': 8.52.1 + '@sentry/node': 9.42.1 ioredis: 5.3.2 mongodb: 6.11.0(@aws-sdk/credential-providers@3.808.0)(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.3) mssql: 10.0.2 @@ -19617,7 +19731,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@n8n/typeorm@0.3.20-12(@sentry/node@8.52.1)(ioredis@5.3.2)(mssql@10.0.2)(mysql2@3.11.0)(pg@8.12.0)(redis@4.6.14)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3))': + '@n8n/typeorm@0.3.20-12(@sentry/node@9.42.1)(ioredis@5.3.2)(mssql@10.0.2)(mysql2@3.11.0)(pg@8.12.0)(redis@4.6.14)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3))': dependencies: '@n8n/p-retry': 6.2.0-2 '@sqltools/formatter': 1.2.5 @@ -19637,7 +19751,7 @@ snapshots: uuid: 9.0.1 yargs: 17.7.2 optionalDependencies: - '@sentry/node': 8.52.1 + '@sentry/node': 9.42.1 ioredis: 5.3.2 mssql: 10.0.2 mysql2: 3.11.0 @@ -19655,7 +19769,7 @@ snapshots: '@n8n_io/ai-assistant-sdk@1.15.0': {} - '@n8n_io/license-sdk@2.22.0': + '@n8n_io/license-sdk@2.23.0': dependencies: crypto-js: 4.2.0 node-machine-id: 1.1.12 @@ -19768,6 +19882,35 @@ snapshots: wordwrap: 1.0.0 wrap-ansi: 7.0.0 + '@oclif/core@4.5.2': + dependencies: + ansi-escapes: 4.3.2 + ansis: 3.17.0 + clean-stack: 3.0.1 + cli-spinners: 2.9.2 + debug: 4.4.1(supports-color@8.1.1) + ejs: 3.1.10 + get-package-type: 0.1.0 + indent-string: 4.0.0 + is-wsl: 2.2.0 + lilconfig: 3.1.3 + minimatch: 9.0.5 + semver: 7.7.2 + string-width: 4.2.3 + supports-color: 8.1.1 + tinyglobby: 0.2.14 + widest-line: 3.1.0 + wordwrap: 1.0.0 + wrap-ansi: 7.0.0 + + '@oclif/test@4.1.13(@oclif/core@4.5.2)': + dependencies: + '@oclif/core': 4.5.2 + ansis: 3.17.0 + debug: 4.4.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + '@one-ini/wasm@0.1.1': {} '@open-draft/deferred-promise@2.2.0': {} @@ -19779,251 +19922,218 @@ snapshots: '@open-draft/until@2.1.0': {} - '@opentelemetry/api-logs@0.53.0': - dependencies: - '@opentelemetry/api': 1.9.0 - - '@opentelemetry/api-logs@0.56.0': + '@opentelemetry/api-logs@0.57.2': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/api@1.9.0': {} - '@opentelemetry/context-async-hooks@1.29.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core@1.29.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/instrumentation-amqplib@0.45.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-amqplib@0.46.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-connect@0.42.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-connect@0.43.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.28.0 - '@types/connect': 3.4.36 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 + '@types/connect': 3.4.38 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-dataloader@0.15.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-dataloader@0.16.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-express@0.46.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-express@0.47.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-fastify@0.43.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-fs@0.19.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-fs@0.18.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-generic-pool@0.43.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-generic-pool@0.42.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-graphql@0.47.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-graphql@0.46.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-hapi@0.45.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-hapi@0.44.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-http@0.57.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.28.0 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-http@0.56.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.28.0 forwarded-parse: 2.1.2 semver: 7.7.2 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-ioredis@0.46.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-ioredis@0.47.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) '@opentelemetry/redis-common': 0.36.2 - '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/semantic-conventions': 1.36.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-kafkajs@0.6.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-kafkajs@0.7.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-knex@0.43.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-knex@0.44.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-koa@0.46.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-koa@0.47.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-lru-memoizer@0.43.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-lru-memoizer@0.44.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-mongodb@0.50.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-mongodb@0.52.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-mongoose@0.45.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-mongoose@0.46.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-mysql2@0.44.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-mysql2@0.45.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 '@opentelemetry/sql-common': 0.40.1(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-mysql@0.44.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-mysql@0.45.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 '@types/mysql': 2.15.26 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-nestjs-core@0.43.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-pg@0.51.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.28.0 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-pg@0.49.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.27.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 '@opentelemetry/sql-common': 0.40.1(@opentelemetry/api@1.9.0) '@types/pg': 8.6.1 '@types/pg-pool': 2.0.6 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-redis-4@0.45.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-redis-4@0.46.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) '@opentelemetry/redis-common': 0.36.2 - '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/semantic-conventions': 1.36.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-tedious@0.17.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-tedious@0.18.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 '@types/tedious': 4.0.14 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-undici@0.9.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-undici@0.10.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.53.0 + '@opentelemetry/api-logs': 0.57.2 '@types/shimmer': 1.2.0 - import-in-the-middle: 1.11.3 - require-in-the-middle: 7.4.0 - semver: 7.7.2 - shimmer: 1.2.1 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.56.0 - '@types/shimmer': 1.2.0 - import-in-the-middle: 1.11.3 + import-in-the-middle: 1.14.2 require-in-the-middle: 7.4.0 semver: 7.7.2 shimmer: 1.2.1 @@ -20032,27 +20142,27 @@ snapshots: '@opentelemetry/redis-common@0.36.2': {} - '@opentelemetry/resources@1.29.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 1.29.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/semantic-conventions@1.27.0': {} - '@opentelemetry/semantic-conventions@1.28.0': {} + '@opentelemetry/semantic-conventions@1.36.0': {} + '@opentelemetry/sql-common@0.40.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) '@otplib/core@12.0.1': {} @@ -20161,11 +20271,10 @@ snapshots: dependencies: playwright: 1.53.0 - '@prisma/instrumentation@5.22.0': + '@prisma/instrumentation@6.11.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 1.29.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color @@ -20267,7 +20376,7 @@ snapshots: chokidar: 4.0.1 colorette: 1.4.0 core-js: 3.40.0 - form-data: 4.0.2 + form-data: 4.0.4 get-port-please: 3.1.2 glob: 7.2.3 handlebars: 4.7.8 @@ -20415,14 +20524,14 @@ snapshots: fs-extra: 11.3.0 import-lazy: 4.0.0 jju: 1.4.0 - resolve: 1.22.8 + resolve: 1.22.10 semver: 7.7.2 optionalDependencies: '@types/node': 20.19.1 '@rushstack/rig-package@0.5.3': dependencies: - resolve: 1.22.8 + resolve: 1.22.10 strip-json-comments: 3.1.1 '@rushstack/terminal@0.15.1(@types/node@20.19.1)': @@ -20448,111 +20557,116 @@ snapshots: domhandler: 5.0.3 selderee: 0.11.0 - '@sentry-internal/browser-utils@8.33.1': + '@sentry-internal/browser-utils@9.42.1': dependencies: - '@sentry/core': 8.33.1 - '@sentry/types': 8.33.1 - '@sentry/utils': 8.33.1 + '@sentry/core': 9.42.1 - '@sentry-internal/feedback@8.33.1': + '@sentry-internal/feedback@9.42.1': dependencies: - '@sentry/core': 8.33.1 - '@sentry/types': 8.33.1 - '@sentry/utils': 8.33.1 + '@sentry/core': 9.42.1 - '@sentry-internal/replay-canvas@8.33.1': + '@sentry-internal/node-native-stacktrace@0.2.2': dependencies: - '@sentry-internal/replay': 8.33.1 - '@sentry/core': 8.33.1 - '@sentry/types': 8.33.1 - '@sentry/utils': 8.33.1 + detect-libc: 2.0.4 + node-abi: 3.75.0 - '@sentry-internal/replay@8.33.1': + '@sentry-internal/replay-canvas@9.42.1': dependencies: - '@sentry-internal/browser-utils': 8.33.1 - '@sentry/core': 8.33.1 - '@sentry/types': 8.33.1 - '@sentry/utils': 8.33.1 + '@sentry-internal/replay': 9.42.1 + '@sentry/core': 9.42.1 - '@sentry/browser@8.33.1': + '@sentry-internal/replay@9.42.1': dependencies: - '@sentry-internal/browser-utils': 8.33.1 - '@sentry-internal/feedback': 8.33.1 - '@sentry-internal/replay': 8.33.1 - '@sentry-internal/replay-canvas': 8.33.1 - '@sentry/core': 8.33.1 - '@sentry/types': 8.33.1 - '@sentry/utils': 8.33.1 + '@sentry-internal/browser-utils': 9.42.1 + '@sentry/core': 9.42.1 - '@sentry/core@8.33.1': + '@sentry/browser@9.42.1': dependencies: - '@sentry/types': 8.33.1 - '@sentry/utils': 8.33.1 + '@sentry-internal/browser-utils': 9.42.1 + '@sentry-internal/feedback': 9.42.1 + '@sentry-internal/replay': 9.42.1 + '@sentry-internal/replay-canvas': 9.42.1 + '@sentry/core': 9.42.1 - '@sentry/core@8.52.1': {} + '@sentry/core@9.42.1': {} - '@sentry/node@8.52.1': + '@sentry/node-core@9.42.1(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.36.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/context-async-hooks': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-amqplib': 0.45.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-connect': 0.42.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-dataloader': 0.15.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-express': 0.46.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-fastify': 0.43.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-fs': 0.18.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-generic-pool': 0.42.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-graphql': 0.46.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-hapi': 0.44.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-http': 0.56.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-ioredis': 0.46.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-kafkajs': 0.6.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-knex': 0.43.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-koa': 0.46.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-lru-memoizer': 0.43.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-mongodb': 0.50.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-mongoose': 0.45.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-mysql': 0.44.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-mysql2': 0.44.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-nestjs-core': 0.43.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-pg': 0.49.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-redis-4': 0.45.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-tedious': 0.17.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-undici': 0.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.28.0 - '@prisma/instrumentation': 5.22.0 - '@sentry/core': 8.52.1 - '@sentry/opentelemetry': 8.52.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.29.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.28.0) - import-in-the-middle: 1.11.3 + '@opentelemetry/context-async-hooks': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 + '@sentry/core': 9.42.1 + '@sentry/opentelemetry': 9.42.1(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.36.0) + import-in-the-middle: 1.14.2 + + '@sentry/node-native@9.42.1': + dependencies: + '@sentry-internal/node-native-stacktrace': 0.2.2 + '@sentry/core': 9.42.1 + '@sentry/node': 9.42.1 transitivePeerDependencies: - supports-color - '@sentry/opentelemetry@8.52.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.29.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.28.0)': + '@sentry/node@9.42.1': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.28.0 - '@sentry/core': 8.52.1 + '@opentelemetry/context-async-hooks': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-amqplib': 0.46.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-connect': 0.43.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-dataloader': 0.16.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-express': 0.47.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-fs': 0.19.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-generic-pool': 0.43.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-graphql': 0.47.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-hapi': 0.45.2(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-http': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-ioredis': 0.47.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-kafkajs': 0.7.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-knex': 0.44.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-koa': 0.47.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-lru-memoizer': 0.44.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mongodb': 0.52.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mongoose': 0.46.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mysql': 0.45.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mysql2': 0.45.2(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-pg': 0.51.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-redis-4': 0.46.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-tedious': 0.18.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-undici': 0.10.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 + '@prisma/instrumentation': 6.11.1(@opentelemetry/api@1.9.0) + '@sentry/core': 9.42.1 + '@sentry/node-core': 9.42.1(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.36.0) + '@sentry/opentelemetry': 9.42.1(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.36.0) + import-in-the-middle: 1.14.2 + minimatch: 9.0.5 + transitivePeerDependencies: + - supports-color - '@sentry/types@8.33.1': {} - - '@sentry/utils@8.33.1': + '@sentry/opentelemetry@9.42.1(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.36.0)': dependencies: - '@sentry/types': 8.33.1 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 + '@sentry/core': 9.42.1 - '@sentry/vue@8.33.1(vue@3.5.13(typescript@5.8.3))': + '@sentry/vue@9.42.1(pinia@2.2.4(typescript@5.8.3)(vue@3.5.13(typescript@5.8.3)))(vue@3.5.13(typescript@5.8.3))': dependencies: - '@sentry/browser': 8.33.1 - '@sentry/core': 8.33.1 - '@sentry/types': 8.33.1 - '@sentry/utils': 8.33.1 + '@sentry/browser': 9.42.1 + '@sentry/core': 9.42.1 vue: 3.5.13(typescript@5.8.3) + optionalDependencies: + pinia: 2.2.4(typescript@5.8.3)(vue@3.5.13(typescript@5.8.3)) '@sevinf/maybe@0.5.0': {} @@ -21241,7 +21355,7 @@ snapshots: ts-dedent: 2.2.0 type-fest: 2.19.0 vue: 3.5.13(typescript@5.8.3) - vue-component-type-helpers: 3.0.3 + vue-component-type-helpers: 3.0.4 '@stylistic/eslint-plugin@5.0.0(eslint@9.29.0(jiti@1.21.7))': dependencies: @@ -21507,6 +21621,10 @@ snapshots: dependencies: '@types/node': 20.19.1 + '@types/connect@3.4.38': + dependencies: + '@types/node': 20.19.1 + '@types/convict@6.1.1': dependencies: '@types/node': 20.17.57 @@ -21589,6 +21707,10 @@ snapshots: '@types/html-to-text@9.0.4': {} + '@types/http-proxy@1.17.16': + dependencies: + '@types/node': 20.19.1 + '@types/humanize-duration@3.27.1': {} '@types/imap@0.8.40': @@ -21627,7 +21749,7 @@ snapshots: '@types/jsdom@20.0.1': dependencies: - '@types/node': 20.17.57 + '@types/node': 20.19.1 '@types/tough-cookie': 4.0.2 parse5: 7.1.2 @@ -21718,7 +21840,7 @@ snapshots: '@types/node-fetch@2.6.12': dependencies: '@types/node': 20.19.1 - form-data: 4.0.2 + form-data: 4.0.4 '@types/node@20.17.57': dependencies: @@ -21791,7 +21913,7 @@ snapshots: '@types/caseless': 0.12.5 '@types/node': 20.19.1 '@types/tough-cookie': 4.0.5 - form-data: 2.5.1 + form-data: 4.0.4 '@types/retry@0.12.0': {} @@ -21861,7 +21983,7 @@ snapshots: '@types/cookiejar': 2.1.5 '@types/methods': 1.1.4 '@types/node': 20.17.57 - form-data: 4.0.2 + form-data: 4.0.4 '@types/supertest@6.0.3': dependencies: @@ -22296,36 +22418,37 @@ snapshots: path-browserify: 1.0.1 vscode-uri: 3.0.8 - '@vue-flow/background@1.3.2(@vue-flow/core@1.42.1(vue@3.5.13(typescript@5.8.3)))(vue@3.5.13(typescript@5.8.3))': + '@vue-flow/background@1.3.2(@vue-flow/core@1.45.0(vue@3.5.13(typescript@5.8.3)))(vue@3.5.13(typescript@5.8.3))': dependencies: - '@vue-flow/core': 1.42.1(vue@3.5.13(typescript@5.8.3)) + '@vue-flow/core': 1.45.0(vue@3.5.13(typescript@5.8.3)) vue: 3.5.13(typescript@5.8.3) - '@vue-flow/controls@1.1.2(@vue-flow/core@1.42.1(vue@3.5.13(typescript@5.8.3)))(vue@3.5.13(typescript@5.8.3))': + '@vue-flow/controls@1.1.2(@vue-flow/core@1.45.0(vue@3.5.13(typescript@5.8.3)))(vue@3.5.13(typescript@5.8.3))': dependencies: - '@vue-flow/core': 1.42.1(vue@3.5.13(typescript@5.8.3)) + '@vue-flow/core': 1.45.0(vue@3.5.13(typescript@5.8.3)) vue: 3.5.13(typescript@5.8.3) - '@vue-flow/core@1.42.1(vue@3.5.13(typescript@5.8.3))': + '@vue-flow/core@1.45.0(vue@3.5.13(typescript@5.8.3))': dependencies: '@vueuse/core': 10.11.0(vue@3.5.13(typescript@5.8.3)) d3-drag: 3.0.0 + d3-interpolate: 3.0.1 d3-selection: 3.0.0 d3-zoom: 3.0.0 vue: 3.5.13(typescript@5.8.3) transitivePeerDependencies: - '@vue/composition-api' - '@vue-flow/minimap@1.5.2(@vue-flow/core@1.42.1(vue@3.5.13(typescript@5.8.3)))(vue@3.5.13(typescript@5.8.3))': + '@vue-flow/minimap@1.5.2(@vue-flow/core@1.45.0(vue@3.5.13(typescript@5.8.3)))(vue@3.5.13(typescript@5.8.3))': dependencies: - '@vue-flow/core': 1.42.1(vue@3.5.13(typescript@5.8.3)) + '@vue-flow/core': 1.45.0(vue@3.5.13(typescript@5.8.3)) d3-selection: 3.0.0 d3-zoom: 3.0.0 vue: 3.5.13(typescript@5.8.3) - '@vue-flow/node-resizer@1.4.0(@vue-flow/core@1.42.1(vue@3.5.13(typescript@5.8.3)))(vue@3.5.13(typescript@5.8.3))': + '@vue-flow/node-resizer@1.4.0(@vue-flow/core@1.45.0(vue@3.5.13(typescript@5.8.3)))(vue@3.5.13(typescript@5.8.3))': dependencies: - '@vue-flow/core': 1.42.1(vue@3.5.13(typescript@5.8.3)) + '@vue-flow/core': 1.45.0(vue@3.5.13(typescript@5.8.3)) d3-drag: 3.0.0 d3-selection: 3.0.0 vue: 3.5.13(typescript@5.8.3) @@ -22677,6 +22800,8 @@ snapshots: ansi-styles@6.2.1: {} + ansis@3.17.0: {} + ansis@3.2.0: {} any-promise@1.3.0: {} @@ -22948,7 +23073,7 @@ snapshots: axios-retry@4.5.0(axios@1.10.0): dependencies: - axios: 1.10.0(debug@4.4.1) + axios: 1.10.0 is-retry-allowed: 2.2.0 axios-retry@4.5.0(axios@1.8.3): @@ -22956,10 +23081,18 @@ snapshots: axios: 1.8.3 is-retry-allowed: 2.2.0 + axios@1.10.0: + dependencies: + follow-redirects: 1.15.9(debug@4.3.6) + form-data: 4.0.4 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + axios@1.10.0(debug@4.3.6): dependencies: follow-redirects: 1.15.9(debug@4.3.6) - form-data: 4.0.2 + form-data: 4.0.4 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug @@ -22967,15 +23100,15 @@ snapshots: axios@1.10.0(debug@4.4.0): dependencies: follow-redirects: 1.15.9(debug@4.4.0) - form-data: 4.0.2 + form-data: 4.0.4 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug axios@1.10.0(debug@4.4.1): dependencies: - follow-redirects: 1.15.9(debug@4.3.6) - form-data: 4.0.2 + follow-redirects: 1.15.9(debug@4.4.1) + form-data: 4.0.4 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug @@ -22983,7 +23116,7 @@ snapshots: axios@1.8.3: dependencies: follow-redirects: 1.15.9(debug@4.3.6) - form-data: 4.0.2 + form-data: 4.0.4 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug @@ -23311,7 +23444,7 @@ snapshots: bundlemon@3.1.0(typescript@5.8.3): dependencies: - axios: 1.10.0(debug@4.4.1) + axios: 1.10.0 axios-retry: 4.5.0(axios@1.10.0) brotli-size: 4.0.0 bundlemon-utils: 2.0.1 @@ -23670,7 +23803,7 @@ snapshots: '@codemirror/view': 6.26.3 '@lezer/common': 1.1.0 '@lezer/css': 1.1.1 - '@lezer/highlight': 1.1.1 + '@lezer/highlight': 1.1.1(patch_hash=97f85e6fe46f23015ea0dd420e33d584bc2dc71633910cf131321da31b27ca8c) '@lezer/html': 1.3.0 '@lezer/lr': 1.4.0 @@ -23680,7 +23813,7 @@ snapshots: '@aws-sdk/credential-providers': 3.808.0 '@aws-sdk/protocol-http': 3.374.0 '@aws-sdk/signature-v4': 3.374.0 - form-data: 4.0.2 + form-data: 4.0.4 form-data-encoder: 4.0.2 formdata-node: 6.0.3 js-base64: 3.7.2(patch_hash=bb02fdf69495c7b0768791b60ab6e1a002053b8decd19a174f5755691e5c9500) @@ -23781,15 +23914,15 @@ snapshots: compressible@2.0.18: dependencies: - mime-db: 1.52.0 + mime-db: 1.54.0 - compression@1.8.0: + compression@1.8.1: dependencies: bytes: 3.1.2 compressible: 2.0.18 debug: 2.6.9 negotiator: 0.6.4 - on-headers: 1.0.2 + on-headers: 1.1.0 safe-buffer: 5.2.1 vary: 1.1.2 transitivePeerDependencies: @@ -24461,11 +24594,15 @@ snapshots: didyoumean@1.2.2: {} + diff-match-patch@1.0.5: {} + diff-sequences@29.6.3: {} diff@4.0.2: optional: true + diff@5.2.0: {} + diff@7.0.0: {} diffie-hellman@5.0.3: @@ -25348,7 +25485,7 @@ snapshots: lodash.clonedeep: 4.5.0 lodash.get: 4.4.2 media-typer: 1.1.0 - multer: 2.0.1 + multer: 2.0.2 ono: 7.1.3 path-to-regexp: 8.2.0 qs: 6.14.0 @@ -25614,6 +25751,10 @@ snapshots: optionalDependencies: debug: 4.4.0 + follow-redirects@1.15.9(debug@4.4.1): + optionalDependencies: + debug: 4.4.1(supports-color@8.1.1) + for-each@0.3.3: dependencies: is-callable: 1.2.7 @@ -25635,23 +25776,12 @@ snapshots: form-data-encoder@4.0.2: {} - form-data@2.5.1: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - - form-data@4.0.0: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - - form-data@4.0.2: + form-data@4.0.4: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 es-set-tostringtag: 2.1.0 + hasown: 2.0.2 mime-types: 2.1.35 formdata-node@4.4.1: @@ -25815,14 +25945,6 @@ snapshots: get-caller-file@2.0.5: {} - get-intrinsic@1.2.4: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.1.0 - hasown: 2.0.2 - get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -26160,6 +26282,8 @@ snapshots: help-me@5.0.0: {} + highlight.js@11.11.1: {} + highlight.js@11.9.0: {} hmac-drbg@1.0.1: @@ -26265,6 +26389,25 @@ snapshots: transitivePeerDependencies: - supports-color + http-proxy-middleware@3.0.5: + dependencies: + '@types/http-proxy': 1.17.16 + debug: 4.4.1(supports-color@8.1.1) + http-proxy: 1.18.1(debug@4.4.1) + is-glob: 4.0.3 + is-plain-object: 5.0.0 + micromatch: 4.0.8 + transitivePeerDependencies: + - supports-color + + http-proxy@1.18.1(debug@4.4.1): + dependencies: + eventemitter3: 4.0.7 + follow-redirects: 1.15.9(debug@4.4.1) + requires-port: 1.0.0 + transitivePeerDependencies: + - debug + http-signature@1.4.0: dependencies: assert-plus: 1.0.0 @@ -26319,11 +26462,11 @@ snapshots: dotenv: 16.5.0 extend: 3.0.2 file-type: 16.5.4 - form-data: 4.0.0 + form-data: 4.0.4 isstream: 0.1.2 jsonwebtoken: 9.0.2 mime-types: 2.1.35 - retry-axios: 2.6.0(axios@1.10.0(debug@4.4.1)) + retry-axios: 2.6.0(axios@1.10.0) tough-cookie: 4.1.4 transitivePeerDependencies: - supports-color @@ -26365,7 +26508,7 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 - import-in-the-middle@1.11.3: + import-in-the-middle@1.14.2: dependencies: acorn: 8.14.0 acorn-import-attributes: 1.9.5(acorn@8.14.0) @@ -26392,7 +26535,7 @@ snapshots: infisical-node@1.3.0: dependencies: - axios: 1.10.0(debug@4.4.1) + axios: 1.10.0 dotenv: 16.3.1 tweetnacl: 1.0.3 tweetnacl-util: 0.15.1 @@ -26532,10 +26675,6 @@ snapshots: is-callable@1.2.7: {} - is-core-module@2.13.1: - dependencies: - hasown: 2.0.2 - is-core-module@2.16.1: dependencies: hasown: 2.0.2 @@ -26909,7 +27048,7 @@ snapshots: - babel-plugin-macros - supports-color - jest-config@29.6.2(@types/node@20.17.57)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)): + jest-config@29.6.2(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.8.3)): dependencies: '@babel/core': 7.26.10 '@jest/test-sequencer': 29.6.2 @@ -26934,8 +27073,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 20.17.57 - ts-node: 10.9.2(@types/node@20.19.1)(typescript@5.8.3) + '@types/node': 20.19.1 + ts-node: 10.9.2(@types/node@20.17.57)(typescript@5.8.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -27130,7 +27269,7 @@ snapshots: jest-pnp-resolver: 1.2.2(jest-resolve@29.6.2) jest-util: 29.6.2 jest-validate: 29.6.2 - resolve: 1.22.8 + resolve: 1.22.10 resolve.exports: 2.0.0 slash: 3.0.0 @@ -27215,7 +27354,7 @@ snapshots: jest-util@29.5.0: dependencies: '@jest/types': 29.6.1 - '@types/node': 20.17.57 + '@types/node': 20.19.1 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 @@ -27224,7 +27363,7 @@ snapshots: jest-util@29.6.2: dependencies: '@jest/types': 29.6.1 - '@types/node': 20.17.57 + '@types/node': 20.19.1 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 @@ -27351,7 +27490,7 @@ snapshots: jsdom@20.0.2: dependencies: abab: 2.0.6 - acorn: 8.12.1 + acorn: 8.14.0 acorn-globals: 7.0.1 cssom: 0.5.0 cssstyle: 2.3.0 @@ -27359,7 +27498,7 @@ snapshots: decimal.js: 10.4.3 domexception: 4.0.0 escodegen: 2.0.0 - form-data: 4.0.2 + form-data: 4.0.4 html-encoding-sniffer: 3.0.0 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 @@ -27386,7 +27525,7 @@ snapshots: cssstyle: 3.0.0 data-urls: 5.0.0 decimal.js: 10.4.3 - form-data: 4.0.2 + form-data: 4.0.4 html-encoding-sniffer: 4.0.0 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 @@ -27541,30 +27680,30 @@ snapshots: kuler@2.0.0: {} - langchain@0.3.29(f70fa75ddbb47652add7d0f11a5bc120): + langchain@0.3.29(e83255224da9386305dfb90eaf104268): dependencies: - '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) - '@langchain/openai': 0.5.16(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(ws@8.18.2) - '@langchain/textsplitters': 0.1.0(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) + '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + '@langchain/openai': 0.5.16(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(ws@8.18.2) + '@langchain/textsplitters': 0.1.0(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) js-tiktoken: 1.0.12 js-yaml: 4.1.0 jsonpointer: 5.0.1 - langsmith: 0.3.45(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) + langsmith: 0.3.45(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) openapi-types: 12.1.3 p-retry: 4.6.2 uuid: 10.0.0 yaml: 2.3.4 zod: 3.25.67 optionalDependencies: - '@langchain/anthropic': 0.3.23(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) - '@langchain/aws': 0.1.11(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) - '@langchain/cohere': 0.3.4(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13) - '@langchain/google-genai': 0.2.13(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) - '@langchain/google-vertexai': 0.2.13(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) - '@langchain/groq': 0.2.3(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13) - '@langchain/mistralai': 0.2.1(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(zod@3.25.67) - '@langchain/ollama': 0.2.3(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) - axios: 1.10.0(debug@4.4.1) + '@langchain/anthropic': 0.3.23(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) + '@langchain/aws': 0.1.11(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) + '@langchain/cohere': 0.3.4(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13) + '@langchain/google-genai': 0.2.13(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) + '@langchain/google-vertexai': 0.2.13(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) + '@langchain/groq': 0.2.3(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13) + '@langchain/mistralai': 0.2.1(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(zod@3.25.67) + '@langchain/ollama': 0.2.3(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) + axios: 1.10.0 cheerio: 1.0.0 handlebars: 4.7.8 transitivePeerDependencies: @@ -27574,7 +27713,7 @@ snapshots: - openai - ws - langsmith@0.3.45(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)): + langsmith@0.3.45(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)): dependencies: '@types/uuid': 10.0.0 chalk: 4.1.2 @@ -27585,14 +27724,14 @@ snapshots: uuid: 10.0.0 optionalDependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/sdk-trace-base': 1.29.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) openai: 5.8.1(ws@8.18.2)(zod@3.25.67) lazy-ass@1.6.0: {} lazystream@1.0.1: dependencies: - readable-stream: 2.3.7 + readable-stream: 2.3.8 ldapts@4.2.6: dependencies: @@ -28619,7 +28758,7 @@ snapshots: muggle-string@0.4.1: {} - multer@2.0.1: + multer@2.0.2: dependencies: append-field: 1.0.0 busboy: 1.6.0 @@ -28716,6 +28855,10 @@ snapshots: dependencies: semver: 7.7.2 + node-abi@3.75.0: + dependencies: + semver: 7.7.2 + node-abort-controller@3.1.1: {} node-addon-api@7.1.0: {} @@ -29034,7 +29177,7 @@ snapshots: dependencies: ee-first: 1.1.1 - on-headers@1.0.2: {} + on-headers@1.1.0: {} once@1.4.0: dependencies: @@ -29478,7 +29621,7 @@ snapshots: postcss: 8.4.49 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.8 + resolve: 1.22.10 postcss-js@4.0.1(postcss@8.4.49): dependencies: @@ -29567,7 +29710,7 @@ snapshots: posthog-node@3.2.1: dependencies: - axios: 1.10.0(debug@4.4.1) + axios: 1.10.0 rusha: 0.8.14 transitivePeerDependencies: - debug @@ -30027,7 +30170,7 @@ snapshots: rechoir@0.6.2: dependencies: - resolve: 1.22.8 + resolve: 1.22.10 redent@3.0.0: dependencies: @@ -30242,7 +30385,7 @@ snapshots: resolve@1.22.8: dependencies: - is-core-module: 2.13.1 + is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -30251,9 +30394,9 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 - retry-axios@2.6.0(axios@1.10.0(debug@4.4.1)): + retry-axios@2.6.0(axios@1.10.0): dependencies: - axios: 1.10.0(debug@4.4.1) + axios: 1.10.0 retry-request@7.0.2(encoding@0.1.13): dependencies: @@ -30661,7 +30804,7 @@ snapshots: side-channel@1.0.4: dependencies: call-bind: 1.0.7 - get-intrinsic: 1.2.4 + get-intrinsic: 1.3.0 object-inspect: 1.13.1 side-channel@1.1.0: @@ -30758,7 +30901,7 @@ snapshots: asn1.js: 5.4.1 asn1.js-rfc2560: 5.0.1(asn1.js@5.4.1) asn1.js-rfc5280: 3.0.0 - axios: 1.10.0(debug@4.4.1) + axios: 1.10.0 big-integer: 1.6.52 bignumber.js: 9.1.2 binascii: 0.0.2 @@ -31135,7 +31278,7 @@ snapshots: cookiejar: 2.1.4 debug: 4.4.1(supports-color@8.1.1) fast-safe-stringify: 2.1.1 - form-data: 4.0.2 + form-data: 4.0.4 formidable: 3.5.4 methods: 1.1.2 mime: 2.6.0 @@ -32030,6 +32173,14 @@ snapshots: uuid@9.0.1: {} + v-code-diff@1.13.1(patch_hash=21588de80e591bbc1e5a068d9bce311db5254686443652945d2c7887fdafe9d9)(vue@3.5.13(typescript@5.8.3)): + dependencies: + diff: 5.2.0 + diff-match-patch: 1.0.5 + highlight.js: 11.11.1 + vue: 3.5.13(typescript@5.8.3) + vue-demi: 0.14.10(vue@3.5.13(typescript@5.8.3)) + v3-infinite-loading@1.2.2: {} v8-compile-cache-lib@3.0.1: @@ -32226,7 +32377,7 @@ snapshots: vue-component-type-helpers@2.2.10: {} - vue-component-type-helpers@3.0.3: {} + vue-component-type-helpers@3.0.4: {} vue-demi@0.14.10(vue@3.5.13(typescript@5.8.3)): dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e2700e0e28b..e0aa9c4fed1 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -13,7 +13,7 @@ catalog: '@langchain/openai': 0.5.16 '@langchain/anthropic': 0.3.23 '@langchain/community': 0.3.47 - '@sentry/node': 8.52.1 + '@sentry/node': ^9.42.1 '@types/basic-auth': ^1.1.3 '@types/express': ^5.0.1 '@types/jsonwebtoken': ^9.0.9 @@ -55,7 +55,7 @@ catalog: catalogs: frontend: - '@sentry/vue': ^8.33.1 + '@sentry/vue': ^9.42.1 '@testing-library/jest-dom': ^6.6.3 '@testing-library/user-event': ^14.6.1 '@testing-library/vue': ^8.1.0 diff --git a/scripts/backend-module/backend-module.guide.md b/scripts/backend-module/backend-module-guide.md similarity index 97% rename from scripts/backend-module/backend-module.guide.md rename to scripts/backend-module/backend-module-guide.md index 05272d6e2ce..ae26c0a38f1 100644 --- a/scripts/backend-module/backend-module.guide.md +++ b/scripts/backend-module/backend-module-guide.md @@ -49,7 +49,7 @@ Modules are managed via env vars: - To enable a module (activate it on instance startup), use the env var `N8N_ENABLED_MODULES`. - To disable a module (skip it on instance startup), use the env var `N8N_DISABLED_MODULES`. -- Some modules are **default modules** so they are always enabled unless specifically disabled. +- Some modules are **default modules** so they are always enabled unless specifically disabled. To enable a module by default, add it [here](https://github.com/n8n-io/n8n/blob/c0360e52afe9db37d4dd6e00955fa42b0c851904/packages/%40n8n/backend-common/src/modules/module-registry.ts#L26). Modules that are under a license flag are automatically skipped on startup if the instance is not licensed to use the feature. @@ -225,7 +225,7 @@ Service-level decorators to be aware of: - `@Service()` to make a service usable by the dependency injection container - `@OnLifecycleEvent()` to register a class method to be called on an execution lifecycle event, e.g. `nodeExecuteBefore`, `nodeExecuteAfter`, `workflowExecuteBefore`, and `workflowExecuteAfter` - `@OnPubSubEvent()` to register a class method to be called on receiving a message via Redis pubsub -- `@OnLeaderTakeover()` and `@OnLeaderStopdown` to register a class method to be called on leadership transition in a multi-main setup +- `@OnLeaderTakeover()` and `@OnLeaderStepdown` to register a class method to be called on leadership transition in a multi-main setup ## Repositories @@ -333,7 +333,7 @@ Currently, testing utilities live partly at `cli` and partly at `@n8n/backend-te 4. Existing features that are not modules (e.g. LDAP) should be turned into modules over time. -### FAQs +## FAQs - **What is a good example of a backend module?** Our first backend module is the `insights` module at `packages/@n8n/modules/insights`. - **My feature is already a separate _package_ at `packages/@n8n/{feature}`. How does this work with modules?** If your feature is already fully decoupled from `cli`, or if you know in advance that your feature will have zero dependencies on `cli`, then you already stand to gain most of the benefits of modularity. In this case, you can add a thin module to `cli` containing an entrypoint to your feature imported from your package, so that your feature is loaded only when needed. diff --git a/test-workflows/README.md b/test-workflows/README.md deleted file mode 100644 index a5ddbe7211d..00000000000 --- a/test-workflows/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# test-workflows -n8n workflows used for testing nodes diff --git a/test-workflows/credentials.json b/test-workflows/credentials.json deleted file mode 100644 index 3c0b3f7ca85..00000000000 --- a/test-workflows/credentials.json +++ /dev/null @@ -1,3022 +0,0 @@ -[ - { - "createdAt": "2024-03-04T15:40:29.192Z", - "updatedAt": "2024-03-04T15:54:48.737Z", - "id": "1Dr1Xbrd2xeq7gaq", - "name": "Anthropic account", - "data": "U2FsdGVkX1+IyUbFB38M0XCIgoH5zoL1tjGnwKq+JzneJyqgreZTc2VXu6wdpgquR4wy1MzA3nTvg/sTFIMRCor4mQxoSesF1ngWRNjm0kYMBFFcLd587DNLysVE9Doq4UpzRjYH8uu18k8PWbhOgOLi9dmiBDhiFSK6xQ1fdTwT6E1F3BkEvx1ckh1nnuzj", - "type": "anthropicApi", - "nodesAccess": [ - { - "nodeType": "@n8n/n8n-nodes-langchain.lmChatAnthropic", - "date": "2024-03-04T15:40:29.190Z" - } - ] - }, - { - "createdAt": "2021-01-21T13:43:39.125Z", - "updatedAt": "2021-02-09T12:36:44.881Z", - "id": "2", - "name": "Tele2 Public FTP http://speedtest.tele2.net/", - "data": "U2FsdGVkX1/mo3zDTPKE2JYkV/RH0LnA8DWVO8/mLT8ozSNMp5XbO9TCVeMB04h2zn+/RkL8BSqVzusGvPc/hB5wdpECsR9LXQsL2pVLNXkplMlyB8OlRylJ1DFmYuec", - "type": "ftp", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.ftp", - "date": "2021-01-21T13:43:39.123Z" - } - ] - }, - { - "createdAt": "2021-02-15T11:37:03.072Z", - "updatedAt": "2021-07-06T10:39:59.212Z", - "id": "3", - "name": "SMTP creds", - "data": "U2FsdGVkX18AXWFca0iueXujyV9hZbycosL6u3pYftMwTmHEOdwEKlPNFoxVtOsCWy5O00xWs2lV3M3XKIGmS1KWXD3tLMAj5O5Ynk780lFkVkaTOoHAFN5gkggmVawx", - "type": "smtp", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.emailSend", - "date": "2021-02-15T11:37:03.066Z" - } - ] - }, - { - "createdAt": "2021-02-15T11:37:46.005Z", - "updatedAt": "2021-06-26T06:59:11.676Z", - "id": "4", - "name": "IMAP creds", - "data": "U2FsdGVkX19SdPyFa/K5tlg2Tie4djwWc2JOFHLQQFjg07y6TI0V4V6oMiwOYgnAUt4r3n80bASv7w1kmjcvimSFop+9nlPx8pndyVGdUOfn5f9fPwmM6lUQVCGiHRtB", - "type": "imap", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.emailReadImap", - "date": "2021-02-15T11:37:46.001Z" - } - ] - }, - { - "createdAt": "2021-02-15T12:57:59.494Z", - "updatedAt": "2021-02-15T12:57:59.494Z", - "id": "5", - "name": "Disqus token", - "data": "U2FsdGVkX19UyoTbSFiMuYLDR5KP2SWmOu8hBabOu6taMrK1oAmoPdT2ZFr4Yjl2Sq62gA7WfKgE/qqCU2irNVBByXtWLIVeAHGTm6tDKQ+U+OPGDaTNuJciU+RsQ/VpwpN2yZW4CfOBQUR4jONzqQ==", - "type": "disqusApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.disqus", - "date": "2021-02-15T12:57:59.492Z" - } - ] - }, - { - "createdAt": "2021-02-15T13:08:06.531Z", - "updatedAt": "2021-02-15T13:08:06.531Z", - "id": "6", - "name": "Dropbox token", - "data": "U2FsdGVkX18JY4G+S5NaTkmVwYpW6yrfX3bVIkrw45e6Pf1sT0V4fciAHb/fh6oZtToCnmSWIsTdpGAdI4fJuz7Fc5hPMWLVJlxcK9EVnwecFuuCkcKSGqKfC4qQw4z1L5HrFvtRqu3kdLBJ2LERwA==", - "type": "dropboxApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.dropbox", - "date": "2021-02-15T13:08:06.528Z" - } - ] - }, - { - "createdAt": "2021-02-15T13:45:49.854Z", - "updatedAt": "2021-02-15T13:45:49.854Z", - "id": "7", - "name": "pagerduty token", - "data": "U2FsdGVkX1/B3ghuFhz1347NvobE2x7Mi4WjLVFoQpiZVTTDIk3dlz5f/UhX3Pw/59xwwReMvyw8MRo/RRI9/g==", - "type": "pagerDutyApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.pagerDuty", - "date": "2021-02-15T13:45:49.852Z" - } - ] - }, - { - "createdAt": "2021-02-15T16:04:13.241Z", - "updatedAt": "2021-02-15T16:04:13.242Z", - "id": "8", - "name": "mailchimp key", - "data": "U2FsdGVkX1+37YCqnvgF09N7Dx3kS8AUzXuWJ9ZW2wiyW5lx1gptBpp6HAR1ntabXt/LCHN+nsEaNSKhllEZjoYmxIWWz7r2i43MHIFbPog=", - "type": "mailchimpApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.mailchimp", - "date": "2021-02-15T16:04:13.177Z" - } - ] - }, - { - "createdAt": "2021-02-16T12:20:17.902Z", - "updatedAt": "2021-02-16T12:20:17.902Z", - "id": "9", - "name": "openweathermap token", - "data": "U2FsdGVkX1/evqLuEr9GFldum4E2ZLRLU+rBW+pVF4Qn8KOCs1BUz4tR6NWiRI3HogaqM0o/vu3jIJfBLE3qyZmcK0SRgQvLhsp7eQ9pLdU=", - "type": "openWeatherMapApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.openWeatherMap", - "date": "2021-02-16T12:20:17.899Z" - } - ] - }, - { - "createdAt": "2021-02-16T14:14:21.988Z", - "updatedAt": "2021-02-16T14:14:21.988Z", - "id": "10", - "name": "sentry io token", - "data": "U2FsdGVkX19boPxIYR9oj9q1i/HeugKAv8UUU5wk0JMzdIALxase4dzBXYIsOe5MiONVrOYUTBR4VScT8HAEExsVY8osfQ+T7QkDKInRn8kmOUdTR05DW2mVQHKNh/Sq", - "type": "sentryIoApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.sentryIo", - "date": "2021-02-16T14:14:21.984Z" - } - ] - }, - { - "createdAt": "2021-02-16T14:58:08.182Z", - "updatedAt": "2021-02-16T14:58:08.182Z", - "id": "11", - "name": "hubsport api key", - "data": "U2FsdGVkX1/Z24uT/B6cgNQGNCMknJBH1bpSAy0nQo/ohxX8SRiguCIRvw0/9aFfOuP7KjS8EnRGzNZmrgITKFeFDORHIt4zwlbW41zrE2Q=", - "type": "hubspotApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.hubspot", - "date": "2021-02-16T14:58:08.180Z" - } - ] - }, - { - "createdAt": "2021-02-17T08:20:03.577Z", - "updatedAt": "2021-02-17T08:20:03.577Z", - "id": "12", - "name": "personal rocket api ", - "data": "U2FsdGVkX1/Dlf+LrEJk5tWsYK8p7xB6XMx92eM7eLuFapQ0y8o9gn8mklaC1Bqv2jm3VUgZY7slENEmUkQ9XxhI9gle6uxzg5FE6FKmE4PN42jLaW/xCaAL7ZYto+8Y/aUWtnsAPWYCjI8e+qgTlN5Fl38vbnDqUwBzMRvc6AYhmSBipr5GPRpHJwkX4+squOyIU6P5Ed1zD6YZjJMkEA==", - "type": "rocketchatApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.rocketchat", - "date": "2021-02-17T08:20:03.559Z" - } - ] - }, - { - "createdAt": "2021-02-17T09:04:43.331Z", - "updatedAt": "2021-02-17T09:04:43.331Z", - "id": "13", - "name": "clickup cred", - "data": "U2FsdGVkX18dAAovXIsWCleujbur0NmOsqVPA90QCZzWC2CNmXL+RCvMVjAuz0USj0QasZ7y5Aiq83qUCHMhidooq/RWPiUcrNXoQePz8bE=", - "type": "clickUpApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.clickUp", - "date": "2021-02-17T09:04:43.328Z" - } - ] - }, - { - "createdAt": "2021-02-17T12:41:45.809Z", - "updatedAt": "2021-02-17T12:41:45.809Z", - "id": "14", - "name": "my drift creds", - "data": "U2FsdGVkX1+AdLjV9aXYN2meYs8Qwbyznr0WHBdcp53s5k+Dc37I0dGW5XsrAM6IjK+u1clbt36uM+86roZo5LeVWYHYeQNhgyKPvfYQyZE=", - "type": "driftApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.drift", - "date": "2021-02-17T12:41:45.805Z" - } - ] - }, - { - "createdAt": "2021-02-17T12:47:31.216Z", - "updatedAt": "2021-02-17T12:47:31.216Z", - "id": "15", - "name": "Drift API credentials", - "data": "U2FsdGVkX18pOmX9k7sDuGnTKOWfEXWUR7chWgIt2UNT0PBJf7fw3hQORICHZla0de/JMQiDGNXFzEY8aBsQ9d83Rx5LnWQlQY+d7rcLMhw=", - "type": "driftApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.drift", - "date": "2021-02-17T12:47:31.214Z" - } - ] - }, - { - "createdAt": "2021-02-17T13:20:35.267Z", - "updatedAt": "2021-10-27T08:37:42.803Z", - "id": "16", - "name": "Zoom JWT token", - "data": "U2FsdGVkX1/nLFjDaTRdH9RqMo/qLJjl49jiPkJkSrHoQaqXeHZkuSEAA79CZidSST1R3MoQHVRcNgipttXNwhUb0IFLQAegDf3yRGbqNxIOuMacwIVDdG7okIo0+fHvZXqeCyBONitjZXKrrqQGRCNLpPsUSdRGa3f0pxtCOLE7QcwzE4lz+JpbOZknrHJ9MkL8AuARjobQFhi6X/xX65iOWHsfPPf50MoaUjk4ItJM1sZePu7lJxFAXLY7qeo7VclA8KPQOjkqMdngfWH3BA==", - "type": "zoomApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.zoom", - "date": "2021-02-17T13:20:35.262Z" - } - ] - }, - { - "createdAt": "2021-02-17T14:22:57.677Z", - "updatedAt": "2023-02-20T11:04:22.768Z", - "id": "17", - "name": "Strava credentials", - "data": "U2FsdGVkX1/KS4H4rG6sH5TJp4CSv5VKNVxNxxV2+SNg+LK33zuDwHoHbWIyNneb6I1FO17ue3F+wTdcpYu7m+PuYBKzth46k1Ld96oPWjszE8w29iYhSjPzstDdDnWJRxt1srFZOGdMIarc/ydhcrpVMvWiNgTruDxzv696z55d9DYSDzL+CM4NuE/y05mpiRbm02f/6qB0vBI+TwooMiNCRrt2pNdP6oNZDy8Wug+8uXzbUpsIQUUdSSGWuG1joIA69mYf28ZXfGptfW2AnrWBMEt59JvKp2wP26oEz3UTEbN0sUpqjdZU7uFvPxNMob2lfvux7j/5lxdgXNsXxe7Haw7elrI7Y2ErUtWjddaw9k5HWlbqZY6bYOIGGdb7iP3UXQ78a8R86h9+/EZDqHhWKK5e95l1v6DRulBR/rriteTeyyxrMMwkm+nUDhxxa5g+IZ3z0QmnWEO81QIwzazpezsQn0XyZ+u2Vgud+u4cTUHFP5L+a/M73u4nHd/8aCoXrNAHXWiwdIwDUXNUgQYQxOz0hceWlZkBj/hrLmG1+O56HPa5YI/6XMHHQUVaREkYuUGuoxiN9TZIsXoNivP7qxkDEJzcQ7Iwfk8LPMOpUKCWptUDBarz731N1MxozADWpaC4xqWjlf7I4T3LzO2n1usn+XYazmDZRorAYDjykhTDoY6wE51GqpSVgaCX9TFV9RTwRBdmDw7vaLJWQ/AaSrfjklLCn8i/aKMG9IIpfor/gaR2/dWwXIMr1a4GlQssSSKpNkidZuQkMUSUydbwLzYMgn0Gedw5JW6h93KLgrrkAW5nxeHpntLYgMObrUuzdK+lRLF2vbglLWUAw6uAjIjRO9Web0EjVFyG4K+e+Z4sYJdTtQYeNLoHK67PqGgjMMqlmwws9ryyUHFPZvCJ0vJHQXZg4p6D1/FwHmLYToWNrsbxFM3YXl9WUJtLsfCG8clZlP4Y67zm+bGNDHIgulrsJ49uOEFvvHdFjeVRr4v8rH7FZIvEej8w4GuLCqyI1bCyFvEoJ6fxoA86JEzbfh4Y2sQUUAZv7VEPOBstk3lzLyOtX8Kdv5Q4YgsKc265dyXVRKjJEP9wWqKyuGB0tsD9eUqFIz/xu/BJ457sxMV4Icq1lL0TpXv2ncuZpl/BNUGSRFoKm9xWMtPjwWsDsyt2apHYoGkODK9zWuiZ2G/kE5afzUz2+U90hu8Q5ekBvnI6B16w5sYH4gMc5a47JDL6MSNc9kXt5mT9kW3mcOivAOEPCCJJ/mvozb5HzURYKKsZOXM8NmLUdZIBTVudLY9XYQ9Jm7lNlV0d6JoT5T6y8gxVrK3ViqzoC4YGpkhBJ3GtlQjXhHLFhyQiVYq5tDt2h1wBskFZrrP5BwmlVeR35pGHtlzme1FSRfM8qyA1H9Cw4bxEm4AAgZOAuyk3Lcy9zglYH6JsNdX8Fa16PNp6uCtaCWhd+wd+iwOuCnvcSUohg07Jzaj7QpZFZ5eUZlRsfSLhW6YZkBCqdjmOU6Fix0+BuYAonQigoZUQyr1UE0rRlo2hxLqTbaGQh4XTCZvLE+xsI/YVVtY+bwXK681sM2tqYf6ebua1J3HJXm24rNbCdwwkdGe0YYm57o9xTgKajRE2bHPiA3d6iu+mB/vgufVJ2RCdbU+7tAN8", - "type": "stravaOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.strava", - "date": "2021-02-17T14:22:57.672Z" - } - ] - }, - { - "createdAt": "2021-02-17T15:36:32.700Z", - "updatedAt": "2021-02-17T15:36:32.700Z", - "id": "18", - "name": "Slack Token", - "data": "U2FsdGVkX18Eai5B3FetbX23OclBkxKHbhYWwokHtZWEVfZRpMuPar9ZOZ0pvU1XhupZUORmHqPUr6ArDnvNGjZW4U8uZmtWUgp27RDSHji3d0JR071WsmtszpMEEBXHtspvSq8HYfkzTfBz65IZNLuBrpkDK3zSLmWPL1XAHlY=", - "type": "slackApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.slack", - "date": "2021-02-17T15:36:32.693Z" - } - ] - }, - { - "createdAt": "2021-02-18T08:26:48.413Z", - "updatedAt": "2021-10-27T08:50:17.141Z", - "id": "19", - "name": "Gitlap token", - "data": "U2FsdGVkX1+3yzHMp71Ko+7dex/Dl7iQ4p0PVfNRDItUQgmQR3TUko+ATWWdPaaFbp5wMCszYx7YACqeqxtUcg==", - "type": "gitlabApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.gitlab", - "date": "2021-02-18T08:26:48.398Z" - } - ] - }, - { - "createdAt": "2021-02-18T09:07:01.559Z", - "updatedAt": "2021-02-18T09:07:01.559Z", - "id": "20", - "name": "Medium token", - "data": "U2FsdGVkX1+YQ8h3jLxoLEdAteuDiJ8wtSB7wTl9X9oFgLceBq694vCaXy7kCZHTRZBl0zTTi9UthBh9m8VwT4/+Ew+Q72mi+Auf6p3i4Sy52wXxrOkXDcF4TIt6A18tIgv9jyaBixm7ycd4NEaQ7A==", - "type": "mediumApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.medium", - "date": "2021-02-18T09:07:01.554Z" - } - ] - }, - { - "createdAt": "2021-02-18T10:24:53.036Z", - "updatedAt": "2021-02-18T10:24:53.037Z", - "id": "21", - "name": "Github creds", - "data": "U2FsdGVkX19vvKc1mHdf6RBllMHreMQEoOQiPXi15UKEoDvcCMG00nClARleUwCKe1zbUXRBnVLsE6zwbAsIIcacIcWlRYi/d8IG54cr/Y+vRuqkU1Zs6lkefaCd4MM/U7XU/KB7Wkrg2pvhwk7jIw==", - "type": "githubApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.github", - "date": "2021-02-18T10:24:52.976Z" - } - ] - }, - { - "createdAt": "2021-02-18T14:41:23.986Z", - "updatedAt": "2023-03-06T15:34:18.960Z", - "id": "22", - "name": "Gmail 0auth", - "data": "U2FsdGVkX18HNEU/J8HtjdEfFOwh5m9zIsaqDUo2/9QTtYoVW8dmoxehXf8eA87Ekinl2EMcCf43OP6HthGT3T3ZmtsVXjMg4UTQSNVtvv4uxmIobNDMB+ExQniOTMe81xOV+wzij9mdxhQb2RilYP5/1EqyClQNXOg9Q7uEIsa+o/m1DTSf5tucQOlTAyYLq9QSPkNE0a/3Uqxs9dQqdZK3MmabP/myvyD6ON7pcH6m0K0URYK0wMhQfvcrViTfW/O4TypHpXWOqdQ8vQXUyZCVYl8RfoJZEDj/jGG57jRgnXCFJw9ENLeoT1PYnm8ZiDLZk1/X8ZS0TzJ12cuekQcknghWGvu2biAyIE5pzBar3QCT/dQhk2xVkeP9SMUYH4HhcnXTne5dNK08gcKCJanUHM6D1o8zwJQzSgCB7xqLlv8PKJqU7CA9i+locGITqFUYOb14gR+t5blJMB/H9oQnSmC0kYztJQlIY8A3HLi1c6iBnwc9bnCEm7vWW/kWrlpcbZPSSHRV32qvjmF8wYgCTZHfTZFFiGzrN1NTc86ivI7ACj65G2CJhkAQjKAlSGpm2VYwz59JIEK91nUZa3zliUQtdlySeUI2Ri/B2hf7X4sHQ+DkfWeKogNJwA6LQeLoAL+nRC8pU2Sk8DRgh6LdxcxRqPGTjNlZ2ZUkATSkkej2BDd6iKpC6BQIooDckNs0l0XY7j8VNBvO7bEilsMQju3MwG1ckf/weqDh6YPKw0ru7hPExzdnzCsRyIaeMDnFcxsAEs9yT0kUuEEMDz0+BS2JTM6uB6hCcMNt0OUgBzXULkn2FZusKDXS+PsswyLsQPPE19bG2ZanDBiSxYYNeUtFmvL4BZDPUmC8jx+r58JLn2twBGKlV+ZygJbItllpHtWp2x+V82I7q188ghEFdNlrfoJNJ2duRmJn+FjNlLnmGXhz/2j6KzHYfwtOrB+V3VN01Apya+Fq1mAKDmBlTUB0q5ElxLYfFe6cojXOdzDupsau9nZ4E76fG3d2Tnd7R7Eq/PiddZLxZkgcOSnP3j4vvbqbhzP/bEv2PeN4rMwFHoy+NL9/Jx6pMHMQzaY6O9O49sMk6Whx389+E+qthuteITW/L9NJrXkrEei+nVp7L651oKftLC6NT7eT9j2ZrYgZUW3XwiqopT0HkVk9xCE5XJ+49bBvKl5g4grgDQu5QMlN9pKHlgsTKU1Do0OoOUB5CP57OvKoULuidI9n1va6pS3acD05Y17L/eZ8Vt4B01XQWvAQL/SQ44P+fXLMJO91v6MsauIuyTEEWuCGgBnzhpvGoQIlSJLNmvy70ahhmwk8KmktHgq4P0WVWKxKgiyaA/rmEORw8BLDlGQaO+4HJPFRLTtAsXa8x1BP7IuEAcGa4NB6ApZ+IGrhxh7Hme9beo6daz6IKmb6cpnqvLepJ6DK2QewcZ1uWb8sq1isKfQJ+NkCym8xX1GKzETKRvWpA5Pn04RE5PIvHDj7OGd5Iv6pTOuMeiVF7itID7g5DL7KdpVitmkkc9hMNhfyWgjo4cvfiysGifE7nOpIC/qb+WEBytBr0DheEnv2Y3NT1JBuA3MulEnFcLdNfiDXt6JRHQOCGXpf0EdyV/z6ZUKqLzojEV2A56Uhd6SDkNzup2qBVYb1VZMf3sRd6/lGdmHB1asZUreNBLQGjW+/mMsRHQJMby0ii/rU8yJxPZS7O0Mlae+RXI4MoETnKdjz2oG5xYOnGYsfVv6LF8qyKvgC0HBe2jGFk/DhgIwDj4gNU8AuuSRfY8mG4vZTrm3IRe//3vq3HxK+AyaSxeMj7ZLnx+oMFLicUDFS2b2+BOQs7Z1TXUiPojp9WJZB2oPs+EK3OPjsrXYlIrmcDzefTg7ZGCKjKaureHs5eErIWgM/TjSuWlohyDQ2N+vjeUwg3HNKwJRfJDI414Yfk38kXaeBX3tmEJ6EZzgcfNBrvw8yxL6IUpb0vx4C8dUM/8FLPiJIJyheEG+8+DYL+6gJ/keuui+kgVJdrEgUgDzZPa06mw0WOoN+ADMAEl8rIIHcVFWpUBnbpUaVYta4E3pDCICQjGngpM+zaHGofIjfDoAXvUHVkiA50x0EZ55mKOzJ4edd8EsGrbJmoobp/DjBNx/aw+d7Qn6RrCKrlXAQannnU8NuhMhtLWLy42PkwDStQhw+zrte3/HGz4bfFHb0f7uoZzuqk8VtoqoK7HiwbD+QDJhivLzqWU5U2MJghfFSFGm6hyFSRdgN77662rYusHIiRRNsw9pe1FRgyTxr/A79V0HKCKXucxIuKQ/KjdxMxHc6cU0WlTc39mXOEA==", - "type": "gmailOAuth2", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.gmail", - "date": "2021-02-18T14:41:23.732Z" - } - ] - }, - { - "createdAt": "2021-02-18T15:18:21.795Z", - "updatedAt": "2023-03-06T15:34:18.782Z", - "id": "23", - "name": "Google calendar 0auth creds", - "data": "U2FsdGVkX1+qd8+Rp+6Z7qcqFaHdp/hHy53JfQIaZifRycH7GAmAc2gIQcaWnlc/8oeyNl6p8GCD1w6MNVuRgeMBIo0/cjB49tU3pJkw3UfXWJWW+I2QIivOpCk3jDyACzLEgEeyzY7R/vn1wsYjlyx/dUgzG7wTDRg0XBjDDkPcxFrymTV1n6JQUQ9/NTVrv5yibMrh2vF62wOP1YJpzhCRMNCIKx6N9GGBiRJo040fiQMVVpMZ1LpAlIhIoXMJAZRINk6wJocv3cdFt5QC1p3TkvB/lPwMAmY701YMIsZ7X5X1OkNqmrec+yyFphOefHpW1nXD3AD1H3Ez1WzZtZAr4X5rvWVrs0Tza7qB8bxBvSJx3WUbsyoH/bMwleERb/cIl9Vhj3CJR3B0VQJTUxcgu8E4nGqCxoFTUfnUD8C/Ekh5RAnMyNZaS6JJzKTSHpaXpszJCyc5QTljncg88xsrckue1EXCOKl83Z4mEK7PdGCHwX/xpGMK1Cnl1wbfbb0pRhgg+KIxzM16Ap0OuXtvQQT7sllH3sdo5J1+vIYJpqujhYlm3VVAbV/xy5fledVTVraMk4tKKFYCAvFT89bXpb67BbyD/xUDOaUyOjgWD5chJqbWA3TYg3VvHhOtuu5tXIKhpiDfarJmDS+8WAS6Pfbpex4B7nLPJ/WVulRX731FCDXd0XcY3emd16+d+n+ykYmHSgeun6yHQVlMyU3LAWBMlu5BZCBrGmvH9mQWHoxwNeDQABgbLllhRUHnsSFGTM3MJolm5IxTDLSMG/Mn6w2UmheayEXvuDdYLUQaGBhr5sxRO3kYS7/q6xNFcq65Mrn6j6M5zE9SUR8dkCLR4GXlAi/qdBQw63ohI7AcTV/+Ebn1YZLQhIF78VGSs0bb1897nyi1a7dUYr1y7sTRrJ3DohKdi6Ccuydpg48WZVbSnes8T8dOrbpiRRroYuX3PJoICf3rqQw+JsxM6bhZbM72z5dh8e4AKvb5QcHwqm/HbBI9dhNp/sjN01DdP3kcioH1bmNBcbRru/Xob2SJdDupjc3ZSSuizk0AtLPYBM79ZeYqH2th3Q3d5azkIGGDpSZ3n5uKilXMjkIda3y/7AMATiiy63hXrrAjgQbJF+D8nDbhCity/xPG+l7MY3sHBjl2c/+kLdAbh1wu1KsmKIRbOklingBSg91DJFdwolk24eLwgEifGvi3kQfPssWN+Em3G9wWHVU6ncDdnlfysz7yH5YtwXGnN4Go5Ytpa5eAPKtJ15g4KhSYahzIOPqNVWSzZjNU/O9y1oUEmqq8yLl/hyAhlOuS/pSmAkpFspivnFtYtQ9Q9BsjN2QII2pYKriqD7NI0pj6sO1issRRVYwabAZFu7kHVUcGgBqVwyJNLW5ywJF8EUqXBnE6/6T2VM0AbN/C78wKksCcxfqUdM0ivhpC0IG/rRsb72fEjWtCA2NFKtKrm/17NTs+EJWY+nO+9v56nfzPv2sSzw==", - "type": "googleCalendarOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.googleCalendar", - "date": "2021-02-18T15:18:21.790Z" - } - ] - }, - { - "createdAt": "2021-02-18T16:03:02.703Z", - "updatedAt": "2023-03-06T15:34:18.788Z", - "id": "24", - "name": "Google Tasks 0auth creds", - "data": "U2FsdGVkX1+edD61FSggCKY04QefXoggIREO7JWOw+3HTPR+yAxw8+oJRZ8TiP4p7A8ozDgpmqpwR1sMJrM8UtWTmgW0qUEPqQHNeCldjVRvkON3lklRNBdnLWELMojccrm7itIxqwRc78GSbdgyxu0yFnP0BP7zqoXaaKTxdvETTsYlKeEqI1g7T7Pe3uThCsI6EPSlN5dNTPCaQ6JqThXtA7oG0ycppNfLntj6wGTh/WVfcXFfpVwXTioNxYQQrcnZ4CvM1oV7oG24I6pfbgXg1XtB/jOKuYDmxvCdiv9ATCD51bj2PqJXxcWD7B4EC7cpGzkkSx8VCOQVM/zBxFAsfvWOdKKYVJ3WG7NWg2D8kFHsAo+Z1hwL4kjKXeYPQP5aBKEEGgi05ekXa+6R3LEz0lqrKN+BlztWsJ5v1K0T6Sijiw0ejHQlh1kNSeLXomP7NBlSravGUXTV7DM8uqpE8Wy6GUeRcS0xrl0ih45fdLWAv/M2gQ7T+ga3VNIGluGtNXraCrdpl4mqeZH/MdReshoOYym6owwgTg7fJ+ZdzMfG78NfB7/WuOahtv2u1IK0L5l9ehMvQzdGiWA+UTfC1o8LT5euQqM7HFskEbEp9/8w4cgOFMEYH6r+A/J3U2iji3jYVKUNz/g4rb/R/8uV5z+AjNgu7V+BM7noI3+IGf7SEtsg+G71pGB15R8w6hbcjcQD17WcPWXULCyJ5LbdQntmYc3t5ApBHJ+axO49TZAQN9Di8n7MVOL6C3lsSfcL7Rno+k8mUXJAdYmjxb9hGTSqeVLrTklRor41zm3yjiXRJTxnyuj2zOL0Sf9KmZMtVq4uT0tzK+w3KFx3qeZUjgU2z3tCOTNkfWX9pIbeqqQwvnLRONj5SYekf8fPk8z3nR838eGWGBE78fsSWmTn3PZV6o3Ipo/cX/Upm7ME8oaUnUFml5C++eOPEzru/fxLGuYmkf63o61u4CPEUvPdGfBiG8VmdWK7INrN9zbIj/HhryslI4btVPlVQI6yYgj54xBj3kXC7YhjVVRv7AtKojWkb40nnDuHsfbmCiUFtW61Fc9Tzk+QtunwKMIA0LL0Opt4m8FMF3gO1chF0i7xHiwQaezxvpEt4o+b0RL1ELg5GNmgOFEQpk0SgX/o6duf4NcK/jnM0a52eRC1/P6EJf5cbBO4uAz4JZgF0x4H42aN5fkg3foDdc+CjSRo0sUztGX2CS5Bz9drFRxPbJ43tntYZLH2SECg/T/l7KMT7XHLuakNOME5NUZ6XQ+A", - "type": "googleTasksOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.googleTasks", - "date": "2021-02-18T16:03:02.698Z" - } - ] - }, - { - "createdAt": "2021-02-19T07:23:21.167Z", - "updatedAt": "2023-03-06T15:34:18.909Z", - "id": "25", - "name": "Google Contacts creds", - "data": "U2FsdGVkX19VGtbv7GPw5kvNUHdRv0KD24G2pKQkF3HBq/VxgslaL3JS909bS68gIPBgV6cbuz4UiDBK/nodQ4L9Gus7lpfM8kuNC3ojlyn/AQvYqfuO+IBpGqkeO5surLDhdnCZBcHBOZlWDruaqT+a92ewm9i7PQJNQBcQ8F5zcOBJr2ZM3fZIxVNA7bhl+T1qeUrdGLOQSxVc/OlH8HNTttxpQhCI8gYapBOhPUscvKKe4lcqGJftSSyohqJX59PGNtostOku4GU4iNr5RxU6m0BhqVqQSt1wYxkbO+L5C8VqwFp6zndX5wbqcc+Z2OzkjBLhl/MPc+ZVX8fHsPpWopbcplX81zOr6bNbzKcaoX2FyIccV6YeSNw7zSVrVfQog3qZd1KMLbK8Tpwj1zqH/J07BWnu2yJf/6EPe6jQPU099qObwxGX/AcZbVDJeVzPeiTQNhQNFf2z2SKb5SYecbEz9QA7i4BZxPVOcC+1Xzuq83Rt9VQfYOqSkqVphD11U6fXfULCmkW2Rns/y+FRqMi+XG+72eWM7U7emmBtm+4mjH/WMKDTe6EwF11VFE/6MYoYfwAVWwyZ4OTyZZMC118oenid5AsTeRjEP2zBD58biK3MTHTlQCKdbbySW+bjfJ+I9subcgUoHBlrFBnN+pmT/0mmR8+ijwP6eaItaxjwjbh4bW2Lco6vh/2w5aC/DohIYA6DdvQs1xNs9TgKXsvyVwYRr5cnzyMpk2hVbeeF6USFRkLlWy4uux3hSzUJswmETd/4dO2j/jl7DiFG3xacGHChyKcauF711vSCUMnKCJjcrvu8DWM13GK1rmD63O3NH0j3tYX854cZlFQ4Jkzla3ziIpKlpZe3hnD6eXKIa6w89C3ZuWcwlSS7P3NhQaHHqAKavmyYIDe+tkI3lYMxfoWu0Z+i5h8WyNPpDNT4X9pll9Y4+XfeD6+BUPcMFL1RyPQrZ7SnGfebww9iumnjQ3b2KOLILdZI8n+Y6jJGJY9Ys7B9Etvgf0y3vQ2ZEzfDbZwkv7EF24GBF95G677yOSgzHdv05UjmZwW5b6pT4j5af9D9DwTitNbhSKYfFhTFqEf0+YZ0YvjIE25l2UraFdGEawotxCiOxSwZ4KMetRSiKPEiB/4jhuWKyfAY8OAcQ6+APMtSSFMiDAHvPdqav/ebzsOtywav7UyjM+o5uyj+3OoniPl6EOA/aZTPPA3eYR3baaQ63VWMlaqs7Wgq0R7XxJUAgUs23novfMfecEpiqNW0n6TQG89MtPruyUCwDnVBuASqbIkffw==", - "type": "googleContactsOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.googleContacts", - "date": "2021-02-19T07:23:21.161Z" - } - ] - }, - { - "createdAt": "2021-02-19T07:36:52.875Z", - "updatedAt": "2023-03-06T15:34:18.930Z", - "id": "26", - "name": "Google Drive creds", - "data": "U2FsdGVkX19TL4Gerzx9CT6G9dLI2TmgDJdZQXu1l1hqxF7Y+jP+hHFaVpunu8Yhn14NHNMakt0uCaHFXKbj47QdZGo/AEgP2SeY0WBG47FPJAgr3iBSSuELJNH5ha/OCBrspKTKRBO0vu0p2Ypfqqx7JB7GmaczRo/VRuBn92edWdw7MIVOBZgVLBw8BBR1O3YMwfHYWxGeqkxQEXNhVvxvPqTJNJnwWwAyARJbhsp9QnI9IAhRcO9pPnIezQqcTQkE5ufQnNB0B/6EwdCCDf8ACg5yIDtIc9h9HtNrkNoEoAvNNfDpdu6ZSRTH+j00ggwA53t+l29Ip3p/1jsnjgkf/6+ySj4hWZl/CLx5SNY4phz7uTvME1/8wqOWF/MaXCzfVSmEuuxzqnX6q1jQgpRoMzAs+lKl11ZzK46b47wFiNEGBIwy8xhOX7y/Dn5a+ehmzOfvO2OlzCLyuq+TVSmJaMAEol1WBXiefA1iukT1LD2Qb0p9j8bn8LHP//zlS3rXQ5wiWlVObHHL1YXuoiboFB+uuhsV/oivaBdr4xylytXv1SwLn63uJ29HF32/xVFGlZmgUPXLLBOLUKfkA3kUl12GOzZmQtmYhmyWSVuyRBxWY1TobjsV66p4fKUpKttWWGcXdehQDoroB6pbgOHKO8i3iL0rFuxTygG354jT7XJAeDbJxp4353BiKMfr6M6b+rHzjQlSoV/lTkhdWbQ6d6lB4aoQaXgGe8Op41Dg40j3hPALyeTPkXDkPpWATMV9s60jGyzkls6Urjc7NcGwwhIv1/ktK/Uo3g4LPAOQw77DUU5b1VknF0ZiVUgz9QAeftCh+If9Br5/WXuRBLY3UbYWaaLod9ftTki69NmkZD9Muf1QT9yZ8DQJOJDpitLJAqs/onWk8dQvNOIR7Fq32cuJZj69YS4HSHzaolBNewzvd3d0jDn8DJrXBYEUbeWw+cfTAhpV5WNivaE+G9peCnsbWWnnLiCigtUHb+8a8bQnC2QQ/5Vq1snVxvcwkntNlJ3kLnkJ0DsIwZ9L9mjRhLHFJl2TF+bX5cKU7XPdrh/4TRXBdS9KyuFh93OCAU3egsgho5MgNkGLgl0JMcXVgzs/pktkw/b+t7u6hGMOyxkwEJ2rc2j8IPs2gVHC5SFgjyFoi4i3Fyy75U7ZNT4DB+6Pbyr8teOchocHWGsFk/Wn+6WtAwA8q0OqIQ9aB3ATwiojUhW4NGxj6S8/ndamt3XN99uw/aHF4IAJ6Z4rbfojT7EhIyKHC61Z9XPKdbW2HHadUcQM7mb9jk/klPrfKSGGVkESs4ess6E9SN6/yrhbhxocD3mFZBKey1tpvajXg/2PcThsFQXkLZaxhOAxJl4w1ud7dWMyLkDCK8qFEA7wLNcC3RAd7/ru+J9kk3zoumo+LcdXcPolkuuBS9XSaCLmZWDd2p1/Zmm84Djg37ieNyjmb94azDWByTsWwsna7L4FyqZYuuJ8rinwk+0V4Nn0zg0+fm3yvZ4ZsiPgyZ97z7r8yx0RhB3PQkRbN5cRoQEXaEgO+/MAs7PFxmfdr41NLR84CV810sDDpYBgXrfK1OUpuoOEmYaaSBTNDmaneHxV/FWSUrH0vUC8Q6Dbj8FAvuVfs0G/7jQThp5iQniaa19kivlhxvw6eEM2/qQZejh0yDRhcfgQrWaIUA==", - "type": "googleDriveOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.googleDrive", - "date": "2021-02-19T07:36:52.865Z" - } - ] - }, - { - "createdAt": "2021-02-19T08:21:10.389Z", - "updatedAt": "2023-03-06T15:34:19.181Z", - "id": "27", - "name": "Google Sheets creds", - "data": "U2FsdGVkX1+21ONZUJ/0Cu/1d1sVpmlTAu8r7hzqachyECaLhrgNW5e7KED38VQHeR57GOE+Uo3FhFM5pL8yqG0ZcS5S5+uneXXosQzkDy4UPWE4ymioy9fv+SQJTNN3e+BDQdXATGEcD/ZSpqgBtj/Ld6zv8P3OxWr65hYCkmpx5csrORSwrqB8zZMniyaXZgpUd1mGCHWGFEjV+IZFMTwGmvTzmfqmmBLfGXHhzqKN1FJCSZ5WO7fshx7Gc7A/DaSHprdnxY+axa+PF+utCpbNx9pKvCQv3dttSlMpQfEkzEzENO8uUbxYXi230UZlmZ6QNMkzrgh8MZpwFAInqC68A/tEPrQLIGEykg2zaw7gVlVF560GXxs9Yh0nRBF+La7SKMOCEf2FUQaJ4niQg0Lmf5A1OJLQENbEbsVyXieUP3gqefoUbA5bYbQg1uMwmURAvgXfMvX/WFUbvUdd37Pee7x1QcQ5zL7i5/NPwORzdwZaW+QHcsLXDHl0CdwBXtC3EhlhIQ3K66/uh88dY/GvgaAYdqAG8YxpEG3VXF/xMJBUQOqcHlXi8Zm1SFK55HURPUGBPscVxsXz3SFANkY59d4LE7ClZonri/QACQZcRc0MG+n94fAtQ3RctsqI74hTnpqF9+sbsJfkxpLBiepiybbN3A1BExB/iAdQcRU/bTLWXusBfs0ZqOKZFLeZgEjw9/e7PMtmwyQ9g9dZvJ+Q6Iiy8nQq+gy001Eu9FMACQwCl0Q0ixiK6JbmnezSn7qM4dcgzZTInTh3RnTjJwRa2fm51/4+gRdFHFVTFimNacs/al0yM2o27GZsebZ/GonY2cDgNnCbtPahZrD1Kb7s4JsmlwwM6Ry4UKE48dueirrSlLc9N1RhonH7BYnjH0o90Un6iQ4mU4NLTLF5UPxkV07p/3DIgMCJjlJGs/xR+cQPHwKUfkE9moYhRNkpruzcc3hioebsF27HnBPmnBXBFYMnLUt2RbAgDaXMfDk/CsGKaAR6zUKAlU4np38ybk4txnKr2nkiw3A2xWfuXeRO37ZlRfS5WIMtwMLDa8ni067/ToDtGilt0ZgFcS4icP9j39QVWNId1PCJ2SMSjC8c29I5tXG9+JKMoVLo469cnsmsj77MxuulAee/m4qy2+3Cw69Z1MtAoGBTSpgxylukolJtiUFHVr5W0YNAXt6u9SE/7dyRSUzUH2yoS2BAqA61SeNxyzCFObf21s4JfpDv+SQDLhiDKwLzOY/Ss7jUF0DaxruPRvQd5DsI8fDFKPG8fhiVaC2CQD+59wz1o7UJRuiEnCJEhKPTM4nYZZvMUK5mepdrKH0O2t3lxOAIDUE7gJQHvRH7J/XSnK9P4HeTeNk388shTZu+XGi9yriq4aI9Vnhtu+te/nMPFJfNMRYEbDcuV9BlALDD9h1EoGiaN7hwl18bG4/LnbP2aYuyuQNsz+HoEOdDLuwPrk42iT9Vy/uJ/DRgZxkRSu2XXnJxlYkiF8+wBD2T6Yc9hd0n1l4shbik5xZYsC1kCM14jSO6HaNcueek3iTEX5KqnKzwtkxmYK5bA8lnDC61jzFek8AjBryxlhmFQoM2lLHjI6H+Hm/4oSxo6Z7JvH8fv2TlNXosPqEXcOlVFIOvAUqbs711oQIPuAfHo7xIsacx", - "type": "googleSheetsOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.googleSheets", - "date": "2021-02-19T08:21:10.381Z" - } - ] - }, - { - "createdAt": "2021-02-19T09:22:25.089Z", - "updatedAt": "2023-03-06T15:34:19.009Z", - "id": "28", - "name": "Google Books creds", - "data": "U2FsdGVkX1+hfSrqAA29hJDK0VA14zcJwj9O7dnWpTc39k2t6ZMuKQUfIgAFmQWOHbi+3GV60yuiEKTnttU2gcEOFtLMnA+uYvTGAsUhdEWdPtUB7UmA8ORvSmZtsvTIS3UjuE0umXgtr6iFMuJJ50zkoRSpe1Wf3cc7Le5KgDb4FVp4o4fyLUPUSjyy9Kd+jN491Uhd03K1kxz4ScZe50SKoxzr1ZRhcjht5Xwk685kUOlLJQK0dgHse8D1+JuKt2jyvLrz6BLfM34a4MYoCvHFDALznwunpT+zBIWIekAfybwZTBGW0cKW4LLF4+sonmzVdbfZiQ2+GUiFhVUYiyhUePW+274Dw92clJSxEPORTZ5GeUjAC7wcSTOSpNKED/Kb9iPoK75Sd3auPgbVJ9i4oZGhyEiY1ex27cCVKPWZc4qHlzmhRAlVBX+1oQ1afDYys//+M+tkw/RbKNyYekzPlDDGzKcEUM2kwkcF9qOqHT+YQKPTk6HDZt+8Q7ITf+YgvP/BVuQdVYBdTgguKDTcgxqx6zmQHYObFTuefp4BbekI3WPAbbl9u+I8dWwUNuEaq/x2VL+Bm4kXoIvZbbaZiUshDiJ5DpVkRBgh8CSdfsFyUDveCFkbm7FW+mk7RFLLJ8/s85X4oNKiW8+scvQlPU+yvwkxrGGxFCugkZPtQBOqrSH8P3cauPIhPolEzbjonCcpTfQy7ocgk99Mja+bc+dAeTzlZkFDwVAbk0Z+FrgIRHivogNT0pPyvA7f7r4fVicM4Mbbs94jXrU2682z826H1dUc0yRZbePo2qFFkYIaLlYc6twtbjAA8f6AhVHFYfBGuZllyzMmQWmftR5pEJZcyIODyMhK0bPIFAI3er/tZrgWap6D4B5FjSlH5ZNQIsSiynOV4TwZDnP6Ept+cfJn+GI3zq9HXVZWE0UjdRUqOMKRllpULCxjrElCSnplWnr4BLIEtJRuQ+F7KU7rsDooHZ0sCj14SC6wR2W0vT7M9LeRj4bb57ajAspNsqNwgV143y5giTa73tDjxefQVWKmuJgYEg/KnC8f1D3X/kgUkGSYu+W1k7qTRibASOeM1KPGiKYxqWFyX/zmjYDN7QpCDNnaMN22riBHr2Q6bMca5s9e0fFUVc+UVj3t44+YMl4Xobe4z6kkRhpoQFD0Orw3qen0iH0QDzwuq3FH62j1UvMADrEHvqR1ZDwAjlKBWuqZEbF+nhCdkaOc9vFCZd7Q6Ge5pIEaSJfRT6co3vlHU36+QwBLV+1IYoBG", - "type": "googleBooksOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.googleBooks", - "date": "2021-02-19T09:22:25.084Z" - } - ] - }, - { - "createdAt": "2021-02-19T11:05:20.475Z", - "updatedAt": "2021-02-19T11:05:20.475Z", - "id": "29", - "name": "Mailchimp creds", - "data": "U2FsdGVkX18xXLE184Ww0HhGQkif28k1jLv1ct51ofijH9qbNGhY2KUE4M/ziFjMsBXwtClo1oKHfWJ+2qDu29b6R8mKOl/1dJSKDo3WAyY=", - "type": "mailchimpApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.mailchimp", - "date": "2021-02-19T11:05:20.468Z" - } - ] - }, - { - "createdAt": "2021-02-19T11:38:01.580Z", - "updatedAt": "2021-02-19T11:38:01.580Z", - "id": "30", - "name": "PagerDuty creds", - "data": "U2FsdGVkX18Du1HJcfLgrPgYruh0cbxQT4NkEwQ5Q0JUT1B7RxhZMPMYGnfY//cf6GlgSCcF1bb9l3arLf5Wvg==", - "type": "pagerDutyApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.pagerDuty", - "date": "2021-02-19T11:38:01.578Z" - } - ] - }, - { - "createdAt": "2021-02-19T11:56:29.813Z", - "updatedAt": "2021-02-19T12:02:56.759Z", - "id": "31", - "name": "Dropbox creds", - "data": "U2FsdGVkX1/Uofms8LodC3KQrzG2UWCGnscMH+RPTE2axbxtI6YocNs+36iw2N1i92ZtGUViIGH+uTwmQnDOQt4A5+0B7o5FU9R8iBE80mq10LpgUEnWPG43Ptesx2goGeuBX1N7d9YqoNIUCJHjLg==", - "type": "dropboxApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.dropbox", - "date": "2021-02-19T11:56:29.812Z" - } - ] - }, - { - "createdAt": "2021-02-19T13:53:50.602Z", - "updatedAt": "2021-02-19T13:56:32.212Z", - "id": "32", - "name": "Airtable creds", - "data": "U2FsdGVkX1+p/4EZC6fbBe4qz8h2NP0wlwXoUBQqLV7Xqqex3F9z4JzyDBBXGqTm", - "type": "airtableApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.airtable", - "date": "2021-02-19T13:53:50.597Z" - } - ] - }, - { - "createdAt": "2021-02-19T14:17:11.249Z", - "updatedAt": "2021-02-19T14:17:11.249Z", - "id": "33", - "name": "Asana creds", - "data": "U2FsdGVkX19dsW2YFvNyR3Va4cffC/3puNn+BdxY8zyHQwjR2WL+cTHIQZ9vnGfddqkd5vxrjBdM1EMNYvVu9XhzdaYaXRlu/Rvz1N9dg/XREGtR0ily4UZJtR5kI46w", - "type": "asanaApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.asana", - "date": "2021-02-19T14:17:11.242Z" - } - ] - }, - { - "createdAt": "2021-02-19T16:44:50.180Z", - "updatedAt": "2021-02-19T16:44:50.180Z", - "id": "34", - "name": "Bitly creds", - "data": "U2FsdGVkX1990KbQcV2hqg2N2WqqysphMRcF9rRqHbV3xd967Vo0gm5udr/FIXIMl8m+4qWh6bIpovyiDagdulQPpuEE78s8bJV82Rpk9vI=", - "type": "bitlyApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.bitly", - "date": "2021-02-19T16:44:50.160Z" - } - ] - }, - { - "createdAt": "2021-02-19T16:53:38.869Z", - "updatedAt": "2021-02-19T16:53:38.869Z", - "id": "35", - "name": "Brandfetch creds", - "data": "U2FsdGVkX1/xdfTlrPUFZe2VnImmukah+Rp17zGZId6ryo3nwNoultrEmgPNEMgvJA9zSjsqu20zjR2xujBtipZqJB1sjtr0GVvpYi0JlfA=", - "type": "brandfetchApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.Brandfetch", - "date": "2021-02-19T16:53:38.860Z" - } - ] - }, - { - "createdAt": "2021-02-22T07:21:18.838Z", - "updatedAt": "2021-02-22T07:21:18.838Z", - "id": "36", - "name": "Clockify creds", - "data": "U2FsdGVkX1/lgcgfsGNJ0Hhk42cGd5gdw1VjOlm4rvsRatgjASdsg0shFMB0Zaspb+rDO2CJYSsLf/gAZwXIiH47dsNCTgHe95PMeSyt0U8=", - "type": "clockifyApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.clockify", - "date": "2021-02-22T07:21:18.831Z" - } - ] - }, - { - "createdAt": "2021-02-22T07:46:04.337Z", - "updatedAt": "2021-02-22T07:46:04.337Z", - "id": "37", - "name": "Code creds", - "data": "U2FsdGVkX18QBJCIz/5sBK0uTJLi4gxCQUQ+48jsKK/ENyPqhnFZ7uc2gnDYyLBR7JHhLPqplv0RuaaZDbo0iajcOvJurdO3bK+0yNSBsXE=", - "type": "codaApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.coda", - "date": "2021-02-22T07:46:04.335Z" - } - ] - }, - { - "createdAt": "2021-02-22T09:14:29.302Z", - "updatedAt": "2021-02-22T09:14:29.302Z", - "id": "38", - "name": "ConvertKit creds", - "data": "U2FsdGVkX18kPZr6CzzuBhOHSY5wILD3lzqGCbmNot7ctpX7ByIA/gaVOGQmsliOQ0HAwSnUEQSloW4BxhFlyv51vK8nCwzhpB2PH6Iy3o0=", - "type": "convertKitApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.convertKit", - "date": "2021-02-22T09:14:29.294Z" - } - ] - }, - { - "createdAt": "2021-02-22T09:51:25.952Z", - "updatedAt": "2021-02-22T09:51:25.952Z", - "id": "39", - "name": "Invoice Ninja creds ", - "data": "U2FsdGVkX19FCgCRnZI9LxkJ0fFDqCHTNzRDD3PPCEx/iwDzlc1SF6Y/gvEedCIXbrSLj5DA9Cx0+pLTmu+TdQ==", - "type": "invoiceNinjaApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.invoiceNinja", - "date": "2021-02-22T09:51:25.944Z" - } - ] - }, - { - "createdAt": "2021-02-22T11:06:05.470Z", - "updatedAt": "2021-02-22T11:06:05.470Z", - "id": "40", - "name": "Hunter creds", - "data": "U2FsdGVkX1/1gYkZzUr6nvLINdWRLgfpevrIVD+9N0Oj+N1EzfgOa1Dt+mh7XwPfIFN7PTAFtx2zvc9zWpE6v9lbs+9UmQ94mN7o7SQJn+8=", - "type": "hunterApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.hunter", - "date": "2021-02-22T11:06:05.466Z" - } - ] - }, - { - "createdAt": "2021-02-22T11:29:21.335Z", - "updatedAt": "2021-03-15T12:38:04.857Z", - "id": "41", - "name": "Trello creds", - "data": "U2FsdGVkX19q8WLJggC99tA3sNCK7veRzmTun+D5LgO6N1LTdCpFsthgWZUJwTNQoq1xkMTUqcP1Pj5tDql8XScwyMpuUV2L/HpT6XIsmRNTtW6OnyiN9SUbOjT/CyhvW6scxU4TB5Ig4hChfzpXqOLnX79+hpaq+uEZ2Z7z7OYkBPO+pb8V71HghiBoWN2khsNYHoowKQLVQQewTy3Z75Ck5cYKlkCNOW0mIl0uj34jwPwRbLj0kbe4ET/4whRlewnWsTqGn+qUeAv6U8BGTTKmGqlKIEQB9L9cGEsd3PA=", - "type": "trelloApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.trello", - "date": "2021-02-22T11:29:21.326Z" - } - ] - }, - { - "createdAt": "2021-02-22T13:57:40.992Z", - "updatedAt": "2021-03-19T09:43:57.936Z", - "id": "42", - "name": "Mailgun API creds", - "data": "U2FsdGVkX1+ZwsN2nbj+EJ1UcibG/cA10of9HwNMWZlDMtDcOc85SwN4x/2TOuLxV6ZyvVVD/vlGDZYWmRKM2R/U2kuj0K4T04VkM27W/oebDSYYtFXzxkZoGLArpztmeoyL1s452mMnCC25h/avrp+xt2I+U1ElIJEiEaWfAkoGc0z4fiPoXzbEG3sGenzEsu9ttsKr4mmVWdwE2znYxQ==", - "type": "mailgunApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.mailgun", - "date": "2021-02-22T13:57:40.879Z" - } - ] - }, - { - "createdAt": "2021-02-23T09:29:07.947Z", - "updatedAt": "2021-02-23T09:29:07.947Z", - "id": "43", - "name": "Todoist creds", - "data": "U2FsdGVkX1+ZQ+H3Iqo6GY28ORlUO2kdl6j5uwphJzkPu4fjngt63aWY5+bWWUKDSm77KfxyKRIfaiLlC3IgbMWvR7vhr43wsgSPhWwxlbY=", - "type": "todoistApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.todoist", - "date": "2021-02-23T09:29:07.915Z" - } - ] - }, - { - "createdAt": "2021-02-23T09:43:33.668Z", - "updatedAt": "2021-02-23T09:43:33.668Z", - "id": "44", - "name": "Mindee Receipt creds", - "data": "U2FsdGVkX1/xjsZ7QCzqu/anvMFyp1YFh2gExdIEMxlKGVf+XgAYCgSgjw7pwjaOc0H+c9UyOO0FQ8yh59EkHw==", - "type": "mindeeReceiptApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.mindee", - "date": "2021-02-23T09:43:33.665Z" - } - ] - }, - { - "createdAt": "2021-02-23T09:44:38.720Z", - "updatedAt": "2021-02-23T09:44:38.720Z", - "id": "45", - "name": "Mindee Invoice creds", - "data": "U2FsdGVkX18Def/h8UXc1LyvtDAklLmMCR5/KRBrs99NFVoBrWNoNQZgmp6eQeZ6KqWRvMinWLySGsLD1G5ttQ==", - "type": "mindeeInvoiceApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.mindee", - "date": "2021-02-23T09:44:38.718Z" - } - ] - }, - { - "createdAt": "2021-02-23T10:00:05.520Z", - "updatedAt": "2021-02-23T10:00:05.520Z", - "id": "46", - "name": "SendGrid creds", - "data": "U2FsdGVkX1/Qy3woKXJcHu0Il+dKLHNtIliiqCXBj/PYC/OiUXCTMWdhPNSXzClwui2u2lCk/G/EmOTh/4mVFx78vdqPfbBxWa9t/xOhND7PZ2tFSeVCAxEi+/NhqryKFcDHlfuELJNoc7RDvKu7KQ==", - "type": "sendGridApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.sendGrid", - "date": "2021-02-23T10:00:05.513Z" - } - ] - }, - { - "createdAt": "2021-02-23T14:57:18.744Z", - "updatedAt": "2021-02-23T15:04:39.303Z", - "id": "47", - "name": "Contenful creds", - "data": "U2FsdGVkX19Oa7+0moJ8K9pm84xEsvnMq+zc9Wvh5ZHZIB6bJ/9CLxpCE1pwa8w2eg2k43nTs5FEjb2Ri2pgFQ+FZrvgePCvtY/boqrp8JYqCmMwD5okfSY3OzagWZZnbxxC/ed/gF+n+mUWN1HNq7ZRfjur96SQSK43480+OyFUt+YqLYROzuBiSsaETuIU8paej8P7cHtG0NxgAtxse/Wrl9CT8AgPH4OJrCl4xo0ACLhBt/0nDa/2pG+549wV", - "type": "contentfulApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.contentful", - "date": "2021-02-23T14:57:18.735Z" - } - ] - }, - { - "createdAt": "2021-02-23T15:24:48.023Z", - "updatedAt": "2021-02-23T15:24:48.023Z", - "id": "48", - "name": "Taiga Cloud creds", - "data": "U2FsdGVkX18d/4zkKxH6ykIKuyADGk0vKAbliDLg4C+OKu2X5qSx+36Jb5lsc6Nxde7a+WJgpbu4s4KzeKfrzoBpYUY0jfB1JR6jauJI6hY=", - "type": "taigaCloudApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.taiga", - "date": "2021-02-23T15:24:48.020Z" - } - ] - }, - { - "createdAt": "2021-02-23T16:07:57.472Z", - "updatedAt": "2021-02-23T16:07:57.472Z", - "id": "49", - "name": "Nasa creds", - "data": "U2FsdGVkX18vXNAT6KDSAsLy1u5aDAui5VO705Wr27SblEsXnQShsGKTzb+ljT1r7mOiApbC3r08KyxvKe10/PMtJpOCw3aajw61blf71bU=", - "type": "nasaApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.nasa", - "date": "2021-02-23T16:07:57.467Z" - } - ] - }, - { - "createdAt": "2021-02-25T08:25:44.871Z", - "updatedAt": "2021-02-25T08:25:44.871Z", - "id": "51", - "name": "ProfitWell creds", - "data": "U2FsdGVkX19xPtSE9TRS0mwaAw63Y8Ju0Zku5f0k9VZhKq8IvtfrFYhpTbZmz/WLUK2PTjm4mzpyQzi2OS2T2gtGdI8ef+S/W8JCBAu7x8s=", - "type": "profitWellApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.profitWell", - "date": "2021-02-25T08:25:44.856Z" - } - ] - }, - { - "createdAt": "2021-02-25T08:45:54.414Z", - "updatedAt": "2021-02-25T08:45:54.414Z", - "id": "52", - "name": "Segment creds", - "data": "U2FsdGVkX1++XuRK0guHm8ScOP2VMjkmz4pPCxEcPl3mlLqrWB4DPntgrTKIWme2utlbMbIbCUttb4JXZmC6xw==", - "type": "segmentApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.segment", - "date": "2021-02-25T08:45:54.412Z" - } - ] - }, - { - "createdAt": "2021-02-25T09:20:29.624Z", - "updatedAt": "2021-02-25T09:20:29.624Z", - "id": "53", - "name": "Signal4 creds", - "data": "U2FsdGVkX1/ga0VQ/7JAfmu2l5dBandWEBmoRHj26J70hj2ZAaz80EfX23FtrdSX", - "type": "signl4Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.signl4", - "date": "2021-02-25T09:20:29.620Z" - } - ] - }, - { - "createdAt": "2021-02-25T09:33:08.283Z", - "updatedAt": "2021-02-25T09:33:08.283Z", - "id": "54", - "name": "Spontit creds", - "data": "U2FsdGVkX1+QF2n37wTEYca2sh443csUZOySmaVJKlkMmJI5l/WuQAosIp6svTJxIDiQUtfPgT1HoxjuGqE/gZxduaAukURLug1zFrPA2zDrzcNtDnH1vColOJB1Rlr3WpmpPxQUVtmlkFgmA/evrDlEsHs6y/aGXoi3oXaqVxD0icyEiK0sqnjkOjx2K15q3pdK3+MNlKfEhLSvtceRhg==", - "type": "spontitApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.spontit", - "date": "2021-02-25T09:33:08.272Z" - } - ] - }, - { - "createdAt": "2021-02-25T10:01:00.363Z", - "updatedAt": "2021-02-25T10:11:56.314Z", - "id": "55", - "name": "Storyblok Content creds", - "data": "U2FsdGVkX18fu+PWpyX8OvYaYQBsokeO9jd4uoD8sqT+cnX5iwyDSxw8VwsMRL9MXC1htLcVhC+XXvLtTLYKOw==", - "type": "storyblokContentApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.storyblok", - "date": "2021-02-25T10:01:00.359Z" - } - ] - }, - { - "createdAt": "2021-02-25T10:01:19.257Z", - "updatedAt": "2021-02-25T10:01:19.257Z", - "id": "56", - "name": "Storyblok Management creds", - "data": "U2FsdGVkX186K/kl8qU3zSAIcptPOb9d4IGpKgUXmsx1/dnUhzafZttH9h3rUdzfRgudxgEdY9UcxfjYffTsyg5mbCqf4NMOLKYV7qudCY+mjCKNQjpV4pAAK0lDpM23", - "type": "storyblokManagementApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.storyblok", - "date": "2021-02-25T10:01:19.255Z" - } - ] - }, - { - "createdAt": "2021-02-25T10:42:11.765Z", - "updatedAt": "2021-02-25T10:42:12.052Z", - "id": "57", - "name": "PhilipHue OAuth2 creds", - "data": "U2FsdGVkX1/vWmXJFCvnUqKOyIce09k5K/WSvdrV1BxhRnDCDZVEcEbDbwi32/AunLgkkddqtWAts9pqg1fZBwOAPaNQ0T7EFNpnvXQ0uAIORereTYIkVXWONhdzuMIr5jJp/vQ7psMoVPxYauC6KFDEx8oVbX0f4ceR7Ww5v65KKANAlNhAWwxKJvoqXpr0vwHTMPhr8GiQN4gIfortAA==", - "type": "philipsHueOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.philipsHue", - "date": "2021-02-25T10:42:11.763Z" - } - ] - }, - { - "createdAt": "2021-02-25T11:04:28.100Z", - "updatedAt": "2021-02-25T11:09:07.367Z", - "id": "58", - "name": "Twist OAuth2 creds", - "data": "U2FsdGVkX19Dt1p9mEJlmKSLsBtY4YbMStGyY+UewyQ1kQUM+Hnx9qLjnWsLc22uCouPgYhgXd6sHt7wxSuouQzayPaBQfrbWjPuFluXr7Tplux3lSyWmLWZ5yZ88kCDP48zvNCYLa+Dr4qZWWy5qbi5DPPz7Z7cSLEx8BrL49Lgz9fZLoTPl+6K5kfYLQ5qxSajVDBxdv6dPIja+6ArUFCwTI3nTWKRDA7R6LO2JhAoCPDLhEQhuaZ2J7zucdSizL7CD34lsLdH50zFQz4NTBLs5w3LwbSQxYgwdBk6gMNg5HyfbgqNHyBuHnyb8SzZ", - "type": "twistOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.twist", - "date": "2021-02-25T11:04:28.095Z" - } - ] - }, - { - "createdAt": "2021-02-25T12:41:33.347Z", - "updatedAt": "2021-02-25T12:41:33.347Z", - "id": "59", - "name": "CircleCI creds", - "data": "U2FsdGVkX1/x4tOSrog/+i5xBXwlqV2T8ZAAqY0cDMeYL9G95QM0RN84i5U1C+il4dRgPFh0k1zkWBgGrBdNsJyrlVkNXNcJq6cI3ivAMLc=", - "type": "circleCiApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.circleCi", - "date": "2021-02-25T12:41:33.344Z" - } - ] - }, - { - "createdAt": "2021-02-25T14:08:48.529Z", - "updatedAt": "2021-02-25T14:08:48.529Z", - "id": "60", - "name": "Zulip creds", - "data": "U2FsdGVkX191OlYH69pbOCK/txZZtMnZctoqURQu30ltWgpny4Q0xJtNteD2eRCFvQgsQBTlskJC22ipgeI/xENi2MOQoiOGiUco3Hotyi/uQBldZrg1wTJMzwb3nINcnK3Q4UQIGQW7NXnW9J4DGiMTgPBakigwdaGeBHXzchQ=", - "type": "zulipApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.zulip", - "date": "2021-02-25T14:08:48.524Z" - } - ] - }, - { - "createdAt": "2021-02-25T15:13:40.272Z", - "updatedAt": "2021-03-03T14:45:01.088Z", - "id": "61", - "name": "MessageBird creds", - "data": "U2FsdGVkX18e2o0tiR0oECP+m6eNJHWujdEU+tZ6ibwZBnDvQTSOckeI3ZeK/HQ97a+LC5ERFRmSRvAa0R8arg==", - "type": "messageBirdApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.messageBird", - "date": "2021-02-25T15:13:40.267Z" - } - ] - }, - { - "createdAt": "2021-02-25T15:24:52.504Z", - "updatedAt": "2023-03-06T15:34:18.897Z", - "id": "62", - "name": "YouTube OAuth2 creds", - "data": "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", - "type": "youTubeOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.youTube", - "date": "2021-02-25T15:24:52.500Z" - } - ] - }, - { - "createdAt": "2021-02-26T08:32:24.059Z", - "updatedAt": "2021-02-26T08:32:24.059Z", - "id": "63", - "name": "E-goi creds", - "data": "U2FsdGVkX18y61lqpGSJj/wPde7n8cmSBdIIsMhKVffEZkTWJBA+gx51ynKTbN87xJVmWx8UJ+R3gNMK9Y1FNwyS2E+zWCkIOIxBaBKDqZU=", - "type": "egoiApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.egoi", - "date": "2021-02-26T08:32:24.054Z" - } - ] - }, - { - "createdAt": "2021-02-26T09:23:34.436Z", - "updatedAt": "2021-10-28T10:14:20.661Z", - "id": "64", - "name": "Harvest OAuth2 creds", - "data": "U2FsdGVkX19gIX0riuNYg9DGQcyusKHiWMVDYF/m/T98QHVstw7+xWC0bhPLb8CNgM69x/Z3OHxsXHl+6194SSprAPUgEgEFMeIJdjVGHtToC3PveN6K4sAoM+qy9pPCJq8Zg73jHawpXx9fgW40Dn43W1NJo2fedj4wAJPap/z1OfU2CiqMr//0jAdufXzLPi+dWNKJIO3QgRzV34BrrKg0M/gyMz2kFp9xuc1HaRkevI0C64n2pWDMNB7jorh+pqsB+BKAd3gOtfP6+/R80BIxVk7Yk0XlfwyuKiVhuaKJQlyOjYI7mc9ByL3D4mk1laOQPwzgO8gWSNyVKj35Sgx4Plh4hC8AF1sR1rnvy5aI6zdilzOZLcHcPDR93x98tWER158GaaEHJ7M0KvYnF1eX+in4uAAlbr+LkaoMqYxUr+OFR3iE/78xV10V7ezJzhlgtE5ud2A2zr22qdHb5f0DO2l4ehXyyIvekOpxJ0oxkLEqjpmBzLkKv2uQ0lFSd1oA+7hS9yHZWsdNLymJwvUk2hlurHY2YhxXD8Q5Jk+iaQXxA3mK2+dmyVd2H9jVX3d8HC7xJgKD9gFOf6AErd1Q4Nk9eIRf0Y93XXOmAgUrSut5I8UehuGncM7gRZhUrEAnpqqMSnLxuDsTrREKnU8EW7vIOeMcSbTCu6JLQvE=", - "type": "harvestOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.harvest", - "date": "2021-02-26T09:23:34.434Z" - } - ] - }, - { - "createdAt": "2021-02-26T11:20:10.809Z", - "updatedAt": "2023-03-06T11:43:25.094Z", - "id": "65", - "name": "Google Translate OAuth2 creds", - "data": "U2FsdGVkX1+NStrrHlND40COBadvqGl+/zGrGN5O0iho6g5eF6kfrfS1jIKtYAVSazlByTmDhCnBta7+gPLf5xaDaea3EDBSf9AHZhVO9L+0VAgxPNyQ5oBQJO1ze+vVxpGoWoD8dtivUQ3lB3ZDT/zKvCbGKP00162j686w6fwZr7re9aMpALp7vt2/p+cy4y9bZQPSAefncZgJLv8qukSmady6SQHQWJKp0pOu/nAjmrhHwjfOEIYXQvvkVZ/F5Vp3m31n3kZxeuinCWqKtf28zrage4w4N2MEq3jLrOUa8IvaCqQJHOFHwSNdyqwiA6hZFCh8xhV0ij+OgIOUVGRLSYZ1PiSAVuzuLxSjP6uQ7UtIhCwNnwXmxD0dz7OjrzzVdX/jyDNuTlo9VioUqfZ24VdOV8tO09sBwQCKMb5N+4lYPcxiDZGdd1XEjOB43ZYJDnD1jUNtU0+j8gCAnp90ET7oR+XA9ademGyxsMK5y52IQRkcH6BNu++nLcWhVhiqoh4ShxCcyhOR/z6RLyREBwDuK+C6ZpiaprFFeVDKv0hCLsQgAIbrsJPpezF1GW46PIdvoG0gBWiWST7KuIl3jIhbKb0xy7BLhCqJan56zCWPoAnEQvIs8eeEiqG+BARgDham66ky24A+KfaRxQAT2ZO64wEmoYIkfNeAssxbVQ+aRiLrrgGuzzDzqV3tZXCbXAooSAGsny27oIFXMjtjfs7WB9TiEvVsbdLz0sMPhhIihJifmNy1FB1BWxq4v3pfzs4W7aYzByrswDyn/6jyKE7Pv9CDTQGTPWEsWvpenPagXZRfQJT+2NlAoZYsEExC3nkTaJUgm4UJq5ohkgu8f8CPVPjwvmTanOEnPRitmoBJjPPGM8VEvVrWIKgrVg4b8LvdjJLV6mRpU2xv3+j4P3KTlZ+Ir+/52l65X0A=", - "type": "googleTranslateOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.googleTranslate", - "date": "2021-02-26T11:20:10.808Z" - } - ] - }, - { - "createdAt": "2021-02-26T11:24:45.742Z", - "updatedAt": "2023-03-06T11:43:35.065Z", - "id": "66", - "name": "Google Analytics OAuth2 creds", - "data": "U2FsdGVkX1+F0sfl4kQM+wSoX+PvxCea26tz1KafoF3iRiF9ezfmEt4xuhBhArvCrEsNZLYabqHmcnbbRytU3SUyvWP7UYhWR707ltECvPxfhWyi4H5aFlWB3AExRKodiiwf9U011DTxOqtVkXez1a2AUXjOXl3W01hQyaHSxGYnLh+wqEWh1/LUogCSMi1eeG8zt2jkZAUgvrAcEI9mSlwHi0WNuPCCEPuFn0XQD1L2I/QuAbdqep3pPSwJJ4IUourtHdzxFRtCZQeS+g7ERogFpnTuNzzeXQOlSDRtCCe9zJiMxGNZmycxVKGO7YLAkGnPkMfmFW3v3JpQtAjvLOcATHzDxwQC9Gt2gWGlCBk50922jSzyOB5jQMLZNtjODUNQupQOK+QQVJHZHQzAhRlTydjDJl1ckua0aX+WEpvmuvK3u7m/pY0aY0YaE3wH+e+uMBmoGpZxJxuKbyz5XMNtyZr6RKNV1UeGz3alAmXRE+VENyzKy+6M7xJLfUcT3J6f3CqdBLDn0782FNPev+wIUwPi/pI1VnmZ/yqsFZiMojZffXe3291SjRMo0UeVNWRFeJp+wiTS9izSuUALI4FS/mpG08zh5sslNycKhlKXDVrNPtMYt764wbNLvdm+Hf2WxaEhYDfiYidOaboVGX8TK17yOpyV5s7DfeMZJi2qIPhoASbQUfyBnc5Xepefk8LzS26i8O5Ftgmddl7fJKje4eajv02Ta7J6Govui7U2PLamEsbsYes+y0DYQGZuR2xsZEpwwnzWq5qdi4xGOhrSqG68gpNm7L5XJk+hdewwgUjF8E8nZVShBL/rG29coSrT2PaHXjOqWidK8uoUQ6E7CufQ+1+p1wTD6ryO+FCId6KkmNjG8HK40dw5WHvPYRygRlukH3S3Zxmxk98n9JAnMKHFa0aVOLtrcMXfaCMsrXa6IPW4622pi4aj4B13NRS4JV+KtzIGEWr0QxbIxigSbqUB5pqatY2Tjm/kJEBBQ+xlCmx+n923pdTwvz1ilY/+8QC63SktbfUp5/GCBP5BQUc/1sZ+kd9Gxw5W/bc=", - "type": "googleAnalyticsOAuth2", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.googleAnalytics", - "date": "2021-02-26T11:24:45.739Z" - } - ] - }, - { - "createdAt": "2021-02-26T15:31:06.279Z", - "updatedAt": "2021-07-12T13:42:58.440Z", - "id": "67", - "name": "Zoho OAuth2 creds", - "data": "U2FsdGVkX1/PHbhszEfSZ7bN4MZZkmaNwKQoFZBG4pF7/ZHUFV0DoTUwqujK/2wOEDxe1FM04hPgOqyJPu+MKRp2c20X0EWVPNRtokD/1+HmqdXOOx6k4X+lbFkfQelI2dWWyprmvi40fwoMdGLUpu3HJc8o55G4q2dtMqPYrmtFHkaf4Op5uiYlayZqmsqJTPWxFPdhMKGpmjZTdNQQ/2qe8cv38+z7Ck8DB665LMHA+KwhlqYopcXxPIQ8i/0ClRPH8FKsOqbByty3BiNToSvI+8kk2H+RUlY1+oiNLgiM6SnlASbKSAv+P1iB+1RE5A0eSIDdjmAE3oPqT5RqGGVadj0+0kdb4lSyMxWum4nXNd7Oj5b4TkD6b2xAcSS5H5Z/4W89icxyMBH13jAi9OfLb9XxWLIikhw7fMv/6qyOIjpoujdwk1axpur2g9TQu4aslhVEvURJYlNxyzTjSz6IWwxybxUGMQp5VVuxTTGnizKcwQzeskQMYHDkSTa6jwREC7eZTR79/UBja0PghskLlk4fIGy2gXSR5YQ4xDNyk+RCiKX5/yN0j6/bmHriBmQRv4O8mEIgCww9QlCNcpoTCK9gPb64DcafH9nYSh24fZl/8dXsi++VGxBCePneIl3a1fHzzA+mr1tp6SKjV9dF8Vh3caodQtYjvTX8LPQNK7Gl5lvKWljTNuP9uxtglERZ7+8e61vWwLHecbY4OA4r9wD+b9DjVngkFtmcM6dN136+KbQ+5UKAapOIgr5NTFfOrQrUBdCEKAuUp00O3jTqLcWhjKhsMDsOrU/8kcfNmuAwMvNQGusmYzQid/+a6/DqmWLEvWWCflgkB6uftGUW4H5HVwmPL0Q7D9Ld+/JpLYxYvGuizAC3owViJJMNWxsJjQwcQDtvJvUnc4NhvkiAOOvURCzsXwj6CLCHnAGuQugSFwFJpBETuobDs55+zzl1/axiumMK5U49tNHtZnMTYm/Qsw9UNP8mWSsqzi4=", - "type": "zohoOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.zohoCrm", - "date": "2021-02-26T15:31:06.275Z" - } - ] - }, - { - "createdAt": "2021-02-26T16:08:41.778Z", - "updatedAt": "2021-04-13T10:26:31.116Z", - "id": "68", - "name": "Zendesk OAuth2 ", - "data": "U2FsdGVkX194FIYOkTkfh8YriL4a3jwoRvtU3bvvVuDSICwS0mODmmldCtKhXiwUugqRLtOWBNeqTfRIUcOnlzPjxU73pF08O06wfQnuTE5RcmG8PjXTnD9eBinn6IqdFf5BmdDzCWYdnhTtXzTUb2r20OCseIwe83PVoZetcSdrf+UYGGrNFkjPZpUMZHyCDUuHFzvJyHokSgOm8sqK9kp/1s/otFliiJJo+a6W6Jys5u4JDexjNuxi7YMErXuOSFdFP8ou9kJBop7MzMZnyEEVwU5FxAMLeQ4QYyTmMWy31UjJ32cnqZHxWH5eBe4ee2AfmT2ZUpOldQjDV2QOmswbjzz2H5IrLRWC1Xcpz9swMpPLdCa08CBzJHfKpMg2qW+BqaWVWmu4OgtuOu1DWuBGV8xrha3zIVgXbR+GZ3uQfEJHJELEDYKxr/TsbUyT", - "type": "zendeskOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.zendesk", - "date": "2021-02-26T16:08:41.766Z" - } - ] - }, - { - "createdAt": "2021-03-01T08:48:19.991Z", - "updatedAt": "2021-11-12T13:12:17.994Z", - "id": "69", - "name": "Microsoft Drive OAuth2 creds", - "data": "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", - "type": "microsoftOneDriveOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.microsoftOneDrive", - "date": "2021-03-01T08:48:19.988Z" - } - ] - }, - { - "createdAt": "2021-03-01T09:32:36.992Z", - "updatedAt": "2021-03-01T09:32:36.992Z", - "id": "70", - "name": "Phantombuster creds", - "data": "U2FsdGVkX19vXLwfVWRl0HwLwlCfclCynvIxMoUNSZ5L8PF8GEFUrAQZUE6n3/4Bd07jpO/StLJbCZhvtnVMOKtP3j4Tu41pGdt0hOGwJuA=", - "type": "phantombusterApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.phantombuster", - "date": "2021-03-01T09:32:36.988Z" - } - ] - }, - { - "createdAt": "2021-03-01T11:00:33.420Z", - "updatedAt": "2021-03-01T11:00:33.420Z", - "id": "71", - "name": "Matrix creds", - "data": "U2FsdGVkX1/P87NNIRrCvZ7Wek6+PRyZIdvjv3n9pBqODH8BSb3EisCyd9pxn8DFH5DDkysZmqmSX7LzcX9yUI7nsZO55qyoEhxfqlvHT+iMYMF5avnPNqSn9ixA4OpvcVkqzHWVKvJ5XLNfg/o82uPCIScr52Jqy3tWZBjPqsjxVUM87GXB5zPaGImV9wAuzJoa8yLB4dxleyBTT+O1ZPg77+Anp6cL56qfYlw0IehZrZcUd9XQMh2PrKkp68biuDM/wU70tNmNqUAP3s5M76c5IHK+wG++OikTqB2jL6Quw7eoRrdejWjqAgAcMpCW6X6KOEuvhSpixNeqfdGclnFS1ZcDQrwtJcW1x9RkE8q8LfuRl3GhwEMDYYy0giRM8tMFsbcB3wsSRx0gDKTHqA==", - "type": "matrixApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.matrix", - "date": "2021-03-01T11:00:33.381Z" - } - ] - }, - { - "createdAt": "2021-03-01T11:38:38.114Z", - "updatedAt": "2023-03-06T15:41:00.458Z", - "id": "72", - "name": "Microsoft Outlook OAuth2 creds", - "data": "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", - "type": "microsoftOutlookOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.microsoftOutlook", - "date": "2021-03-01T11:38:38.111Z" - } - ] - }, - { - "createdAt": "2021-03-01T11:55:26.940Z", - "updatedAt": "2021-11-12T13:12:36.858Z", - "id": "73", - "name": "Microsoft Excel OAuth2 creds", - "data": "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", - "type": "microsoftExcelOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.microsoftExcel", - "date": "2021-03-01T11:55:26.934Z" - } - ] - }, - { - "createdAt": "2021-03-02T10:00:46.756Z", - "updatedAt": "2021-10-27T11:06:21.565Z", - "id": "74", - "name": "LinkedIn OAuth2 creds", - "data": "U2FsdGVkX1+ckjPhFVeFIRl7aC+uDvlzUqHTpRqJss/ciWvEjMHTMnuASd9wOf2JK4lcHqZtWkxFiT+Rn2woUQ3M8guOiGlnkMzTPJdSluBgWbIK76NOCZdPHULW+trSnlx1KbZxyTU5cBwM1fnlip/5WC7ibQ6+Jx7mTAg6M8+CBetR8KosMPreN/KU6RofFoOS+2FX2T7kk91LZKhLC3HHbLEHXJytLrXZ95Hlw7P0ZYyULSRJEy9VTZkREZATiwtAEjtiGSnqeq84guQ0u/QnKirqn/9ux+id+nEzNfFfrRN45PNLcZv/2gGpFqhhufYZhRW601xTvuWCwgedUFj6X8hFrlY2bjs0cU/Ox+PMrFn3pMtiw6DpaeqyatpNvw7gCreIv9byDXDXJKJJNq+ogP31em40CK+VCNcyIOfCdctpJceTVRueD+8GdWKqGO+Bv2c8RmnnRbBgUJeNbTqkyM/bjAXDiIB5IxbQGshEHDBGV8v6Diif88HFXdkG5TwavL63GgxVQxfiW6y067lYbLH3YtSNSDzB4rFsxco0mRBUq4+xADexa9s5ejAtr+Gf31VMiITfu4pn2ppQ/urO5WmZte0DLpwC6C/nOvfZQc1WtbzWTgUWBR0dgSY8WYW2Rr/xBgB5MnmxRJkSS3Ryuzs9QCCacHiuFMbjoOlVyEWUZPbrMh4vSCp1Oqd9", - "type": "linkedInOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.linkedIn", - "date": "2021-03-02T10:00:46.750Z" - } - ] - }, - { - "createdAt": "2021-03-02T16:25:26.622Z", - "updatedAt": "2021-03-02T16:25:26.622Z", - "id": "75", - "name": "ActiveCampaign creds", - "data": "U2FsdGVkX18W+SLv7gUuy10NEDU3kkFR50l77CVagp7KlMOt/QPi4uNpb+HZH6iOBShJD4eAl7ZWqG8RaOLwbmgQ6rSCDp/Ejirxv6xOu5toQU+dcqBLBG8Xxb80XcH2iH83hADIinW+MzHBRoxyv1nLCAGbZ+WdFFLyjUdCbNYaCJ8OnUiDJ82z+fGzmWfPXtWAp7ZdsQgJkO1HRHqCBw==", - "type": "activeCampaignApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.activeCampaign", - "date": "2021-03-02T16:25:26.615Z" - } - ] - }, - { - "createdAt": "2021-03-03T09:00:16.838Z", - "updatedAt": "2021-03-03T09:01:02.915Z", - "id": "76", - "name": "S3 creds", - "data": "U2FsdGVkX18j6CZWeaGqrt9PWsivbWbhOdp+f+5AlePE6pNz5eiFOyAaN84/2BsUh35Bb7lptiiv4OAWbRUMNVMrrHz/gHOSmlW5k8Za0mNv+yzNQBVNPWTgM8FY2DJUWjIamFGfvXH9iy17SIqtPNejNmHMPw8gP3t60gWxlrYsDrjDkVFqbpRvm8eie3Fqin/mOctRhc5RtRBdrJBEz3bzAPEQjzaRHzG2LeU/kA5XMGTfUIFaKEZAxhNMz2Mz", - "type": "s3", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.s3", - "date": "2021-03-03T09:00:16.832Z" - } - ] - }, - { - "createdAt": "2021-03-04T13:43:11.683Z", - "updatedAt": "2021-10-28T11:30:17.299Z", - "id": "77", - "name": "Box OAuth2 creds", - "data": "U2FsdGVkX1+u04oWiTQml2xFo1N0bF+0LN6oa/QW3wRYm88OuvD1gWzSMrsqmt0ogyYRphaB6usFXB/JUsknrHtRZB/DWoo1WYtSREKsu6r/t27nWmE8PPUVkDY9z4cBHGU7wmrPEHMMHLdFreM8VVwNDMqVTIH0MKy9kurxMSbN/rqMI6KF/744KrJRhjK5AdXAu120V9VveO9sjmD1KN79GpZnSpcY4IIhqOgFacBa/rL64bURIxgnaN2HGit06gJmpp9Z6/oPBBu7ukLUhlgoUvOyojNS1tOkpjm0hg2ESLds1KTTc5hUtFQl4MS9EU+xBLitSagNhKgwaNuj84YnoBNyXdOPDgw7dL7Imllb9m+Ic9JNdr60b15RWn6U3MO4NLy6AUf2ITeLL1/UkBTkDcLZt3Owvp1yF/NXNv+1zlssdPFBQ5/1v+sTAZCy0K3jDpAigjYe2eH+1aOTVCqboRNF1KGmGapPVqAo4IJ+DGj/DaU3E6MslATb1shOrLDz3b3Ar4MXes2dk30GOob0mttZt7UcJPQke4ojqFIaC8IgtWgrwFGKzeqYBOWUS6Np1Qza5uvPuheQN4vetFu/9+p6esap4a5fL9BGpJztdJcKDyTFogGVtA33S2iZM5n8D6i5tDVZLZLbDEso5Q==", - "type": "boxOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.box", - "date": "2021-03-04T13:43:11.678Z" - } - ] - }, - { - "createdAt": "2021-03-09T08:12:18.169Z", - "updatedAt": "2021-03-09T08:12:59.310Z", - "id": "78", - "name": "Customer.io creds", - "data": "U2FsdGVkX18xYaYa1fih1Ak9xBxBEcc7kL9WyUBpTiFIlEfFwXG0c+Oy5po6HiAHLJdF1NcwjETTyDMaaQSOTtIW6cSgZVxWWvwQz66Wcynu21E2ZBdpWPpeXtkEcvrf48uTQNBEjew2VWi/gvAYAI7EsWPLnlbcKGSLR6MBjnXDjd2InyvRGKDvkqRgf8jAcbX2eRhJcJY7SXcekyikfA==", - "type": "customerIoApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.customerIo", - "date": "2021-03-09T08:12:18.164Z" - } - ] - }, - { - "createdAt": "2021-03-09T12:43:48.282Z", - "updatedAt": "2021-05-20T08:38:00.279Z", - "id": "79", - "name": "RabbitMQ creds", - "data": "U2FsdGVkX18AeAvLNz45uTV/AZuY9NhFbt2nj1Xgk0Qo6KqJpGfSPOeqTUmwih28kpkqUrYEBwOD/fFZMHhkOy+Hx2VsniZu6VZ6q1XeO4nDkpn85iBFQii2Fgj4QZ6ElTAwuRZ2EZbmLvih0ZGM2g==", - "type": "rabbitmq", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.rabbitmq", - "date": "2021-03-09T12:43:48.274Z" - } - ] - }, - { - "createdAt": "2021-03-09T14:20:45.836Z", - "updatedAt": "2021-05-20T12:02:32.803Z", - "id": "80", - "name": "AMQP creds", - "data": "U2FsdGVkX19X9RUEWDKX9xPj1oZtR55IpUt0jGMm1N/3ofT2fNyP0bb29pLMvx8flJpNEqaxEPilLwHJWgdtAgoZLdXqxwRUtGhURtPlzY5tk9uCn3k6RUrWou8vIOO0h92C9Rjj9ECaOMfztk79/pPk+0YtMov3oVbto6BZUU8=", - "type": "amqp", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.amqp", - "date": "2021-03-09T14:20:45.830Z" - } - ] - }, - { - "createdAt": "2021-03-10T08:50:52.438Z", - "updatedAt": "2021-03-10T08:50:52.438Z", - "id": "81", - "name": "Cockpit API creds", - "data": "U2FsdGVkX18Wg9sOJHfAFVYeyoufC6+kq89NGn6OwGGGlLx+i1vaJWKOYdU84dPMwYUH+N3Ka+wjslx6VYFqzGSLIRWSe0+R/p+d3NTCJcare7+ohHTbBFh+60v9TXpBi9OcyilhMRUSiXemrxyuYw==", - "type": "cockpitApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.cockpit", - "date": "2021-03-10T08:50:52.429Z" - } - ] - }, - { - "createdAt": "2021-03-10T10:24:16.085Z", - "updatedAt": "2021-03-10T10:24:16.085Z", - "id": "82", - "name": "Ghost Content creds", - "data": "U2FsdGVkX1+TNAOLTVdPh0YRViINswv5hzwB+4UvCSKdk4h9rcquyMrOtsHBbQhW1EY8w6A/j2I8/bSkIuL50TlHa5o1aYMY55JM9oVmdO+vIMjVoPxS2oGu+wuj+4DU", - "type": "ghostContentApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.ghost", - "date": "2021-03-10T10:24:16.082Z" - } - ] - }, - { - "createdAt": "2021-03-10T10:24:40.932Z", - "updatedAt": "2021-03-10T10:26:51.110Z", - "id": "83", - "name": "Ghost Admin api creds", - "data": "U2FsdGVkX1+SRpIFNtzzfGZwnTmykQFg+c12uMUCPuPzR7WQBrKq1wIctFb5XuQEG9eAZW4KmYFjbyfcFDXrHVHa10mDafeIVneNL7aCB5t0fhTGPtWJZetmJdeAZSjmcjO6WNLOCRDaa77GYR8FaRqhytUByOFtQq5+QXN32zBtCnSQi/WxodKICCbvh5c4VQvZeKt7zFf5uJnqXLC5Hw==", - "type": "ghostAdminApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.ghost", - "date": "2021-03-10T10:24:40.930Z" - } - ] - }, - { - "createdAt": "2021-03-10T11:06:38.526Z", - "updatedAt": "2021-04-13T16:46:11.783Z", - "id": "84", - "name": "Gotify API creds", - "data": "U2FsdGVkX18xgudNECIJK0mBFNJLvzrF+BsvkEc6IS49CAlCSF9fOzuX7uEQAT0X5SbhXQrmifGw2W35rGolz2srrAmTTlK1ihXw9rXzXevNmjLRvywHkubMUiqFLx0aQbhKUzUyDZPkAM8dV7/0rA74tkMtL7MpmaSz5bHuU7Y=", - "type": "gotifyApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.gotify", - "date": "2021-03-10T11:06:38.521Z" - } - ] - }, - { - "createdAt": "2021-03-10T11:22:50.635Z", - "updatedAt": "2021-03-10T13:29:20.727Z", - "id": "85", - "name": "Redis creds", - "data": "U2FsdGVkX1/eorJ+2PBnpfL7fZovMHUkv2I+nk3rgzDFy39kZhQlqAUbflN1ZdmIBmzZxQeM/XBSFxSk4G6A0jktorg01xhoZbOKAh1/h98=", - "type": "redis", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.redis", - "date": "2021-03-10T11:22:50.632Z" - } - ] - }, - { - "createdAt": "2021-03-10T14:59:28.371Z", - "updatedAt": "2021-05-20T11:33:59.423Z", - "id": "86", - "name": "CrateDB creds", - "data": "U2FsdGVkX1/FqmItC7w2FpP48G1Y/N+HEfvxdUeP6MTzjt3aO8EwtdJAdHZ0lBb4XXHv2Tvj9JiIwSDcDx1XSlPr3M2omC6tPA7+Ssmy8tb07DnUBxoA+pAYNW2jzDqcVRO8Q7GH/8Na0xukhU/KGQ==", - "type": "crateDb", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.crateDb", - "date": "2021-03-10T14:59:28.364Z" - } - ] - }, - { - "createdAt": "2021-03-10T15:27:31.299Z", - "updatedAt": "2021-03-10T15:27:31.299Z", - "id": "87", - "name": "MySQL creds", - "data": "U2FsdGVkX1/S61GLvMW0XIJTyLvo1e1S7EvgzbOGiFek524hwrf/0/9UGj/hSYLV4dZeCOWWJaVzBJHUH6UxaqoEknCElhrh+RGWV9X84sT65Z+ZsOLCEqB4XmTn20I1OJggjnL9FC/owalBUQ5zBg==", - "type": "mySql", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.mySql", - "date": "2021-03-10T15:27:31.296Z" - } - ] - }, - { - "createdAt": "2021-03-10T16:14:50.455Z", - "updatedAt": "2021-03-10T16:27:08.802Z", - "id": "88", - "name": "Mautic API creds", - "data": "U2FsdGVkX18UfkxcMVMnyvulFh5v4MsHRBsbbQsB4MkkXXZMgjNNY2Z1yunbFWCzVUVcM7/7CVlTf3oRYbKw4siibl6lk0rwZuviddJinIlUw1UGAVAS/8pcQ9csUGxJlIU37EmvObSthOPlfDlDrQ==", - "type": "mauticApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.mautic", - "date": "2021-03-10T16:14:50.450Z" - } - ] - }, - { - "createdAt": "2021-03-10T16:29:41.836Z", - "updatedAt": "2021-10-28T11:30:20.484Z", - "id": "89", - "name": "Mautic OAuth2 API creds", - "data": "U2FsdGVkX19dCfGo1uCKZje/1GRIdUxNmI3o5u+rE2xiejb9rSIE01A0kacwN5utBwgL/MLZvOfvHyioKuaqZ3RKnTg6JaKL9tEK7hdhr6HK9kuubqdoksfcjnP/bmKLJhwB52vSCCx8n3DEpb+09cYJI3tT5uRnl0BuAje8pYIYQd7nmM0hAQe/rgbcQLBvaI+IYIPodPMUxrVpXizxSoVC6N0SRRjC98jEH0xVdwvKmYkHMTrFJCUlL1qN5PJ9NI4fjFz+PdrOSCel/6C7f+8goMq8EqM/Q5RR1NdFN/sa/ta1nv/3ivSNQkI3NJSv8wjxlKPmAlp+dmbiz3e7hC4C9N7AOL7Ug7gerf7XEN2dDQgRjZBKaNm4aqjuMOIDnF2gkQe8qi//m/YSI7U0c006gIkxTnDgKPUKjilCcjtpGo9KkvoRX//cvrwlvYRqRc95hLkzaT75LljQqmIWgi1L3vufhsKQbDnwue2WFCR+DfoGY75/6HHifnD8U1Zctgx6962MUtJxjs5X4pwAlvEn7QuB/N/fiqW9OC4ePMGb+tCsWieN2S77nhiCr9tAVRhn0q2OYe2dg+4kz8OlN+7WRKTLjQfzUTJAjs38/QaxHxCTgPy63Rw9Mde4wF4D9x+fndaoxXJxKk5yxVidvuO8mwyIDwbwxJyqR4mKo4nohQ4MOR74t3dDs0315jqjAShBTytUiSnzD1nfmIPSOoEenMuzUMTPW1m4Z2RRnsVVjAKALlCP7I8xiJZoFwO+XC7Vzu/HQUZ1m25yPtY3lg5Qcl9FqmogdvNTjckw8JKRSGw2f8b0Kf0kO77Hbl6fDSgJkSDbn69anbJF1jraXc5azT+yqL2MNb+QeM8/1LE=", - "type": "mauticOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.mautic", - "date": "2021-03-10T16:29:41.832Z" - } - ] - }, - { - "createdAt": "2021-03-11T09:10:39.937Z", - "updatedAt": "2021-03-12T11:30:31.155Z", - "id": "90", - "name": "MongoDB creds", - "data": "U2FsdGVkX19VdDhEFhUCeW1BZk7DkUFX6zvlRNRhxoY9puM/2xlvJt2EIu+np9RsNvpq9VrsBhi8ap1sC0uiSN6GQeDCnCCN8/IvlSlwWuiPDai0lzQ7eRLaRDAfhbx40FAQfK1KLW+bbVddeQVYvQ==", - "type": "mongoDb", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.mongoDb", - "date": "2021-03-11T09:10:39.932Z" - } - ] - }, - { - "createdAt": "2021-03-11T12:08:10.123Z", - "updatedAt": "2021-03-11T12:08:10.123Z", - "id": "91", - "name": "QuestDB creds", - "data": "U2FsdGVkX1/N9OGwXIhnHPyDyqK6Y5ajkxZd1MlEBVJmdb+FZ9eheHQ+Cmi3/VC0sGW/aKRXEduxqA+Nh5ZMHIGJyK8kNej1yj7BD7BVHXwOHBzFgHLObH78pncsJc2f", - "type": "questDb", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.questDb", - "date": "2021-03-11T12:08:10.116Z" - } - ] - }, - { - "createdAt": "2021-03-11T13:11:20.456Z", - "updatedAt": "2021-03-11T13:21:28.295Z", - "id": "92", - "name": "Postgres creds", - "data": "U2FsdGVkX1+R4Frm5szecbkG6nOk91uePHlHRSowvgnUi7jxpTYoS/2gAMD2iBVatEzm+vrehhv5MQ9BbbtVJvsP7FyH53eZaLe+Y4CaisflkDWG3o2C5fcXlLSScKyP", - "type": "postgres", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.postgres", - "date": "2021-03-11T13:11:20.453Z" - } - ] - }, - { - "createdAt": "2021-03-11T13:59:22.856Z", - "updatedAt": "2021-03-18T10:26:59.786Z", - "id": "93", - "name": "Kafka creds", - "data": "U2FsdGVkX1+rWU9thAgHLGdI2UgdcVfSGCSAQkYRb9LWs6ASmyQcg0rNn9FL8+hZHffroK/VRVLrDqAuCRZKsDiUGDCGo9RZN5bi9qkVmxnzbLbDWhfhTCheBM4TEuITypYyHUnwwka56YjBgmdpjP7zEhDUKW9o6wsp0np3I7nZdlsllVEVrRNpb7d7C76DMJ9wNi+7C2Nr8cSywNKwuA==", - "type": "kafka", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.kafka", - "date": "2021-03-11T13:59:22.853Z" - } - ] - }, - { - "createdAt": "2021-03-11T15:11:08.706Z", - "updatedAt": "2021-10-28T10:25:18.167Z", - "id": "94", - "name": "Rundeck API creds", - "data": "U2FsdGVkX19MoytoZIpT2F4JLX+owySDLMvAiLJmLeiqGf2lxJ8jcBHvH789doN4L2+kJbc4fHur7DiknckfSYC9TCwk2dpe8y5MiI8/7v6JbInpy99IQ4xns5kIwg5y", - "type": "rundeckApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.rundeck", - "date": "2021-03-11T15:11:08.704Z" - } - ] - }, - { - "createdAt": "2021-03-11T17:17:14.643Z", - "updatedAt": "2021-03-11T17:18:39.467Z", - "id": "95", - "name": "Yourls API creds", - "data": "U2FsdGVkX1/YuUuye5uQXe3GNUqXhPtgJ4D7B8QBoFEt5lSLIMah+CtSBAhXgmcrXQDKfcDxz6WPifZOoWKigiuzbAROEcB637teGe8XLC8=", - "type": "yourlsApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.yourls", - "date": "2021-03-11T17:17:14.638Z" - } - ] - }, - { - "createdAt": "2021-03-12T09:09:03.077Z", - "updatedAt": "2021-10-28T11:30:24.515Z", - "id": "96", - "name": "NextCloud OAuth2 API creds", - "data": "U2FsdGVkX19QtT3IYsYHzTBMEyC2ptpKQ2BFukqLGXFDjyJHbyTq3yh8y1bIsosRedrvfCQuRWyG/yUFIv1dV63oZbLiWVcgtgypcpVyypXmvqrDpKMVbQlWCAPOumcfvJzOR/Nb+oFSu9O2TAonJNSUrRn254IaRSpylB+vJClRIyi4ycAv91W3JwfGAnS7N4EFOqbpjONN4K4rmx06XSxMgfUytE6XMBfj4URYsPkG181edV9c89hX2rkKpBU0YCWECEAzgO3m7cQlsXwxoALjUAoPgtwk6iq3LOIr1Ko06V7TNaexxCEWBszvGos033Eo/nTp06sJk4eJXzY/CkJLdtSWbFo23+MGcvrcFitaeooPAHvYQiRzvTyRIAP+6Zs8GswgjT2f/HhicK/X3Pwp+S39vjg1DcSbElVdd5mVaWTPaWdbI8M6GQ6TrrpBHwDQqlMK5uW47RFAFAVwbRby//ijhz95p2wqaieRRFJjNsn1ejleSdsw8UzEWP/Pwz221wgUryi0xTiye+4+3LINfBtJoLUTNOw9wgR5vOUYVOXl6mgYWp/hBdVdKeX2e68v+87qZR0anXuEFGCsdzdP9Roz9XnumKp4AxoxE+ZP9t11WiLp05DUxf8sVZ8tVeA5kYx2Xem1fpgRJi+zsA6wWxVp05w77heihZOBrWrPx7cHf7ozMRDn5gDgCphy7V3eM8sk1eRP+VbHA9fg+X2QObGTs4bFIc4h9KVj2aLHA4hLlflQp7ZEkGxZ4M5Ro8UyGwfqh2+rZJF/KwDG8DszlUb0E3HHtJTKqzw0EkS8LvuZF/LP86sbHg4gBDi2+r+FUiC2U2AytSkc2P/r1Flca/bLov4fNgpaPLCQCcbCRnL6vQCK9JcG6pGE72V0u6bhMEk29ugECqep0cYZXRbKD/mRMbpQz6JpmE07Cw6fmFbJnyzk9XaUOonHoZY3W+LrKL1v54JnfOLiarnXztG9eTZCofDrpBnsI37jhjM=", - "type": "nextCloudOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.nextCloud", - "date": "2021-03-12T09:09:03.070Z" - } - ] - }, - { - "createdAt": "2021-03-12T11:40:01.879Z", - "updatedAt": "2023-02-20T11:04:47.455Z", - "id": "97", - "name": "Wekan API creds", - "data": "U2FsdGVkX1/Qia18DYmlRSucqmePYvwmX4Z8WJDbQSCLZZZhjNE+e432Y96+of/LqxeHRKDK36YUvkOT4Zyvoxt8zwYk5gnXYEhA8VM4jpnmYLlEXvP2coH7+79beTQnFtSiblt9DY6kiQ9sZCPkHxlWpVVTwLiodlZ6M5mGlF3ibRAyfziFR8CQ6+HX3a6ESeZiS8XpAVvuIvIxttgFPQ==", - "type": "wekanApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.wekan", - "date": "2021-03-12T11:40:01.876Z" - } - ] - }, - { - "createdAt": "2021-03-12T13:11:46.131Z", - "updatedAt": "2021-03-25T15:23:50.434Z", - "id": "98", - "name": "Microsoft SQL", - "data": "U2FsdGVkX18OjvLpm+sUCUJogb+mrx4B1Fhu9ILn9v3eOFS6L1hW8b05Ocp2PMM181JqNeyuuU0LZ29domoAwZ08IrBSknLtPy4CfNvfRgs=", - "type": "microsoftSql", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.microsoftSql", - "date": "2021-03-12T13:11:46.129Z" - } - ] - }, - { - "createdAt": "2021-03-12T15:28:11.857Z", - "updatedAt": "2021-03-12T15:28:24.902Z", - "id": "99", - "name": "Line Notify OAuth2 API", - "data": "U2FsdGVkX1+xSNwjOdBqBUIXSvai4AJ/B0Xilj0ktq/QoH6TWBiztIDKcV7aYMdQRy8T81/7BQgyeRKecyXKRZOsxhNi1wN+RYqJYb8w/izJ8yKKWDgckR44RCmGnlh/hjW+sRaKxpP0uqe2GChrtTHcTSOOzyHCGe97mZNksHL8hwO0Xj2s7kK4M2P3vISgigQnZpQi07N1kRFVVJFEV56egA1KDzcQW2zFFAXZdd5CGt9b0rqD0dXuVe/Ma1Nd4tYwvbLcCkQUdBE11HwmJlNQVINqjIhog4L7yGofqE5Ye7uFYE+uM338dTD0GR1eujDhJV1WfaH5BBPrDUhg9A==", - "type": "lineNotifyOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.line", - "date": "2021-03-12T15:28:11.855Z" - } - ] - }, - { - "createdAt": "2021-03-12T15:50:41.447Z", - "updatedAt": "2021-03-12T15:50:41.447Z", - "id": "100", - "name": "Mandrill API creds", - "data": "U2FsdGVkX18wwkOLFQswsvPfxPV7EGPE8rz2BVZRmhiy5p0rj4/q8v+Pq/J+UA4JpHgpTwQSFoLJcxnbtCFHjQ==", - "type": "mandrillApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.mandrill", - "date": "2021-03-12T15:50:41.446Z" - } - ] - }, - { - "createdAt": "2021-03-15T08:07:51.815Z", - "updatedAt": "2021-03-15T08:07:51.815Z", - "id": "101", - "name": "Twilio API creds", - "data": "U2FsdGVkX1/Hm6KToJ4wYYYp1RPiXzQnl8H7C6VGFTMLgjlg8bsI+Z3qKsZb6XmbNxsN8pZtxSk08819FDDERmVJtGDteE3PUbrSwX9ZBvted/SF93KyL0PrCtIxRtOeHd5tquC8QMVHy2HlTl1/KDCVZwG0zCK1cJnaACH0FOs=", - "type": "twilioApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.twilio", - "date": "2021-03-15T08:07:51.810Z" - } - ] - }, - { - "createdAt": "2021-03-15T08:50:20.567Z", - "updatedAt": "2021-03-15T08:50:20.567Z", - "id": "102", - "name": "Travis API", - "data": "U2FsdGVkX197DT7QsA2ASxrFzL+fJxEil+VzyuZvlZrQzTP+vzquYU/h6m80jBYrfXHyvGc74cxzdHjX/LZ7LQ==", - "type": "travisCiApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.travisCi", - "date": "2021-03-15T08:50:20.565Z" - } - ] - }, - { - "createdAt": "2021-03-15T10:40:08.581Z", - "updatedAt": "2021-05-10T10:08:44.134Z", - "id": "103", - "name": "Cortex API creds", - "data": "U2FsdGVkX1+BOc0IlJwZnb73ie9l4VzT0h52Urrsf6r09AMleCIsQNdCH+7hmC4hAM2AKbgcLPjPGwxTN7hMRWwlTKi7nh7BinHXheGeJtp91MKse93YE+VH3Rvp6JJ/plIDmiJTp1FoQFNPPDqbPw==", - "type": "cortexApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.cortex", - "date": "2021-03-15T10:40:08.579Z" - } - ] - }, - { - "createdAt": "2021-03-15T11:34:15.209Z", - "updatedAt": "2021-03-15T11:34:49.148Z", - "id": "104", - "name": "Pushbullet OAuth2 API creds", - "data": "U2FsdGVkX1/acNZEycwY2oYwzm/qKfppF3HlTQy/vC5TI7QDcPkrAvzzINbzJ866e0VmMz9ZHhNXV6ZAxm3Ofs7fa+xTRbyfsfjHApBvN0B/VcYPKnH6WRQ3rv9quVw9UBS8HJdS3M+HVYf/VvrKNVwhm0ebTuF3SJr+9/zHrey23gZuKsQNcw24jaYDGSYiJ64eLg+rsUh93QoMDOq8mmgiHb9z0KDudTKlB728rHPo1ELA/k+F6z6F4p+j839rAl+wsfLVmM5Z1MCiEyBkAw==", - "type": "pushbulletOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.pushbullet", - "date": "2021-03-15T11:34:15.208Z" - } - ] - }, - { - "createdAt": "2021-03-15T13:09:48.087Z", - "updatedAt": "2021-05-25T14:27:49.598Z", - "id": "105", - "name": "Twitter OAuth API creds", - "data": "U2FsdGVkX18riumSapB5XXGF1EBh0TEEEVdxGzpWWM/KLB2RxO6eop1nQKUIcdF/tR92J9faZGVQa6vHsbpKdvBgK7AtceZlR+t3obChNOEhz3IdPnLuwDl4uDDCjmb8FN4TP7DgHV97MHdFf0okHw/Ds5pJheSkeL0OuXSc/1fa59vHan7pn11KZGtgwtIU", - "type": "twitterOAuth1Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.twitter", - "date": "2021-03-15T13:09:48.084Z" - } - ] - }, - { - "createdAt": "2021-03-15T13:50:05.544Z", - "updatedAt": "2021-03-15T13:50:05.544Z", - "id": "106", - "name": "FTP creds", - "data": "U2FsdGVkX19yEAmrQHFBDGmRxp+WnSpl/QjsGjk+TtgU4xYhPuOMkP0L9vQhT88LHML81VWXAEWg/KTV969Ndw==", - "type": "ftp", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.ftp", - "date": "2021-03-15T13:50:05.540Z" - } - ] - }, - { - "createdAt": "2021-03-16T15:12:24.122Z", - "updatedAt": "2021-05-21T09:17:05.551Z", - "id": "107", - "name": "The Hive API creds", - "data": "U2FsdGVkX1+sq7FgjnLT7wscZcPeewSYPCGmLSNFCHl5ARoZ4AhDoX+pJBdeZq5Wjt6ys2RYz2IArqslrrzpiUEtyVBA2jONuoID/rqAbpjkg7DQE/vPIGoddzk1cbe+Hij4Q2LgIdyi8vimHRYw1w==", - "type": "theHiveApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.theHive", - "date": "2021-03-16T15:12:24.117Z" - } - ] - }, - { - "createdAt": "2021-03-16T16:55:54.217Z", - "updatedAt": "2021-05-19T14:12:02.316Z", - "id": "108", - "name": "The Hive API creds (v1)", - "data": "U2FsdGVkX19jCmj6rCN79nEROh6h7iIjy6b+p4stO/NGN5SZJruViMOIVpTC2UBpbEbp0lpmurHRWHa0t7lhFQN0YNksUCa1Dvdq2gg0L+lUKZR2gX/uXEO2TkkmAht/siUB5DrwetudoSY1n5eNNbu2/5LCGME8H5oT0wh+5V4=", - "type": "theHiveApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.theHive", - "date": "2021-03-16T16:55:54.214Z" - } - ] - }, - { - "createdAt": "2021-03-19T09:08:45.915Z", - "updatedAt": "2021-03-19T09:08:45.915Z", - "id": "109", - "name": "Shopify API creds", - "data": "U2FsdGVkX18BbV4+zI7uK/CPIyEYKsbC2sfNU6LxGjBLFbQ2e0MpunF4VAfH+iCZ8uZEN0TJN0kQl54YWaSnADzhRpgbG9GKTvF6kz57XVACRtVW39StOmUhPTeZFCe8BOd1x7xXEsdtCKYfQmm4PyIiA7v3DfKRJWLJfDGaUYfKGXcDIvjN6e2INRhKMhecJM4QzJGCR5dgNGIt3+x4z2he3eXOZ47B1DpGfch53ojSDMNbbPVt4ErKWtpt2SDiN+Fa2QHQGOL6MMAMp9wGUA==", - "type": "shopifyApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.shopify", - "date": "2021-03-19T09:08:45.910Z" - } - ] - }, - { - "createdAt": "2021-03-19T14:22:44.070Z", - "updatedAt": "2021-05-04T14:31:32.039Z", - "id": "110", - "name": "Microsoft Teams OAuth2 API creds", - "data": "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", - "type": "microsoftTeamsOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.microsoftTeams", - "date": "2021-03-19T14:22:44.063Z" - } - ] - }, - { - "createdAt": "2021-03-19T18:17:05.697Z", - "updatedAt": "2021-03-26T13:23:15.730Z", - "id": "111", - "name": "Microsoft Teams OAuth2 1er account", - "data": "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", - "type": "microsoftTeamsOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.microsoftTeams", - "date": "2021-03-19T18:17:05.692Z" - } - ] - }, - { - "createdAt": "2021-03-22T08:12:15.509Z", - "updatedAt": "2021-03-22T08:12:15.509Z", - "id": "112", - "name": "Orbit API creds", - "data": "U2FsdGVkX1/o7TfYGI4nCUKryXGq7lhyDEjT2FntS9xynzLCAikqxFA3p6Qt/w4TtDKB/0sqdtX43Ie2FSrW8A==", - "type": "orbitApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.orbit", - "date": "2021-03-22T08:12:15.501Z" - } - ] - }, - { - "createdAt": "2021-03-22T09:46:41.540Z", - "updatedAt": "2021-03-22T09:46:41.540Z", - "id": "113", - "name": "Monday.com API creds", - "data": "U2FsdGVkX1/RKU3VMsGxVQ92hJHN35dpJmqaGx6FHA/Q1ffPvjPJ4aLYcU1pJQ1ZxqFOS8g5rg+A6dPC5glz0g7FVBNAz1+Lz6CAWDLs/AJ7CnZEbQNg1E28pZXhEsTEVmvjtYijeTqZ3d798xrWLIbVVNUTe/NkWLaqMh3NA8t+qA1vdQRxdk9EQjIkVcFeMElCtTIV4KGW+rgJUxk+q3fqPcOziIg5UJUB3OL1ZuHqYjGb+fRJJ8NKsTbLC/zEhecmBYKx0e62pveWMlAKSrajkLzBMvzI34RYvLkGSVX7veFtdOQjYF/ket9gDEKcfduWzZE29K4BKhZVHJZQQw==", - "type": "mondayComApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.mondayCom", - "date": "2021-03-22T09:46:41.538Z" - } - ] - }, - { - "createdAt": "2021-03-22T11:00:22.706Z", - "updatedAt": "2021-03-22T11:01:17.224Z", - "id": "114", - "name": "Clearbit API creds", - "data": "U2FsdGVkX18jQUzG/vWBSBLNWCv0XRtGjyoWCC1R9qAtgjcOKXrqXJfS1gjE3y5bT7F+7yoNd0Z/wO0+R/Grwg83EaqgmzKcmWHMEg8JpQY=", - "type": "clearbitApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.clearbit", - "date": "2021-03-22T11:00:22.704Z" - } - ] - }, - { - "createdAt": "2021-03-23T16:27:04.016Z", - "updatedAt": "2021-03-23T16:27:04.016Z", - "id": "115", - "name": "APITemplate.io API creds", - "data": "U2FsdGVkX1/T+TNJGO/e30THF/oTXD49Z8O3DqAyoTgkqXESzPpgtKWF8O+A38S+3nFWEnqitAui/Kg1XmGJhTfnDEOj4RJAuGc4cKa7XIU=", - "type": "apiTemplateIoApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.apiTemplateIo", - "date": "2021-03-23T16:27:04.008Z" - } - ] - }, - { - "createdAt": "2021-03-23T16:56:37.485Z", - "updatedAt": "2021-03-23T16:56:37.485Z", - "id": "116", - "name": "Peekalink API", - "data": "U2FsdGVkX1+amqKPT+su6WEQcvcNEN4JG8G5+//6gX/YU1+jf5CK/TeYa587Ic/R+qDJhrUSFDLFd+I9JlKvYUzFUWWYZel36akQnn2qrHQ=", - "type": "peekalinkApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.peekalink", - "date": "2021-03-23T16:56:37.482Z" - } - ] - }, - { - "createdAt": "2021-03-23T17:16:51.390Z", - "updatedAt": "2021-03-23T17:19:41.777Z", - "id": "117", - "name": "TimescaleDB creds", - "data": "U2FsdGVkX1/OG4Ms0I7b2c+6p5RfwLpDZfWBSe84eAlrmtuhog0SpjsaeZaLyDwN802lxA/6TRpGnF4v43rOUfxHAKYnloI7LiMgLdVJS7UNMBiYi22P71O46+UagWW+", - "type": "timescaleDb", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.timescaleDb", - "date": "2021-03-23T17:16:51.386Z" - } - ] - }, - { - "createdAt": "2021-03-24T08:41:57.197Z", - "updatedAt": "2023-03-06T11:47:25.441Z", - "id": "118", - "name": "Raindrop OAuth2 API creds", - "data": "U2FsdGVkX1/trFrXaFPYfQbSJPjaXjVpd4UVIUEzxmaXTiZ67ecDLPrnD3nVms3bvjo8KUPYYpHZP+21uZarECDahaMC+DFrH4JkjUsHDDdqtzhmfLJDhDdseJm9GCVdyU1JoljnI991rZyXpgggOic7SSxENP6fWpah7rdwjoFLPxoPE02fyLCuDJk/XZ/2t9/PZc39SY+ssBJXX501TKdL2014tYQbpSvbzJG3HWVqF01XSQjj31g8RS5TmcRoQfCnk2YX1ug6BNZpELpBXpEcPNoZTz0FP7vE4T6IxRz6jk8+ZXHplCMdwiJ5ZYY4q5Sak87pC8xNvLpixBh0Zpz4/3H7FWP9FnwUqLkNlRdgb09OQ9ftVZQEwvKeldjmvbmFA3YECHAsvqqmywiTTjWY/HRKunW2F0U4YzZb0U0ONVhIhQEfKImIwyoGjzRwElqor+/9gFPoDEGCVmYvzHLpCBXDeaW6EunsktSV8oBVQmty7zZBmas1n7sxM+LpNGP86qeKKuklUkn0slAYl8BCxJSiowfQLDeYCF/qa77oha5cu64ES7OwcbP+DDV3JdFU+OG4xEX3OKBYALPU6LnZW3tboIFjvHBB1pJY7j1RlOEXei/G7mRyxxkyZcoBXg8so/7gb4ybqfg2+qnTkxboQydBIMSB0V6xtwizkws=", - "type": "raindropOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.raindrop", - "date": "2021-03-24T08:41:57.191Z" - } - ] - }, - { - "createdAt": "2021-03-24T09:01:09.124Z", - "updatedAt": "2021-03-24T09:01:09.124Z", - "id": "119", - "name": "DeepL API creds", - "data": "U2FsdGVkX1+GlCRFP+uZ80Sf2efUOqr1NZRfWmKURwZ1ZUxZ+6hMALKGhNp+ALMZxH+WSgYhmynGpl2dRXnLfdt+2uC4ME3cigCFSE0W2vk=", - "type": "deepLApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.deepL", - "date": "2021-03-24T09:01:09.122Z" - } - ] - }, - { - "createdAt": "2021-03-24T10:06:14.748Z", - "updatedAt": "2021-11-12T13:12:41.830Z", - "id": "120", - "name": "Reddit OAuth2 API creds", - "data": "U2FsdGVkX1/0US4pkFlyhr+JeAVih9LYj9FCeuOCXka2W4E8s1yIzfgOMwuxAdP0mXUCVd48h+haGlZg3bjD9oy37E6ooQOp2BTs7TUUF7jJSLNq5hVkm0wzcq4YvI/hHVrD92CobCjCI0yY19u2weTVkUdyZbDlVRrWvyn0UJMUqtv/KI0f9g5CaNrkPI3dxODytpokrdnk9dl7SGHUOIQg8y2nYadjCl8Wdarjvv4CrrnYJyUFKKtIWH5cDHY0I0NL50QjgDeVQ7KsoT6yfoOoqvBbCyTMPVRQwAJuTDBiNmpiZNwGzZ6+4QBQgcJB9qyMt3N3LMKF6LqbKvaf2hyO0MCWe/hctHe6Mqa2c/Se8AROktUOBCD5gCNkVCoFmQkLW2ImeEdD5Ne7CB+1CTQgNwGUTOgLporM70kQu7jSmWM4bgMaX7m3hbqtl4uyTR0Rb624hXnfTPGC7LAV56SwUciuPEFEJfNeUToIe3yxrR0PwPALUJ0QrFJA2q/ssy1xUKBEd1MFJb7/0SiFC8VOUM3lyBEsAkYD7CpPNjZaATjfY5Cbf2pKmwnZxjEh7ME/PqAqcfVdk9kck5OexkM0NFjd01An4uAwPOohJR/EYgHD3nPkUdJK7WfIvYneEiPYRNMR+JO0EjFafLZpB13v/iKyiVLO2hHmcdqeJcOBWIrjCF6fhv818VfByfHSTkTJBF7KOmCmQnkhU/BhKFt4CDsC2xoNrBumIfxxnhIltVf7pMgTltDai8RE+jPhbNjqGdZDVcVBPhDtDl/IyQ==", - "type": "redditOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.reddit", - "date": "2021-03-24T10:06:14.733Z" - } - ] - }, - { - "createdAt": "2021-03-24T13:18:39.585Z", - "updatedAt": "2021-03-24T13:21:09.217Z", - "id": "121", - "name": "PostHog API", - "data": "U2FsdGVkX1+dxVkGdcLhw/iwAZ6ZhsE/B5fcd2vpZQ7D4fzJCDCTOa42QLamab0a+76Z+B7qWIYwjAmJ2esTX/XXzwcSf3pmLF3BgFktOezmzBHZ0Pg13R2aMcXsNTq1IlNUvYnsLw8hURREdBE0DQ==", - "type": "postHogApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.postHog", - "date": "2021-03-24T13:18:39.143Z" - } - ] - }, - { - "createdAt": "2021-03-24T14:40:12.371Z", - "updatedAt": "2021-03-24T14:40:12.371Z", - "id": "122", - "name": "Wise API creds", - "data": "U2FsdGVkX181H3w/pIF/pUShbLd5k3fIlJ+P1zcgGUzs9B/ShD57Tqt51M8KLZxqVH65s74UnMEYb4YHWYBYpazIRQPnpf16euX/WV/yz7Jn+U39z5oNT6aGrdON0ybt", - "type": "wiseApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.wise", - "date": "2021-03-24T14:40:12.367Z" - } - ] - }, - { - "createdAt": "2021-03-25T08:24:41.346Z", - "updatedAt": "2021-07-29T10:35:04.793Z", - "id": "123", - "name": "PagerDuty OAuth2 API creds", - "data": "U2FsdGVkX1/OnrXa5cdqsp6Gx8I+ZTOCZASl95XvWjDG6KcvYHq1fsfTpz/yj3iO+4PJ1C0VkHsLX9a+hpUz30J3ryvl4PgnqSBuFMYJq2ilJ4/RWKiTyEaDIQ4iLsexw23QJ5a7+Ac2Fy7wyxvQ1p9e5ibNbVyqEMeccJQNj1BC7iJHOwcZc3swcC3fxLy+IgfSpMAcfnVRc5j1Z8x3IK9J7/K4sClINHgOCm+XRiqGRcWzMIUyGgVXGTLVw5CITzp8mc2RvHgWiY7i77352wHqUmNLaXMM5MKJTjv1hFAkYC+qSeFy24CxixcWTxChKHDNtIrszJAGc/8Tztht91wd8xifgp57bVJf1msIx3LfmJE1FabWw5ibzjqdU3M1Rh92+EgTnDue9BgZ3p+f8lmO+W7RRc7zDWJPT+kF83KVcTsml8RR5cOKNJwzCEndmMpKIqiaSqEWyzMSi5/oW1J0EirvMRisWQPNIZo2jiwyp1QKxKMg8t/wxwciU5TUZYwvtOSYOfL1CuDo6VN/G2Sm/2mTqf0C1QcXUPSzzzMV+5EJNJgxhuYHdo/3O8KGLQZ64P0DMxWh/nzUcIz5NIyaTLbGa0vIjrbrs+LvrX0=", - "type": "pagerDutyOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.pagerDuty", - "date": "2021-03-25T08:24:41.341Z" - } - ] - }, - { - "createdAt": "2021-03-25T09:20:09.900Z", - "updatedAt": "2021-04-27T09:05:17.449Z", - "id": "124", - "name": "AWS creds", - "data": "U2FsdGVkX18CrjtlfrVKO5aBIoQs97toMhis4Msz7ramicpQPg/7ADHR1a5KrYJwMaSesk+aep+ff8fKEbZ6uaH2kiIcCo4Bb/W70/YpXYXIfMlxeo29OolY9w2HlSQnoQT8gxGqza8L/ZQRgW9PaD8dj04GOGv6Dyp9jLQgXGA=", - "type": "aws", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.awsComprehend", - "date": "2021-03-25T09:20:09.898Z" - }, - { - "nodeType": "n8n-nodes-base.awsLambda", - "date": "2021-03-25T10:26:02.255Z" - }, - { - "nodeType": "n8n-nodes-base.awsRekognition", - "date": "2021-03-25T10:26:02.255Z" - }, - { - "nodeType": "n8n-nodes-base.awsS3", - "date": "2021-03-25T10:26:02.255Z" - } - ] - }, - { - "createdAt": "2021-03-25T16:17:53.698Z", - "updatedAt": "2021-03-25T16:17:53.698Z", - "id": "125", - "name": "Tapfiliate API creds", - "data": "U2FsdGVkX1/iIPUbQzFC5Idc51Ntpap/YY8Z3XUFYvy6tbuJi6vtZEdT7zS/UJfhdwAg16DFWZ9msD/qfB5xQ+hm+Sgfinm/cRu84fu3cxA=", - "type": "tapfiliateApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.tapfiliate", - "date": "2021-03-25T16:17:53.696Z" - } - ] - }, - { - "createdAt": "2021-03-26T08:42:20.556Z", - "updatedAt": "2021-03-26T08:42:41.657Z", - "id": "126", - "name": "Wordpress API creds", - "data": "U2FsdGVkX18sj4B2d0sk6ZjrvYjNNo/XAGODRSiifsu17PiCMzuCEV1JDLqWx7MT/xZLAyDfNyVcTYLffFoIvBZS+VZuhi7xyrQ+HLqi1d+PkS1Zcy7HZwsb/PDN1istKiMM6upOXhqITrHeNrVQZg==", - "type": "wordpressApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.wordpress", - "date": "2021-03-26T08:42:20.549Z" - } - ] - }, - { - "createdAt": "2021-03-26T09:23:43.013Z", - "updatedAt": "2021-03-26T10:04:56.190Z", - "id": "127", - "name": "WooCommerce API creds", - "data": "U2FsdGVkX1/PpZBiKFypBhk59ahnQrzs6DvXvq+yOJl434b6v7qRK+jU3pJWDXgRu9ekq2QJWCDPv62Wzi0AJP9cye+2//skLuJaoo2qcjHOyINNQsPx7McIgHrf+boea9Taf7uF/qPSdRTPh5PtlPdHjH7pFfi5JwMk9+GYJKPt5zq+oy3AD8hCu/11cuZjQ2i5wGp7d1I+jIgEXWwHrLCUwDTyrAzIorS38UHmH71Tmuy/65s+qeMN59wHsNRw", - "type": "wooCommerceApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.wooCommerce", - "date": "2021-03-26T09:23:43.010Z" - } - ] - }, - { - "createdAt": "2021-03-29T08:29:56.384Z", - "updatedAt": "2021-03-29T08:29:56.384Z", - "id": "128", - "name": "Vonage API creds", - "data": "U2FsdGVkX18WVXC8Ll749yKbkxqAqMbGn5a4OOBxojW53/A+mJNMqVRbJFV2z2ufNwfTqCH4JEZyyTQrutfqwr2SeSWMVooingKfRCPt5QI=", - "type": "vonageApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.vonage", - "date": "2021-03-29T08:29:56.377Z" - } - ] - }, - { - "createdAt": "2021-03-29T13:54:02.617Z", - "updatedAt": "2021-03-29T13:55:02.914Z", - "id": "129", - "name": "Drift OAuth2 API creds", - "data": "U2FsdGVkX18fFSioDqPTa+OHhYDqqWu7G45NcimDjrhwkLpKsZg/zDWYia85+CXZENYbOQjwd57C7qBwhaPxJtXFF528/FeScstHHNJoI4HKGDNxwn9/4zrQGrwB21gPXhq+eND+Si2mCZhP2Upu+BOgk5m0pfce+lLmwYwILFfTuM8Vz403A0P9grRLAk+vSxkErwdtqNqp4Ac3Cvxczw==", - "type": "driftOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.drift", - "date": "2021-03-29T13:54:02.614Z" - } - ] - }, - { - "createdAt": "2021-03-30T08:31:01.924Z", - "updatedAt": "2021-03-30T08:31:09.696Z", - "id": "130", - "name": "Sentry.io OAuth2 API creds", - "data": "U2FsdGVkX1/cXGLFr718WUrwP2FijYTb0QYRysCy9kj5Xen1gZJgDP3LfMl7lkeTdE/q2mCYKa8rq/pb32Xm3bzXbprORCqXLnZB0p93wZZKcz1+LzckY6yuifN/VEIMKhE3fSwXi1/PER8VmQ3K92hup3LSalVzuqhy/EX8K5oDkLEEmEI043hglgCbTSxplxrjgRJ65y73yTMxfOrLdHWTbZVjZEKB8knc/hRvg6M16nkSyfFclQALOZiKN6o9OLNTx3iQ0wLrhZSvDZuhfiysVqEzpcBEsM98232NzyIxcrQ74SR+uuhgZeN8IejYR5ApPJYUsrTTC+keCqW9la0KBSPdM+ckfTYIctJFLZnjvbvJMEZHjEMn2CjOgmcd5U0o8LLceh7aDCbLBJ4+1FsE5ZQankySwNriCSV6XsQ6b42Cev6nIpne0lwOLCtEryzlEAtr+e5bn8/BVrgFVY6IMnOq1qtW20UkF9/dBlQIXy/hcXNoeHHjKcn1480GvLtHAX68rWwOi4cAbF6jM1azNGpxUJPXJflT0QQWKo0QZKoS35rbvUtpF3GR1blAkcISaQXZi03fWY81i7m/ddPB0uN3A64EQ1MPsaGjuqfFWKvD+BcbJzHOdHf3NpUNBGBaNLRUzHNqB9PvR+lI4KKHve3gw/xygaE431v2OF57YRgJAdJKJMsXYSRR4rPWPqsZGLWQR+u9tjSgm5qo8NlrGTCisfZZuxitK1SHVneULlJe78ybNd7SaLbpcdPeUfRlg+UnRKXPpHmpwWjmCnrhgfL43Zn6MtPQ45FjLrWWgduf8ylg5wC+LBIEFfJ05bNDEAI82mo7fX/FAdgK76mzbs95moEbrqgDy+9rXECuWaTmOtXtnX/A/+pQ0uZ1", - "type": "sentryIoOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.sentryIo", - "date": "2021-03-30T08:31:01.918Z" - } - ] - }, - { - "createdAt": "2021-04-06T08:26:09.733Z", - "updatedAt": "2021-05-21T13:38:09.422Z", - "id": "131", - "name": "MQTT creds", - "data": "U2FsdGVkX1/m4oE9vOBa3hzo+X+T6tDwBY4YVzTXZnDcIEl3EZzNTlirYEuZIoakWhJwCqw1a/1MkLh1jUy97VpaZ3/DEZM9TMnznlRWz+cqawe/VrPHHOLHw4bFqCvvdvgD4IvVycxY57RsxFiL+w==", - "type": "mqtt", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.mqttTrigger", - "date": "2021-04-06T08:26:09.724Z" - } - ] - }, - { - "createdAt": "2021-04-06T10:42:40.529Z", - "updatedAt": "2023-03-06T15:34:19.246Z", - "id": "132", - "name": "Google Slides OAuth2 API creds", - "data": "U2FsdGVkX19/PS9ckxDNT2HrxxHvkTgLNa/qdlRTq0hdxcddI2D3UDqpimeDw8cJMdIexszhk3oq6n+6f3mqLHaezPu6xZ8z7a/d5oEcx8fK5y60vmWODlFrsiqlBPDlbesIT01amc39JuFQZTbp+gHbpIxWj4fURrmGf5cLSW+HW82Jwm74OTO/GARTgklTrEwn+StkHayC2Nq0lUAt72ufXg+LThsg+c/v0pZSAvYr6xJcFKGQewNZJhTK7OaJRmM52l5Exk3cm4go9AzflcGt6aslIQ5d5RHdoloEgyxVjeNO9akQdqL3lJNy0WIphnyQsSM1Od8K1G7ONaHc4OsKABEvbkSll9EfuospiZTlpiwqnQsIFLsAC9cZTLFUhVqGOliF37firEZrwxu5CeMkuJRhNkPgGT64/+NLef9Wjxo7qFXEjkRH/yNiJ/MBiRe61oB6uohb/iDpnk3D1vFpjLS4V4h83SRLkOYSG7Yua5snfoXGWd3TdiEsIOdA2dI2FEUH9zQCT8prJKU/9H1n/ntdcOgO8clDMhrv5139UFyuWyFt48dxvqzVuAf4mD+EEmfyJL/PJkAMvUSrcHAPHyu5V7PGCT0zbjX5wBU66gvn6xPlDK2dvRzRt19MiH33HyBkjUtP73v7N8tN+2eXzDlgOMOrO2bH/Ail4yekJE32QEah/msJbiQlE7HCmkQeaWqeVG73wrxFnA2TVkKf0/pBLEUk5fhe9xZIhwmQh3AyavssJGk3aBq5/xi1MFYXPhARSE/cgMaEQ/3s9+wWKT7xk3wQr+J774RNiSLvbezrvxrJap2/P/4HFZijfB1vvLRUvjtoW/WvCgX3R2Kk+a3Y0epUah8ISgddmlTb1FLz0a4s2ciA5l1ClJaA7ICNzOiuX/ViB95/mrtfaE3ZUyzmlXX/VPhu/uYtki871EsyawsVa0CZOS+VUL0pWflxj8ZBk97mjpRw04+50m/qejCMS0b1FkeyMbGyiuUASB8Zz/CtY93OH4d7ZEcKAVxcxN6RFkiuIrMYXwPI7FzD4P+FCbLN/kC8GSpAdD/KIZj22kdvANovTr7nzqdd+l8EgpPiHsm6B2IOqjAsEJmb/4uzHGINchbij3KSj4gluczYBKilJx0HlHrgDZU9V0aHI4ljDLz94NdrQOh6TWUB7Mi31lMJYsBh6yTsAE3mrPGvQ/mRZmxbBmpAwkhrrspV6GrMXU1o2ncI8+N3oC5PAyk6oWWjVpSMmwfeTigKBRYu9WRGdYJUXy0NrU9N4iwVkFUDTInXgabiQUjDiB0ErltnaV9x12BWbwdw7UhMe9ZAyfhF5CGR1Tg/c6oVVolq9i/lgegO2t+Ckc45FrHuUKCXk0TZKy45wsUn5+0uq0cRrdbS1rcXVsEHC1RlNY/6QlcGPzDEAD3uogVUXNJdAIN8nXBA0v+OJbN8YV/PRiOC/5MUd4dXDOZG2jMeI+Q/cNlrjKDWbO6uV9LFoA==", - "type": "googleSlidesOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.googleSlides", - "date": "2021-04-06T10:42:40.526Z" - } - ] - }, - { - "createdAt": "2021-04-09T15:28:44.590Z", - "updatedAt": "2021-04-09T15:28:44.590Z", - "id": "133", - "name": "NextCloud API creds", - "data": "U2FsdGVkX18Nzxxsz9idMXFq+XbyidwNPqnC+idaMf7TnnDZK3A8+/uA97PCCJ0mKSJvRr0eAZyoAb2gnRY0HoemTUb6byZgJf/aQU/os641kNKcHZTSgeO2KMOB60UV7z7lnHk/TeO0m6JtIiJpiFoowYbYqej6cWnq6Mj1sTE=", - "type": "nextCloudApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.nextCloud", - "date": "2021-04-09T15:28:44.587Z" - } - ] - }, - { - "createdAt": "2021-04-09T17:52:02.689Z", - "updatedAt": "2021-04-09T17:52:15.721Z", - "id": "134", - "name": "Freshdesk API creds", - "data": "U2FsdGVkX18oaxZ5INmwYOUt7Ya0KjQv5ypLeMpwKcunmELwMmERRqD1WoTWs8UWgprV6yAX7L0NL2fgBT93mXQChIoHf1ZZoGXE6vYrQOsAR7sJsfnr3QARPc46VKff", - "type": "freshdeskApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.freshdesk", - "date": "2021-04-09T17:52:02.682Z" - } - ] - }, - { - "createdAt": "2021-04-14T13:04:06.289Z", - "updatedAt": "2021-04-14T13:04:06.289Z", - "id": "135", - "name": "Demio API creds", - "data": "U2FsdGVkX19k/lMkGTHyBCxQZ1d+uG+9bMMPm31UxGZBstePP71IUR1okte6Oz4WvNQIONYkt5aSMKKRAZukIAoVircgl9uAoDYE/sJAHfT3jwiRIhnC07FTmGV9+sx7", - "type": "demioApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.demio", - "date": "2021-04-14T13:04:06.280Z" - } - ] - }, - { - "createdAt": "2021-04-14T13:45:10.548Z", - "updatedAt": "2021-04-14T13:45:10.548Z", - "id": "136", - "name": "Emelia API creds", - "data": "U2FsdGVkX1+qPrASstL2tQks2/6kiNgfwJRpNdFOM+9drLY4CFL17SNSlGhHnIXu3WMcg/7PLvPbs8+C7ALIhYACrsnoPMWd7mWjd748N8s=", - "type": "emeliaApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.emelia", - "date": "2021-04-14T13:45:10.542Z" - } - ] - }, - { - "createdAt": "2021-04-16T09:02:52.991Z", - "updatedAt": "2021-04-16T09:02:52.991Z", - "id": "137", - "name": "Intercom API creds", - "data": "U2FsdGVkX19Vssu2q10fPW/982PXhjejRzXqloNBNbiT1zlWoXl1tPgilsXs6gz67MJG+mtV3JWWS5yhYtYTp7q7omTykQkuiOoWDDVYrOWcLA/vJIK6ZB1NlCFSXBai", - "type": "intercomApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.intercom", - "date": "2021-04-16T09:02:52.985Z" - } - ] - }, - { - "createdAt": "2021-04-19T08:27:18.210Z", - "updatedAt": "2021-04-19T08:27:18.210Z", - "id": "138", - "name": "Mocean Api creds", - "data": "U2FsdGVkX1/oA3812/OCv0qqWa7+wDlwRdkyVKk/LGtTfRqSbyyqIIrWW9vWdkB0jfZARMPAH86FL5kD/58U3PaY4w/k4la3dE/jqjC+2GQ=", - "type": "moceanApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.mocean", - "date": "2021-04-19T08:27:18.207Z" - } - ] - }, - { - "createdAt": "2021-04-19T08:43:47.245Z", - "updatedAt": "2021-07-12T14:19:41.820Z", - "id": "139", - "name": "Xero OAuth2 API creds", - "data": "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", - "type": "xeroOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.xero", - "date": "2021-04-19T08:43:47.238Z" - } - ] - }, - { - "createdAt": "2021-04-19T10:06:31.948Z", - "updatedAt": "2021-04-19T10:06:31.948Z", - "id": "140", - "name": "Stackby API creds", - "data": "U2FsdGVkX18YSUQweuj3R54MYldVyuyfIcUECTdY4k8eFC029LqS1/8pTYrm6+L7", - "type": "stackbyApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.stackby", - "date": "2021-04-19T10:06:31.944Z" - } - ] - }, - { - "createdAt": "2021-04-19T12:54:51.234Z", - "updatedAt": "2021-04-19T12:54:51.234Z", - "id": "141", - "name": "PayPal API creds", - "data": "U2FsdGVkX18g+KnywgStKZsljAR3dqZvRZdgXGBuouUc0hj1Gb0BHHChnQugXSDkyY3MrhbSjxeWT6bEkMhatJhjGn5wVwgC4TdlA/Y4RtC4SKpfR2tBK/jkFUZwg0btHdWvqOmvwhWZiD+NYvHGrTCq0HNicuQjknMwmGxlOawWDdMcze42ZgWXxnNWdPn8e4bk1abVjlpFjGFJOxGFXk5CIaSmJzhqW5Skc2KJldOjjgseY4n1FZ0EO8kQbBmV/ByloLTwXzbIySp3b6U3oD7Kvz6Jgynq7t8d9ZhUyQs=", - "type": "payPalApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.payPal", - "date": "2021-04-19T12:54:51.218Z" - } - ] - }, - { - "createdAt": "2021-04-19T14:25:44.337Z", - "updatedAt": "2021-04-19T15:00:14.218Z", - "id": "142", - "name": "uProc API creds", - "data": "U2FsdGVkX19KF4H+kQokEweikHpaP0Prxirb4ouEZargEzvOebobUvkimtl8geJDm95pRY4fll4SDHz7l2L4njSwzuv6IQxHfeJho7R5lExqRhVDj+ZQ8jRCSrG5p+E5", - "type": "uprocApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.uproc", - "date": "2021-04-19T14:25:44.333Z" - } - ] - }, - { - "createdAt": "2021-04-20T08:01:26.495Z", - "updatedAt": "2021-04-20T08:01:26.495Z", - "id": "143", - "name": "GetResponse API creds", - "data": "U2FsdGVkX1/Fc7tymDGjDUPosf8p2aMy7/NUfcnxwrOM2hWkOx9bmBJVc9fRfTyl1bUO/3jyrsnKTfHghQPl8w==", - "type": "getResponseApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.getResponse", - "date": "2021-04-20T08:01:26.487Z" - } - ] - }, - { - "createdAt": "2021-04-20T08:18:06.168Z", - "updatedAt": "2021-04-20T08:18:06.169Z", - "id": "144", - "name": "Vero API creds", - "data": "U2FsdGVkX1+oCZoIiHT3SSDwdC99JjgwDMCIt23PeIqRoB4rpgM98nP8OQOQNSH9Df5b4bWa8p322REvxf9dLSlzFCOvKxquHB0FeoqJnux8UP8m5Jrp+Nxpw7qpbeBL3qRUfKbgoXszfk1pUmmvNUZh5YSO8/gH0zTuuFtANOyFCrPTyQvMPjdX6HAEzHPh", - "type": "veroApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.vero", - "date": "2021-04-20T08:18:06.162Z" - } - ] - }, - { - "createdAt": "2021-04-23T08:43:45.513Z", - "updatedAt": "2021-04-23T08:43:45.513Z", - "id": "147", - "name": "Webflow API creds", - "data": "U2FsdGVkX1/YeJuB/FidCg/1I1TIxB/cbbS4POvlDiLmRYUwYRgFYB8Et98LEHR+IGcrbeuoBsgzFvhdXll47u957EDSCeRAgOYRQTuGfLXJ7VD5ivlQ0m4bB8/xbO/6ici02pdWMflo/mw0DUyYYg==", - "type": "webflowApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.webflow", - "date": "2021-04-23T08:43:45.507Z" - } - ] - }, - { - "createdAt": "2021-04-23T09:35:22.641Z", - "updatedAt": "2021-04-23T09:37:52.374Z", - "id": "148", - "name": "Telegram API creds", - "data": "U2FsdGVkX19JZ124pG1f9r1orLPLlcPbl6wYcoTfUvs8ojNn+545HdL7dTSmisYsEDgg442gpxquvWAov9dpOqfB4MQ7oUWyhfUtCVYXbCtfljF/mNdk64aOWOmHsdot", - "type": "telegramApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.telegram", - "date": "2021-04-23T09:35:22.639Z" - } - ] - }, - { - "createdAt": "2021-04-26T11:53:04.438Z", - "updatedAt": "2023-03-06T15:37:54.377Z", - "id": "149", - "name": "Salesforce OAuth2 API creds", - "data": "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", - "type": "salesforceOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.salesforce", - "date": "2021-04-26T11:53:04.432Z" - } - ] - }, - { - "createdAt": "2021-04-29T07:05:40.497Z", - "updatedAt": "2021-04-29T07:53:55.208Z", - "id": "150", - "name": "Strapi API creds", - "data": "U2FsdGVkX1/WCBhlME0j52od0t4RYCtgoPvXWR+ffFtpzUDySvgPd+BoJRC3NrnSUNc5BCFfo76hpcdhLbx3Xz55xH2vH4t9iZBiR+oKZB1OTlnPXc4OsZvtSpxd3W+6mPxb7XUG7HRGCF+isKA6zum1Ksv3e8bu/fNEMeegFNI=", - "type": "strapiApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.strapi", - "date": "2021-04-29T07:05:40.491Z" - } - ] - }, - { - "createdAt": "2021-04-29T08:11:19.033Z", - "updatedAt": "2021-04-29T08:11:19.033Z", - "id": "151", - "name": "Uplead API creds", - "data": "U2FsdGVkX1+FFxby5MlGpjIyd9BO5rI142CioEUqAEf1RB15TsNOO4WkEBKy8mxwNCk9mEoMhAqBjthLxTTrrA==", - "type": "upleadApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.uplead", - "date": "2021-04-29T08:11:19.030Z" - } - ] - }, - { - "createdAt": "2021-04-29T08:49:17.282Z", - "updatedAt": "2021-04-29T08:49:17.282Z", - "id": "152", - "name": "Affinity API creds", - "data": "U2FsdGVkX187OO6F81DyFZw3QtY7mKRKTz/UDroZisna5MMy+QudQWu7auA1XrADEc5TpMjRRJ+8PMkWIKBerDjVVo+4hNMMQwU3fU6V0rE=", - "type": "affinityApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.affinity", - "date": "2021-04-29T08:49:17.277Z" - } - ] - }, - { - "createdAt": "2021-04-29T10:02:17.166Z", - "updatedAt": "2021-04-29T10:02:17.166Z", - "id": "153", - "name": "Discourse API", - "data": "U2FsdGVkX18bdMnFwv+YAYjbRcPl7x+2R1N8nV3EbsI0t0YGO4Mr9go6xmK5B9b63g9s+V1UFFobk5LlyeWNqkbiLDihH9wy+/V2VD5AtRE3YRvtuK4+BIoVj+xtzPrjn/U2od9jccxV++iHbwoV1D/2Fzb6pQP9cLKyykm38E2GkCMa9zkgoR4PPg+vMKmTGwJhf8b3f7jWpj2hQju3qw==", - "type": "discourseApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.discourse", - "date": "2021-04-29T10:02:17.164Z" - } - ] - }, - { - "createdAt": "2021-04-30T07:12:07.227Z", - "updatedAt": "2021-04-30T07:12:07.227Z", - "id": "154", - "name": "Mailer Lite API creds", - "data": "U2FsdGVkX1+19L50lgsCSy4Ck/5RRp6CXjjrXH8uct7/NlJ9ykhTqQtj/LmrDsyO5J9+HdKkRv/xLDK+jqhnfg==", - "type": "mailerLiteApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.mailerLite", - "date": "2021-04-30T07:12:07.220Z" - } - ] - }, - { - "createdAt": "2021-04-30T08:21:46.630Z", - "updatedAt": "2021-04-30T08:22:20.978Z", - "id": "155", - "name": "Mattermost API creds", - "data": "U2FsdGVkX180CNroiq7zE3GIzIwitHMqah9pL552nzdMqDpXDqJleyRLcFw48lWLT7zwgI9eGXdOuphVOylXRXtmG+a0dD1y5qJ5aEpssw8GYFyVe5YwpZOPQV3qcGBwbphhe0XYpxKf32dnPpOEdg==", - "type": "mattermostApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.mattermost", - "date": "2021-04-30T08:21:46.627Z" - } - ] - }, - { - "createdAt": "2021-04-30T10:22:25.663Z", - "updatedAt": "2021-04-30T10:22:31.039Z", - "id": "156", - "name": "Chargebee API creds", - "data": "U2FsdGVkX1+uzSiaH7ecp2Y1RO6QUxLlXhsXGAjyPJXjyBtj0pX+Rdcq6/ieIYK9OnhbiEMn2N/yxvArK91p1Nl74p6YG9u1RHvLFLyB4h1/uY1Uz0s+8mbVvxQvfrn1", - "type": "chargebeeApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.chargebee", - "date": "2021-04-30T10:22:25.660Z" - } - ] - }, - { - "createdAt": "2021-04-30T10:50:16.724Z", - "updatedAt": "2021-04-30T10:50:16.724Z", - "id": "157", - "name": "Mailjet Email API creds", - "data": "U2FsdGVkX18jpZ9c4KNNhiSLG4xvQkMNRSw02aYpBDU3G96lKlKheejNN6uOgaZhYLRUhqE2O73M+RGH+D7za+8Frz04tHcgqj8TQbgjUHMnscyf4h5/geJOGnNLEzjJ803sXMaw5zHioeFxKvRRKQ==", - "type": "mailjetEmailApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.mailjet", - "date": "2021-04-30T10:50:16.722Z" - } - ] - }, - { - "createdAt": "2021-04-30T10:57:35.157Z", - "updatedAt": "2021-04-30T10:57:35.157Z", - "id": "158", - "name": "Mailjet SMS API creds", - "data": "U2FsdGVkX1+ZwlTYm6WgzkaNidpElcnI4nuvvczGPr1lWtXuaLnh5PccnLmVLW1wqzCCiNScG7CcJD+Ch+BCOA==", - "type": "mailjetSmsApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.mailjet", - "date": "2021-04-30T10:57:35.154Z" - } - ] - }, - { - "createdAt": "2021-05-03T07:29:32.307Z", - "updatedAt": "2021-05-03T07:29:32.307Z", - "id": "159", - "name": "Kitemaker API creds", - "data": "U2FsdGVkX1+t3XGAixnfonj+DKGY3E9e89cyuNIQ0HOJ7b+tRdw6oot4mR/E5Rs4DFvTmQ8fSVmmksz0eA/Jlj/lsZphI3c9OjmbZIimFSY=", - "type": "kitemakerApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.kitemaker", - "date": "2021-05-03T07:29:32.301Z" - } - ] - }, - { - "createdAt": "2021-05-03T14:31:02.284Z", - "updatedAt": "2021-11-12T13:13:11.267Z", - "id": "160", - "name": "QuickBooks OAuth2 API creds", - "data": "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", - "type": "quickBooksOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.quickbooks", - "date": "2021-05-03T14:31:02.276Z" - } - ] - }, - { - "createdAt": "2021-05-04T07:28:31.210Z", - "updatedAt": "2021-05-25T14:28:18.569Z", - "id": "161", - "name": "Twitter API", - "data": "U2FsdGVkX1/lNEaMgYF4KKEgurSWc0tgQmBaQowLsCduikuKYhkO+zZqveLoyp2PX1W/l6lsPCz5XgtFdSxd8KofwPoJXRlBwe3v5R98pcgcjKa6u18fyZFLsQu9/G6RtsSogdPTeltqH0dPJcGVdRvqZh6mB8PNflDFglBDswxgxBNXpBI0MrTqsUU+dOjmro1Tg9iRymwiQTjTVc/MAdR+iv+Bdg/ToUjKQeM4C/1hbsJ/l8vcLPBXv6BZfFSRYPt9vGIrfQ2WUj2IwyAO9KxPgxhwhUpGwXRXcHfW/yC6b53cvtM62GkgCONjlA7QFtDWucNqGOFbGi0va0b1nxKZOpVFbGAhD7UOOuEzUZDi9v7Np7/CUDhEf+nwEKeKqtEoO4rk5iZ2izLsoyE2PvtYgU/Xp+7F8+g0jAm0fL1ZWHW9XylT578k9Cc7rFguFN1eCKTf6P6+LHxFmzNd7g==", - "type": "twitterOAuth1Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.twitter", - "date": "2021-05-04T07:28:31.208Z" - } - ] - }, - { - "createdAt": "2021-05-04T15:26:06.759Z", - "updatedAt": "2021-05-04T15:26:06.759Z", - "id": "162", - "name": "Invalid api", - "data": "U2FsdGVkX1/WJF2fZFfajX7IsiVGSVZof3M94BzbuHizjuzvUeHFxAvSQUkHBQ50bmxFoNncCV/c47w1wrjVoA==", - "type": "vonageApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.vonage", - "date": "2021-05-04T15:26:06.754Z" - } - ] - }, - { - "createdAt": "2021-05-05T09:51:21.413Z", - "updatedAt": "2021-11-12T12:11:05.438Z", - "id": "163", - "name": "HelpScout OAuth2 API creds", - "data": "U2FsdGVkX18+4kpwPQqa0q0osZvootlzR4EgJ+MD6xDctnqFPigrupQLHdsK1zLEK4paIeHBXxLQ8Rv/6xCA+FdJ1L3XEiZNrI3PfA5oKmdw/BEAjDYBLF4+/rIhuZIene3GvLH9WeffpM8AxxNP4DAJzLQh+0OJqv6R/n5S2Q4p/6X087iQl0/iUhWdIhftxZ60SbrgMQ8kpmMXVORTNvgw8KNNgaFGF2iuL0bJklgmz3QgzuK3BXKxrOH3sDLGyeRzumNBQbDZO/laYwLVSUhf58b8LiKFbWu78kotgvIOBTp/g9Xt0uqINbzhHUjvanh65nOlWvonn16sspvsZ/JiXtJjn0lrfHPUcVosBzYmVSCl/iMUdPVkomYhPt8Frp7GXIuH4gYg0lLgzjXbKGLd6dL6tWOFA6pDkkvL6LpwKt+JgZjhbgZxVXb8NWZG41CkJUKkkaldxnel6DrZow7jBpIJR1yPwI/ZzfeYPlhcQ+mNVZIsRFcZOtwjYgdMoT7GcsRFxo0NXr1F5dxYZEwuLHmZcuehowPhfkdi4e6DJ1atoGoyJHH5wbp/zeV4WuIguSEMaV18agOSlmFF5KeSvuBcDRvWFzFVItiGnyyzMPoPTWZbGJ/Gz8qMAq1O", - "type": "helpScoutOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.helpScout", - "date": "2021-05-05T09:51:21.408Z" - } - ] - }, - { - "createdAt": "2021-05-06T10:27:13.780Z", - "updatedAt": "2021-05-06T10:27:13.780Z", - "id": "165", - "name": "Dali UptimeRobotApi creds", - "data": "U2FsdGVkX1+W2QfOypfTTcFZS4FxxaaTfwKo3gAxMpSQGt21/BD8DC6Za/7A4BJJt+U7wWsUNy4EFNK4rjO5yA==", - "type": "uptimeRobotApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.uptimeRobot", - "date": "2021-05-06T10:27:13.757Z" - } - ] - }, - { - "createdAt": "2021-05-07T13:47:53.290Z", - "updatedAt": "2023-03-06T15:34:19.060Z", - "id": "167", - "name": "Google Firebase Cloud Firestore OAuth2 API creds", - "data": "U2FsdGVkX1/mtUW0G2VISsFJ2G48bosvwmK/08RO4geDNmVKTatLG9IJGC02dx0HSQmWKZJb7QyBIx70Dk1obHKZrtYAf2hiLsOm3Vmhk/BQWUTmAhhSIaeY+HicX64hjHRdWtPjE78fY/DZev2yE8INiE8jIDKx6szxmlQDCpQYK8mnTkzJiHEVaa6U6UzhJvVQ75Yc20f+nnx0YUV2UvfIWOPyKcF+g8n/etPZ2b+GQuwy+lw4x1/+B0H3GCQVqFZ8/Tqd2m1pJ3aQxTLinMLSvZDEeSXr8XlmSXBCQr2UgfK4XnIguFjNphtBtQcf7wRDp4q+biTOeuOxD5FawILyh+k8r1pof7yt+7fNxUUjw2dXLe3/BAou+hm4P570fvpYzgXT8CANDiqf4X61Eyufa71/K/uPyCskNXNv5ROo7pk33YS23fhfSlX4TBBwXODMtX1yOU4rErQjz14J9qdtK3rFzqJYMi6KG6PQO+moa6jN+5hFljam09Zg7A1t+26wlB0PX0UZDXNpJvXlCBaixH4l7ouoQqqYZKdob5n1zEaxfymy9l8n+UG+DFQQ0zkT5XX28wzTv5WxlIoxclPzhpgjQOZHjuXctMsDi1RqE4BP2iRcappWtbaMS2hlruhZVIO6OblnaaqCTEqs6IiA7XnhpcKlafzeUPW7CB7n1XwQZgMEmtz3VeagLGBMVAw7aI0WBo23ubd3h/HzgodVef0Dlf7QCWoEXekVZNEcSIXSdV/kxGAPt2UpFboYbWkOsjVUVKxC6ujOzSUR/Qx6W2L4KLBuboT8OF969MRKAUc5Z7WQrVRykdA8PbaOgboh9g3zKVqO4CN7ZVBgfPqx2Zv3oNeZrKeElUs/5avadyWj9iKaa5sO9wfE+D4++6P3J4oL6cnucGXnEhbFUbeL2TyKdc1s+o2iG1aO/m32nH/pLEI7h2fK+voKHjenP4akoGvvxldrrTtT86pFDajFwno3I9/8qnRs4ju5dbcOnw2pcrut5xeTAKCLiCpxja+z3m8MphfbttRZbK0vQzCIe5sVJRLJDQLVWWzlU4l8/4narG3+Pu09Z0O60z01bQ3WlGGmDkuYZLUoMV6AqPagQcERgj4XzGgJLf+xGy8fBBKBPXrRlLqVDDlfyYhTcuJHTtt+9nnLf62/twpWfhKVsyrGzBhGGfTIKLR2c7jcgldNID+UObQycxvxEx7jGU0dm9dFyICN2T32I1yf/o/UdO4pEzCm72upQ3IPWK4tvPGkP6pMFiI2qDg86aIUae260f1xHksAJK7ftWsgZ4GWVU/egFQsJi/9SmHqeYWmyT6XIF7wsFWB6ov///+h3AkDFEpGhMPuRylVH3iKwf35HlSKvyWWd4nJ6Po88hPEzE6d82ByALDN1u7bsNtPNIP4Lf3M7e7FLHmlmQmizNxk4WIopubB8y8GK7WB3HgeJ59WCyEixDIL7qZUsR24", - "type": "googleFirebaseCloudFirestoreOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.googleFirebaseCloudFirestore", - "date": "2021-05-07T13:47:53.255Z" - } - ] - }, - { - "createdAt": "2021-05-07T14:55:52.263Z", - "updatedAt": "2023-03-06T11:42:47.100Z", - "id": "168", - "name": "Google Firebase Realtime Database OAuth2 API creds", - "data": "U2FsdGVkX18yhXycWrltppajTWCQ4pm1rJFhFCpvfDmGiETHNGRtY6g9/2bd6vhZPcKZfQwZvoH3Amq4KXDigMcfF+jEuSIPXJq4Mze/8Lkjht+UYU4GBWqoD08623aXEyz3+0njNFO3MYIMoIktCjz8bUIF4+wX3sKOmHaMurv9+K9Brv3+ONAoffyhcyU2rRaIzEuWwJwVrhZyYi4zRfZDjEjDzj4WWJ2UE+KnaLEYNQgDVl+9S9Jk/uXEVpYWp2ImNt4pJp5ZnUeu9V9A7i3+Qo/bcTjUOEpToRqPTZKXlWCKh1Tqece+tCZJy4pPXlQv4lMrfFSo9tB088sVTuhVoowb2qYatGu0v0dN7HNwWNKvMRcR4bbn7/L+LzNt16m6crdw+u7PEBBRjdqQIJ3fxzjl0UNOPZE/eByeEkQYyoieBIKDQpUbrUDnjf+/zEEZxY5VBFJi/4tCgQ2dNpp6966y7GkEN+HDh0hE7bCRxBCMz6Qn816KV2bCchZul0Og7aPad2G655cMAuwvyd+5s/opRCsGzuiADbts5fYJYzYIWob90XUdae/2FTjGs8pgpo8AoAvh+gkOgRiNM2qP+bwxMYgsdwKSv+UURSFpByNQNaQKHhAO9o4zRnM1ZA2P8vZyhTpFlwTJwVps4/SxcRzmnPclaWpjA63FxIL3CCtrh48QKK1C3CH1Ll2OhKs/7l83DYEkyQ0OgNW0kwFVftNkQNjflqqh1m++R5LpOjPdjKYNWkPh6MVlcn4614FxJy5mkI6PDRsNCUvVM/A/XBJvgj1tWPYW75ieCnWBhxQmtgngFSAO4yisC+4VTssSemUQiRpiZkL46GEFCgWPi1QYGmKR2jYtO1uc077BIztInhHdu6SsDNjItQX5HwxsUE1Q6mqXShLLnORFHe6U7Jda+mqMKXhHxB+zVmxUTcTN9985ezdMenJ6Q1uRMLWIayw8IFebeJk/i4OzKD82srHPE9T2dntqu0RDxNe1BiBeSqlYXtkwweAsI/KaMv9KRwkdURl7Na6MWf1SXILYZw0bq0GCHNdCZoRqQqMR7U4Ze/fo0MLt+Ys2sd5RaiIjbkw40zN00VvZ5x5J6MF7k8SoXsLE26oA9FFiUhhDcvpAq4DZ33drdmAgIXIaeNDG0191NS21k9fzGRmR/ggHKbOrGOU8cmbQhOdBR/7rt/VoOuRxVYUq8fbdPtQnlM8l7EGcgf+UsXlzvespzgspNrJadNHnppKjPCqq3Q/6aT/ELol5t+5lLKG68ecwwNb2VafZ1uZo9lPI3mhYM3Xq6gIm8Z/ly0fUwrlNBQGmdjE4RL6373VHfQu6IDVDTM0Pj1CtEARn45D2nvgErs4uPS2m9QXLuxCNfXRmFkqq41N0dbBzZSZULH3oJy+JFO/oH1wwI1tFVXpnBoaUjNFwH/D9ZpDTs4cueKSX0/VFV2H52Hg/V+rwsT8UGJGi9Y7hB+WOO5xhZ5/QA/2rejyKNKXnjIQ9Q47uputaFsrlQPOnwFpDSR76cP0vu/k1bBv0/QfJPHFpPY4ZML5rYI9kfQWO9YDt16TXvhKrJfjHtibtH+tXM8g8dHvhTu/5Adi/GZjoenAFFVzdbrvqQHSgsSHfZGMhn37X0ZJwpIC7JBVwsvsnhmwiwTHn100ywmkOFM7WHPbXrbm884nOPHfOSXWeMCKN8wJzLsTNZNmHEPYzhz/h7MXxy08x7bUvlAcx4p4w1t1m3V/GGx+g0BoiYPxjyGFILKHpxlgDf8AA8ve6MzCf7Ii83H5SX7x0iDHdlcKoT3xcbk57BgjSGjDvfQhD8iSv+kSUr0Twp4ojGfAcyFjQ9PFbXSMcvk2cJJmROvIn4AbvCs5IZadulQAf7vWl56fqtoHHUu+VL73rNJgR9rIcohnw/25b9DBLO/MLzaAmXsA10DnVyauMEPv00b5LaPE/wntcqNt1+ScQ7k5oW1G2t+wQXY8lAAkdVu2owuBjm5HpCQ2tTnKrd2ai9uwWN8Qz91GcXuaIXlQXKZ8Tqn6VB94BEZ0ie7C98NuSTbxv8T4S72R1nbcwjHtAhLQsNZLwih0N4mWXQMRADS+gvRs3wEIyXx/phg011NmgKXRwng45rjvR2Lina1GENCMlgj/Sxjqbidgv1IMNLq4BGjnQ5WSgPRzXVPXN8o2rhUWZX2f0398DxVqDWx1Q6spQajREpPrLMBhM4lANc4MM0pDingdg0Z+SbySEkpNePQ4b6HUlRtpwY7ysf8D38awb/mmaRmYWQ4FbANLwxMbIowCqH1Ad9ip/QDeivStNF66RRC19iFrUGWFB7ZprZOfx30c4GyGUKZdCX6uo1z4rkOR4q6jyNH+ZpjbxER3jWCkV+nQJNjoV06PqCU25k5JOK6g5PRKtytRKfOBMY7R8rZ10v6ZOEXwTfWIAkkvGNO2hS9XSxzPGsMpqSx5I/Y41EJHJOkZIMwZd+Oc=", - "type": "googleFirebaseRealtimeDatabaseOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.googleFirebaseRealtimeDatabase", - "date": "2021-05-07T14:55:52.046Z" - } - ] - }, - { - "createdAt": "2021-05-10T13:16:33.985Z", - "updatedAt": "2021-05-10T13:16:33.985Z", - "id": "169", - "name": "Mailcheck API creds", - "data": "U2FsdGVkX1+WLeu6sqlw4024fkM5XdyMKrG9CmdpQYV1CD/nRL4GMPDrG+1jzWr2RZAHRzy6kd2fl1MZoOjpod/3BrWOoCrDchk83J6BOhbuRJO4fI8w1a1vsmGuyBTxcukGfo4tSlpFyrksrX5i5mrhYLbXz9Lo76U94PhRGUd02424YRs4via6wPlay02aUWhSKIp4ZKDW7XNUHxAWpq4F+VtXSJj8y9Q3qQcf5cWlEdsSJ3I48uvOYHV4Xonm5D+CMAuso6xSwhDjQ5MqsMKo4HiVtlMk5wd6UCmR9a6zrmFd9RiknyUwmww8P6pzF0Msro8eXnuUXlL4o/0lJ1hnX5i/yKZtAN4zMjozmNeZ6lmxXHEghRLCv8eaEt3I6p5EnvM63AATN7K5BSXZXAfqssYmKVAhtjp118zCUPk48w16mb8Tqn0Y86Cz/j+oOggEDMdYUpkLn3CR79M2O57zZnlzZMqGsv14wWb2zvkecPkNpOu4rIKyiAjY/Nftz1b3MghpJnPqCAz5PhskxSCkQcwH2FvzeTkK3NN7pf8tBnZyvBmHf6oTcQN9b+LPmm1orqgvUL87BHRCj3yVp4Nl0HcYN2pihR8xdYnOt7ms1qpMHeQLECmxgzbIOrUTb4Whu7mnWYbvC/d3GjU74P5kdZvPD8T7GNszhGdlvGP9svo3Uq3H8J5COB/nmfSsbfw4vZiwxM4IsNaPFcp9TygTwIIxjsBLoEHlS8UzV6XKJiUQTrozzrS71Pc2lg3voJGQtkYM1DBFKXkQZvVfasz0+vI0euYVbmcXaQ0lPCht0ssgZkZJISSKxq6QCbMkCYjLbOPKMoJeRo2qD/ENU2xzj978P8ROsT11i/uPHOkT8xMAKYx/tu2cyeRHZu2kU5LoJRDFjOZo8cU9IiQq7g==", - "type": "mailcheckApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.mailcheck", - "date": "2021-05-10T13:16:33.976Z" - } - ] - }, - { - "createdAt": "2021-05-10T15:39:16.380Z", - "updatedAt": "2021-05-28T20:43:59.278Z", - "id": "170", - "name": "zoho-creds", - "data": "U2FsdGVkX18b2vpX62qVckXUxaI7NoDMwZycOtRKB0jkRTxdAWKqj0hUN7ef9noq2487OjIjwyKguRxEfBsgDiVcsZHFFOyvXNw0dyvRtsq/GFRQ8vFIqbkMgjRclvxLCUC3ljk1aXa35+9MzF4L2jWVl1LZ3+1Afaldo3hLUg9jVIIF2r6G0f3y5NI0wgT8GkLbisk31+rYFo251hYBGy5YKqmTHzxgKrem8RpEUqCF/62zYTMhtz9VcBsfcoODazeFb/utkQlwMHUUbK3sj3Nju8mHLw+XoK7CoPrNEPuNVqnfYegKkhzfnoa0GoryyNyS9HAlq6lx+KJ/DEX4adgGBttHG10Hv9Kw9HQemyPi7Oz6YgWfbBf/3hUaPdHKvUrF6qXYWyK6+TsnAYgkvtFTS/sfNOHbW7FCtzPyLR91OlA63d0OIUzdknpv7IjUeVmG8TCwtAzth0HPLCqGIAI0Nw+zxItkYGJLMRegTPrJ5IifvKuEZ8rAjmMxzhr32dlPTZPRrBfVcPWriwCQUTBBhWpGWaEj+VzwZ3frNqNFwnZhfZDwpkFstnUYziDhYwW2mXRqDZJdce4Rdx9S9xrlnnpAAiaFmdv94MkjXD8l9mDO1JJt6Lt03QOwtRkk+Piwww8nbBFyHT5tmAG3Xw==", - "type": "zohoOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.zoho", - "date": "2021-05-10T15:39:16.377Z" - } - ] - }, - { - "createdAt": "2021-05-11T07:31:14.708Z", - "updatedAt": "2021-05-11T07:31:14.708Z", - "id": "171", - "name": "Pipedrive API creds", - "data": "U2FsdGVkX1/i5SvT4DYHROcecqD+fOfNaeUkpDTXSmT7FcYgX+h/+uo4HNnd+KRdiTzGiyWEzFvctcBM2H5M1KA6baQHXc2Z8LgptfYFUUg=", - "type": "pipedriveApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.pipedrive", - "date": "2021-05-11T07:31:14.702Z" - } - ] - }, - { - "createdAt": "2021-05-11T11:25:24.871Z", - "updatedAt": "2023-03-06T11:43:06.535Z", - "id": "172", - "name": "Google Docs OAuth2 API creds", - "data": "U2FsdGVkX18SCW6jsqljoAMOOy3C97ewD4+qZuFjchnBqCMKip7MeI6cfV2xegtZTTL+eFmtcrkf9NN96gdR4ClAk1HuNs4XK29yzVGb2LtB9F2rTH/jYTlSYlX0O72C1ML/EqfyX/4qnqCc3yXZeeoAWkHLH7rgMcl9DXFHjRjhD5eJBsVEkNfKOucgmhA2vEvabJtrPcEgnYef0aH1bSap2S7Q1ntJMOygh69VSlZusK0KocPJbWypG7VVGNbfIJQlz+GikmLQW/eoIfma4rRqVm5y2uKPxbJ7XGvlOMv9T0rkVHGdw2T+vQKkJAFWsBiIaEnrUvpzt2NAVJXr/w/1DJ3/zV4ep8KHOKYHWGS9H/ujWx6TdE3iOvLSjtEEz8l6YWaEvRthodlR/bJLqxySUqGvHIz2U3KfhP/3QrzELbiDZD1yFyZc/B3mLqKexdptSft0KFdZINbv8ZbZ1J4t1zEwfHKG6WAgsNtrYvI3UC5tRbxmxDgT2C0+KRu7Kc43VeFdR8ck8ITqHA5orJ0ZMi1IcJkrFSw9KIubOh7t8gEoO1D+r//KC+f7KGq4XN5L23yOgx+rXXhdrxNI1DVUpAqzDDuvHBENYTkpt5FVbuTPca8gb8DKv3AOvq3uxpkcCa+Y2FdRzxB69YHM8uL/LKP0JlcgsWEQxBmETjlDCQu1NN8v5F6hjBkY1V9fg707tzg96M6EF9baZgD+8JEOOuUpk6+7o0agJ38pzAp2uZl2zjtCCr2DMh4RWYn08KKBrNbpLWNZDxSNvJStIGl7c/D9Bq58PekrxYA3UJoUk3xpDcpwmdT00B72/roerT+5ftGbo0MAp1mSAEqa05roy02CThzH56dqDLUNT7rO0XA+SsgjeQWckvgPl2wM5E3aMzSguTUq6PcSNCkA23AL27D70S6Yk/52WnL9DPasDhBoIm4xTEdislHhK0nAkmMYzofZT7xQrLjqUVzXuX8kRtgWoDKKHIgBnQ0SogA2xw8QgFO/2obT7PwoQyzk2g2iwLljX0XT1DjzXPa0zqz3pjtAOf4g61QK5chatbu+cA7opSAz1d0BDWrPYYzGy7WugeERYD3kSH5/0SY9vfUKd8iv76e228gvBL+xBq4=", - "type": "googleDocsOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.googleDocs", - "date": "2021-05-11T11:25:24.864Z" - } - ] - }, - { - "createdAt": "2021-05-12T07:04:35.309Z", - "updatedAt": "2021-05-12T07:22:49.204Z", - "id": "173", - "name": "Paddle API sandbox creds", - "data": "U2FsdGVkX1+rZN6JDd2DbWAbiBgbAtT1vMW4p/mzboubKGSXSfpBYao4xG2gAfpHXTI8H/Sldj6bxnH/bvJ7t0mxIJSrmYuHejom6BWr0NDChDZ0Y9QMf2bbsLygJNKVF1j7Jd0u5DljqQrj8g7tYz/rJlbCJLrY4tpfmBc6qTQ=", - "type": "paddleApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.paddle", - "date": "2021-05-12T07:04:35.303Z" - } - ] - }, - { - "createdAt": "2021-05-12T08:27:43.980Z", - "updatedAt": "2021-05-12T08:27:43.980Z", - "id": "174", - "name": "Iterable API creds", - "data": "U2FsdGVkX1+p128UOZNFPiKgBT+0ym+XIQHKsJGkQU2pka0lG3p2i1RFnnuScB03Z7ootwh1owE0l1Dt3eLe+g==", - "type": "iterableApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.iterable", - "date": "2021-05-12T08:27:43.977Z" - } - ] - }, - { - "createdAt": "2021-05-12T08:42:03.059Z", - "updatedAt": "2021-05-12T08:42:03.059Z", - "id": "175", - "name": "Beeminder API creds", - "data": "U2FsdGVkX18vLPz0OwOKJ6aK94NjCU6bGe3ZXP1H/7kw8wfcA/BG2NXVJhpTaDLb8qzmN1ijjHQ91fDgyN/U42j2oYvjQX4uIGqb2q5wR2I=", - "type": "beeminderApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.beeminder", - "date": "2021-05-12T08:42:03.056Z" - } - ] - }, - { - "createdAt": "2021-05-14T09:39:49.819Z", - "updatedAt": "2021-05-14T09:41:10.735Z", - "id": "177", - "name": "Pushover API creds", - "data": "U2FsdGVkX19Vcl9xOMo0dfpIcNBa0y4wEHeGB4Iq0acfEyNYVK76PMLSBn4DKyp5ZzdmIjIyqKik9lxdP+wPDg==", - "type": "pushoverApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.pushover", - "date": "2021-05-14T09:39:49.816Z" - } - ] - }, - { - "createdAt": "2021-05-14T09:53:58.647Z", - "updatedAt": "2021-11-12T12:11:06.896Z", - "id": "178", - "name": "Keap OAuth2 API creds", - "data": "U2FsdGVkX1+NkVLasVH/iMl98lMmeEg/Q0W6kGd92IvPjWjgHPju4aRg8OarC2AuPMzE6sep/kOm7UN4oFr8n/WOLNWRP5Ddnedh7oHaEp0o8dthM7ujNGDNVm9xPWXMpauP2njVksnZu6sPfcLMixE4JwbqpO77qgeM0TMwhSe1PjQ6cbAFftprDgg3XrLaq48P6HX054BZS0pq6zEKOi0LRazhpz2E0zUQujC44CQpwI8GJ5DuXIyxAmnZDa5miadQouMemcE41uLYQhO1hhhzo/FxB4OY6FKNfoIJ04vVhv7vgj4oQvUTNDr9AwMMuzsGoWW5eplS/0r5RbFMN0pymu1fuTemEiW/dz2EPXloU8laFKC8LQfzdTngmTzNo2OHCmAuraSpauMdzQyEfulL5mrKE9ZYnrJ6hVfyhJKFP5wLOUiIOfxuT5AF5bLD+erQ8AqwcmGLBKcib/Z7PoTFan43h9lor5q9Wlzc00lRBFLKmlpAN+jNlI9CUOT0/qC7Iv+pl8uU4EKguC9pQWtfCkkdQi1oyONfxn4bYytOEBBtv638YILEXCZSmOCdjpSksA++WYHw8vXLDQVR1CtjhPbptky79syXxDPJP5slSHl+Ug9cEfHU3i5+cVK3ei1FrQfvfVl9mXiWdvtMEM8qM+siaIpnIaLrPAhme2lGyPw6dABtPIVrsQcvoJcvT4nvwfu4pnYkhbluS74drw==", - "type": "keapOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.keap", - "date": "2021-05-14T09:53:58.645Z" - } - ] - }, - { - "createdAt": "2021-05-14T11:04:21.533Z", - "updatedAt": "2021-05-14T11:10:33.718Z", - "id": "179", - "name": "Header Auth SentryIO", - "data": "U2FsdGVkX19tQuwU/H6CAXmD5MBtBA3MUnCvQGXDMyOCv1wQs/dPKOAml8oa429Di8wjPZNQkN6t9pbprWbmuiUruy76PDIRQBVOcuTj8VlopGRHtx0l3aquHFYVifqLjcwiMh0mQRTwpCRR03MQ8Qys1rYhvrPlrSRwui6RQUg=", - "type": "httpHeaderAuth", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.httpRequest", - "date": "2021-05-14T11:04:21.531Z" - } - ] - }, - { - "createdAt": "2021-05-14T16:24:46.971Z", - "updatedAt": "2021-05-14T16:24:46.971Z", - "id": "180", - "name": "Notion test creds", - "data": "U2FsdGVkX1/T6vi5pJxnkc964CrMX8moS1c4VBMwhtElX6cMgfNa+qCjs8ANhO6fM3DWQIMlR7xm5xKDOwJVi5WyBIhL06mF6FI3Y6O0BWU=", - "type": "notionApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.notion", - "date": "2021-05-14T16:24:46.962Z" - } - ] - }, - { - "createdAt": "2021-05-20T15:41:04.169Z", - "updatedAt": "2021-05-20T15:41:04.169Z", - "id": "183", - "name": "Deepl Free API creds", - "data": "U2FsdGVkX18xDcu7uWvmrhsM6E154fcUJt2sUvitsqGkmIU0/9MHLkQ7vlfPIazmcZ8fTsXgEtgggvWKfox0jOWcBEWtN/9mh+NPVdomHujrFdjuWv3rU3etEdhoZJLb", - "type": "deepLApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.deepL", - "date": "2021-05-20T15:41:04.166Z" - } - ] - }, - { - "createdAt": "2021-05-26T13:08:47.620Z", - "updatedAt": "2021-05-26T13:08:47.620Z", - "id": "184", - "name": "Rocket API creds", - "data": "U2FsdGVkX19lFQGVlDNhMUVmJ75DaD25RiS3AZ/GMAPTMeEeyP0DY2C9WrTmyqPojz/W6tbAAXDOQjJjX1+vJOO2bdStS8is6YWU28uwgy7om4Ah/BBdAsFmG5GcdgnRABnzKOKa911BfpVS0FTMx8UErbSmK8ri/lZH1N7+ZyaKLZBP/aaLgXjAx6Tab3MA", - "type": "rocketchatApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.rocketchat", - "date": "2021-05-26T13:08:47.616Z" - } - ] - }, - { - "createdAt": "2021-05-27T15:04:49.079Z", - "updatedAt": "2021-05-27T15:04:49.079Z", - "id": "185", - "name": "Home Assistant Api creds", - "data": "U2FsdGVkX19SRTFRfGXIbmNPr/231/ZflbW4U24b9PNR/sRnZJrvC/tYT7Y6/NaEjAPEG34tNfI6Er05iEn5HSdV8fURYF2YfV2x+Bi/PCk2G8SmjGNhvAAfn7FLEXa/P5SyfdNVhhYMw93hV2l0HM6ulpaqi3kvdCHVc9WqYmKDT+jfqfiB2QDCRhFEpnHa5DOjpdCo0uA8JjhkMYn7uslT2s2DyGSbqrDOs+MwtFL1yL5PVo2JxaGwbBtjiRg0AEkWGur/3zix5zTAsin+ohzP/t0XBQzuRK7FRfWD6HlXNV7DD5wFr8dJKjcwxxnqrx+h4D/9qyBfqdk4H/zdUg==", - "type": "homeAssistantApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.homeAssistant", - "date": "2021-05-27T15:04:49.072Z" - } - ] - }, - { - "createdAt": "2021-05-31T08:49:12.155Z", - "updatedAt": "2021-05-31T08:49:12.155Z", - "id": "186", - "name": "Uptime Robot API creds", - "data": "U2FsdGVkX1+PwKjMMm2u0e2DI0H14X5nof/91ip7CjYdvk3XZnh/jz7ba2/aG93Jm23BvvkbF90ai3knsj49gg==", - "type": "uptimeRobotApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.uptimeRobot", - "date": "2021-05-31T08:49:12.149Z" - } - ] - }, - { - "createdAt": "2021-05-31T09:22:28.271Z", - "updatedAt": "2021-06-15T15:59:53.419Z", - "id": "187", - "name": "SSH creds", - "data": "U2FsdGVkX1/lBuNcR39kXxNKDkrIC83g0wueSK9p1TudrXGxPitzJ0cx+arrA6SQbnxqOQ8agV/2tImy0NkOorQa2JzZLqULN0l4+rA0fVprv0QjVMLHKuzdLkoQrrLufJ+Ec24L+Dto23QKHrWfeA==", - "type": "sshPassword", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.ssh", - "date": "2021-05-31T09:22:28.265Z" - } - ] - }, - { - "createdAt": "2021-06-02T13:44:52.204Z", - "updatedAt": "2021-06-04T20:52:03.921Z", - "id": "190", - "name": "Microsoft Todo OAuth2 API creds", - "data": "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", - "type": "microsoftTodoOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.microsoftTodo", - "date": "2021-06-02T13:44:52.183Z" - } - ] - }, - { - "createdAt": "2021-06-07T07:58:21.050Z", - "updatedAt": "2021-07-12T14:21:08.641Z", - "id": "192", - "name": "Microsoft To Do OAuth2 API creds", - "data": "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", - "type": "microsoftToDoOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.microsoftToDo", - "date": "2021-06-07T07:58:21.028Z" - } - ] - }, - { - "createdAt": "2021-06-07T09:28:51.874Z", - "updatedAt": "2021-06-07T09:28:51.874Z", - "id": "193", - "name": "Git creds", - "data": "U2FsdGVkX1/IIVWsCYtoZ7p4mtRUcAsonMpXURC3t/1X0QXVuHDFO/G213Y22rbgDrpW4lHErYa2qGGN9udgc5HBNoNcH6jWBZ+504s9HF8=", - "type": "gitPassword", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.git", - "date": "2021-06-07T09:28:51.858Z" - } - ] - }, - { - "createdAt": "2021-06-07T14:45:16.621Z", - "updatedAt": "2021-06-07T14:45:16.621Z", - "id": "194", - "name": "MQTT SSL creds", - "data": "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", - "type": "mqtt", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.mqtt", - "date": "2021-06-07T14:45:16.591Z" - } - ] - }, - { - "createdAt": "2021-06-09T08:29:47.063Z", - "updatedAt": "2023-03-06T11:42:50.922Z", - "id": "195", - "name": "Oauth google", - "data": "U2FsdGVkX1/Mc0X3JTx9ez/2SbPS2BGxL4JwA8TgOuHlOjvjQQdgOOhg3pkNsaIA+CGAREXyIpbz5yyCT/ov0Tf45L9G7AAMLNqyDDmd60guHvBTX1qQdOeP1q5YDghzCm5+7PqTfPIoBl/0eGvlsC0HWNhigSxRhVfce2LH0iyxhIZUYB7Yck8mztHusijc60d0BNuA6/b7hazJL/yqFRcCQCbh/qGW6HpyUc+xiyS/Yt7Vssvaq01A4sF7F2u5", - "type": "googleDocsOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.googleDocs", - "date": "2021-06-09T08:29:47.048Z" - } - ] - }, - { - "createdAt": "2021-06-10T09:30:02.562Z", - "updatedAt": "2021-06-10T09:57:05.941Z", - "id": "196", - "name": "Google API creds", - "data": "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", - "type": "googleApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.googleDrive", - "date": "2021-06-10T09:30:02.546Z" - }, - { - "nodeType": "n8n-nodes-base.googleBooks", - "date": "2021-06-10T09:36:33.967Z" - }, - { - "nodeType": "n8n-nodes-base.googleSheets", - "date": "2021-06-10T09:36:33.967Z" - }, - { - "nodeType": "n8n-nodes-base.googleSlides", - "date": "2021-06-10T09:36:33.967Z" - }, - { - "nodeType": "n8n-nodes-base.googleTranslate", - "date": "2021-06-10T09:36:33.967Z" - }, - { - "nodeType": "n8n-nodes-base.googleDocs", - "date": "2021-06-10T09:36:33.967Z" - }, - { - "nodeType": "n8n-nodes-base.gmail", - "date": "2021-06-10T09:36:33.967Z" - } - ] - }, - { - "createdAt": "2021-06-10T11:13:54.703Z", - "updatedAt": "2021-06-10T11:13:54.703Z", - "id": "197", - "name": "Wazzup creds", - "data": "U2FsdGVkX1/V+lYhVIpxJKAdbtjAbgUWxRDA21RqHYIZQA2X0vWyQ7gLvuaTInDChmdKKTU6oz8CQYiovBvAws3Kdks5GVPpaGvJnj0N4a8=", - "type": "wazzupApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.wazzup", - "date": "2021-06-10T11:13:54.654Z" - } - ] - }, - { - "createdAt": "2021-06-16T14:50:59.312Z", - "updatedAt": "2021-07-07T15:22:11.746Z", - "id": "198", - "name": "Service Now OAuth2 API", - "data": "U2FsdGVkX18A1rFV+ipWYsfGfllKG2J76l/5EBlzh/9wFdEVWYGEnrwlNwmivXblDY3TaeLDZQ7jn9cWBhEOz23n6c9lbRi23mxBiwTPt6TBz8ujyaRtjNolow4/P6BFppafb2ayEknxRrkpGB37G89acR+ddbMWMa2K7vIuzsdCPpn6crRFJoils0eRXDJnzj0IRlNatksGlI8LhmRFFXtxCrzNEcZiO4cj2IH3vZbzXTE+2CHo8/+IPDohplkp0VM6to0jVW5EvpGGISJAuuOogmYwzIRUoWjCspXqt7eyDVH2YoCRTVWDVgxztHwGgHCHnnbJO/ksS3ElgCUZd/P118h7zGAVEhKu9+D1KKzULRMnd9llYq8dh93a/jRXksXSiCV9Kx8foOXjpRveWuTx+iAcGy8mdrnZVkYjvid6iuTbbrAtToa57IzonzFsHXWcs0S0WRhmzDt5KC7FnQRVcYO2J9qabKFaOgH4ObqM34TNeQTH3rI18bVDwgzWKIL7PGW5dn9ZQ28bf9kQU8JoJtlBUxr+sCS7uiR6M/Hsw0qBwnfyc1Ho/besVrmtv8bffbeYvbQCS2nTuXPxqJkX8oKX93MZvj2ybXI6N/343eWUisvegW7SxPKdxQkPJI2J8vsbG8QWZd3I+Ubi1clX4uARulfeuzXLvCs5KTShvssJgbagP9Sf1Dd9vK19GAUUNzSQ79e+EXec6QJfLQ==", - "type": "serviceNowOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.serviceNow", - "date": "2021-06-16T14:50:59.280Z" - } - ] - }, - { - "createdAt": "2021-06-25T11:10:45.303Z", - "updatedAt": "2021-06-25T11:10:45.303Z", - "id": "201", - "name": "Github HTTPreq creds", - "data": "U2FsdGVkX19Q/HZbu0Xv2aO4XK5Oll/0GPHCxm4fG15rmTB0ULY05HVx7Jvx5okarKKH35cpGoC1aPtb+fSPXCNa6zUZpYbH0TrIs654+BbSp7HKYRFioah/4EUmxSQP8XlBClrgz/bB55EptXwekg==", - "type": "httpHeaderAuth", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.httpRequest", - "date": "2021-06-25T11:10:45.298Z" - } - ] - }, - { - "createdAt": "2021-06-28T13:18:15.532Z", - "updatedAt": "2021-06-28T13:18:15.532Z", - "id": "204", - "name": "Facebook Graph API creds", - "data": "U2FsdGVkX1/WG8FR/tKdm1BVowImxVfuOFxk5Fgb/40AfVh9o73NOgUbruEdXTq8Hnpv/9vGngPOPksmN40/zqrjMAo9vHdU1MTU1LE36ose16QAFlfDulQMRlwzakuw+wpvwjfrzDVYIHhwJP9Hr4hZtIVOz1uesbVWKdh3mx+BqnNFY3KZ0MDdcITrOwQO1mS9IJ3sWi9AjqRKG25/MMaYUEoKmOZ56Cdhhn9WuJDTg+46ZjVU67gfWmbJA4adi1oulaksMlw4UKoWLBovXxy12CrJ2xE5Nlxuz4rK0lbjB3GGCNX6VL/BLfJftO5iqyRClhwtFtjf6qwHKiDbjg==", - "type": "facebookGraphApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.facebookGraphApi", - "date": "2021-06-28T13:18:15.519Z" - } - ] - }, - { - "createdAt": "2021-07-06T11:02:01.098Z", - "updatedAt": "2021-07-08T13:08:48.371Z", - "id": "208", - "name": "Twake API creds", - "data": "U2FsdGVkX18fJ1Lxo94Z8X4fgXyEr3BAX28NaqpdFK0czUM1u0V6LYXdd6rqFE7PGWPrex+qy/u611mBJPMpjryqTkhw5dpS6c7vrRlNP+m40UllwH+UyPMJ4oJvkzV2ZxVJh6jwX4V6r5XmFpOCg8+6U4JHp39ThXlwU4iecu9ydQATOs0hNftYjmDPEaoe4hNqgB0PspxoVJT4REXAcg==", - "type": "twakeCloudApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.twake", - "date": "2021-07-06T11:02:01.088Z" - } - ] - }, - { - "createdAt": "2021-07-06T13:56:38.704Z", - "updatedAt": "2023-03-06T11:43:42.917Z", - "id": "209", - "name": "Google BigQuery OAuth2 API creds", - "data": "U2FsdGVkX1/kMPFA6N8Qd2dHVP3Hc84dX/wYIWkMRR6R0xeEMAe3PEcnzFRn9bzQIByvsHVMhcaem47LjECpiQIkV5Ee8Jd2LbZD73Qufzp3tKdsBwieP6WlP0UL/Qrkz0dws7/LlE0BsVLO4XzlwvMS2qCP/v3NQtNqbvpbvpz5qDMED8FkwKtfPYzs1x5WRiAhhCHac66e+U9BTcxbQHi9s6qzZZkHvO9wnubjNH54vc+ZtFAdmzxJrfFHxlkguF0m9C743E9044Vj+v2dMrW5N82MGQBCUe5h3MJH7IoyY4hji0txJknLuqOJ5QUK+ULQM86F2znYypgDtNsS9WaSARSX/E6Fs0rUipzaubuZo2X/T/nbz+jn0I4IbYM0lY63ntaulZUyyEEqDrw60qv3AEwhA+Jtk5WhuBi6MmTaeFMx6vAIKTgFLyPckqq3Z6kYo39owdYMkdoEAHdhUlMDX2WaxAeXMTrZS8nmnN/zkDYQWEX4DVj6CdURKD9aOwlgZgdB7+rMvr6DPvqhUWhFBQbzAxQT75vKOTaRWKhxykKzFOu+p4T9nsUNGEFgRDsuXgB4O6ufjdiUuiaEdKF6OSzokwhP4fTz5HkSi00I1WV3YC3yzll0tGGfGGaZUdJkt0dn+Ko+h8lLfuHYbj0Adp4TNQ/D23Gwvz+n1OBttnjaT9wcrrVG6tZoyX/S4LQZv/yQHqp6pCQjAAxvybiLKNgvXncYQZdIz/IQ7idp4cvP+d7TbhZMCoGmro/dK+Vx/T+pM2NgCQX/XSNfDq7fx/1Q74hz2Z1qdTNnHOxE5AZhmMJtW0Cn87ZcAZdLxjw+likWq4+opb8RV47k+fGc93gGVYQgbgDKfjPY1GeyzGy2CFlZoajaEd4uUOY45Sw8QtsnN9Yv1L02eqYmAw==", - "type": "googleBigQueryOAuth2Api", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.googleBigQuery", - "date": "2021-07-06T13:56:38.700Z" - } - ] - }, - { - "createdAt": "2021-07-08T14:04:04.717Z", - "updatedAt": "2021-07-08T14:04:04.717Z", - "id": "211", - "name": "Bannerbear API creds", - "data": "U2FsdGVkX19DUobOgTiZB2BNRYe9XfE4cRRrm0jJeH4vpdAIA6Xn1yWx1Srof9jTwVuDwQgygu86BpsDpAikOA==", - "type": "bannerbearApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.bannerbear", - "date": "2021-07-08T14:04:04.713Z" - } - ] - }, - { - "createdAt": "2021-07-08T15:03:50.597Z", - "updatedAt": "2021-07-08T15:03:50.597Z", - "id": "212", - "name": "Automizy API creds", - "data": "U2FsdGVkX1+a4YF8ERm2wQpmFF9zuWqVqcoRxHitUPNwbj04yGayD0/BUAF7C4UF049E9a+vkWKCCU+wPzMNupy+v6T50/t04J5T9X0lk7U=", - "type": "automizyApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.automizy", - "date": "2021-07-08T15:03:50.578Z" - } - ] - }, - { - "createdAt": "2021-07-08T15:56:27.335Z", - "updatedAt": "2021-07-08T15:56:27.335Z", - "id": "213", - "name": "Autopilot API creds", - "data": "U2FsdGVkX1990Zz0289mfOk1s3M8GpfiHEy9YKoQwnShYRqiYSMWnJEu5LFGr7IMciUvkztaubmR0CV6u2Iktw==", - "type": "autopilotApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.autopilot", - "date": "2021-07-08T15:56:27.305Z" - } - ] - }, - { - "createdAt": "2021-07-09T09:25:37.158Z", - "updatedAt": "2021-07-09T09:25:37.158Z", - "id": "214", - "name": "Copper API creds", - "data": "U2FsdGVkX18l89dBvUw37IdZgI4DoqM5IrZELrJN19yyuFJVOJulYwWC3pdJYs+mu5ZQHakW2plT0JPMN5aI0+oI8C1aEOkiwbpxdJYQE0HBU9WYhcxEHauUR8VZsFSr", - "type": "copperApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.copper", - "date": "2021-07-09T09:25:37.137Z" - } - ] - }, - { - "createdAt": "2021-07-09T10:42:39.852Z", - "updatedAt": "2021-07-09T10:42:39.852Z", - "id": "215", - "name": "Lemlist API creds", - "data": "U2FsdGVkX19YK3ou2PHqwk9RvmTvq8SW+IuQUPU9elxpcL1+v7VSCtXCabTO+REWz0AtAzO0Wf+KX3/NHph0GQ==", - "type": "lemlistApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.lemlist", - "date": "2021-07-09T10:42:39.834Z" - } - ] - }, - { - "createdAt": "2021-07-09T11:07:29.231Z", - "updatedAt": "2021-07-09T11:07:29.231Z", - "id": "216", - "name": "LingvaNex API creds", - "data": "U2FsdGVkX18mh/bww6zfE0KPaki4toOG5g2TnxjJziEUuVnYpj+ObrcXE+P2q7+2iSvLhCM21pZpq6/xsfdOOT2MOvxcIUnYnWDupJOv1PRafpZOL3DrOFiRoMUdMTwrgxk9rDT0Pv2kn63IHheCcw==", - "type": "lingvaNexApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.lingvaNex", - "date": "2021-07-09T11:07:29.221Z" - } - ] - }, - { - "createdAt": "2021-07-09T12:21:19.612Z", - "updatedAt": "2021-07-09T12:21:19.612Z", - "id": "217", - "name": "Quick Base API creds", - "data": "U2FsdGVkX1/bmFNHmFEKuJOOrdCy4gBcs41FiU0KeSIZwYcwtTyPH4KjLKqweO0QfuNDv2K41BKrDM7Q9oAs3Tv5Ko/P4l2QtZBYpq8XAwrVP7wUzSkGwwT+7OCbKlnhBo3WBLxfngAj9beW+c90yg==", - "type": "quickbaseApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.quickbase", - "date": "2021-07-09T12:21:19.609Z" - } - ] - }, - { - "createdAt": "2021-07-09T12:55:33.370Z", - "updatedAt": "2021-07-09T12:55:33.370Z", - "id": "218", - "name": "Salesmate API creds", - "data": "U2FsdGVkX1+6pfuX5hgu5NnZwv66rRj2UWXLmjFk4okMMGKTS0Zq5v4KEEuepftiE3NDFtbjAknhWrYiFvKZmGOzD9H/Jqkp9YVul9MIeuT5FPTHFWRw0NP9/ucm0p2W26k1seEXBzw5v5NgiaxvGQ==", - "type": "salesmateApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.salesmate", - "date": "2021-07-09T12:55:33.366Z" - } - ] - }, - { - "createdAt": "2021-07-09T13:37:45.136Z", - "updatedAt": "2021-07-09T13:37:45.136Z", - "id": "219", - "name": "Unleashed API creds", - "data": "U2FsdGVkX1/UWTTmjW5+dEZHIF+vI+/8Z1z6yrVsts5aNRyaAR6zF/jmjTJo5dxXl1Scl0ItuRFq52ZkFpwSS8onxWlh899d/ksRPsuXyUj0g1vZoNhRAlPUAk4uHTKG7CdLbIbR1AnLx7RBZ7BX5CXEaei/260WGBt/k0Apf62O7sR+6aLGEkMJ3HdVodIPbx3xA9vRHvft5DWwPnAeblMuWMNYnPZdm201+pjdqrc=", - "type": "unleashedSoftwareApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.unleashedSoftware", - "date": "2021-07-09T13:37:45.126Z" - } - ] - }, - { - "createdAt": "2021-07-09T13:56:17.513Z", - "updatedAt": "2021-07-09T13:56:17.513Z", - "id": "220", - "name": "Flow API creds", - "data": "U2FsdGVkX1+s012n9S/Ccpyeyjpguajol8ndKHq2fk8+BkMbixDXi+8lijoBFaw+jU9NEigXKBPoyvIvg0xILHYEPN5g4URfbcNkospCZlYCzd5lRvXXrkmdUY+1ldjtzjYFGcFZbQAjzGmHx3Kr+nmDom+9+MZROgJJq2On9oI=", - "type": "flowApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.flow", - "date": "2021-07-09T13:56:17.501Z" - } - ] - }, - { - "createdAt": "2021-07-15T13:53:23.185Z", - "updatedAt": "2021-07-15T13:53:23.185Z", - "id": "221", - "name": "taigaApi", - "data": "U2FsdGVkX194voBZRbkQtyAV6D4Xt5l91TONcpGY2UmJllyCtDzFntUo2jODSyeHjtIHNBh9D4uknbeHfYaGgyFSpuiqNly8hI6s09AZGL8=", - "type": "taigaApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.taiga", - "date": "2021-07-15T13:53:23.176Z" - } - ] - }, - { - "createdAt": "2021-07-29T15:07:56.696Z", - "updatedAt": "2024-01-30T15:16:53.177Z", - "id": "223", - "name": "Spotify OAuth2 creds", - "data": "U2FsdGVkX184CipdIAhmdBl5m+xl1UgWlNQPsCPRgb7EcihBkDWoc5gsRnellNxJUCWhYn0nnIITcr3Dr7V9we5IOhDFKmptRTs5e+DQ6Gn64v+rr2fT7ww9PnjTGL9pAm/mYYyAwazE6FhT6ea4Ne2/K2ISicwx1aBggzHsoe/pTv9kR4iVMznWJzJAQO8KJ3gxxADMTvIYlDhmCO7h9MhbqBXPNrkLre7vEoOhp6ZzhrDqwtFeqEy1lSytV7XQmXgjAC/bpP5+i/YNZBSfKqWCWn3m4Log8LSlpP4C5lW40meo0RRskcZJYAoF52A1ac4Cm5t/I+fbxjsAzPSSIqfSs1C6i8iVmI9FLdaM3d8K4nWh3q0T/7xBgcun08A925ECqF2KvNxqZQJLusrIUoEwjxuCupgGakxMbhXZPXRYzZj/9xOQuQeNeRXkEeZ3qG6WvJlnEfPRAfMjVjNIN5GLORwF1O1advW71UrEffPMSWeN1iPa6vrKErZCMBmU7GY6jSpQXyVSCdB5W0hUkFRDRkP1X4+JmJE6RH4c90pIyaNGdgiDapK/LRs8i/dDReVt+Pb/0XOYcvn9AfGvEnxKjKnj2m0gxiHRu7FiCWrehaYrXtoYhygxLAHG1JlGNQ+vCKLSreplrszOjD6Sik2ltsJVPwrW3Luw8WcdSuGUA+J+NqiNSchm49mXGvTvea/DAgssBQD8xSUbab4SXfIAlOjyFT66UgtRKKP4WHGkXvhQuhI1l+4cx04E3kWO+a/VLUCtBECGGjKGeLcDLLQoyw3hHanYS8fAqeBZQRiOfALQucOWUwDhSp8rtmf+FXBdeqrPGMNVt1qTha23xk0uhKf1looNXocOFrlAtm7pazu66pQrk9gOxLjATieYQvoRpnOURn8e/O2vk6s0X3asHRVtIhVR6kmP0yXK4cfesn1j39J/Fyb+dT//N7RrpAcF5tzcaovZ8jP5FUTUCaKJiKCutEuzhU6uXVnS6tH9UP1FilYn6HKFk/hryyrBmaeBog6XhV1ncVMogXMJFNMsW/RPPzbaJU2qEO9sIPmi1pHKuV/4wCYLtNCwi5+LyeZeND+WmHU8LjqqLvqvNVihbQlDQQ1a22R6rWDqo98PS+nOTyl1hhxcgYwo1kBaza3UlRUBF2PDelWu3HZSWGZpd1ojQpcmK6Y54Wd793rc9TRyLRRDpipkh4Yvm2XJexr/EZ/nLdfbCj9dWaZEKf0apgAQ6aN68/uRSvvfT9jSaic+/AExw86kxtMShH1TBPT1J0KZgAxE3CL8VNoanze9RMmnEy/AjCL7D4IPILZ5OYcsRf37O0um8e6gKXqOo9z/LMPNpz1GEzilH8U1Mwk5QFChK7h8fobLYqYdRliSc43wC7IzaBrSjrNNpYckjvlVIf2cb1eBniG3P+7gBuevtXwX+v405PuCBZoiwSz7w1iOQvZa+5YiejMCySjOhAxe+7o2e69w2IVj3Ua4MRsEIUbIvQmU3d0vzBftcYyCGS3TUcllSBfZXxdkIYs/3r8Jf+8peyQ21LprnZZmPQnHYIDSa9ORb/KqL2Yw+lAUC0wSEof6k6IdlM/GyUupdowSjARTC+9z9ZTyXBA+z8COSJwgDlcoy3lXjXEcIHRKqZyqv8Ogb7kcKr2KtSTfeEDedm06/bEx8EWn/MGwdk784HiYjwCYFIwA9eq/OUbvDyAoIZFmNeVCzedCHa5cvzVVjiU5f+7U/n7W0oLdkdRwXtp8ney3oY9iK0i/tw6duUUOE1+VrFjeGRQLzu284Dz2N7s/J7pM7a+XmMu++A==", - "type": "spotifyOAuth2Api", - "nodesAccess": [] - }, - { - "createdAt": "2023-11-14T14:06:37.142Z", - "updatedAt": "2023-11-14T14:06:37.135Z", - "id": "q80wx3kiggmjWdY9", - "name": "VirusTotal account", - "data": "U2FsdGVkX19YzDZdkttgnMSwQaHslQJ/df+UymDyoElout2KYb4Ze5Mr8W8vyWA9oM3jSc110zApTlvOaCe4H883SXgDBvugTvyHCclweEevR78xACzsoGHhS0t0YRcqKiag3BteYgeG9KspdBeVCA==", - "type": "virusTotalApi", - "nodesAccess": [] - }, - { - "createdAt": "2024-03-04T15:51:12.065Z", - "updatedAt": "2024-03-04T15:51:12.056Z", - "id": "wd646B2kD0zzQHC3", - "name": "CohereApi account", - "data": "U2FsdGVkX1+e/SwD3hZJTTggN8oHic/eaqs0GnrjpVoisY4MilixmCGSBvWHESRgvOKXCmpsohpPqEeyJ6ioY42jm9c72rjaLM2oiMoHTCY=", - "type": "cohereApi", - "nodesAccess": [ - { - "nodeType": "@n8n/n8n-nodes-langchain.embeddingsCohere", - "date": "2024-03-04T15:51:12.055Z" - }, - { - "nodeType": "@n8n/n8n-nodes-langchain.lmCohere", - "date": "2024-03-04T15:51:12.055Z" - } - ] - }, - { - "createdAt": "2024-03-04T16:05:06.082Z", - "updatedAt": "2024-03-04T16:05:06.080Z", - "id": "RNAgogiex4JxTr44", - "name": "Azure Open AI account", - "data": "U2FsdGVkX19Q3gtwA9Nt1YBIdkH5c+OI7X/A2iWsNJXYnagrLOooC/UZI0ZCBpPlYDHHa49T5xbWraJ/kwpVy7E0+OZWwb7sZ7xcKa+618BMLdaJQyn4fqTmz+CfXRFB", - "type": "azureOpenAiApi", - "nodesAccess": [ - { - "nodeType": "@n8n/n8n-nodes-langchain.embeddingsAzureOpenAi", - "date": "2024-03-04T16:05:06.080Z" - }, - { - "nodeType": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi", - "date": "2024-03-04T16:05:06.080Z" - } - ] - }, - { - "createdAt": "2024-03-04T16:13:11.535Z", - "updatedAt": "2024-03-04T16:13:11.533Z", - "id": "Rl7R5orXMm9FvxZS", - "name": "Mistral Cloud account", - "data": "U2FsdGVkX18K/8KeCsjvuxU95AF9Cyy2yaOFG0JW6hvZB3YUfVQ1bOEro8sNAFGo7h3brCwBDCfz/JLmXNWs9A==", - "type": "mistralCloudApi", - "nodesAccess": [ - { - "nodeType": "@n8n/n8n-nodes-langchain.embeddingsMistralCloud", - "date": "2024-03-04T16:13:11.533Z" - }, - { - "nodeType": "@n8n/n8n-nodes-langchain.lmChatMistralCloud", - "date": "2024-03-04T16:13:11.533Z" - } - ] - }, - { - "createdAt": "2024-03-04T16:13:58.488Z", - "updatedAt": "2024-03-04T16:13:58.486Z", - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account", - "data": "U2FsdGVkX195mafxGwDW3DcL8Kkn5ME4KGNGUU34IbAdBul7UJ+XXh2bVkZzD+cCvnX6Mbh1qNhP1TynynqgCrfzhn0mDHdRyJ5koVBdJaOsOQ72ItjBbS08JDmAExSR", - "type": "openAiApi", - "nodesAccess": [ - { - "nodeType": "n8n-nodes-base.openAi", - "date": "2024-03-04T16:13:58.485Z" - }, - { - "nodeType": "@n8n/n8n-nodes-langchain.openAi", - "date": "2024-03-04T16:13:58.485Z" - }, - { - "nodeType": "@n8n/n8n-nodes-langchain.openAiAssistant", - "date": "2024-03-04T16:13:58.485Z" - }, - { - "nodeType": "@n8n/n8n-nodes-langchain.embeddingsOpenAi", - "date": "2024-03-04T16:13:58.485Z" - }, - { - "nodeType": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "date": "2024-03-04T16:13:58.485Z" - }, - { - "nodeType": "@n8n/n8n-nodes-langchain.lmOpenAi", - "date": "2024-03-04T16:13:58.485Z" - } - ] - }, - { - "createdAt": "2024-03-04T16:54:42.832Z", - "updatedAt": "2024-03-04T16:54:42.825Z", - "id": "Ohl5AdteUC94gDYj", - "name": "QdrantApi account", - "data": "U2FsdGVkX1+FU6GWIVYq7ZrHXIwHRkf+0tRLQBoPbEfjpaPmbKq6mFH8g4qOh9kYvmO/LijqrYmxTcW+RL1UV5NJgtAMAU50POrgUcC1Gk50gzXoO+DFS3kt6FQLb+a82ovGtB+UBqYj6xplZNLXJl6sS2MKt+zJ7ehgjt3TPlxLbCjwA2ByS68k86rOhCFRfpIyvX3lkaAfw/CtIpSUD32CgIY3bTbABO40aZqDEzE=", - "type": "qdrantApi", - "nodesAccess": [ - { - "nodeType": "@n8n/n8n-nodes-langchain.vectorStoreQdrant", - "date": "2024-03-04T16:54:42.824Z" - } - ] - }, - { - "createdAt": "2024-03-04T16:58:05.121Z", - "updatedAt": "2024-03-04T16:58:05.119Z", - "id": "IoeAsZR3eD1OS0oY", - "name": "PineconeApi account", - "data": "U2FsdGVkX19cylSnz+B0slgUyHRFO8DR/XbCXcs7O2lSTJd9sXSt2KWwTtWJni0xdJUlH2ii2jk3MyxKWuY+ltZw2/oCdFIT3qy8EGI2ujHgaC3JGJPr344LGa19LiUE", - "type": "pineconeApi", - "nodesAccess": [ - { - "nodeType": "@n8n/n8n-nodes-langchain.vectorStorePinecone", - "date": "2024-03-04T16:58:05.119Z" - }, - { - "nodeType": "@n8n/n8n-nodes-langchain.vectorStorePineconeInsert", - "date": "2024-03-04T16:58:05.119Z" - }, - { - "nodeType": "@n8n/n8n-nodes-langchain.vectorStorePineconeLoad", - "date": "2024-03-04T16:58:05.119Z" - } - ] - }, - { - "createdAt": "2024-08-29T09:12:15.992Z", - "updatedAt": "2024-08-29T09:12:15.988Z", - "id": "pHGfJmTMIpWliDSS", - "name": "PGVector account", - "data": "U2FsdGVkX1+e3a7wKZrdar8jkTor3wRQjSfAGyd8i2yoXHRvcGUhx+dIzZDPfNXHbSUUi0lcYIdIicMPJfDdZ2UXpeqjm2qQAyE86jAeTqgUE/KFUxHH3ULtAGqEbxM5WZ0K1qL1HJUuIaTRK0/NrA==", - "type": "postgres", - "nodesAccess": [ - { - "nodeType": "@n8n/n8n-nodes-langchain.vectorStorePGVector", - "date": "2024-08-29T11:26:05.119Z" - } - ] - } -] diff --git a/test-workflows/skipList.json b/test-workflows/skipList.json deleted file mode 100644 index d55a883f6b0..00000000000 --- a/test-workflows/skipList.json +++ /dev/null @@ -1,926 +0,0 @@ -[ - { - "workflowId": "1", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "4", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "5", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "10", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "19", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "20", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "21", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "22", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "26", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "27", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "28", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "29", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "30", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "31", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "33", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "34", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "38", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "39", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "40", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "41", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "42", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "43", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "45", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "46", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "47", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "49", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "50", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "51", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "54", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "56", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "57", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "59", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "60", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "64", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "65", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "66", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "68", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "69", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "72", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "73", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "74", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "75", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "76", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "77", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "78", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "79", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "80", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "82", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "85", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "89", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "92", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "94", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "102", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "104", - "status": "SKIPPED", - "skipReason": "This node is deprecated and has been replaced by the Extract From File node. Also it didn't interact with any live services, it could have been an integation test.", - "ticketReference": "" - }, - { - "workflowId": "106", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "109", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "110", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "112", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "113", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "115", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "116", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "117", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "118", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "119", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "120", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "121", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "122", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "123", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "124", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "125", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "126", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "127", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "128", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "129", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "130", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "131", - "status": "SKIPPED", - "skipReason": "This API service has been discontinued. For more details, please check here: https://notify-bot.line.me/closing-announce on node Line", - "ticketReference": "" - }, - { - "workflowId": "134", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "133", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "135", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "136", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "137", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "138", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "139", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "141", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "142", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "144", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "145", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "146", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "147", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "148", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "149", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "151", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "157", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "158", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "159", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "160", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "163", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "164", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "165", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "167", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "168", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "169", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "170", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "171", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "173", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "176", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "177", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "179", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "180", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "183", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "184", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "185", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "186", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "187", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "188", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "189", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "190", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "191", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "192", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "193", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "194", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "196", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "197", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "198", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "199", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "200", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "201", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "202", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "204", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "206", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "207", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "208", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "214", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "215", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "217", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "218", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "219", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "220", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "221", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "222", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "224", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "225", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "226", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "227", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "252", - "status": "SKIPPED", - "skipReason": "", - "ticketReference": "" - }, - { - "workflowId": "223", - "status": "SKIPPED", - "skipReason": "You can not complete this operation. Please check your balance on node LingvaNex", - "ticketReference": "" - }, - { - "workflowId": "143", - "status": "SKIPPED", - "skipReason": "Invalid API key for Clearbit.", - "ticketReference": "" - }, - { - "workflowId": "86", - "status": "SKIPPED", - "skipReason": "It looks like a timing issue with the delete operation. The contact was created but not found when trying to delete it. Tested it with the same workflow and it worked.", - "ticketReference": "CAT-790" - }, - { - "workflowId": "87", - "status": "SKIPPED", - "skipReason": "It looks like a timing issue with the delete operation. The contact was created but not found when trying to delete it. Tested it with the same workflow and it worked.", - "ticketReference": "CAT-790" - }, - { - "workflowId": "88", - "status": "SKIPPED", - "skipReason": "It looks like a timing issue with the delete operation. The contact was created but not found when trying to delete it. Tested it with the same workflow and it worked.", - "ticketReference": "CAT-790" - }, - { - "workflowId": "233", - "status": "SKIPPED", - "skipReason": "Not Found on node Qdrant Vector Store. Could be a timing issue.", - "ticketReference": "" - }, - { - "workflowId": "241", - "status": "SKIPPED", - "skipReason": "OpenAIAgent requires an OpenAI chat model on node AI Agent1", - "ticketReference": "" - }, - { - "workflowId": "259", - "status": "SKIPPED", - "skipReason": "Please return an array of objects, one for each item you would like to output. on node Code", - "ticketReference": "" - }, - { - "workflowId": "254", - "status": "SKIPPED", - "skipReason": "Overloaded on node AI Agent3. Is this because I ran the test workflow multiple times?", - "ticketReference": "" - } -] \ No newline at end of file diff --git a/test-workflows/snapshots/1-snapshot.json b/test-workflows/snapshots/1-snapshot.json deleted file mode 100644 index 2b48e4a0ee5..00000000000 --- a/test-workflows/snapshots/1-snapshot.json +++ /dev/null @@ -1,397 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1676891385621, - "executionTime": 1, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Twitter": [ - { - "startTime": 1676891385623, - "executionTime": 416, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "created_at": "Mon Feb 20 11:09:45 +0000 2023", - "id": 1627626558218182700, - "id_str": "1627626558218182657", - "text": "Hello from n8n testing framework 0.5036048381984097", - "truncated": false, - "entities": { - "object": true - }, - "source": "n8n testing framework", - "in_reply_to_status_id": { - "object": true - }, - "in_reply_to_status_id_str": { - "object": true - }, - "in_reply_to_user_id": { - "object": true - }, - "in_reply_to_user_id_str": { - "object": true - }, - "in_reply_to_screen_name": { - "object": true - }, - "user": { - "object": true - }, - "geo": { - "object": true - }, - "coordinates": { - "object": true - }, - "place": { - "object": true - }, - "contributors": { - "object": true - }, - "is_quote_status": false, - "retweet_count": 0, - "favorite_count": 0, - "favorited": false, - "retweeted": false, - "lang": "en" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Twitter4": [ - { - "startTime": 1676891386039, - "executionTime": 227, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "created_at": "Sun Feb 19 15:58:36 +0000 2023", - "id": 1627336861717876700, - "id_str": "1627336861717876742", - "text": "- @PlausibleHQ tracking plan, in progress 🚧\n- @n8n_io workflowsβœ…\n- @MailerLite add Users subscriptionβœ…\n- @NotionHQ… https://t.co/2Mb94nO48X", - "truncated": true, - "entities": { - "object": true - }, - "metadata": { - "object": true - }, - "source": "Twitter Web App", - "in_reply_to_status_id": { - "object": true - }, - "in_reply_to_status_id_str": { - "object": true - }, - "in_reply_to_user_id": { - "object": true - }, - "in_reply_to_user_id_str": { - "object": true - }, - "in_reply_to_screen_name": { - "object": true - }, - "user": { - "object": true - }, - "geo": { - "object": true - }, - "coordinates": { - "object": true - }, - "place": { - "object": true - }, - "contributors": { - "object": true - }, - "is_quote_status": true, - "retweet_count": 0, - "favorite_count": 4, - "favorited": false, - "retweeted": false, - "lang": "en" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Twitter1": [ - { - "startTime": 1676891386266, - "executionTime": 234, - "source": [ - { - "previousNode": "Twitter" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "created_at": "Mon Feb 20 11:09:45 +0000 2023", - "id": 1627626558218182700, - "id_str": "1627626558218182657", - "text": "Hello from n8n testing framework 0.5036048381984097", - "truncated": false, - "entities": { - "object": true - }, - "source": "n8n testing framework", - "in_reply_to_status_id": { - "object": true - }, - "in_reply_to_status_id_str": { - "object": true - }, - "in_reply_to_user_id": { - "object": true - }, - "in_reply_to_user_id_str": { - "object": true - }, - "in_reply_to_screen_name": { - "object": true - }, - "user": { - "object": true - }, - "geo": { - "object": true - }, - "coordinates": { - "object": true - }, - "place": { - "object": true - }, - "contributors": { - "object": true - }, - "is_quote_status": false, - "retweet_count": 0, - "favorite_count": 0, - "favorited": true, - "retweeted": false, - "lang": "en" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Twitter2": [ - { - "startTime": 1676891386500, - "executionTime": 244, - "source": [ - { - "previousNode": "Twitter1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "created_at": "Mon Feb 20 11:09:46 +0000 2023", - "id": 1627626561162682400, - "id_str": "1627626561162682372", - "text": "RT @nodeqa1: Hello from n8n testing framework 0.5036048381984097", - "truncated": false, - "entities": { - "object": true - }, - "source": "n8n testing framework", - "in_reply_to_status_id": { - "object": true - }, - "in_reply_to_status_id_str": { - "object": true - }, - "in_reply_to_user_id": { - "object": true - }, - "in_reply_to_user_id_str": { - "object": true - }, - "in_reply_to_screen_name": { - "object": true - }, - "user": { - "object": true - }, - "geo": { - "object": true - }, - "coordinates": { - "object": true - }, - "place": { - "object": true - }, - "contributors": { - "object": true - }, - "retweeted_status": { - "object": true - }, - "is_quote_status": false, - "retweet_count": 1, - "favorite_count": 0, - "favorited": true, - "retweeted": true, - "lang": "en" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Twitter3": [ - { - "startTime": 1676891386744, - "executionTime": 218, - "source": [ - { - "previousNode": "Twitter2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "created_at": "Mon Feb 20 11:09:45 +0000 2023", - "id": 1627626558218182700, - "id_str": "1627626558218182657", - "text": "Hello from n8n testing framework 0.5036048381984097", - "truncated": false, - "entities": { - "object": true - }, - "source": "n8n testing framework", - "in_reply_to_status_id": { - "object": true - }, - "in_reply_to_status_id_str": { - "object": true - }, - "in_reply_to_user_id": { - "object": true - }, - "in_reply_to_user_id_str": { - "object": true - }, - "in_reply_to_screen_name": { - "object": true - }, - "user": { - "object": true - }, - "geo": { - "object": true - }, - "coordinates": { - "object": true - }, - "place": { - "object": true - }, - "contributors": { - "object": true - }, - "is_quote_status": false, - "retweet_count": 1, - "favorite_count": 1, - "favorited": true, - "retweeted": true, - "lang": "en" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Twitter3" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-02-20T11:09:45.616Z", - "stoppedAt": "2023-02-20T11:09:46.962Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/10-snapshot.json b/test-workflows/snapshots/10-snapshot.json deleted file mode 100644 index 917668ffac5..00000000000 --- a/test-workflows/snapshots/10-snapshot.json +++ /dev/null @@ -1,708 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1710331886877, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "PagerDuty": [ - { - "startTime": 1710331886877, - "executionTime": 1389, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "incident_number": 1722, - "title": "Test", - "description": "Test", - "created_at": "2024-03-13T12:11:28Z", - "updated_at": "2024-03-13T12:11:28Z", - "status": "triggered", - "incident_key": "d3b8964acebb45b4a91944a06bc89930", - "service": { - "object": true - }, - "assignments": [ - "json array" - ], - "assigned_via": "escalation_policy", - "last_status_change_at": "2024-03-13T12:11:28Z", - "resolved_at": { - "object": true - }, - "first_trigger_log_entry": { - "object": true - }, - "alert_counts": { - "object": true - }, - "is_mergeable": true, - "escalation_policy": { - "object": true - }, - "teams": [ - "json array" - ], - "impacted_services": [ - "json array" - ], - "pending_actions": [ - "json array" - ], - "acknowledgements": [ - "json array" - ], - "basic_alert_grouping": { - "object": true - }, - "alert_grouping": { - "object": true - }, - "last_status_change_by": { - "object": true - }, - "incidents_responders": [ - "json array" - ], - "responder_requests": [ - "json array" - ], - "subscriber_requests": [ - "json array" - ], - "urgency": "high", - "id": "Q3Z252030C2VEG", - "type": "incident", - "summary": "[#1722] Test", - "self": "https://api.pagerduty.com/incidents/Q3Z252030C2VEG", - "html_url": "https://dev-nodeqan8n.pagerduty.com/incidents/Q3Z252030C2VEG" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "PagerDuty7": [ - { - "startTime": 1710331888266, - "executionTime": 1108, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "R4CLO6G4XRB6395SM2S6WLWH4A", - "type": "assign_log_entry", - "summary": "Assigned to Node Qa.", - "self": "https://api.pagerduty.com/log_entries/R4CLO6G4XRB6395SM2S6WLWH4A", - "html_url": { - "object": true - }, - "created_at": "2024-03-13T12:11:28Z", - "agent": { - "object": true - }, - "channel": { - "object": true - }, - "service": { - "object": true - }, - "incident": { - "object": true - }, - "teams": [ - "json array" - ], - "contexts": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "PagerDuty6": [ - { - "startTime": 1710331889374, - "executionTime": 861, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "Node Qa", - "email": "nodeqa@n8n.io", - "time_zone": "Europe/Berlin", - "color": "purple", - "avatar_url": "https://secure.gravatar.com/avatar/c81277605b129fdafaacede5ae34e07c.png?d=mm&r=PG", - "billed": true, - "role": "owner", - "description": { - "object": true - }, - "invitation_sent": false, - "job_title": { - "object": true - }, - "teams": [ - "json array" - ], - "contact_methods": [ - "json array" - ], - "notification_rules": [ - "json array" - ], - "personal_web_cal_url": "webcal://dev-nodeqan8n.pagerduty.com/private/effe61535b688813e51b31cd68f98cf54428fe2848b86672bcff8689c9900c5a/feed", - "personal_http_cal_url": "https://dev-nodeqan8n.pagerduty.com/private/effe61535b688813e51b31cd68f98cf54428fe2848b86672bcff8689c9900c5a/feed", - "coordinated_incidents": [ - "json array" - ], - "id": "PT0VVWO", - "type": "user", - "summary": "Node Qa", - "self": "https://api.pagerduty.com/users/PT0VVWO", - "html_url": "https://dev-nodeqan8n.pagerduty.com/users/PT0VVWO" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "PagerDuty1": [ - { - "startTime": 1710331890235, - "executionTime": 919, - "source": [ - { - "previousNode": "PagerDuty" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "incident_number": 1722, - "title": "Test", - "description": "Test", - "created_at": "2024-03-13T12:11:28Z", - "updated_at": "2024-03-13T12:11:28Z", - "status": "triggered", - "incident_key": "d3b8964acebb45b4a91944a06bc89930", - "service": { - "object": true - }, - "assignments": [ - "json array" - ], - "assigned_via": "escalation_policy", - "last_status_change_at": "2024-03-13T12:11:28Z", - "resolved_at": { - "object": true - }, - "first_trigger_log_entry": { - "object": true - }, - "alert_counts": { - "object": true - }, - "is_mergeable": true, - "escalation_policy": { - "object": true - }, - "teams": [ - "json array" - ], - "impacted_services": [ - "json array" - ], - "pending_actions": [ - "json array" - ], - "acknowledgements": [ - "json array" - ], - "basic_alert_grouping": { - "object": true - }, - "alert_grouping": { - "object": true - }, - "last_status_change_by": { - "object": true - }, - "incidents_responders": [ - "json array" - ], - "responder_requests": [ - "json array" - ], - "subscriber_requests": [ - "json array" - ], - "urgency": "high", - "id": "Q3Z252030C2VEG", - "type": "incident", - "summary": "[#1722] Test", - "self": "https://api.pagerduty.com/incidents/Q3Z252030C2VEG", - "html_url": "https://dev-nodeqan8n.pagerduty.com/incidents/Q3Z252030C2VEG" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.5 second1": [ - { - "startTime": 1710331891154, - "executionTime": 503, - "source": [ - { - "previousNode": "PagerDuty" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "incident_number": 1722, - "title": "Test", - "description": "Test", - "created_at": "2024-03-13T12:11:28Z", - "updated_at": "2024-03-13T12:11:28Z", - "status": "triggered", - "incident_key": "d3b8964acebb45b4a91944a06bc89930", - "service": { - "object": true - }, - "assignments": [ - "json array" - ], - "assigned_via": "escalation_policy", - "last_status_change_at": "2024-03-13T12:11:28Z", - "resolved_at": { - "object": true - }, - "first_trigger_log_entry": { - "object": true - }, - "alert_counts": { - "object": true - }, - "is_mergeable": true, - "escalation_policy": { - "object": true - }, - "teams": [ - "json array" - ], - "impacted_services": [ - "json array" - ], - "pending_actions": [ - "json array" - ], - "acknowledgements": [ - "json array" - ], - "basic_alert_grouping": { - "object": true - }, - "alert_grouping": { - "object": true - }, - "last_status_change_by": { - "object": true - }, - "incidents_responders": [ - "json array" - ], - "responder_requests": [ - "json array" - ], - "subscriber_requests": [ - "json array" - ], - "urgency": "high", - "id": "Q3Z252030C2VEG", - "type": "incident", - "summary": "[#1722] Test", - "self": "https://api.pagerduty.com/incidents/Q3Z252030C2VEG", - "html_url": "https://dev-nodeqan8n.pagerduty.com/incidents/Q3Z252030C2VEG" - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "PagerDuty4": [ - { - "startTime": 1710331891657, - "executionTime": 1169, - "source": [ - { - "previousNode": "PagerDuty1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "note": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "PagerDuty5": [ - { - "startTime": 1710331892826, - "executionTime": 843, - "source": [ - { - "previousNode": "PagerDuty1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "POGZPU2", - "user": { - "object": true - }, - "content": "Simple note for an incident", - "created_at": "2024-03-13T13:11:32+01:00", - "channel": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "PagerDuty2": [ - { - "startTime": 1710331893669, - "executionTime": 1144, - "source": [ - { - "previousNode": "PagerDuty1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "incident_number": 1722, - "title": "Test", - "description": "Test", - "created_at": "2024-03-13T12:11:28Z", - "updated_at": "2024-03-13T12:11:34Z", - "status": "acknowledged", - "incident_key": "d3b8964acebb45b4a91944a06bc89930", - "service": { - "object": true - }, - "assignments": [ - "json array" - ], - "assigned_via": "escalation_policy", - "last_status_change_at": "2024-03-13T12:11:34Z", - "resolved_at": { - "object": true - }, - "first_trigger_log_entry": { - "object": true - }, - "alert_counts": { - "object": true - }, - "is_mergeable": true, - "escalation_policy": { - "object": true - }, - "teams": [ - "json array" - ], - "impacted_services": [ - "json array" - ], - "pending_actions": [ - "json array" - ], - "acknowledgements": [ - "json array" - ], - "basic_alert_grouping": { - "object": true - }, - "alert_grouping": { - "object": true - }, - "last_status_change_by": { - "object": true - }, - "incidents_responders": [ - "json array" - ], - "responder_requests": [ - "json array" - ], - "subscriber_requests": [ - "json array" - ], - "urgency": "high", - "id": "Q3Z252030C2VEG", - "type": "incident", - "summary": "[#1722] Test", - "self": "https://api.pagerduty.com/incidents/Q3Z252030C2VEG", - "html_url": "https://dev-nodeqan8n.pagerduty.com/incidents/Q3Z252030C2VEG" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "PagerDuty8": [ - { - "startTime": 1710331894813, - "executionTime": 871, - "source": [ - { - "previousNode": "Sleep 0.5 second1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "RQHI382RHNLDBDSY2RC947RRYM", - "type": "trigger_log_entry", - "summary": "Triggered through the website.", - "self": "https://api.pagerduty.com/log_entries/RQHI382RHNLDBDSY2RC947RRYM", - "html_url": "https://dev-nodeqan8n.pagerduty.com/incidents/Q3Z252030C2VEG/log_entries/RQHI382RHNLDBDSY2RC947RRYM", - "created_at": "2024-03-13T12:11:28Z", - "agent": { - "object": true - }, - "channel": { - "object": true - }, - "service": { - "object": true - }, - "incident": { - "object": true - }, - "teams": [ - "json array" - ], - "contexts": [ - "json array" - ], - "event_details": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "PagerDuty3": [ - { - "startTime": 1710331895685, - "executionTime": 940, - "source": [ - { - "previousNode": "PagerDuty2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "incident_number": 1673, - "title": "Test", - "description": "Test", - "created_at": "2024-02-14T02:09:08Z", - "updated_at": "2024-02-14T02:09:12Z", - "status": "acknowledged", - "incident_key": "d11eee79ee8048e99aa37675daf7a621", - "service": { - "object": true - }, - "assignments": [ - "json array" - ], - "assigned_via": "escalation_policy", - "last_status_change_at": "2024-02-14T02:09:12Z", - "resolved_at": { - "object": true - }, - "first_trigger_log_entry": { - "object": true - }, - "alert_counts": { - "object": true - }, - "is_mergeable": true, - "escalation_policy": { - "object": true - }, - "teams": [ - "json array" - ], - "pending_actions": [ - "json array" - ], - "acknowledgements": [ - "json array" - ], - "basic_alert_grouping": { - "object": true - }, - "alert_grouping": { - "object": true - }, - "last_status_change_by": { - "object": true - }, - "incidents_responders": [ - "json array" - ], - "responder_requests": [ - "json array" - ], - "subscriber_requests": [ - "json array" - ], - "urgency": "high", - "id": "Q3SVCZJPSB89X4", - "type": "incident", - "summary": "[#1673] Test", - "self": "https://api.pagerduty.com/incidents/Q3SVCZJPSB89X4", - "html_url": "https://dev-nodeqan8n.pagerduty.com/incidents/Q3SVCZJPSB89X4" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "PagerDuty3" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2024-03-13T12:11:26.876Z", - "stoppedAt": "2024-03-13T12:11:36.625Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/101-snapshot.json b/test-workflows/snapshots/101-snapshot.json deleted file mode 100644 index 3e6b9c9ec6c..00000000000 --- a/test-workflows/snapshots/101-snapshot.json +++ /dev/null @@ -1,132 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343994468, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set": [ - { - "startTime": 1747343994468, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "test", - "toBeRenamed": "name" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Rename Keys": [ - { - "startTime": 1747343994468, - "executionIndex": 2, - "source": [ - { - "previousNode": "Set" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "test", - "Renamed": "name" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Function": [ - { - "startTime": 1747343994468, - "executionIndex": 3, - "source": [ - { - "previousNode": "Rename Keys" - } - ], - "hints": [], - "executionTime": 2, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "test", - "Renamed": "name" - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Function" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:54.467Z", - "stoppedAt": "2025-05-15T21:19:54.470Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/103-snapshot.json b/test-workflows/snapshots/103-snapshot.json deleted file mode 100644 index 299c1027038..00000000000 --- a/test-workflows/snapshots/103-snapshot.json +++ /dev/null @@ -1,213 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343994471, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set": [ - { - "startTime": 1747343994471, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 4, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "filename": "filename1747343994475" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Execute Command": [ - { - "startTime": 1747343994475, - "executionIndex": 2, - "source": [ - { - "previousNode": "Set" - } - ], - "hints": [], - "executionTime": 61, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "exitCode": 0, - "stderr": "", - "stdout": "" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Read Binary File": [ - { - "startTime": 1747343994536, - "executionIndex": 3, - "source": [ - { - "previousNode": "Execute Command" - } - ], - "hints": [], - "executionTime": 14, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "exitCode": 0, - "stderr": "", - "stdout": "" - }, - "binary": { - "data": { - "mimeType": "text/plain", - "fileType": "text", - "data": "dGVzdAo=", - "directory": "/tmp", - "fileName": "filename1747343994475", - "fileSize": "5 B" - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Function": [ - { - "startTime": 1747343994550, - "executionIndex": 4, - "source": [ - { - "previousNode": "Read Binary File" - } - ], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "exitCode": 0, - "stderr": "", - "stdout": "" - }, - "binary": { - "data": { - "mimeType": "text/plain", - "fileType": "text", - "data": "dGVzdAo=", - "directory": "/tmp", - "fileName": "filename1747343994475", - "fileSize": "5 B" - } - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Execute Command1": [ - { - "startTime": 1747343994551, - "executionIndex": 5, - "source": [ - { - "previousNode": "Function" - } - ], - "hints": [], - "executionTime": 10, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "exitCode": 0, - "stderr": "", - "stdout": "" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Execute Command1" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:54.471Z", - "stoppedAt": "2025-05-15T21:19:54.561Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/104-snapshot.json b/test-workflows/snapshots/104-snapshot.json deleted file mode 100644 index 55034a49aa6..00000000000 --- a/test-workflows/snapshots/104-snapshot.json +++ /dev/null @@ -1,126 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "hints": [], - "startTime": 1738078143061, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Read Binary File": [ - { - "hints": [], - "startTime": 1738078143061, - "executionTime": 47, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "binary": { - "data": { - "mimeType": "application/pdf", - "fileType": "pdf", - "fileExtension": "pdf", - "data": "JVBERi0xLjcNJeLjz9MNCjI0IDAgb2JqDTw8L0xpbmVhcml6ZWQgMS9MIDgwOTUzL08gMjYvRSA1NzQyMi9OIDUvVCA4MDQzMS9IIFsgOTE2IDI5NF0+Pg1lbmRvYmoNICAgICAgICAgICAgICAgICAgIA14cmVmDTI0IDMxDTAwMDAwMDAwMTYgMDAwMDAgbg0KMDAwMDAwMTIxMCAwMDAwMCBuDQowMDAwMDAxMjkxIDAwMDAwIG4NCjAwMDAwMDE0NzEgMDAwMDAgbg0KMDAwMDAwMTYyMiAwMDAwMCBuDQowMDAwMDAyMzE5IDAwMDAwIG4NCjAwMDAwMDM0OTAgMDAwMDAgbg0KMDAwMDAwMzg2MiAwMDAwMCBuDQowMDAwMDEyODc2IDAwMDAwIG4NCjAwMDAwMTM1NjcgMDAwMDAgbg0KMDAwMDAxNDAyMSAwMDAwMCBuDQowMDAwMDE0NjE1IDAwMDAwIG4NCjAwMDAwMTQ2OTEgMDAwMDAgbg0KMDAwMDAxNDc2OSAwMDAwMCBuDQowMDAwMDE1NjczIDAwMDAwIG4NCjAwMDAwMTYzNTAgMDAwMDAgbg0KMDAwMDAxNjY1OCAwMDAwMCBuDQowMDAwMDE3NDMzIDAwMDAwIG4NCjAwMDAwMTgzMDkgMDAwMDAgbg0KMDAwMDAxOTE3MyAwMDAwMCBuDQowMDAwMDE5ODc0IDAwMDAwIG4NCjAwMDAwMjA1MTkgMDAwMDAgbg0KMDAwMDAyMTEzMiAwMDAwMCBuDQowMDAwMDIxODE0IDAwMDAwIG4NCjAwMDAwMjIxNjUgMDAwMDAgbg0KMDAwMDAyNzIxMyAwMDAwMCBuDQowMDAwMDMxMTk2IDAwMDAwIG4NCjAwMDAwMzI5MTQgMDAwMDAgbg0KMDAwMDAzMzE1NiAwMDAwMCBuDQowMDAwMDU3Mzg1IDAwMDAwIG4NCjAwMDAwMDA5MTYgMDAwMDAgbg0KdHJhaWxlcg08PC9TaXplIDU1L1ByZXYgODA0MjIvUm9vdCAyNSAwIFIvSW5mbyAyMyAwIFIvSURbPDYwOUQyNzU5RTI2NkQ5NzIyQjI5RjE5QzBEQzdGM0FGPjxGNDUxQzNGNjQ2QjI0MEQ5QjQyNTFGMjgwNUVFNjU5Rj5dPj4Nc3RhcnR4cmVmDTANJSVFT0YNICAgICAgICAgICAgICAgICAgICAgDTU0IDAgb2JqDTw8L0xlbmd0aCAyMDcvRmlsdGVyL0ZsYXRlRGVjb2RlL0kgMjQyL0wgMjI2L1MgMTQzPj5zdHJlYW0NCnjaYmBgYAaipwysDAw8rgwCDAggABRjZWBh4DjBEMBw7h9DMgODaDKTV4vCViRFCl3JCzKzjUOjfmj2NS5dc9ZDNeoHWCxcx1HkuMOl1WBVjBIdHSDaOC0DRCspuUSA+WwNILIBYTiQJ8TAqOEDpGWAWBasW5WBn1GO8YTIArcHmi+OOLozLmSJYpjD6GFmEMDgfLCQ2Z2tjCtBmEGFIWCBX+fJ/ixeJWazL0B90gugjhRmYNT0A9JMQOwCxOIMjBZaIGcB8TWAAAMAI5wxHQ1lbmRzdHJlYW0NZW5kb2JqDTI1IDAgb2JqDTw8L01ldGFkYXRhIDIyIDAgUi9QYWdlcyAyMSAwIFIvVHlwZS9DYXRhbG9nL1BhZ2VMYWJlbHMgMTkgMCBSPj4NZW5kb2JqDTI2IDAgb2JqDTw8L0Nyb3BCb3hbMCAwIDU5NSA4NDJdL1BhcmVudCAyMSAwIFIvQ29udGVudHNbMzcgMCBSIDQwIDAgUiA0MSAwIFIgNDIgMCBSIDQzIDAgUiA0NCAwIFIgNDUgMCBSIDQ2IDAgUl0vUm90YXRlIDAvTWVkaWFCb3hbMCAwIDU5NSA4NDJdL1Jlc291cmNlcyAyNyAwIFIvVHlwZS9QYWdlPj4NZW5kb2JqDTI3IDAgb2JqDTw8L0ZvbnQ8PC9GMSAyOCAwIFIvRjIgMzggMCBSL0YzIDQ3IDAgUi9GNCAyOSAwIFI+Pi9Qcm9jU2V0Wy9QREYvVGV4dF0vUHJvcGVydGllczw8L01DMSA1MyAwIFI+Pi9FeHRHU3RhdGU8PC9HUzIgMzUgMCBSL0dTMyAzNiAwIFI+Pj4+DWVuZG9iag0yOCAwIG9iag08PC9TdWJ0eXBlL1R5cGUxL0ZvbnREZXNjcmlwdG9yIDMwIDAgUi9MYXN0Q2hhciAyNTIvV2lkdGhzWzIxNyAwIDAgMCAwIDAgMCAwIDM1MiAzNTIgMCAwIDAgMzQyIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDI1NCAwIDAgMCAwIDAgMCA3MDYgNjM3IDY3NiA3NjEgNTgxIDU1NCA3MjcgMCAzNzggMCAwIDU1MSA4ODggNzQwIDc2NiAwIDAgNjU5IDUwNSA2NDEgMCAwIDAgMCA2NTUgMCAwIDAgMCAwIDAgMCA0NjYgNTM0IDQyMiA1NDcgNDM3IDMzMSA0OTIgNTUwIDI5NSAwIDUxMyAyNzggODQzIDU2NiA1MjUgNTQ3IDAgNDA0IDM4MyAzMzkgNTU1IDQ2NSAwIDQ4MiA0NjUgNDQ1IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMjE3IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDM0MiAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA0MjIgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDUyNSAwIDAgMCAwIDAgNTU1XS9CYXNlRm9udC9ETUZKQ0grTWluaW9uUHJvLUJvbGQvRmlyc3RDaGFyIDMyL0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9UeXBlL0ZvbnQ+Pg1lbmRvYmoNMjkgMCBvYmoNPDwvU3VidHlwZS9UeXBlMS9Gb250RGVzY3JpcHRvciAzMiAwIFIvTGFzdENoYXIgMjUyL1dpZHRoc1szNDEgMzY2IDQ2OCA0NzcgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCAyMjcgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDM0NiAzNDYgNTAwIDU4MCAyMjggMzU2IDIyOCAzMzEgNDgwIDQ4MCA0ODAgNDgwIDQ4MCA0ODAgNDgwIDQ4MCA0ODAgNDgwIDIyOCAyMjggNTAwIDU4MCA1MDAgNTAwIDc1MyA2OTEgNTg4IDY2NSA3MzUgNTY4IDUyOSA3MTUgNzY2IDM0MSAzMjkgNjczIDUzOCA4OTEgNzQzIDc0NyA1NjMgNTAwIDYyMSA0NzQgNjE3IDczNiA3MDMgOTcxIDY1NCA2MzQgNjAzIDM0NSA1MDAgMzQ1IDUwMCA1MDAgNTAwIDQzOSA1MDggNDIzIDUyOCA0MjUgMjk2IDQ2OCA1MzQgMjY4IDI1NiA0OTYgMjUzIDgxOSA1NDcgNTEwIDUyNCA1MTEgMzcxIDM2NyAzMDUgNTMxIDQ2MyA2ODUgNDcyIDQ1OSA0MjAgNTAwIDUwMCA1MDAgNTgwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUyMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgMzk4IDQwMSAyMjQgMjIzIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDI2OCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDcwMiA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCAzNDMgNTgwIDUwMCA1MDAgNTAwIDUxMiA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDY2MSA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDc0NyA1ODAgNTAwIDUwMCA1MDAgNTAwIDczNiA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNDIxIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTEwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTMxXS9CYXNlRm9udC9ETUZKQ0srTWluaW9uUHJvLVJlZ3VsYXIvRmlyc3RDaGFyIDIvVG9Vbmljb2RlIDMzIDAgUi9FbmNvZGluZyAzNCAwIFIvVHlwZS9Gb250Pj4NZW5kb2JqDTMwIDAgb2JqDTw8L1N0ZW1WIDEyOC9Gb250TmFtZS9ETUZKQ0grTWluaW9uUHJvLUJvbGQvRm9udEZpbGUzIDQ4IDAgUi9GbGFncyAyNjIxNzgvRGVzY2VudCAtMjQzL0ZvbnRCQm94Wy0zMTgg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MeuuSh3asP/Ko2WuPsAGI8qYQcHKxtXfFVaWIY0bvDg6JEcOTv9UFw1vyS2Il47PXba/RT6XTXl/1tHj+9d8luNzrV+z7uLcIw0npkLb87dEOxfXI9rzev7+bo5n048Vyu8vXl4YLxWXUZzhF3v8XKVcQRtr2hSviVVy1XP3lO+RnjCxu2eCfE5yRcnEmiUlsBK1orI8pXJqgcTZBds2ACOjeW4+MGvO7pg0Y+6cxRInZu3ddlnqQsQGh9VywE7Akm1Sm5Yu37R7fbI/sBNQuvCn3PzftQu/W8w5Pvv3hIVsv2cuZJdb4NzPwzmBh2s11y3uHyUiPzxEAQIMALQ6CUwKDWVuZHN0cmVhbQ1lbmRvYmoNMzIgMCBvYmoNPDwvU3RlbVYgNzkvRm9udE5hbWUvRE1GSkNLK01pbmlvblByby1SZWd1bGFyL0ZvbnRGaWxlMyAzMSAwIFIvRmxhZ3MgNi9EZXNjZW50IC0yNTYvRm9udEJCb3hbLTI5MCAtMzYwIDE2ODQgOTg5XS9Bc2NlbnQgNzExL0NhcEhlaWdodCA2NzQvWEhlaWdodCA0MzYvVHlwZS9Gb250RGVzY3JpcHRvci9JdGFsaWNBbmdsZSAwL1N0ZW1IIDMyL0NoYXJTZXQoL3NwYWNlL2h5cGhlbi9UL3Uvci9rL0ovTS9lL2QvUy9jL2kvdHdvL3plcm8vbmluZS9zZW1pY29sb24vdGhyZWUvcGFyZW5sZWZ0L3BhcmVucmlnaHQvY29sb24vc2l4L29uZS9maXZlL2NvcHlyaWdodC9VZGllcmVzaXMvQi9JZG90YWNjZW50L0EvSy9FL20vYS9sL3MvYXQvdC9iL3BlcmlvZC9nL28vdi9zbGFzaC94L24vZi9oL3cveS9wL2NvbW1hL04vTy9xdW90ZWRibGxlZnQvcXVvdGVkYmxyaWdodC9laWdodC9lbmRhc2gvai9GL2ZvdXIvcGx1XA1zbWludXMvc2V2ZW4vRC9QL2VxdWFsL3ovZG90bGVzc2kvc2NlZGlsbGEvdWRpZXJlc2lzL2dicmV2ZS9jY2VkaWxsYS9vZGllcmVzaXMvQ2NlZGlsbGEvcXVvdGVyaWdodC9PZGllcmVzaXMvWS9HL0kvVS9SL3EvVy9IL0MvZGVncmVlL211bHRpcGx5L211L0wvVi9hc2NpaXRp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ZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4xLWMwMzYgNDYuMjc3MDkyLCBGcmkgRmViIDIzIDIwMDcgMTQ6MTY6MTggICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+CiAgICAgICAgIDxkYzpmb3JtYXQ+YXBwbGljYXRpb24vcG9zdHNjcmlwdDwvZGM6Zm9ybWF0PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6eGFwPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4YXBHSW1nPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvZy9pbWcvIj4KICAgICAgICAgPHhhcDpDcmVhdG9yVG9vbD5BZG9iZSBJbGx1c3RyYXRvciBDUzM8L3hhcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhhcDpDcmVhdGVEYXRlPjIwMDgtMDYtMDlUMTY6MjQ6MzUrMDM6MDA8L3hhcDpDcmVhdGVEYXRlPgogICAgICAgICA8eGFwOk1vZGlmeURhdGU+MjAwOC0wNi0wOVQxNjoyNDozNSswMzowMDwveGFwOk1vZGlmeURhdGU+CiAgICAgICAgIDx4YXA6TWV0YWRhdGFEYXRlPjIwMDgtMDYtMDlUMTY6MjQ6MzUrMDM6MDA8L3hhcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4YXA6VGh1bWJuYWlscz4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8eGFwR0ltZzp3aWR0aD4yMDg8L3hhcEdJbWc6d2lkdGg+CiAgICAgICAgICAgICAgICAgIDx4YXBHSW1nOmhlaWdodD4yNTY8L3hhcEdJbWc6aGVpZ2h0PgogICAgICAgICAgICAgICAgICA8eGFwR0ltZzpmb3JtYXQ+SlBFRzwveGFwR0ltZzpmb3JtYXQ+CiAgICAgICAgICAgICAgICAgIDx4YXBHSW1nOmltYWdlPi85ai80QUFRU2taSlJnQUJBZ0VBU0FCSUFBRC83UUFzVUdodmRHOXphRzl3SURNdU1BQTRRa2xOQSswQUFBQUFBQkFBU0FBQUFBRUEmI3hBO0FRQklBQUFBQVFBQi8rNEFEa0ZrYjJKbEFHVEFBQUFBQWYvYkFJUUFCZ1FFQkFVRUJnVUZCZ2tHQlFZSkN3Z0dCZ2dMREFvS0N3b0smI3hBO0RCQU1EQXdNREF3UURBNFBFQThPREJNVEZCUVRFeHdiR3hzY0h4OGZIeDhmSHg4Zkh3RUhCd2NOREEwWUVCQVlHaFVSRlJvZkh4OGYmI3hBO0h4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zi84QUFFUWdCQUFEUUF3RVImI3hBO0FBSVJBUU1SQWYvRUFhSUFBQUFIQVFFQkFRRUFBQUFBQUFBQUFBUUZBd0lHQVFBSENBa0tDd0VBQWdJREFRRUJBUUVBQUFBQUFBQUEmI3hBO0FRQUNBd1FGQmdjSUNRb0xFQUFDQVFNREFnUUNCZ2NEQkFJR0FuTUJBZ01SQkFBRklSSXhRVkVHRTJFaWNZRVVNcEdoQnhXeFFpUEImI3hBO1V0SGhNeFppOENSeWd2RWxRelJUa3FLeVkzUENOVVFuazZPek5oZFVaSFREMHVJSUpvTUpDaGdaaEpSRlJxUzBWdE5WS0JyeTQvUEUmI3hBOzFPVDBaWFdGbGFXMXhkWGw5V1oyaHBhbXRzYlc1dlkzUjFkbmQ0ZVhwN2ZIMStmM09FaFlhSGlJbUtpNHlOam8rQ2s1U1ZscGVZbVomI3hBO3FibkoyZW41S2pwS1dtcDZpcHFxdXNyYTZ2b1JBQUlDQVFJREJRVUVCUVlFQ0FNRGJRRUFBaEVEQkNFU01VRUZVUk5oSWdaeGdaRXkmI3hBO29iSHdGTUhSNFNOQ0ZWSmljdkV6SkRSRGdoYVNVeVdpWTdMQ0IzUFNOZUpFZ3hkVWt3Z0pDaGdaSmpaRkdpZGtkRlUzOHFPend5Z3AmI3hBOzArUHpoSlNrdE1UVTVQUmxkWVdWcGJYRjFlWDFSbFptZG9hV3ByYkcxdWIyUjFkbmQ0ZVhwN2ZIMStmM09FaFlhSGlJbUtpNHlOam8mI3hBOytEbEpXV2w1aVptcHVjblo2ZmtxT2twYWFucUttcXE2eXRycSt2L2FBQXdEQVFBQ0VRTVJBRDhBOVU0cTdGWFlxN0ZYWXE3RlhZcTcmI3hBO0ZYWXE3RlZrOXhCYnd0TmNTTERDZ3E4c2pCVlVlSlkwQXdFZ0N5eWpBeU5BV1dHNnYrYzM1YmFZV1dYV29yaVJkdUZvcjNGVDdOR0cmI3hBO1QvaHNwbHFZRHpkenAvWjNXNWVXTWdmMHZUOSs3SGJqL25KVDh2NG1vbHZxTTQzK0tPR0lEYi9YbFRya0JxNDl4L0h4ZGpEMk4xaDUmI3hBO21BK0ovUkV0Mi84QXprbitYMHBvOEdvd0R4a2hpSS80U1Y4VHE0OXgvSHhXZnNickJ5TUQ4VCttSVpIby93Q2NmNWI2cXlwQnJVVU0mI3hBO3JtbnAzUWUzSVBoeWxDcDl6Wk1hbUI2MDYzVWV6MnR4Ym5HU1A2UHErN2RtRU0wTThTeXd5TExFNHFraUVNcEhpQ05qbHdJTzRkUEsmI3hBO0ppYUlvcjhMRjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3FkeGMyOXRCSmNYRWl3d1JLV2tsa0lWVlUmI3hBO2RTU2RnTUJJQXNzb1FNaUJFV1M4ZDgwL241TmMzLzZFOGhhZStyYWhJU2kzakl6Sld0S3hSRDRuQS9tYWc5aU13OG1xSjJqK1BoK1AmI3hBO2M5bG9mWlVSaDR1cmw0Y082L3ZQVDNEZExyWDhsdnpBODJ5cmYrZk5la2hWdmlXeFFpWjFyMkNxVmdpLzJJYklqVHpsdkw5Yms1UGEmI3hBO1BSNlFjR2t4Zy8wdVgvSGo4YVp2by81RS9scnBxcVcwMXIrVmY5MjNranlFL05GS1IvOEFDNWVOTERyditQSjBXbzlxTmJrL2o0Ui8mI3hBO1JGZnQrMU5QMForVlducUlUYTZIYWdiY1dTMFFrZ2Q2aXBPQStEMTRmc2NYeDlmazN2TkwvVE4vb244cTlTSG9MYWFKZDEyQ0lsbzcmI3hBO1ZJN2NSVUg1WWdZZW5EOWkrUHI4Vy9GbWovcGtvMW44aHZ5MjFKU1k3QjlQbElJOVd6bFpQK0VmMUkvK0Z4T2xqMDIvSG01bW05cWQmI3hBO2JpNXk0eC9TSDZkajlyQ0xyOG5mekk4blN0ZmVSZGNlNWhVOGpZc3dpZHFiME1ia3dTL1RUNVpRZFBPRzhmc2QzRDJoMFdzSEJxOFkmI3hBO2lmNTNQN2ZxQ2IrVWZ6OVZiNGFMNTVzbTBiVWtQcHRkOEdTTGwwL2V4dDhVZGZIZGZrTW5qMVhTWDQ5NC9IdWNUWCt5dnA4WFNTOFMmI3hBO0hkMStCNi9mNzNyOE0wTThTVFF1c3NNaWhvNUVJWldVaW9JSTJJT1pnSU80ZU9sRXhOSFloZmhRN0ZYWXE3RlhZcTdGWFlxN0ZYWXEmI3hBOzdGWFlxN0ZYWXE3RlhZcWd0YTFuVGRGMHk0MVBVNTF0N0syWG5MSzMzQUFkU1NkZ0IxT1JuTVJGbHYwMm1ubW1NY0JjcFBCTG05ODUmI3hBOy9uVHJiV2RsejByeWRaeVZrZGdTcG9kaTlLZXBNUnVFcnhYOFRnRXl5bnkrNTc2R0xUZGk0dUtYN3pVeUg0cnVqNTh5OWEwalFmSW4mI3hBOzViYUE4b2FLd3QxQUYxcUZ3YXpUTjI1TlRreDhFVWZJWmxSakRFTEx5V28xV3I3U3pWdk05SWprUHgzbjV2Sy9PUDhBemtyZVNTU1cmI3hBOzNsUzBXR0ViRFVMc2NwRDdwRDlsZmJrVDhobVBQVXlQTFo2cnM3Mk1pQUphaVZuK2JIbDhUK3F2ZXhTTHl2OEFuVjU1cFBjcmZUMnMmI3hBO2dxSkx5WDZ2QnhKNnBHNVJTUDhBVVhLUkNVOTZKL0htN2FXdDdMME8wZUFTSDgwY1IrZS8ybE9MWC9uR1R6bElnYTUxR3dnSk82cTAmI3hBOzBoQS81RnFLNVorV241T0hrOXROTUQ2WVRQeUg2V3J2L25HWHpuR2hhMjFDd25JT3lGcFl5UjdWakkvSEg4dFB5WEg3YWFZbjFSbVAmI3hBO2tmMHBQSm9INTErUTZ6d0MvdHJTS2xaTGFUNnpiVUhRc2ltUkFQOEFYWEsrR1VOOXc1ZzFYWmV2MlBBWkh2SERMNTdINUZtSGszL24mI3hBO0pXWVBIYStiTFFOR2RqcU5vS01QZVNIb2Zjb1IvcTVkRFVrZlZ1NmZ0SDJNRkdXbmwvbXkvUWYxL042ZHIzbGJ5TitZK2hSM0RHSzcmI3hBO2prVS9VOVV0aVBXaVArUzNzZXFNUG96SWxDR1FXSGw5THJ0VjJkbEkzaWVzVHlQNDd3OG8wN1dmT1A1TmE1SHBXczg5VDhwWGJINnYmI3hBO0tsYUtLN3ZEeXJ3ZGVyUlZvZnh6RmpLV0kwZVg0L0g0dDZ6TnA5TjJ6aU9URjZOUkhuKzN2SGRMK3g3N3BlcVdHcTZmYjZqcDh5M0YmI3hBO25kSUpJSms2TXAvVjRFZHN6NHlFaFllQXo0SjRwbUV4VW84d2lzazFPeFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1SkFCSk4mI3hBO0FOeVRpcjU4OHk2bHFuNXUrZTE4dDZSTTBYbGJTMkwzRnl2MldDbmkwNThTMzJZZ2ZuNDVycHlPV1ZEbCtOMzBQUlljZlpHazhmSUwmI3hBO3p6NUQ5SDZaZko2cnJXcytWUHl6OG5SMGpFTm5hcjZOalpJZjNrOHBGYVZQVXNmaWRqODh5cFNqaWk4cHB0UHFPMDlTZDdsTGVSNkEmI3hBO2Zqa0h6eVc4L2ZtOTVvSUc4VVo2ZkV0cFp4SHg2N21udXpaZytxY3U4dm9sYVRzakI1LzdLWi9Id0QxM1QvS241WGZsVHAwV29hek0mI3hBO2x6cTFLcGN6cUpKM2NmOEFMTkFPWEFlL2J1MlpQQkRIdkxjdkg1ZGZyKzFabUdJY09QdUd3L3pwZGZ4UVliNWsvd0NjbXRabmQ0dkwmI3hBOzJuUldjTmFMY1hmNzJVang0S1ZSVC93V1FscVpIbHM3clIreGVPSXZOTXlQZEhZZlBuOXpDTHo4NS96TnVwQzc2N0xIdlVMQ2tVU2omI3hBOzJvaUwrT1VuSkk5Uzd6SDdPYUdBb1l4OGJQM2x1ei9Pajh6YlIrU2E1TElPNnpKRktEL3dhSDhNUmtrT1JLTW5zNW9aamZHQjdpUjkmI3hBO3haejVaLzV5YTFPSjBpOHg2YkhjdzlHdWJPc2NvOXpHNUtOOUJYTG82cVE1N3VpMXZzWEFpOEV5RDNTM0h6NS9leTNVL0pQNVkvbWwmI3hBO3BzbXFhQlBIYWFwVDQ3bTNVSklybnRkVy93QVBML1cySjdOVEorSERKdkhZdW93ZHBhN3N1WXg1Z1pZKzQ4djgyWDQ5enlXMHZ2UHYmI3hBOzVRK2FHZ2xRaUdRMWtnSkp0THVJYmMwYnhIaVBpWG9mRE1jR1dPWGNYcnNtTFNkcjRMSFB2L2lpZng4QytoYkc4OG8vbWQ1TUplTVgmI3hBO0ZoZERqUGJzUUpyZWRmY1Y0dW5WVDNIc2N6UVk1WS9qWjg3eTQ5UjJacWVkVGp5UFNRL1NDOHM4bDZ6cW41VitlWmZKK3ZTdEo1ZTEmI3hBO0J3MWxka1VSVEllS1RyNEszMlpCMk8vYmZHeHpPS1ZIbCtOL3graDZydExUNCsxZEtOVGhGWm9mVVBkekg2WXZvSE5nK2ZPeFYyS3UmI3hBO3hWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3ZNdno3ODZTYUQ1VEdtV2I4ZFMxc3RicHhQeExBQisrWVUzcWFoQjg4eGRWa29WMy9jOVAmI3hBOzdLOW1qUHFPT1gwWTkvajAvWDhFei9LM3lmYWVTUEpLdGU4WWJ5YVA2N3E4NzdjQ0U1Y0NmQ0pOdm5VOThsZ2h3UnN1TDI1MmhMWGEmI3hBO3IwN3hCNFlEOGQ1L1E4STh3NnJybjVzZm1IRmFXTlZ0V1l3NmZHMWVFRnNwcTh6Z2R5UGliNkI0Wmh5a1p5OTczdWt3WXV5ZEdaVCsmI3hBO3JuTHpsM0Q3aDgzcnZtYnpCNWMvSi95ZmI2Um84S3phdGNLVEFqVTVTU1VvOTFjVTNwWG9QOWlLQWJaTXBERUtIMVBJYUxTWnUyTlMmI3hBO2NtUTFqSFB5SDgyUDQ4M3pacmV1YXJybXBUYWxxdHk5MWVUbXJ5dWUzWlZIUlZIWURZWmhrM3pmU3ROcGNlQ0FoakhERUlIQTVEc1YmI3hBO2RpcnNWVEhRUE1Pc2VYOVRpMVBTYmxyVzdoT3pLZG1IZFhYb3ludURoQkkzRGphdlNZOVJqTU1nNG9uOGJQcEhSdFc4c2ZuSjVLbTAmI3hBOy9VWTF0OVl0Z0RNaTd2Qk5TaXp3azdsRzdqL1luc2N6SWtaWTBmcUg0L0g5ajVycWRQbjdHMVFuQTNqUEx1a1A1cDgvN1hrbms3ekImI3hBO3JmNVdlZjV0TzFRTXRrWkJCcWtJcVZlSTdwUEdPNVVIa3ZpS2p2bU5DWmhMNy94OXoxL2FPa3hkcTZRVHgvVlZ4UG4xaWZ1KzE3ZCsmI3hBO2NQa21Eemg1TmU0c2xXWFVyRkRkNmJLbnhHUmVQSjRsSTZpUmVudlRNdlVRNG84UTZmYzhQN1BkcEhSNm1wYlFsNlplWG44UHV0VC8mI3hBO0FDTjg2TjVrOG1Sd1hMbDlTMGdyYTNMSGNzbFAzTWgrYWloOTFPT21uY2E3bVh0UDJiK1cxSk1mb3llb2ZwSDQ3M29tWkx6anNWZGkmI3hBO3JzVmRpcnNWZGlyc1ZkaXJzVmRpcnNWZURYa2YrTnYrY2hGdHBBWk5NOHVBRjBPNi93Q2kwWTFIVGU1a0NuMnpYbjE1Zkw5WDdmdmUmI3hBOzl4bjhsMlB4RDY4MysrLzQ2RS8vQU9jalBOYjZYNVRoMGEzZmpjNnpJVmxwMUZ2RFJwUCtDWXFQbFhMZFZQWUJ3UFpEUURMcURsUDAmI3hBOzR4L3NqeS9TZ2Z5SzBDeDhzZVI3L3dBNmFwUkh1NDNsRG1sVXRJSzdDdmVSMUo5L2h5R0FDTVRNdC90UnFwYXJWUjB1UCtFZ2Y1eC8mI3hBO1VQMHZDdk4zbWUvOHplWWJ6V2IwbjFMbHlZNDZraU9JYkpHdGV5ci9BRnpHSkpObDd2cy9SUTB1R09LUEtQMm5xVW53T2E3RlhZcTcmI3hBO0ZYWXE3RlUrOGorYmIzeXA1bHROWnRTU0ltNDNNSTZTd04vZVJtdmlPbmdhSEpSa1ltdzRIYWVnanE4RXNVdXZMeVBRdmF2K2NndkwmI3hBO2RscmZsYXc4NjZaU1UyNlIrck1vL3ZMTzRvWTJQK283aW4rc2N5ZFJHd0poNG4yVDFrc0dvbHBjbTEzdDNTanorWSs1UFA4QW5IcnomI3hBO1Urc2VTdjBiTzVlNjBSeGIxUFV3UFZvZnVveUQyWEo2V2RnanVjRDJ0MFBnNnJqSDA1QmZ4Ni9yK0xGdkxLRHlUK2Z0N295ZnV0TTEmI3hBO3dONkNEN0lFdzlhS2xmNVpGYU1aVEQwWks2Y3ZueS9RN1hXbjg3MlJITHpuaTUvRFkvWlJlOVpzSGdYWXE3RlhZcTdGWFlxN0ZYWXEmI3hBOzdGWFlxN0ZWc3NpUlJ2STVvaUFzeDYwQUZUMHdFMExURUVtZzhRLzV4dmhOL3FIbWp6RlB2UGRUSWdKMzNrWjVwTi9jbGN3ZElOeVQmI3hBO3pBL0gzUGMrMk12RGhod2psRWZkUUg2V0lmOEFPUWQ5UHFuNWxKcGNacWJPQzN0WTA3ZXBQKzlyOVBxcmxlcGw2ejVPMzlrOFF4YUUmI3hBOzVEL0VaSDREYjlEUC93QStidUx5NytXV25lWGJOaXFYTHcyWUErR3R2YXB5YnA0c3FaZHFQVEFSL0d6ei9zdGpPbzEwczB1bHkrTWomI3hBOy9hK2E4eEgweDJLdXhWMkt1eFYyS3V4VjJLdnBmOG01bDgxL2xCZStYN284Mmcrc2FlT1haSkU5U0p2OWlaS0QvVnpMd2ppeG1QNC8mI3hBO0Z2bVh0Rkg4cDJqSE5Icnd6K1d4Kzc3V0IvOEFPTjJweTJYbnU2MDE2cXQ5YVNLeUhiOTdBd2NiZXk4eGxXbWw2eDUvMnUrOXNjSW4mI3hBO3BJekg4TWg4aitBeWYvbklGVHBQbS95ajVsaitHU0dRbzhuZ0xXWkpsQjl2M2paUFY3U0I4dnVkWjdKbnhkUG53SHFQOTBDUDBCN24mI3hBO21lOEk3RlhZcTdGWFlxN0ZYWXE4Mzg5Zm4xNU84a2E2MmphN1o2akhjK21zMFVzVUVieFN4djBlTmpLdFJVRlR0MUdLc2QvNkcyL0smI3hBO3ovZk9wLzhBU1BIL0FOVnNWZC8wTnQrVm4rK2RULzZSNC84QXF0aXJ2K2h0dnlzLzN6cWYvU1BIL3dCVnNWVUwvd0Q1eW4vTFBVYkcmI3hBOzQwK0NMVWhQZVJQYnhGN2VNTHpsVW92SWlVN1ZPUXlSNG9rZDRiY0V4REpHUjVBZ3BSNVMvTURRZnlYZ3UvTEhuR0s1L1RGMUtMNVImI3hBO1pLazhRZ2RGalNyRjQvaTVSdlVmTEt0UGpNUnZ6ZDc3U2RwNDlabmpMSGZER05iN2IyZjJKWHFPbDNubUhXVy9PQzJpSjhscmNwcU0mI3hBO2hkbFc3K3JXRWl4emdSVlB4VmdZS09YaGxFc01qUGx0YnQ5SjdRYWZGMmQ0Ry9pY0VoeTJzM1gzcGo1czErSDg4WkxPMzhqeFRjdEMmI3hBO0VzbW9KZjhBQzNCRjBVRVJTalNjcWVpOWZETGRUak1xb1c0SHN4MnRnMFp5ZUxmcTRhb1h5dS92Q1EvOUM3L21UL3ZpMS82U0YvcG0mI3hBO040TSs3N3YxdldmNkx0RjN5LzBxMlgvbkh6OHhZbzJsbGp0STQwQlozYTVRS0FPcEpQVEFjTXh6SDNmclRIMnMwWk5BeXY4QXFzQzEmI3hBO2JTLzBiZEcyTjNiWGNpMUR0YXllcWdJL3l3QXJmN0VuS2dYZjZmUDRrZUxobEgrc0srem44MEZoYjNZcWo5RzBnNnBkQzFTN3RyU1YmI3hBO2lBaHU1UFJRay84QUZoSEFmN0lqQVM0K3AxSGhSNGpHVWgvUkYvWnpaMm4vQURqMytZMGlLNlJXam80REt5M0NrRUhjRUVETFJobWUmI3hBO24zZnJkQ2ZhM1JBMFRML1NydjhBb1hmOHlmOEFmRnIvQU5KQy93Qk1QZ3o3dnUvV2ovUmRvdStYK2xaQjVVODFXZjVJQzYwenp2Rk4mI3hBOzYrc2NMbXlXd0NYQ2hJdVNPWEphT2hKSXpKMDJPVWJKMmVROXB1MWNPc25BNHI5SU4yS1N6UXRNdmZKT3JXbjVxNm5HdzhuVEY3cUwmI3hBOzBXVjdsb05TaVlXd01OVkZmM3lGaFhiSzhPR1VaQ3hzSFpkcCswR216NkR3UmZpVkRwMUJGL2NVeTgxK2N0Sy9PMDJ1aCtTb2JqOUkmI3hBOzZaNmw5Y0MrUklJL1JQR0kwY08veGNuWGFuNnNzMU9NeW9oMWZzMTJyaTBlU1p5M1VvOU4rcWVXdi9PV1g1WVIyMFVja2VwdElpS3ImI3hBO3Q5WGpOU0JRbXBseklpS0FCZWRtUVpFaFUvNkcyL0t6L2ZPcC93RFNQSC8xV3lUQjMvUTIzNVdmNzUxUC9wSGovd0NxMkt1LzZHMi8mI3hBO0t6L2ZPcC85SThmL0FGV3hWazNrSDg4L0tQbnJXVzByUXJUVUdtamlhYWVlYUJFaGpRYkRtNGthbkk3QVV4VjZKaXJzVmVlZm5iK1YmI3hBO2x0K1lIbFI3ZUZWVFhiRGxOcEZ3MUI4ZFBpaGMvd0FrdEtleG9lMkt2aFM3dExtenVwclM2aWFDNXQzYUtlR1FGWFIwUEZsWUhvUVImI3hBO2lsU3hWMktyNFpYaG1TVlB0eHNIV3ZpcHFNVmU1ZjhBT1cwYVhIbTd5L3JVUUl0OVIwaVAwMnAxNFRTU2RmSGpNdUtBOUcvSThONWkmI3hBOy93Q2NiOVQwT01lcEpIRnFtbklnb1NIbVJwbDdkYTNBSXJpcnozL25FRFdZclh6M3FtbHlOeC9TTmdXaUg4MGx2SXJVL3dDQWR6OUcmI3hBO0tsOVMrWi9NK2orV2RIbTFiVnBoRmJSQ2lxTjNrYy9aampYOXBtL3oyeUdUSUlDeTVlaTBXVFU1Qmp4aTVIN1BNdmxUOHdmelg4eWUmI3hBO2NiaDQ1cERhYU9HckJwc1RIaFFkREtkdlViNTdEc00xczhobWQzMWZzbnNMQm94WUhGazZ5UDZPNWhXUWQyN0ZYWXE3RldkZmwzK2ImI3hBO3ZtUHlmY0pCemErMFVuOTlwOHJINFI0d3NhOEc5dWg4TytXWThoaHlkRDJ2MkJoMWd2NmN2ODRmcDcvdmZWUGx6ekhwSG1MU0lOVjAmI3hBO3FjVDJrNDJQUmtZZmFSMS9aWmU0ell3bUpDdytVNnpSNU5Qa09QSUtrUHhZOG55Yi93QTVhNnVML3dETXkxMHlHcm5UYkNHSjBGU2YmI3hBO1duZDVhQWU2T21UY2NQU3YrY2ttL1FYNUhhUm9idCsrYVd4c1NvSXFSYlFNN0gzQU1ReFE4Ky81eFZMMk54NTA4d1ZLeDZYcE5XZnMmI3hBO0N4YVlkUVIveDduRlM4SHhTN0ZYWXFpTlAwKzkxRyt0N0N4aGE0dkx1UlliZUJCVm5rYzhWVUQzSnhWOTRmazUrV05uK1gvbEtMVHgmI3hBO3hrMWE3NHo2dmRMKzNOVFpGUDhBSkVEeFg2VDN4UXp2RlhZcTdGWHpUL3psTCtVUE5IOC9hSkQ4YUFMcjF1ZzZyOWxMb0FlR3l5ZlEmI3hBOzM4eHhWOHhZcGRpcnNWZTgvbUtQOFdmODQ2K1RQTTBaOVM1OHVQOEFvdSs4VVNndCtUSDNNTUovMldLRXkvNXc5ODJKYjZ2clBsYWQmI3hBO3dCZlJyZldTbnZKRDhFcWozWkdVL0pjVkxDL00wTjUrVXY1OHRlMjhUQzB0YjBYdHJHdTNxMk4xWG5Hdit3ZDR2bU1Vc2cvTjd6N2UmI3hBO2ViUE5NdytPTFM5T2Q3ZXh0WEJVamlhUEk2bm83a2ZRS0R0bXJ5ejRwVyt1K3p2WmtOTnB3ZWM1Z1NKKzRmQmcyVnUvZGlyc1ZkaXImI3hBO3NWZGlyUHZ5ZC9NSzc4cCtaRWhrRWsrazZpeXhYZHJHQzdCanNrc2FEcXluc09vK2pMY016R1E4M25QYWJzeUdvMHhueW5qQmtENUQmI3hBO21QeDFZNytYRmxlL21oK2V5NnRlUjF0MnZHMWUvVTFaVXQ3ZGdZb2p2OW12cHhkZW1iTjhtWlAvQU01ZmViSTczelJwZmxxQnFycEUmI3hBO0RYRjJCL3Y2NjRsVlArckVpbi9aWW9DaDVWRGVVZjhBbkdMekRyRWhNZDU1dXV2cU5uMjVRbjl5dy80QmJnNHE4RnhTN0ZYWXErcWYmI3hBOytjWFB5aE5qYXA1NzF1Q2w1ZElSb2NEamVPRmhScmdnL3RTRFpQOEFKMy9hR0tIMFZpcnNWZGlyc1ZXWEZ2QmN3U1c5eEdzc0V5TkgmI3hBO0xFNERLeU1LTXJBN0VFR2h4VjhNZm5wK1ZNM2tIelV5MnFzM2wvVWkwMmxUR3A0Q3RYdDJQODBaTzNpdEQxcmlsNXRpcnNWZTQvOEEmI3hBO09PT3NXR3NXWG1MOHNOWWs0MlhtUzNlWFQyWTdKZElsSDRpb3F4VlZrSC9HUEZCZWFhZGVhLzhBbDM1L2p1Q25wYXY1ZnZDc3NSSkMmI3hBO3Y2WktTSlgrU1ZDUlh1cHhTK3BmekJrL0xYelZaZVF2ekN2cHFXY2QvRDZiaFE1ZUpnMGp3enFEMGhtaUhQclQ0aCsxbFdYS0lWYm4mI3hBO2RuOW5aZFhLVWNmT01UTDludktUL256K1Y1ZHBQT21oSUpZSmdKTlZoaStMcVA4QWVsT1BWU1B0L3dEQmVPWXVmRlhxSEl2WmV5M2ImI3hBO2RWcGN1eEgway83bjlYeWVGWmpQZU94VjJLdXhWMkt1eFY3NytSWDVZZm8rTWVkZk1LQ0FSeHRKcHNNM3crbWxEeXVaT1ZPUHcxNFYmI3hBOzdmRjRaazRNZjhaNUQ4VytmKzFIYmZpSDhyaDMzOVJIWCtpUDAvTHZSZjVmWFg1Y2VSL0tYbkh6NXB4SnM1OVJ1U29ZQkc0STFiYTAmI3hBO2g2bWptUUZhL3dBd3Iwekx4WlJNV0hrZTBlejhta3lDR1Q2akVINS9xNVBsNktQekQrWWZuMEtQMzJzK1lMd2xxRDRWTWhxeDlraVQmI3hBO2YyVVpZNEwwZi9uSmJYOU90cnpSUHk4MFZ2OEFjWDVVdFVqbXBUNHJsMFVBTVJzV1NNQW4vS1pzVUI0bmlsMkt2VS95Qy9LV1R6MzUmI3hBO24rczM4Wi93M3BUTEpxREdvRXo5VXRsUCtWMWZ3WDNJeFY5dlJ4eHhSckhHb1NOQUZSRkFDcW9GQUFCMEF4UXV4VjJLdXhWMkt1eFYmI3hBO2pYNWllUk5KODhlVmJ2UWRSSEgxUnp0TGtDclFYQ2crbkt2eUpvUjNGUjN4VjhDZVpmTG1xK1c5ZHZORTFhRXdYOWpJWTVVN0dtNnUmI3hBO3A3cTYwWlQzR0tVc3hWRjZScXQvcEdxV21xYWZLWUwyeWxTZTNsSDdMeHNHSDBiYmpGWHUzNXI2SFkvbWQ1SnRmelU4c1FnNnJheEwmI3hBO2IrYXRPajNkV2lVQXljZHlmVEhmdkhRL3NuRkRFZnlvOHQrWmZOM2xuWHRMMDY0ZVpORmFIVUxiU3p1SGVZUEhONmZnNVZGMjcwcDEmI3hBO3pHMU9NeUZqbzlKN005cHcwdW9QaWJRbUt2dTd2ZzlOL0tYODU1UEx2RHkxNW9ESFNZeVlvYmxsSmt0VFdoamtXbFRHRFh0VmZsMHgmI3hBOzhPYmgyUDB2VDl2ZXpnMUg3L0IvZWN5T2t2TWVmM3NsODlma1BwSG1DTTY5NUt1WUludVI2djFRTURhUzEzNVF1dGVCSjdmWi93QlgmI3hBO0p6MDRJdUhKMW5aZnRUazA1OEhWQW5oMnYrSWU4ZGZ2OTd3N1gvS2ZtVHk5Y0dEV2RQbXNuclJXa1UrbTMrcElLbzNUc2N4aUNEUmUmI3hBOzYwbXZ3YWdYaWtKZmY4dWFVNEhMZGlxY2VYdkovbWJ6RmNDRFJ0T211eVRScEZXa1M5dmprYWlMOUp3Z0VtaHU0V3I3UXdhY1hsbUkmI3hBOy9mOEFMbTl6OGova2JvWGxhSC9FUG5TNmdubXRSNnZvTWFXa0ZOK1VqTlQxR0h5NCt4MnpLaGdFUmMzaGUwL2FmTHFqNE9sQkFsdGYmI3hBOzhSOTNkOS91WWorYkg1dzNmbTJmL0RubHBaUDBSSTZvenFyQ2E4ZXRGVUtQaUVkYVVXbFQzOE1xelp1UGJvN2ZzSDJlanBCNCtldkUmI3hBOyt5SDdmUG84MC9OL3k1NWs4bzZSb09oYWpka1JhZ3NtcXphYXV5UlRta0s4elg0blZGcDdWSUdaV254bU1kK3J5WHRIMm5EVjZqaWgmI3hBOzlFUndnOSs1M1pyK1crazJuNVMvbDlkZm1UNWdpWC9FbXJSRzM4c2FiS1BqVVNDb2RnZHh6SHh0NElLZFdwbVE4KzhDMURVTHpVYismI3hBOzR2NzJWcDd5N2tlYTRtYzFaNUpHTE14UHVUaWxENHFuSGxIeXJxM21yekZaYURwTWZxWGw2L0JTYThVVWJ2STVIUlVVRW5GWDM1NUYmI3hBOzhsNlI1TThzV2VnYVd2N2kyV3NzeEFEelROL2VTdlQ5cGo5d29PZ3hRbitLdXhWMkt1eFYyS3V4VjJLdkZmOEFuSkw4b1I1cjBML0UmI3hBO2Vqd2N2TU9reGt5Um9QaXViVmZpYVAzZVBkaytrZHhpcjQyeFM3RldiZmxSK2FHcStRUE1JdllBYm5TcnVrV3JhY2QxbWhyMUFPd2smI3hBO1NwNEg2T2hPS3ZwUHlEL3lySHl2cnNubTN5N2ZwRjVZODZCWUk0NmNZck85Z0pjeFBYKzZEaVEvQ3crRWorVWlsZVRLSUVYMWN6U2EmI3hBO0RMcUJJNHh4R0FzanJYbDdtUS9tVCtTK2grYjFiVXRQWk5QMXhoeSt0S0t3ejdiZXNxOS84dGQvR3VWWmRPSmJ4NXU0N0c5bzh1ajkmI3hBO0UvWGk3dW85MzZ2dWVLeFhuNXFmbFZxSHBNSmJXMVovN3FRZXRZeis2bjdOVC9rbFc4Y3d3WlFQYzl0TEhvTzFZWHRLWHltUHg4UTkmI3hBO0UwWC9BSnlXMEM4ZytyZVpOSGtoNWpqSzl2eHVJVzl6SEp3WUQyK0xMeHFiRlNGL2p1L2E4N3FmWXpOQThXRElENzlqOHgreEhuelAmI3hBOy93QTQ0YXFwbG5nc0lwRFF1cldVa0RWcWVwU05RVDhpY0psaEkzRmZQOURqL2t1MnNXd015UDY0UDNseSthLytjY3RJQW10b0xDV1UmI3hBO1ZLQkxLU1ovb1o0eUFmbVJnRXNJR3d2NS9wVTZIdHJOdEl6QS9yZ2ZjVXQxei9uSmZScldBMjNsblIza0tqakZKZGNZWVYrVVVaWmkmI3hBO1BhcTRuVTBLaUsvSDQ2dVRwZll6TE04V2ZKWHUzUHpQN1hueGI4MVB6VjFBQ2t0emFxMjIzbzJFSC9HdGZ2YktQVk05NWVoclFkbFEmI3hBOzZSbDg1bjhmQVBiL0FNdC95ZDBIeVpIK2tMdDB2OWFDa3ZmU0RqSEFLZkVJVlAyZmR6djhodG1aaXdDTzU1dkQ5c2UwT2JXbmdqNmMmI3hBO1g4M3FmZjhBcTVNVTg5VGZsaHIydWY4QUt3Zk1GNHQxNWM4cEo5UnRyVUtDdDdxSlByY0VxZjNxcXJMUmVoTlNUd0c5dVBLSlhUcU4mI3hBO1pvTXVtNFJrRlNrTHJxQjV2bXY4MFB6TDFyOHdQTWo2dGY4QTdtMWlCajA2d1ZpeVFRMTZiOVhicTdkejdVR1dPSXcvRld3Q1NBQlUmI3hBO25ZQVlxKzAvK2NkZnlqSGt6eTcrbU5WaDQrWmRYUldtVmg4VnRibWpKQjdNZnRTZTlCK3ppaDYvaXJzVmRpcnNWZGlyc1ZkaXJzVmQmI3hBO2lyNCsvd0NjbVB5aS93QU5hMGZOV2p3Y2RDMVdRL1dva0h3MjEyMVNSUWRJNWVxK0JxUERGTHczRlhZcXlUeU5xTUs2MWE2VHFWN0omI3hBO2E2RnFGeEdsNlZJS1J1UVk0N2dxMjM3b3ZVOStOUlhmSzhtUGpGT3c3TTdSbm84d3l3MzZFZDQ3dngxZlJsdHJuNXBmbEpJdG5xOXYmI3hBOyttL0t5dHhobUJZb2lrN0NPV2hhSTdmWWNVOFBITUlTbmkyNmZaK1B4VDJVOU5vTzFoeFl6NFdmcVAxanI3eHYzdlN2THY1ci9sNTUmI3hBO3R0ZnFyWGNVTTB3cExwdW9oVUo3OGZqckhKL3NTY3lSbmhJVWZ0ZVoxbllXczBrdUxoSkEvaWoremNJZlcveUovTGZWV2FSYkJ0UGwmI3hBO2NmM2xqSVlodjNFYmM0aDlDNG5UUVBMWnMwM3RScmNXM0Z4aitrTCszWS9heFc1LzV4ZjBGaWZxMnQzVVk3Q1NPT1QvQUlqNmVWSFMmI3hBO0hvZnMvYTdXSHR0bS9peHhQeEkvVzNiZjg0ditYMUkrdGExZHlqOW9SUnh4ay9MbDZtSTBoNm43UDJyUDIyemZ3NDRqM2tuOVRLOUYmI3hBOy9JMzh0OUlZVEhUemZTcHVKTDZReWdVOFUrR0w3MXl5T21nT2U3cWRUN1RhM050eGNJL29pdnQ1L2FxZVpmemQvTDd5cGJtMlM2anUmI3hBO3JpRmVNV25hZUZmaVIreVN0STQvcE5mYkdXZUVSUTM5ekhSZGdhelZuaTRURUgrS1g0c3ZOYmpVUHpSL051UXcyc1g2Qzhva24xSmkmI3hBO1dFYklEdnpjOFduSS9sV2krTk91WTVNOHA4dnNlbGppMEhaQXVSOFhVZmFQK0orTzc1djg0NnRGZGF0UFphZmRTM0doV00waWFZSkQmI3hBO1FNbGVKbTREWU5OeDVINkIyR1p1UEdJQ25pKzBkZlBWNWpsbnpQVHVIY2tPV09DN0ZYdm4vT01QNVFqWE5VWHpuclVITFNOT2twcGsmI3hBO0xqNFo3cEQvQUhsRDFTRS9lL3lJeFErdDhWZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkaXFYK1lOQjB2WDlGdk5HMVNFVDZmZlJtS2VNK0ImI3hBOzZFSHN5bWpLZXgzeFY4RGZtWCtYK3FlUlBOZDFvZDhDOFMvdmJDN3BSWjdkaWVFZzk5cU1PekE0cFlyaXJzVmZaSC9PT1g1c1dubTcmI3hBO3kwdmxiV3BGZlh0TWg5SUpMUS9XN1JSeFYvaSsweUQ0WkI4bTdtZ0l2bW9KQnNNbDh6L2tMNUMxdDVKN2VCOUp1M3FUSlprTEdXUGMmI3hBO3dzQ24vQThjeDU2V0o1YlBSNkwycDFlQUFFK0pIK2x6K2ZQNTJ4QmZ5WC9OUFFLanl2NXNyYnJzdHU4azF1S2R2M1k5YUtveW44dE8mI3hBO1BJL0xiOGZOMjU5bzlCcVA4WXdiOTlBL2JzVlFRLzhBT1VGbWhWWkliMENnV3BzSy9PckNNbjZjUU0zbjlqRXk3Q21lUmovcC93QnImI3hBO2piLzg1UDNpaFhtaHNnYWhnRFlBL2Vna1AzSEVqTnkzK3hSUHNLSFF5LzAvN0ZoL0pQOEFNelhpditLdk5wOUEvYWdqZWE0Rk80NE4mI3hBOzZNWUp4L0xUbHpQNmZ4ODJYK2lUUTZmL0FCZkJ2MzBJL2J1V1krVi95SjhnNkU2VHkyemFyZUpRaWE5SWRBUnY4TVFDeC84QUJBNWQmI3hBO0RTeEhQZDAydTlxTlhuMkI4T1BkSDlmTmhuL09TLzVzMjNsenkrL2t6UnBGR3M2bkQ2ZDM2VzMxV3pZVUkyNlBLdndxT3kxTzN3NWsmI3hBO2dVODhTU2JMNUN4VjJLc3gvS3I4dWRSOC9lYmJmUjdibEZaSlNiVTd3Q29odDFQeEh3NXQ5bEI0KzFjVmZlMmo2UnAyamFWYTZWcHMmI3hBO0MyOWhaUkxEYndyMFZFRkI4ejRrOVR2aWhHWXE3RlhZcTdGWFlxN0ZYWXE3RlhZcTdGWFlxODgvTzM4ckxiOHdQS2oyOEtxbXUySEsmI3hBO2JTTGhxRDQ2ZkZDNS9rbHBUMk5EMnhWOEtYZHBjMmQxTmFYVVRRWE51N1JUd3lBcTZPaDRzckE5Q0NNVXFXS29yU3RWMUhTZFJ0OVMmI3hBOzAyNGUwdjdSeExiM0VSb3lNTzQvaU8rS3ZycjhwdjhBbkpueTk1amhnMHZ6VkpIbyt2YklMbGp3dExocTBCVmovZE9mNVdOUEE5c1UmI3hBO1BiMVlNQXlrRlNLZ2pvUmlyc1ZkaXJVa2lSbzBrakJJMEJaM1kwQUEzSkpPS3ZDZnphLzV5ZDBQUW9adEo4blNSNnJyUnFqMzYvSGEmI3hBO1c1OFFla3plSEg0ZkVuN09Ldmt2VU5RdnRTdnA3Ky9uZTZ2YnAybHVMaVZpenU3R3BaaWNVb2ZGVVJwK24zdW8zMXZZV01MWEY1ZHkmI3hBO0xEYndJS3M4am5pcWdlNU9LdnZEOG5QeXhzL3kvd0RLVVduampKcTEzeG4xZTZYOXVhbXlLZjVJZ2VLL1NlK0tHZDRxN0ZYWXE3RlgmI3hBO1lxN0ZYWXE3RlhZcTdGWFlxN0ZYWXErYWYrY3BmeWg1by9uN1JJZmpRQmRldDBIVmZzcGRBRHcyV1Q2Ry9tT0t2bUxGTHNWZGlyTHYmI3hBO0tYNXMvbUg1VFZZdEUxdWVDMVhwWnljWjdjRDJpbERvdit4QU9LdlJySC9uTDc4eG9ZdUYxcDJsM1RDbEpUSE5HeDhlWEdYajl3R0smI3hBOzAxZi9BUE9YdjVqenhjTFhUOUx0R05heWlLYVJoOHVjdkg3MU9LMDgzODIvbW4rWUhtME5IcjJ0VDNOc3hxYk5Dc052dDAvY3hCRU4mI3hBO1BFaXVLc1V4VjJLdXhWOVUvd0RPTG41UW14dFU4OTYzQlM4dWtJME9CeHZIQ3dvMXdRZjJwQnNuK1R2KzBNVVBvckZYWXE3RlhZcTcmI3hBO0ZYWXE3RlhZcTdGWFlxN0ZYWXE3RlhZcXN1TGVDNWdrdDdpTlpZSmthT1dKd0dWa1lVWldCMklJTkRpcjRZL1BUOHFadklQbXBsdFYmI3hBO1p2TCtwRnB0S21OVHdGYXZic2Y1b3lkdkZhSHJYRkx6YkZYWXE3RlhZcTdGWFlxN0ZYWXE5VC9JTDhwWlBQZm1mNnpmeG4vRGVsTXMmI3hBO21vTWFnVFAxUzJVLzVYVi9CZmNqRlgyOUhISEZHc2NhaEkwQVZFVUFLcWdVQUFIUURGQzdGWFlxN0ZYWXE3RlhZcTdGWFlxN0ZYWXEmI3hBOzdGWFlxN0ZYWXE3RldOZm1KNUUwbnp4NVZ1OUIxRWNmVkhPMHVRS3RCY0tENmNxL0ltaEhjVkhmRlh3SjVsOHVhcjViMTI4MFRWb1QmI3hBO0JmMk1oamxUc2FicTZudXJyUmxQY1lwU3pGWFlxN0ZYWXE3RlhZcW5IbEh5cnEzbXJ6RlphRHBNZnFYbDYvQlNhOFVVYnZJNUhSVVUmI3hBO0VuRlgzNTVGOGw2UjVNOHNXZWdhV3Y3aTJXc3N4QUR6VE4vZVN2VDlwajl3b09neFFuK0t1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjImI3hBO0t1eFYyS3V4VjJLdXhWMkt2RmYrY2t2eWhIbXZRdjhBRWVqd2N2TU9reGt5Um9QaXViVmZpYVAzZVBkaytrZHhpcjQyeFM3RlhZcTcmI3hBO0ZYWXEyQVNRQUtrN0FERlgybi96anIrVVk4bWVYZjB4cXNQSHpMcTZLMHlzUGl0cmMwWklQWmo5cVQzb1AyY1VQWDhWZGlyc1ZkaXImI3hBO3NWZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkaXJzVmRpcnNWZGlyc1ZmSDMvT1RINVJmNGExbythdEhnNDZGcXNoK3RSSVBodHJ0cWtpZzYmI3hBO1J5OVY4RFVlR0tYaHVLdXhWMkt1eFY3NS93QTR3L2xDTmMxUmZPZXRRY3RJMDZTbW1RdVBobnVrUDk1UTlVaFAzdjhBSWpGRDYzeFYmI3hBOzJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLcGY1ZzBIUzlmMFc4MGJWSVJQcDk5R1lwNHo0SG8mI3hBO1FlekthTXA3SGZGWHdOK1pmNWY2cDVFODEzV2gzd0x4TCs5c0x1bEZudDJKNFNEMzJvdzdNRGlsaXVLdXhWbVA1VmZsenFQbjd6YmImI3hBOzZQYmNvckpLVGFuZUFWRU51cCtJK0hOdnNvUEgycmlyNzIwZlNOTzBiU3JYU3ROZ1czc0xLSlliZUZlaW9nb1BtZkVucWQ4VUl6RlgmI3hBO1lxN0ZYWXE3RlhZcTdGWFlxN0ZYWXE3RlhZcTdGWFlxN0ZYWXE3RlhZcTdGWFlxN0ZYbm41Mi9sWmJmbUI1VWUzaFZVMTJ3NVRhUmMmI3hBO05RZkhUNG9YUDhrdEtleG9lMkt2aFM3dExtenVwclM2aWFDNXQzYUtlR1FGWFIwUEZsWUhvUVJpbGZwK24zdW8zMXZZV01MWEY1ZHkmI3hBO0xEYndJS3M4am5pcWdlNU9LdnZEOG5QeXhzL3kvd0RLVVduampKcTEzeG4xZTZYOXVhbXlLZjVJZ2VLL1NlK0tHZDRxN0ZYWXE3RlgmI3hBO1lxN0ZYWXE3RlhZcTdGWFlxN0ZYWXE3RlhZcTdGWFlxN0ZYWXE3RlhZcTdGWFlxK2FmOEFuS1g4b2VhUDUrMFNINDBBWFhyZEIxWDcmI3hBO0tYUUE4TmxrK2h2NWppcU0vd0NjWFB5aE5qYXA1NzF1Q2w1ZElSb2NEamVPRmhScmdnL3RTRFpQOG5mOW9ZcStpc1ZkaXJzVmRpcnMmI3hBO1ZkaXJzVmRpcnNWZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkaXF5ZUNDNGdrZ25qV2FDWlRITEZJQXlPakNqS3kmI3hBO25ZZ2pZZzRxM0hISEZHc2NhaEkwQVZFVUFLcWdVQUFIUURGVjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYmI3hBOzJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWRDZpSmpwOTBJZVgmI3hBO3Jlay9wY0s4dVhFOGFVNzF4VjgwZmtiWi9ubEYrWStudjVzYnpBZEVFZHg2NDFHVzdlMjVlaTNwOGhLeFN2T2xLOThWUStoMmY1N2omI3hBOzg0cmVTN2J6Ri9ocjlOa3lDU1c3Tm45VCtzR2xWTGVuNlhEdFNsTVZmVStLdXhWMkt1eFYyS3ZIZitja1lQekdtMGJSaDVJT3FDNkYmI3hBO3hLYno5RXZPaitud0hIMVBSS21sZWxjVlIvOEF6anBENTdpOGszcStkVHFKMVU2bEtZZjBxOHp6L1YvUWc0OFRNV2JoejUwN1ZyaXImI3hBOzFQRlhZcTdGWFlxN0ZYWXE3RlhZcTdGWFlxN0ZYWXE3Rlh5RCtjdjV5L21ib2Y1bTY5cE9rNjlOYTZmYXpJdHZicWtKQ0F3b3hBTEkmI3hBO1QxSjc0cXd6L29ZRDg0ZitwbW4vQU9SY0gvVlBGTlByejhtTmMxWFhmeXgwTFZ0V3VHdTlSdW9wR3VMaGdvTEZaNUZGUW9VZlpVRHAmI3hBO2loTC9BTS92TXV1ZVcveXl2OVcwUzdheTFDS2EyV080UUt4QWVaVllVY01Od2ZERlhuZi9BRGpGK1pQbmZ6WjVnMXEyOHhhckpxRUYmI3hBO3RhUnlRSklzYWhYTW5Fa2NGWHRpckUvejAvT0Q4eWZMMzVxYTNvK2phNU5aNmJhL1ZmUXRrU0VxdnFXY01qVUxJeDNkeWV1S1gwOTUmI3hBO1B2TG05OHBhSmUzVWhsdXJtd3RacDVUUUZwSklWWm1OS0RjbkZERWZ6Kzh5NjU1Yi9MSy8xYlJMdHJMVUlwclpZN2hBckVCNWxWaFImI3hBO3d3M0I4TVZmTEZ0L3prUitjbHZKNmkrWTVIN0ZaSUxXUlNLMTZORWZ3eFRUMkw4blArY25yclhOWnRmTG5uQ0NHTzV2WEVObHF0dVAmI3hBO1RScG1ORVNhTWtnRnpzR1dnclFVNzRvZlJXS3ZGUDhBbko3eno1cjhwYUpvbHg1ZDFGOVBtdXJtV09kNDFSaXlyR0NBZWF0M3hWRWYmI3hBOzg0eWVkZk5IbXp5cnExNTVodjMxQzV0NzcwWVpKRlJTcWVpamNmZ1ZSMUp4VjZaNXd2TG15OHBhM2Uyc2hpdXJhd3Vwb0pSUWxaSTQmI3hBO1daV0ZhallqRlh4TC93QkRBZm5EL3dCVE5QOEE4aTRQK3FlS2FSMmhmbngrYmx4cmVuMjgzbU9kNFpybUdPUkRIQlFxMGdCRzBmY0gmI3hBO0ZEN2p4VlR1YmlHMnRwYm1kZ2tNQ05KSzU2QlVGV1AwQVlxK0Zyci9BSnlFL04yUzVsa2k4eFR4Uk83TkhFSTRLS3BOUW9yR2VneFQmI3hBO1Q3ZjBEVkUxYlF0TzFXT25EVUxXRzZUajBwTkdzZ3Avd1dLRWRpcjVSL1AzODNQekc4dWZtZHFPazZKcmN0bHAwTVZzMFZ1aVJNQVgmI3hBO2dSbTNkR083R3ZYRldiL21qK2F1ditYdnlQOEFLbW9XZDgwZm1mekJhV0RtOEFReWY3ekpQY3loU0N2eE1RcDIvYXhWS2Y4QW5HbnomI3hBO2grWnZuTHpGcUY3cnV0ejNlaWFYQUZhQmtpVlpMaWMwakJLb3BvcXF6YkhyVEZYMGJpcnNWZWZmbnJZMlgvS3F2TTl4OVhqOWY2b1QmI3hBOzYzQmVkZWFqN1ZLNHErY2YrY1VyZUNmODBYU2VOWlUvUnR3ZUxxR0ZlY2ZZNHFYMmJGRkZGR0k0a1dPTmZzb29DZ2ZJREZYbFAvT1UmI3hBO1Ava250VC80ejJuL0FDZlhGWGxQL09HLy9LVStZZjhBbUJpLzVQWXFXRC84NUtmK1RxOHgvd0RSbC8xQVFZcGZaUGtML2xCdkx2OEEmI3hBOzJ6TEwvcUhURkRCUCtjb2YvSlBhbi94bnRQOEFrK3VLdklQK2NSdE4wN1VmTUhtTzIxQzFpdTdaN0NNUERPaXlJUVphR3FzQ01WTHkmI3hBO3pYTk50TFA4enI3VGRDSmUxZzFtUzMwMzB5U2VLM0pXSUl3TzlOZ0QzNjRwZm9WaWg4Ny9BUE9aUC9LT2VYUCtZeWIvQUpOREZVVi8mI3hBO3poei9BTW9Wcm4vYlMvNWtSNHE5OVpWZFNyQU1yQ2pLZHdRZXh4Vjh3LzhBT1pObmFXLytFUHE4RWNQTDlJOHZUVlZyVDZyU3RBUEgmI3hBO0ZReS8vbkU2eHNwdnl3bGxtdDQ1SkJxZHdBN29yTUtSeEVia1lxOXd4VmhuNXk2eWRHL0szek5mS3dWL3FNbHZHeDdQZFV0MUk5K1UmI3hBO29wNzRxK0FRamxDNEI0S1FDM1lFMUlINEhGTDdyLzV4NTFuOUsvbERvRWpOeWx0STVMS1FmeS9WNVdqUWY4aXdweFE5R3hWOFJmOEEmI3hBO09UMy9BSk9QVnY4QWpEYWY5UXlZcENVL20xNXRHc3grVWRKaGs1Mm1nZVh0TnRxQTFIMWlXMWpsbVB6RlVRKzY0cStyZnlBOGwvNFUmI3hBOy9MUFRZSm8rR29ha1AwamZWSHhCNXdDaW4zU0lJcEhqWEZEMGJGWFlxd1Q4OVA4QXlVZm1mL21EUC9FMXhWODMvd0RPSmY4QTVOUi8mI3hBOysyYmMvd0RFNHNVbDlsNG9lVC84NVEvK1NlMVAvalBhZjhuMXhWNVQvd0E0Yi84QUtVK1lmK1lHTC9rOWlwWVAvd0E1S2Y4QWs2dk0mI3hBO2YvUmwvd0JRRUdLWDJUNUMvd0NVRzh1LzlzeXkvd0NvZE1VTUUvNXloLzhBSlBhbi93QVo3VC9rK3VLdmp6UVBNUG1qUlk3NTlDdmImI3hBO214VzRpOUsrbHRTeUV4RTdCblhkUlgzeFM5TS81eGtYOHZUNTZoZnpGTElOZkRqOUFSeUtQcXBuUFFsd2ErdFgrN0REajc4cVlxK3omI3hBOzhVUG5mL25Nbi9sSFBMbi9BREdUZjhtaGlxSy81dzUvNVFyWFArMmwvd0F5SThWZS9ZcStadjhBbk5IL0FLWTcvdDVmOWl1S1F5Ly8mI3hBO0FKeEovd0RKV1RmOXRPNC81Tnc0b2UxWXE4Uy81eTMxbjZuK1d0dnA2bjk1cWQvRkd5K01jS3RLeCtoMVRGWHoxQjVWRGZrUmRlWkEmI3hBO0tTcjVoanQvK2VLMmhxZitSa294Uzl5LzV3NzFreitVTmMwaGlDYkMrUzRYeEMzVVFVRDVjcmRzVVBvREZYeEYvd0E1UGY4QWs0OVcmI3hBOy93Q01OcC8xREppa1BMWUp6RmNSVEZSSVkyVnVEN3FlSkZGSThOcVlxL1NIUWRXdGRZMFRUOVd0UDk1ZFF0b3JtRWRhSk1nZFI5QU8mI3hBO0tFZGlyc1ZZSitlbi9rby9NLzhBekJuL0FJbXVLdm0vL25Fdi93QW1vLzhBMnpibi9pY1dLUyt5OFVQS2YrY24wZHZ5ZDFVcXBJU2UmI3hBOzBMa0N0QjlZUVZQMGtERlhrMy9PRzdML0FJcjh3TFVjallSa0wzSUV3cWZ4eFVzRi93Q2NqNVk1ZnpvOHh0RzNKUTFxaEkvbVN5Z1YmI3hBO2g5REFqRkw3TzhqeHZGNUs4dnh1S09tbTJhc090Q0lFQjZZb1lGL3psRC81SjdVLytNOXAvd0FuMXhWNVAvemg1RkZMNWs4eHhTb3MmI3hBO2tVbGhHc2tiQU1ySzB0Q0NEc1FSaXBlUy9tUEZwZW0vbVBycWVYMldPd3RkUWxOazBCK0JPTDFwR1IyUnRscGlsK2dkaExMTFkyOHMmI3hBO3Uwc2tTTklLVStKbEJPM3p4UStmditjeWYrVWM4dWY4eGszL0FDYUdLb3IvQUp3NS93Q1VLMXovQUxhWC9NaVBGWHYyS3ZtYi9uTkgmI3hBOy9wanYrM2wvMks0cERMLytjU2YvQUNWazMvYlR1UDhBazNEaWg3VmlyNVkvNXpLMWt5YTE1YzBVR2d0cmFlOGNkejlZa0VTMStYMWQmI3hBO3FZcUhpYWVmZk5hZVQzOG5MZWdlWEpKZlhleDlHRGVRT0pPWHE4UFYrMG8vYjl1bUtYckgvT0lHc2kyOCthbnBidFJOUjA4dWc4WkwmI3hBO2VSU0Ivd0FBNzRxWDEzaWg4UmY4NVBmK1RqMWIvakRhZjlReVlwREh2ekIvTDkvSzJpZVQ5U0RGNC9NV2xKZlBKdlQxbll5RlIvcXcmI3hBO3pRZysrS3ZwNy9uRm56UCtsL3l2aXNKSDVYT2lYRWxtd1AydlNZK3RFVDdVa0tEL0FGY1VQWU1WZGlyQnZ6eGplVDhwdk15UnFYZHImI3hBO1FoVlVWSitOZWdHS3ZuUC9BSnhSc3J5SDgwbmVhQ1NOUDBiY0RrNk1vcnpqN2tZcVgyTGlxUmVlZksxdjVyOG82cjVlbmYwMTFHQm8mI3hBO2tscFhoSUtQRTlPL0dSVk5NVmZEVnhhZm1OK1ZubWVRajZ4b21xeGg0VnUwWDkxTkVUdVkzWUZKRWJpRC9hTVVwbitXL3dDV3ZtMzgmI3hBO3kvTnFYRnlseEpwMDAvcjYxclUzTGlWTGNwYVNOOXVWK2lnZk03WXErN1k0NDRvMWpqVUpHZ0NvbzJBQUZBQmloNVovems1RkxMK1UmI3hBO09wSkVqU09aN1NpcUN4Mm5Yc01WZkgyaHllZHJBM01HaC9wRzJlOWpFVjBsbUprYVdPdjJHOVBjclh0aWw2bitUdjhBempsNXAxalcmI3hBOzdUVmZOTmpKcFdnV3NpelBiWFNtTzR1U2hEQ0lRbWpvaC9hWmdOdW5zb2ZZZUt2bnYvbk1PM3VKL0x2bDBReFBLUmR6RWhGTFUvZEQmI3hBO3d4VkZmODRmMjg4SGt2VzFtamVKanFWUUhVcVNQUWo4Y1ZlOVlxK2F2K2N5N1c1bi93QUllaEU4dkg5STh1Q2xxVitxMHJURldYZjgmI3hBOzRuUXpRL2xmTWswYlJ2OEFwTzRQRndWTlBUaTdIRlhzK0t2aVgvbkpPNXZ0Vy9OelZmUmdsbHQ3R09DemlkVVlqNElnejBvTzBqdGkmI3hBO3I2bjAzeVBwNS9MRzI4dkd6aDlkdEZTd1pqR25JeU5haUptSnAxTEdwT0t2a2I4aVo5UzBYODJ2THR5OXRMSEhMY216bDVveWlsMGomI3hBO1FiMUhabkJ4Uys3TVVQaW4vbkpxeHZaZnpnMVY0cmVTUkREYVVaVVpoL3ZPbmNERlhwWDV2ZVZKdFYvNXh2OEFLR29SUXM5NW9kanAmI3hBO2NyS0FTNGltdFk0SkY0OWZ0c2hQeXhWaS93RHppVHJGL3BublhVTkV1SVpZN1hWN1htaFpXQyt2YW5rdlVkNDNreFY5YVlxLy85az08L3hhcEdJbWc6aW1hZ2U+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwveGFwOlRodW1ibmFpbHM+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyI+CiAgICAgICAgIDx4YXBNTTpEb2N1bWVudElEPnV1aWQ6OEI4MThEMEZDNTM3REQxMUJEQjJGMThGM0JGREVDOUY8L3hhcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4YXBNTTpJbnN0YW5jZUlEPnV1aWQ6OEM4MThEMEZDNTM3REQxMUJEQjJGMThGM0JGREVDOUY8L3hhcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4YXBNTTpEZXJpdmVkRnJvbSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSIvPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6eGFwVFBnPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvdC9wZy8iCiAgICAgICAgICAgIHhtbG5zOnN0RGltPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvRGltZW5zaW9ucyMiCiAgICAgICAgICAgIHhtbG5zOnhhcEc9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9nLyI+CiAgICAgICAgIDx4YXBUUGc6TWF4UGFnZVNpemUgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3REaW06dz4yMDkuOTk5OTk0PC9zdERpbTp3PgogICAgICAgICAgICA8c3REaW06aD4yOTcuMDAwMDI0PC9zdERpbTpoPgogICAgICAgICAgICA8c3REaW06dW5pdD5NaWxsaW1ldGVyczwvc3REaW06dW5pdD4KICAgICAgICAgPC94YXBUUGc6TWF4UGFnZVNpemU+CiAgICAgICAgIDx4YXBUUGc6TlBhZ2VzPjE8L3hhcFRQZzpOUGFnZXM+CiAgICAgICAgIDx4YXBUUGc6SGFzVmlzaWJsZVRyYW5zcGFyZW5jeT5GYWxzZTwveGFwVFBnOkhhc1Zpc2libGVUcmFuc3BhcmVuY3k+CiAgICAgICAgIDx4YXBUUGc6SGFzVmlzaWJsZU92ZXJwcmludD5GYWxzZTwveGFwVFBnOkhhc1Zpc2libGVPdmVycHJpbnQ+CiAgICAgICAgIDx4YXBUUGc6UGxhdGVOYW1lcz4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+TWFnZW50YTwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpPlllbGxvdzwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpPkJsYWNrPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94YXBUUGc6UGxhdGVOYW1lcz4KICAgICAgICAgPHhhcFRQZzpTd2F0Y2hHcm91cHM+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHhhcEc6Z3JvdXBOYW1lPkRlZmF1bHQgU3dhdGNoIEdyb3VwPC94YXBHOmdyb3VwTmFtZT4KICAgICAgICAgICAgICAgICAgPHhhcEc6Z3JvdXBUeXBlPjA8L3hhcEc6Z3JvdXBUeXBlPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3hhcFRQZzpTd2F0Y2hHcm91cHM+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCg1lbmRzdHJlYW0NZW5kb2JqDTUzIDAgb2JqDTw8L01ldGFkYXRhIDUyIDAgUj4+DWVuZG9iag0xIDAgb2JqDTw8L0Nyb3BCb3hbMCAwIDU5NSA4NDJdL1BhcmVudCAyMSAwIFIvQ29udGVudHMgMyAwIFIvUm90YXRlIDAvTWVkaWFCb3hbMCAwIDU5NSA4NDJdL1Jlc291cmNlcyAyIDAgUi9UeXBlL1BhZ2U+Pg1lbmRvYmoNMiAwIG9iag08PC9Gb250PDwvRjEgMjggMCBSL0YyIDM4IDAgUi9GMyA0NyAwIFIvRjQg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L01UOTcvTVQxMTYvTVQxMjEvTVQ2NS9NVDc4L01UNzkvTVQ3Ni9NVDExOCk+Pg1lbmRvYmoNMTIgMCBvYmoNPDwvRGlmZmVyZW5jZXNbMi9NVDUxL01UNDgvTVQ1MC9NVDUzL01UNDkvTVQ4NS9NVDQ3L01UMTA5L01UMTA4L01UNjYvTVQxMDEvTVQxMDIvTVQxMTEvTVQxMTQvTVQzMi9NVDY5L01UMTIwL01UOTkvTVQxMDUvTVQxMTUvTVQ3My9NVDEwMC9NVDk3L01UMTE2L01UMTIxL01UNjUvTVQ3OC9NVDc5L01UNzYvTVQxMThdL1R5cGUvRW5jb2Rpbmc+Pg1lbmRvYmoNMTMgMCBvYmoNPDwvT1BNIDEvT1AgZmFsc2Uvb3AgZmFsc2UvVHlwZS9FeHRHU3RhdGUvU0EgdHJ1ZS9TTSAwLjAwMj4+DWVuZG9iag0xNCAwIG9iag08PC9PUE0gMS9PUCB0cnVlL29wIHRydWUvVHlwZS9FeHRHU3RhdGUvU0EgdHJ1ZS9TTSAwLjAwMj4+DWVuZG9iag0xNSAwIG9iag08PC9Dcm9wQm94WzAgMCA1OTUgODQyXS9QYXJlbnQgMjEgMCBSL0NvbnRlbnRzIDE3IDAgUi9Sb3RhdGUgMC9NZWRpYUJveFswIDAgNTk1IDg0Ml0vUmVzb3VyY2VzIDE2IDAgUi9UeXBlL1BhZ2U+Pg1lbmRvYmoNMTYgMCBvYmoNPDwvRm9udDw8L0YxIDI4IDAgUi9GNCAyOSAwIFI+Pi9Qcm9jU2V0Wy9QREYvVGV4dF0vRXh0R1N0YXRlPDwvR1MyIDM1IDAgUi9HUzMgMzYgMCBSPj4+Pg1lbmRvYmoNMTcgMCBvYmoNPDwvTGVuZ3RoIDM0MjIvRmlsdGVyL0ZsYXRlRGVjb2RlPj5zdHJlYW0NCmjejFnJdiJHFj3HVd7oK94S9YHojJxTWqF5LrWgXC5bXoSSEESRA52DbPQTvefDvOq9/8ArLfpGDoDUIPvUOUUKksh49713373Bv3c4KdrhJvlmQI7jsACvPc+xmOXYlMkdM/CY7ZNtcmb4FO98oWTHIN82mWGTE9gscKnX/Inb64/rf9Odf54OLBrnO7bFHJM8x2OG45Dtc+YHxC1meIH+0qO+0dQ3Hgx3/nnCidPwcYfzahW82DZzeBCQ53LGrYCG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ZXMvS2lkc1syNiAwIFIgMSAwIFIgNCAwIFIgNyAwIFIgMTUgMCBSXT4+DWVuZG9iag0yMiAwIG9iag08PC9TdWJ0eXBlL1hNTC9MZW5ndGggMzU4MS9UeXBlL01ldGFkYXRhPj5zdHJlYW0NCjw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDQuMC1jMzE2IDQ0LjI1MzkyMSwgU3VuIE9jdCAwMSAyMDA2IDE3OjA4OjIzIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA4LjEuMCAoTWFjaW50b3NoKTwvcGRmOlByb2R1Y2VyPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOmNyZWF0b3I+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpPnR1Yml0YWs8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgICAgIDxkYzp0aXRsZT4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+c2FnLTM5LTMtNC0wOTAyLTIxOnNhZy0wPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOkFsdD4KICAgICAgICAgPC9kYzp0aXRsZT4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4YXA6TW9kaWZ5RGF0ZT4yMDA5LTA2LTI2VDA5OjQ1OjA0KzAzOjAwPC94YXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhhcDpDcmVhdG9yVG9vbD5RdWFya1hQcmVzcyA3LjMxPC94YXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4YXA6Q3JlYXRlRGF0ZT4yMDA5LTA2LTI2VDA5OjQ1OjA0KzAzOjAwPC94YXA6Q3JlYXRlRGF0ZT4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIj4KICAgICAgICAgPHhhcE1NOkRvY3VtZW50SUQ+dXVpZDozOGViMGFhMC02M2M5LTBjNGYtYTIzZi1mNTE4NzQ1MzQwODI8L3hhcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4YXBNTTpJbnN0YW5jZUlEPnV1aWQ6MGZmZjg5YzUtY2JjMy0wYjQyLTlhODItNmE2MGE2M2UyNzA4PC94YXBNTTpJbnN0YW5jZUlEPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+DWVuZHN0cmVhbQ1lbmRvYmoNMjMgMCBvYmoNPDwvQ3JlYXRpb25EYXRlKEQ6MjAwOTA2MjYwOTQ1MDQrMDMnMDAnKS9BdXRob3IodHViaXRhaykvQ3JlYXRvcihRdWFya1hQcmVzcyA3LjMxKS9Qcm9kdWNlcihBY3JvYmF0IERpc3RpbGxlciA4LjEuMCBcKE1hY2ludG9zaFwpKS9Nb2REYXRlKEQ6MjAwOTA2MjYwOTQ1MDQrMDMnMDAnKS9UaXRsZShzYWctMzktMy00LTA5MDItMjE6c2FnLTApPj4NZW5kb2JqDXhyZWYNMCAyNA0wMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwNTc0MjIgMDAwMDAgbg0KMDAwMDA1NzU0OSAwMDAwMCBuDQowMDAwMDU3NjczIDAwMDAwIG4NCjAwMDAwNjA2NjIgMDAwMDAgbg0KMDAwMDA2MDc4OSAwMDAwMCBuDQowMDAwMDYwOTEzIDAwMDAwIG4NCjAwMDAwNjM4MDMgMDAwMDAgbg0KMDAwMDA2MzkzMCAwMDAwMCBuDQowMDAwMDY0MDY2IDAwMDAwIG4NCjAwMDAwNjcyMTUgMDAwMDAgbg0KMDAwMDA3MTcxMiAwMDAwMCBuDQowMDAwMDcyMDU0IDAwMDAwIG4NCjAwMDAwNzIyNjcgMDAwMDAgbg0KMDAwMDA3MjM0NCAwMDAwMCBuDQowMDAwMDcyNDE5IDAwMDAwIG4NCjAwMDAwNzI1NDkgMDAwMDAgbg0KMDAwMDA3MjY1NCAwMDAwMCBuDQowMDAwMDc2MTQ2IDAwMDAwIG4NCjAwMDAwNzY0MDQgMDAwMDAgbg0KMDAwMDA3NjQ0MCAwMDAwMCBuDQowMDAwMDc2NDcyIDAwMDAwIG4NCjAwMDAwNzY1NTAgMDAwMDAgbg0KMDAwMDA4MDIwOCAwMDAwMCBuDQp0cmFpbGVyDTw8L1NpemUgMjQ+Pg1zdGFydHhyZWYNMTE2DSUlRU9GDQ==", - "directory": "/tmp", - "fileName": "04-valid.pdf", - "fileSize": "81 kB" - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Read PDF": [ - { - "hints": [], - "startTime": 1738078143109, - "executionTime": 291, - "source": [ - { - "previousNode": "Read Binary File" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "binary": { - "data": { - "mimeType": "application/pdf", - "fileType": "pdf", - "fileExtension": "pdf", - "data": "JVBERi0xLjcNJeLjz9MNCjI0IDAgb2JqDTw8L0xpbmVhcml6ZWQgMS9MIDgwOTUzL08gMjYvRSA1NzQyMi9OIDUvVCA4MDQzMS9IIFsgOTE2IDI5NF0+Pg1lbmRvYmoNICAgICAgICAgICAgICAgICAgIA14cmVmDTI0IDMxDTAwMDAwMDAwMTYgMDAwMDAgbg0KMDAwMDAwMTIxMCAwMDAwMCBuDQowMDAwMDAxMjkxIDAwMDAwIG4NCjAwMDAwMDE0NzEgMDAwMDAgbg0KMDAwMDAwMTYyMiAwMDAwMCBuDQowMDAwMDAyMzE5IDAwMDAwIG4NCjAwMDAwMDM0OTAgMDAwMDAgbg0KMDAwMDAwMzg2MiAwMDAwMCBuDQowMDAwMDEyODc2IDAwMDAwIG4NCjAwMDAwMTM1NjcgMDAwMDAgbg0KMDAwMDAxNDAyMSAwMDAwMCBuDQowMDAwMDE0NjE1IDAwMDAwIG4NCjAwMDAwMTQ2OTEgMDAwMDAgbg0KMDAwMDAxNDc2OSAwMDAwMCBuDQowMDAwMDE1NjczIDAwMDAwIG4NCjAwMDAwMTYzNTAgMDAwMDAgbg0KMDAwMDAxNjY1OCAwMDAwMCBuDQowMDAwMDE3NDMzIDAwMDAwIG4NCjAwMDAwMTgzMDkgMDAwMDAgbg0KMDAwMDAxOTE3MyAwMDAwMCBuDQowMDAwMDE5ODc0IDAwMDAwIG4NCjAwMDAwMjA1MTkgMDAwMDAgbg0KMDAwMDAyMTEzMiAwMDAwMCBuDQowMDAwMDIxODE0IDAwMDAwIG4NCjAwMDAwMjIxNjUgMDAwMDAgbg0KMDAwMDAyNzIxMyAwMDAwMCBuDQowMDAwMDMxMTk2IDAwMDAwIG4NCjAwMDAwMzI5MTQgMDAwMDAgbg0KMDAwMDAzMzE1NiAwMDAwMCBuDQowMDAwMDU3Mzg1IDAwMDAwIG4NCjAwMDAwMDA5MTYgMDAwMDAgbg0KdHJhaWxlcg08PC9TaXplIDU1L1ByZXYgODA0MjIvUm9vdCAyNSAwIFIvSW5mbyAyMyAwIFIvSURbPDYwOUQyNzU5RTI2NkQ5NzIyQjI5RjE5QzBEQzdGM0FGPjxGNDUxQzNGNjQ2QjI0MEQ5QjQyNTFGMjgwNUVFNjU5Rj5dPj4Nc3RhcnR4cmVmDTANJSVFT0YNICAgICAgICAgICAgICAgICAgICAgDTU0IDAgb2JqDTw8L0xlbmd0aCAyMDcvRmlsdGVyL0ZsYXRlRGVjb2RlL0kgMjQyL0wgMjI2L1MgMTQzPj5zdHJlYW0NCnjaYmBgYAaipwysDAw8rgwCDAggABRjZWBh4DjBEMBw7h9DMgODaDKTV4vCViRFCl3JCzKzjUOjfmj2NS5dc9ZDNeoHWCxcx1HkuMOl1WBVjBIdHSDaOC0DRCspuUSA+WwNILIBYTiQJ8TAqOEDpGWAWBasW5WBn1GO8YTIArcHmi+OOLozLmSJYpjD6GFmEMDgfLCQ2Z2tjCtBmEGFIWCBX+fJ/ixeJWazL0B90gugjhRmYNT0A9JMQOwCxOIMjBZaIGcB8TWAAAMAI5wxHQ1lbmRzdHJlYW0NZW5kb2JqDTI1IDAgb2JqDTw8L01ldGFkYXRhIDIyIDAgUi9QYWdlcyAyMSAwIFIvVHlwZS9DYXRhbG9nL1BhZ2VMYWJlbHMgMTkgMCBSPj4NZW5kb2JqDTI2IDAgb2JqDTw8L0Nyb3BCb3hbMCAwIDU5NSA4NDJdL1BhcmVudCAyMSAwIFIvQ29udGVudHNbMzcgMCBSIDQwIDAgUiA0MSAwIFIgNDIgMCBSIDQzIDAgUiA0NCAwIFIgNDUgMCBSIDQ2IDAgUl0vUm90YXRlIDAvTWVkaWFCb3hbMCAwIDU5NSA4NDJdL1Jlc291cmNlcyAyNyAwIFIvVHlwZS9QYWdlPj4NZW5kb2JqDTI3IDAgb2JqDTw8L0ZvbnQ8PC9GMSAyOCAwIFIvRjIgMzggMCBSL0YzIDQ3IDAgUi9GNCAyOSAwIFI+Pi9Qcm9jU2V0Wy9QREYvVGV4dF0vUHJvcGVydGllczw8L01DMSA1MyAwIFI+Pi9FeHRHU3RhdGU8PC9HUzIgMzUgMCBSL0dTMyAzNiAwIFI+Pj4+DWVuZG9iag0yOCAwIG9iag08PC9TdWJ0eXBlL1R5cGUxL0ZvbnREZXNjcmlwdG9yIDMwIDAgUi9MYXN0Q2hhciAyNTIvV2lkdGhzWzIxNyAwIDAgMCAwIDAgMCAwIDM1MiAzNTIgMCAwIDAgMzQyIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDI1NCAwIDAgMCAwIDAgMCA3MDYgNjM3IDY3NiA3NjEgNTgxIDU1NCA3MjcgMCAzNzggMCAwIDU1MSA4ODggNzQwIDc2NiAwIDAgNjU5IDUwNSA2NDEgMCAwIDAgMCA2NTUgMCAwIDAgMCAwIDAgMCA0NjYgNTM0IDQyMiA1NDcgNDM3IDMzMSA0OTIgNTUwIDI5NSAwIDUxMyAyNzggODQzIDU2NiA1MjUgNTQ3IDAgNDA0IDM4MyAzMzkgNTU1IDQ2NSAwIDQ4MiA0NjUgNDQ1IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMjE3IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDM0MiAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA0MjIgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDUyNSAwIDAgMCAwIDAgNTU1XS9CYXNlRm9udC9ETUZKQ0grTWluaW9uUHJvLUJvbGQvRmlyc3RDaGFyIDMyL0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9UeXBlL0ZvbnQ+Pg1lbmRvYmoNMjkgMCBvYmoNPDwvU3VidHlwZS9UeXBlMS9Gb250RGVzY3JpcHRvciAzMiAwIFIvTGFzdENoYXIgMjUyL1dpZHRoc1szNDEgMzY2IDQ2OCA0NzcgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCAyMjcgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDM0NiAzNDYgNTAwIDU4MCAyMjggMzU2IDIyOCAzMzEgNDgwIDQ4MCA0ODAgNDgwIDQ4MCA0ODAgNDgwIDQ4MCA0ODAgNDgwIDIyOCAyMjggNTAwIDU4MCA1MDAgNTAwIDc1MyA2OTEgNTg4IDY2NSA3MzUgNTY4IDUyOSA3MTUgNzY2IDM0MSAzMjkgNjczIDUzOCA4OTEgNzQzIDc0NyA1NjMgNTAwIDYyMSA0NzQgNjE3IDczNiA3MDMgOTcxIDY1NCA2MzQgNjAzIDM0NSA1MDAgMzQ1IDUwMCA1MDAgNTAwIDQzOSA1MDggNDIzIDUyOCA0MjUgMjk2IDQ2OCA1MzQgMjY4IDI1NiA0OTYgMjUzIDgxOSA1NDcgNTEwIDUyNCA1MTEgMzcxIDM2NyAzMDUgNTMxIDQ2MyA2ODUgNDcyIDQ1OSA0MjAgNTAwIDUwMCA1MDAgNTgwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUyMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgMzk4IDQwMSAyMjQgMjIzIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDI2OCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDcwMiA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCAzNDMgNTgwIDUwMCA1MDAgNTAwIDUxMiA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDY2MSA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDc0NyA1ODAgNTAwIDUwMCA1MDAgNTAwIDczNiA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNDIxIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTEwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTMxXS9CYXNlRm9udC9ETUZKQ0srTWluaW9uUHJvLVJlZ3VsYXIvRmlyc3RDaGFyIDIvVG9Vbmljb2RlIDMzIDAgUi9FbmNvZGluZyAzNCAwIFIvVHlwZS9Gb250Pj4NZW5kb2JqDTMwIDAgb2JqDTw8L1N0ZW1WIDEyOC9Gb250TmFtZS9ETUZKQ0grTWluaW9uUHJvLUJvbGQvRm9udEZpbGUzIDQ4IDAgUi9GbGFncyAyNjIxNzgvRGVzY2VudCAtMjQzL0ZvbnRCQm94Wy0zMTgg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MeuuSh3asP/Ko2WuPsAGI8qYQcHKxtXfFVaWIY0bvDg6JEcOTv9UFw1vyS2Il47PXba/RT6XTXl/1tHj+9d8luNzrV+z7uLcIw0npkLb87dEOxfXI9rzev7+bo5n048Vyu8vXl4YLxWXUZzhF3v8XKVcQRtr2hSviVVy1XP3lO+RnjCxu2eCfE5yRcnEmiUlsBK1orI8pXJqgcTZBds2ACOjeW4+MGvO7pg0Y+6cxRInZu3ddlnqQsQGh9VywE7Akm1Sm5Yu37R7fbI/sBNQuvCn3PzftQu/W8w5Pvv3hIVsv2cuZJdb4NzPwzmBh2s11y3uHyUiPzxEAQIMALQ6CUwKDWVuZHN0cmVhbQ1lbmRvYmoNMzIgMCBvYmoNPDwvU3RlbVYgNzkvRm9udE5hbWUvRE1GSkNLK01pbmlvblByby1SZWd1bGFyL0ZvbnRGaWxlMyAzMSAwIFIvRmxhZ3MgNi9EZXNjZW50IC0yNTYvRm9udEJCb3hbLTI5MCAtMzYwIDE2ODQgOTg5XS9Bc2NlbnQgNzExL0NhcEhlaWdodCA2NzQvWEhlaWdodCA0MzYvVHlwZS9Gb250RGVzY3JpcHRvci9JdGFsaWNBbmdsZSAwL1N0ZW1IIDMyL0NoYXJTZXQoL3NwYWNlL2h5cGhlbi9UL3Uvci9rL0ovTS9lL2QvUy9jL2kvdHdvL3plcm8vbmluZS9zZW1pY29sb24vdGhyZWUvcGFyZW5sZWZ0L3BhcmVucmlnaHQvY29sb24vc2l4L29uZS9maXZlL2NvcHlyaWdodC9VZGllcmVzaXMvQi9JZG90YWNjZW50L0EvSy9FL20vYS9sL3MvYXQvdC9iL3BlcmlvZC9nL28vdi9zbGFzaC94L24vZi9oL3cveS9wL2NvbW1hL04vTy9xdW90ZWRibGxlZnQvcXVvdGVkYmxyaWdodC9laWdodC9lbmRhc2gvai9GL2ZvdXIvcGx1XA1zbWludXMvc2V2ZW4vRC9QL2VxdWFsL3ovZG90bGVzc2kvc2NlZGlsbGEvdWRpZXJlc2lzL2dicmV2ZS9jY2VkaWxsYS9vZGllcmVzaXMvQ2NlZGlsbGEvcXVvdGVyaWdodC9PZGllcmVzaXMvWS9HL0kvVS9SL3EvVy9IL0MvZGVncmVlL211bHRpcGx5L211L0wvVi9hc2NpaXRpbGRlL2JyYWNrZXRsZWZ0L2JyYWNrZXRyaWdodC9wbHVzL1gvU2NlZGlsbGEvcXVvdGVsZWZ0L1opPj4NZW5kb2JqDTMzIDAgb2JqDTw8L0xlbmd0aCAzODUvRmlsdGVyL0ZsYXRlRGVjb2RlPj5zdHJlYW0NCmjeVJJNb4MwDIbv/AofO+1AAuVLQkgrtFIP+9Da7Q6J6ZBGQCk99N/PTrpOO4CevNixX+yw3jd7MywQvtlJHXCBfjDa4nm6WIXQ4WkwICPQg1puJ/dWYztDSMmH63nBcW/6CcoyCN/p43mxV1jt1o/iAcJXq9EO5gSro/z4JOFwmedvHNEsIKCqQGMfhPVzO7+0I0LIaX/a8TojRO4sb4Unjee5VWhbc0IoRVRB2asK0Oj/3wKZ+ZSuV1+tDXyokLGoiGPHyY557Vg6Try+JY4Es4g4PtaO44Y48ZwwZ+g44/iccyMqQFy0vpYkbgsX81QQd+7+eFMTq8zpdUasleOGdfT6lvU+dbxLmX3MjmLI7M1V8evRey6jnJvwFYlJ6IjjzgsbEtZsK/He1uwt4f+S+AjioEwlceYciJQd5Ow4R2+PW8x74kJ4gat0zJ10KRu+VHPj2jtp0lvHvkeeFK/PfejqYi3tg9sxN3Ye+GDwvobzNPN8+Ql+BBgA+fu6sAoNZW5kc3RyZWFtDWVuZG9iag0zNCAwIG9iag08PC9EaWZmZXJlbmNlc1syL0lkb3RhY2NlbnQvc2NlZGlsbGEvZ2JyZXZlL1NjZWRpbGxhIDMyL3NwYWNlIDQwL3BhcmVubGVmdC9wYXJlbnJpZ2h0IDQzL3BsdXMvY29tbWEvaHlwaGVuL3BlcmlvZC9zbGFzaC96ZXJvL29uZS90d28vdGhyZWUvZm91ci9maXZlL3NpeC9zZXZlbi9laWdodC9uaW5lL2NvbG9uL3NlbWljb2xvbiA2MS9lcXVhbCA2NC9hdC9BL0IvQy9EL0UvRi9HL0gvSS9KL0svTC9NL04vTy9QIDgyL1IvUy9UL1UvVi9XL1gvWS9aL2JyYWNrZXRsZWZ0IDkzL2JyYWNrZXRyaWdodCA5Ny9hL2IvYy9kL2UvZi9nL2gvaS9qL2svbC9tL24vby9wL3Evci9zL3QvdS92L3cveC95L3ogMTI2L2FzY2lpdGlsZGUgMTMzL2VuZGFzaCAxNDEvcXVvdGVkYmxsZWZ0L3F1b3RlZGJscmlnaHQvcXVvdGVsZWZ0L3F1b3RlcmlnaHQgMTU0L2RvdGxlc3NpIDE2OS9jb3B5cmlnaHQgMTc2L2RlZ3JlZS9wbHVzbWludXMgMTgxL211IDE5OS9DY2VkaWxsYSAyMTQvT2RpZXJlc2lzL211bHRpcGx5IDIyMC9VZGllcmVzaXMgMjMxL2NjZWRpbGxhIDI0Ni9vZGllcmVzaXMgMjUyL3VkaWVyZXNpc10vVHlwZS9FbmNvZGluZz4+DWVuZG9iag0zNSAwIG9iag08PC9PUE0gMS9PUCB0cnVlL29wIHRydWUvVHlwZS9FeHRHU3RhdGUvU0EgZmFsc2UvU00gMC4wMDI+Pg1lbmRvYmoNMzYgMCBvYmoNPDwvT1BNIDEvT1AgZmFsc2Uvb3AgZmFsc2UvVHlwZS9FeHRHU3RhdGUvU0EgZmFsc2UvU00gMC4wMDI+Pg1lbmRvYmoNMzcgMCBvYmoNPDwvTGVuZ3RoIDgzNS9GaWx0ZXIvRmxhdGVEZWNvZGU+PnN0cmVhbQ0KSIl8VMty2zgQrNojv2KO8tYSBsAnvJcoWW/KTmJXxazKwc4BJkEZMUloAVCyPyL7H/tP+ZgMKEpRnKotHTQiBj3dPU39EzHQEDEOJReQZRkR+B0XWUKSLAWrIi4KkpaQckZoCX30CYaIQplyQlPIREpEDvH8E9vD8enbGw4rF72uotO/U2BQtZEAih8BKUsI5UkJhchJUTI87CM6HTJ4jGJCKcVndYRdPIdqGy2q0T7CJXxQDdzU+qT6gv0xIxyqv7DC1tsFp1T8CYmAu0Vyd3IGSc7iJM9OPleXUfX7EeriP6i+vf6tWr4LOHi0OI97qbsz6FXjav3Kj/fay0eyMhvi7dxEJx6N0WeMkkTQ/NTJVUwF5TFnoee8mjVQ1IDykyA/TUjGgTFOUpFAWjJSCmApSdI8ONUe+4Q+TBYwyGhJsoImWBekTNPsZ4MmwQvU99NYwo7msoIhgoCioCRP0P+wQZ4BT0mGi55G7wHfYXWJ1Rest8AofIDbzxSaA7cDmMgIQ+J7sPgH2s1u0Wy3aHw2QXPgqJULDE1RUsLyPP+fVbPdqq8/Xry9uFq+h+XH6uLN+/MgEo+mKzi7ECQvSwSkuP6UlQHwdrGsR69Ata2qPZgW3FphVNSTsrV2CswAg/ZW12CedKMwIlfXdydTNHKSF5wfwjQx4rtEdWqjuoDWGuPvZdcp66Y7+yCzAiNfIJk8S7EoZnVBxVL3Z4H5IfyYAIaLpIchs2wRii1OO9+T1Q75qjDXPyjozDaujfMgBxQknVZYb+WzQ1YWdL+2ZqOHFXS6VeA8dknbuKl7/fDsdC27iXM8EzgWmu8mt9oPyrk/pktWNWMdAO9N84yAFk8IXP3qXuDZqFYPaLR0E9evbrRrq1247kzXaGXDO6WlN/bf/YuIfxL7wSjxXpvOrAJLcM/Oqz4Mu37hgVWdfJJe4xpbWSOYg9r0YUprTT+1bKSrx05aUENj8EGnx578GMnZ7HL1gNBHeHoA1+N6H6AfXd0pB52S6J83AdI0upP+0LlRekB+Fc5bo1LjZoYI6fyIdulw8Wgqn4WqjexGiQkNVOWLrHIa98qjVQ69G7x7kbgQXnRkCqNDSfBdgAEAa+eKlA1lbmRzdHJlYW0NZW5kb2JqDTM4IDAgb2JqDTw8L1N1YnR5cGUvVHlwZTEvRm9udERlc2NyaXB0b3IgMzkgMCBSL0xhc3RDaGFyIDI1Mi9XaWR0aHNbMjI1IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDM1MyAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAyMzMgMCAwIDAgMCAwIDAgNjk0IDU5NyAwIDAgMCAwIDAgNzY5IDM0NyAwIDY3OCAwIDg5MCA3NDMgMCAwIDAgMCA0ODAgMCAwIDAgOTcyIDAgMCAwIDAgMCAwIDAgMCAwIDQ0NCA1MTMgNDIzIDUzMSA0MjcgMzAzIDQ3MiA1MzcgMjczIDI2MiA0OTkgMjU4IDgyMyA1NTAgNTEzIDUyOCAwIDM3NyAzNzAgMzExIDUzNSAwIDAgMCA0NjAgNDI0IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMjI1IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDM1MyAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA1MTMgMCAwIDAgMCAwIDUzNV0vQmFzZUZvbnQvRE1GSkNJK01pbmlvblByby1NZWRpdW0vRmlyc3RDaGFyIDMyL0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9UeXBlL0ZvbnQ+Pg1lbmRvYmoNMzkgMCBvYmoNPDwvU3RlbVYgODgvRm9udE5hbWUvRE1GSkNJK01pbmlvblByby1NZWRpdW0vRm9udEZpbGUzIDQ5IDAgUi9GbGFncyAzNC9EZXNjZW50IC0yNTQvRm9udEJCb3hbLTI5NSAtMzYwIDE2ODQgOTk1XS9Bc2NlbnQgNzA5L0NhcEhlaWdodCAwL1R5cGUvRm9udERlc2NyaXB0b3IvSXRhbGljQW5nbGUgMC9TdGVtSCAzMy9DaGFyU2V0KC9zcGFjZS9oeXBoZW4vSy9lL3kvVy9vL3IvZC9zL2NvbG9uL0Evbi9hL2gvdC9TL29kaWVyZXNpcy96L2MvdWRpZXJlc2lzL2svbC9pL2YvdS9iL2ovTS9JL20vSC9nL3AvQi9OKT4+DWVuZG9iag00MCAwIG9iag08PC9MZW5ndGggNzA2L0ZpbHRlci9GbGF0ZURlY29kZT4+c3RyZWFtDQpIiYSUTW7bMBCF9z7FLOPCZklZst0C3bRBFgGSFI12TRa0NLaYUKIgUnZ8gB4oN+yQlAI7CNqN/jlv5r1PzK8nn68ECMi3Ew5zwZarJIX8cjJnnPME8sJfCbGE/DC5uJEOOyW1BdmUcIOuMqX9Os2fqEgaiwjO+JoW8rciYiySJL7I7ws6b41xG6k1dhYOylVUD+QOoZMNHc0WxPrPIoEDdgh7o/vGyU7pI2DTGVpVgmrAVTh9zK8n81GSuk+8KuOLLItS1vXlkUFeIVSodpWLnR+GaxKiKmD7zRMWdB/0apS277BkcN8iSQ33w1snn7EZeg7y+adzr3iaBq/ayjhToNZgj9ZhHbtI+LxGMhFs26nGwUFa6LBFMrYkVzoQHJyq0TL4ro0pwcq61efiG6QP0bs+ageLGU+SZRzbz6jqGktFdck2ufWSYdQgy+CKpKyTTlmnCqnJFamPVllopaLZwYFDG9vrrfcizPo/VHiY/BfaXrt3XCxYtl6v32PB+GpIyptDTgcMZkNYs5OwxqxOyVFNofvyjQYIaUenkpQlAl4jIIP2yAfJJ3xgccFSAUeUnZ2BWC3gFVaMp1DUUXu5YuuMHmZMrOB5N6OsbEuoqD3ZGhMNTd/ewV7qfswpESz1yxICc4SERId0Pk4GX7ArlMWgm2Qs+0IFhD/FvM8/ergIuq9wf/kw9Y1QdCUWHbGKZMeJ6Kjql1ObGqn1D2RnUJi6lSF7M0jO4jSNcaesUNdeWzW7ba+pkZ/wDegPzBJq5B+URDZ+GJ+ZVaZ5x0fG1ssBD0ouPaFiKwuisZLu3AGPpq1M5+Y0Sk0ZuvhX1vJF1US0NrIMXja4kz6wyELUedsqRJatolTpjTFtjY3fGIqi77wXvuRA18YQXLU8QiX3tJ0QlNqD6Q2jt+ZFlUEGSlkTwxGO27vpI/wVYABvV6VqDWVuZHN0cmVhbQ1lbmRvYmoNNDEgMCBvYmoNPDwvTGVuZ3RoIDgwNy9GaWx0ZXIvRmxhdGVEZWNvZGU+PnN0cmVhbQ0KSIl0VM2O2zYQPnhPfoo57hZrVaTklZyeUqQpkAKbQwQURdLDWKK9DCkqIKk08ju0D6AX9BvsSYcMRXmzaVHAfzRm+P3MN6rerKsf1knK+R1Uf63fXzfiIEwtoHeiATyiNM6Df5AOGmzxKKDFAR7ws4BG1FZgKPMPAj6j7oVL4ObP6s36x9ccGFSHdQobnuRQvaJfVT3jZAHn+jcxwO+dbdyLm+oj1eexfpuk2yKHNHRskjRN+aWtiPTupbeyhu6LbMQtuE+C4MUXYWvp6HzoOr9HrYVdaLB4LeN0ZQr0xTlPeEkkcrZNdjkroWojEluQ2GLE697vO133Gm2D4CaLHsTxJKyTJ2mkAROoKOiUkx4+XN+//XAzo24TlrECNizhQQZZOp3EIIE+rTQCUPV0k1fSybl+N3PbASt4khZlCVmxTfIizQK1JGVBeh38I9tetnj+3rEsyTjbRsdCcTQs40UZZfyyUL4FmiQaUjOC81Y4Lwz0J1QaV360aG5pqgNpdB5Ng9aHSjPCMCkndCimkR9IejjOvDcL9EXoMxd5vo3o/XDsje6vepDkQNPbvkU4Ci9tKxTIM9moeq3RjPSGwKjuTwFJdZpyNnSaehK4/x+r5+im5TKxvaT67iMVOknyWh38hr9XuBqtH+sR0ClhAS3Woxv/AYKwqID0jm2gEIDeUpCdmqiV2DSdF3ro24a4nUeF5gk049vLvkijhWnJG1T+0U7NRNf83AMNHRS6OT1KghUaVdwhq8Mr4HSN1OjRDZ1BMKIh/Z3u5/4nJF5kEeiMely1RNMAXVKPP8Hhu4TyFFpBg9VB/5xW1a36OEUThM0x1P/JoJEXrBgx8iQEoiU5wZEYNva0ziy5K3j+r/1kd9s8svxVWHEOA/zj0dAIXix7uIS1TFi6K5+td4wLJX8X219ewAeEAVdzWlm5yXg4hcm5kcJJj54ruSK3KO0XE+D4aCatp2WqMaEL3iWhCeM7HoEU+lE3YwKvhBEqJmXfDYH5fh4EXo1Wjwoe9XmakwTkvwkd72Zzv/1/6HxHOwFSC2L5KV7L02cB3c3mwFcBBgCP/7woDWVuZHN0cmVhbQ1lbmRvYmoNNDIgMCBvYmoNPDwvTGVuZ3RoIDc5NS9GaWx0ZXIvRmxhdGVEZWNvZGU+PnN0cmVhbQ0KSImEVEtu2zAQBaqsfIpZ2oXMiBQlWQW6SNA0aBdJAXtTJF3QFu2wouiCklLYp+hat8gpeoNeITfIyosOJdn5tGjhjSmO3nvz5o2uhoWsrNQqh3JnRQX52qvLGmgAudxCJXMrLMiqUlbpTBGYtlVytZW2VFsFD2YhSwW3Em5kIQ2Ua2NF2UAuDDxYI3MtrRp9mX0czF4PSMBYDLPvg6uh0I3JGgKvykpUqqxUXkoNwgittqDulYFvQlmZQYUi8BryWmthGu1eavGO31OgMFsOAhhTEieMw+wdHhB+eFrrVa2FfTOafcVC3hVywoKEQeDqSBCzsJPyE7V4hdgIyMSN0iAzpbGTZV3N13rhYBoDG+G5P8C4zyjcQehzCptG+zBfb9obmoT4PPEDDouCoCOtynFPihJZx3uwYC4zpBFHjdXNUQNx4k8iRIh8mkC+IrBGWJHDHKdjURC6PxozOolJOOymMBonKUmGj8PoH/Qz6U8Xl/t/mTyS1s1j/4BFfpTuD3ePU0qjXiLF+x+gcmn8w8xfDJpRnzvZzA8mB8m1rk1Ww/XwhFzi3XR6PSJw1gO4rluMv8SiRzWZyBWg8my3lRtlMonHeY1Hb+eBepaZnlMYLQrdADbpkorcn+AtBH4QMST/b2Kma1PfP49LSCiL+T4uSUg7ifs2MKJ5Uwq3Nzgh5F+gikLkpSqEhs0Ok28Kd7PWBbbkw+1uUVeVgEJuMgw6rKSLmZErbGbZhaWnPISFJVHSsWKx8hBOWlgjRebegRtRuuQ9GAn3TS5s0XjOjrnCxBA4rbsCgctoveawQbiZ6GwpbmvTCvtjDE+CIjzMp9sMNN4WuyfwnVXsYCgjfJ9v3kk+MeKmwq/H9GG7cG7gNnZT6P2dYC1mJnixFheqsvg5cl1WOMWLy+uR33+cDkn3D9vZQp7NUEH3ywfH59MQVuWAhyRiECWc8Bhl0pCEkxhoOCFpkoKVg6UrZa70dDZI27dT4JxENE0hCSIySVN0v+ixKWIPf20XaN/05PP5hwvnwD+YEx4Tjuu1Z45TbLIlht8CDACzTqgLDWVuZHN0cmVhbQ1lbmRvYmoNNDMgMCBvYmoNPDwvTGVuZ3RoIDYzMi9GaWx0ZXIvRmxhdGVEZWNvZGU+PnN0cmVhbQ0KSIlUVLtuHDEM7PUVqgMcLUqkJLaxgVQpghT+gIWdBPE5cB7/n6EeezAOuN2RSGo4HO1zuHv4dfy7Pr3+jXef7zl+fLgPX8Jb4PgjBsuUucbOhbJavIhRaXjWRL3m+PspSKZe2hlxDY/xNUghzVhTkt4jY6/0iiyjlM2zHj8gihECqKpkeF6aIk7F97M1pEbJTKmvoil2HJYkqgkZyi3o5cb2/P0Md5++lvjtT3iLPFY4LpLNDLQlHtexfg2ciHPH64u/NkEIaeLIjVKJThvnZKFqGxyhZJDMG5dOtehKKwYNMsodYQnllWf+pQhprcBprD5DZKfGg/KNalNohILoUaHdSfXCJFLiJVMdg6Bc/V/QzgVaWdvoQCh6Aam9DaqqfKYy1DMZLH3LtEYmwzAujGlDbp8WTnJxIK9Q0j5iK5g59CYW6tRqW4ka8VDPnHwWQmam1m1jTDS3lTjfR0mECXWEzfNeZpaeZDCQtnimwf172H1X6mZDIrjytjCacxkUA0P7cKOJugyWeTSk1Jv4wnAnIBzoR/XRk4KuP6nUvrTqpWOQ5Gf4WVhH8drzOYKJRi+cT4waDJVnJsG+t6qQYZ8IMrbJYCo8mY6TIYmdfUAg62eT7zQYqnAnUR06TlUm9nEyTzcIpgGfcTtnNdExbaYbFxiId+YEs+wRMHGR7YYJjKSMDhiprhauxK4/kdfHVWy3bdy0DFFX6kLbEO86eUFvMLC3qq3MG1ETOuhU0jR7gdS4dz7zJctE80povW3vL9LKRbsVDazS0xoNb1hglTidwj6BlpeTijjMrS1rtDSMn02HN5qX6/gKruvZNzpC/C/AAAbaDB0NZW5kc3RyZWFtDWVuZG9iag00NCAwIG9iag08PC9MZW5ndGggNTc2L0ZpbHRlci9GbGF0ZURlY29kZT4+c3RyZWFtDQpIiVRUQY4jIQy89ys4r9QWxjaGZ8wbWjtaaZPD7P8PWwaaJIqUUGDsqrLDqVQsnY2saDqZSud0On40UVesjYpbug5q7oG8JHLv6azEJomqxdJcEPPnOEumhhRKuabnhsykhuusgJbYATXqaPcbXcdJfANDnN/XJhgpr8MoNw1gLT0WQlzOSE+mPXGlqjyTtxshOWqr+j4Gs9z2zYlm1utTxeP4Pr6OnOLD6e/xg++5bp2acfLekBLcnmM/VBeSsFPgJzx6HKcqQhynWAtMZE8ozG/wVBIBLxGqNRrCTYAyafiWqcpQUToJZIUa5gLi0Qa0YMgKHKVl49DdYMQrgG00/L4fv17fK2DV24tBoy6b3ACD+DUceUTLRanDp6Ec7Evjl7YJz4IxCW0gJz2mKC9x7hzj0zFQKI2NVkbrZIQDhnonlzcIYvBrhc8Nu8/ZJ0mf2SEDfomNaCHJI1uWKD5Zn0KeXzDPKQbRXHXKeO5CW9Wqi+msbfXIQmRMQ3SolXBszRKOs9XY0D5Fl2gY6tm8yxqOaKkjOkZ+0GqRcxFB7pxb+uA1iDLimk2VElRjo7RpQrQV8nqfFr2j5eC9sRwel+v2nxeJ3R8u08LVP/x5pNru7oKLHCg55m1M/FwOq8uM09mHVeSlYIrCmyTlNuU5NiTepekZkPXtZzwppb75PSa67HbcElezFrxJQpGhW3dnF7ztRjC3vpvxyes6vn/hYagV4npyw1U8X2RWS4L7BU/Wv994O35S+i/AAAIgBF4NZW5kc3RyZWFtDWVuZG9iag00NSAwIG9iag08PC9MZW5ndGggNTQ0L0ZpbHRlci9GbGF0ZURlY29kZT4+c3RyZWFtDQpIiYRUQY7bMAy85xU6FzAhiqQoPaNvCFr0sHto/3/oULSd2G1RBEg4MUWOhkNzqfhw0U5S3BoZl+fn+vPzUYuT4o+Px8ZUp9/hoClAjbrJFRyJTGb9hiqiur6/P74+fqJ5UuiV5mSQEJrWXiyoylzppFURUEdrYsQ0eRSS6uWJ2qwAxq0wtS6FfNoe4llvKydRa7bYJLIZR+I003DLqo3qwInVq1EbqBfdG8lA82CU4RNXyei41A/8CrmMRb31HYC+zz1GN9eixG2e8eRkuKN1IpFR9xHXKZ2qRncUzTC6Z/Rxdg0GWyqNH1UGj+2cw4iEjRruciDqoJGAISYmQMJLDMZQaKLxE2NVyNzJPLTxaqA1IdwRN86sRGy6rBBI1zNoCGmFDFzBikMWljwjtuoI43us3Nr7HudgIitRlTRZIMwPWVFxI9E1s9oQO1wUUqqNkCCmTa56yLGh5BE/b1LBk19gyt5xAKJ00K49CM8WvEXmKL++wbgv2zouoPy/3Rl3+LYu7Qret8Vu6F+745PUMWCDWTDH1+5M8313Rrh3qr0ZdYNimMSGUXjYFTI2TM/dV0OBmw4kUN6OzHiosMUb5JEaVk1/yTuKpTxzr013wV83GfASSP4p565R6OBXAL9N3l1xCqtkZwzya4/Slkq9ppI40PPVwhS7KYPPopjqHCe66g5uAu+97BEO/rs7TGHmdRvBmwTXKb8FGAATZwqvDWVuZHN0cmVhbQ1lbmRvYmoNNDYgMCBvYmoNPDwvTGVuZ3RoIDYxMy9GaWx0ZXIvRmxhdGVEZWNvZGU+PnN0cmVhbQ0KSImMVMFy0zAQvXDSV+wxMPVWWkm2xIlQ0g4wZWjjDtPpcDCO2xoSOzgJTPhQvoeV7aQOpTOMD9JKb1fv7duxBAkLEWGcKN5FCpX3gKSSsLeOAGMLuYgIpYyBr8kCB6Q8B06ZXUCYcE4LDKFHaTTM28LxXxGhjR+ivgoaq3hvTKDRrbkYHA6wgyIMGdbnt+kw6Gj1QZfOShT1Sliit71EhSRNJ52LEtMIXy5uxYWwhkloSGKu07ZBW9Uu2jtoCsZMzk8Y910oKEFwfUcerLXoeY0SqznDBCT5BI0DQwql485/gkpIcIZZGbDeoI8h6kOGd9fd900cn0013K2E0WgJtGG0AaW4uOOOKO7Jjg4jKSBfp+L4lDGQ3ooEbVsnrJxqg9PWBh4JpIv+GcXPROy15BTuriSKIf0pbkbpfQHT/L6u51Dfwsf77arMszk8/5y+E+3gEKRvGDeZbfJsXdYVZNUMpsu6Wa+OOlj6QozON8/mGVxV5Y+iWZXrLV+lXwc3EaRXl+8n1+F0kj6pnVywyw7Es3H0SLvrJbuBZPIWSbPtB5pvRpdFXjCr2Us4Lb40m6zZAtkjICn9jv3NaJznxXIdQONlU85BywFizxfVI8LKxPw87Qkr6Xjskn+4pTq3fFvJQ+yRHI8KaYM64SE6oC2DOaOTummK1bKuZkWVF6F1e9N57q0L9piEWof2lo5+/8qzCqbj67O3H0KO61oFsWZmXnNPeTZsAC+e9L/VjUoZ/38jgI7kA/SJaQjz9wg0HIwIybS/IRMAXQ/qVba9K6tXiw0Wsw2um36CLgT8EWAAPMwa/w1lbmRzdHJlYW0NZW5kb2JqDTQ3IDAgb2JqDTw8L1N1YnR5cGUvVHlwZTEvRm9udERlc2NyaXB0b3IgNTEgMCBSL0xhc3RDaGFyIDExNy9XaWR0aHNbMjI5IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDMzNCAyMzUgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgNjY0IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA0MDAgMCA0MjAgMCAyNzMgMCAwIDI0OSAwIDAgMCA0ODYgMCAzNjYgMzM3IDAgNTMzXS9CYXNlRm9udC9ETUZKQ0orTWluaW9uUHJvLUl0L0ZpcnN0Q2hhciAzMi9FbmNvZGluZy9XaW5BbnNpRW5jb2RpbmcvVHlwZS9Gb250Pj4NZW5kb2JqDTQ4IDAgb2JqDTw8L1N1YnR5cGUvVHlwZTFDL0xlbmd0aCA0OTYzL0ZpbHRlci9GbGF0ZURlY29kZT4+c3RyZWFtDQpo3sR4eVST17p+oib7q6WxKmnhS81HtdrBWbQObVUcemRyAFEcEUJImDEkJBAgkBGCDBkhECAgkwQDooiAKEqtdainky1Orafe2trTntPe9vSNZ+e31u8L3rXusNZd6677z/2Dj+z97f2+z/s+z/vunTAZ06YwmEzmS1ui34/YvG1hdGpWanbWTkn24k3ZGcn+N695eUxv4DTvKwFc75yAl/Bn2PcK2/pPKwt+nOHlzbz5CvfjWYyptBHGE8YfzGmbs3PyJakisTRkxbJlyxb5nysmnytDJv+tCkvOThKGxObnSoWZuSHhWYJsSU62JFEqTF4SEpaRERLj35wbEiPMFUry/JNxS2KXhOykF2RJQ7aErl6+aPXatUue4QxJzQ0RpkrFQklIYohEKEqljUqEySFSSWKyMDNRkh6S7X/zH4YpIf+9/5DUrBDaVkhcVqp/FCulJ3NDErOSl9JWsie9CLJlWVJJqjB3ydL3Y3fn5whD1oQkC1P+S9boXDAZjOeYDA6DwWMw5rIZbzEYi6cyQqcw1jEYmwhGFIsRO42xbwrjFoNxl8F4yGAs8ycwghHNUDPOMT5hEswsJkzZNWV06sapXdNCpsVN62C9xnKxfmVXIQZKQw+IPOLb51Y/d2Y6Nf3485LnHwQsCxgO+OUFJ4fg7OB8MOPVGaUzbr2Y8OLZme/MPDvr5Vkds+fM/ra+YtT72ii8NcqsmOYte7rTV8aGKnyFi9eDhQU/sHEIHuOCf+AzIx/78ORnWI/pMdt7kev/hP0jDnZx8MZ/Tv9/s35kwi08n/v2vV2wBjaSsHEMFn/3mJ/TwcILXo3AS3AEaUQ48iZeCgvm8ic3+brpTZ1wnAuR4bAEz/8H/6iE9eCdq3gd3kjijXvwihUr+e1HWTD/949hKUSQHDzvDDgw83MmXIZGLjayCzezoJzNwUoVLFwNC27BQiYEeldzEzMyDh3pzhgY6O4+O5TRnUSV+zZzz3Z3nxvM6D6SlJGRcLg74zTFgaMVHiUsOzXmnSdnPt38kgdFWYrrUh9FwMZo2BQJm+OLg3Ciz562WlUSrgk2ilkg9bA3WcsdjpHa03W99m4CdrPrk+oTbZkNCXrVTjUhRiXQxMXL2O2ftX3e+QVRxebAooqBuxD06emLMBdPgzcdA2IP0zsf/sH93PFN/4/kqOx0ynF+m3CfbT0PnxOzP9NatW+TvlnobbV2vZYvBjP6esLRdYH6oLvv4i3yx/XDmHDw8RsOLsQgV2W92cw3mZymFt6lS6nL1xwRLqSkAm4zG9hXDix5Myop1kjtMcpdt0kOxBYOW2Gxd8NgDh0uC7ZzF8RH71nDw6+8AS9AFLx+D+bA/IkJMX6+h+oza69rh9SXg005Ya51PKzBK/A8nIhDYSoOg6Y/f99saqecnvav6kYIDnRVnL0DJNyAhZhxhnnmKZ8rRnQculWTcZRq3/XHYUMw87eO8dvUVx+e/xY45JPkz/YP869FvNWGZ/JW4incrkqn1UoH47L08v48lpc0QJ073LVhEYnfX4qnYHJrYdvnfM5fJ12NXbjdC3MG/ZnsgTCuIiE/XSEjJLkibTxPmFppyafkNkPbMAlht9DDWsNmB9ULh0XsrUXF+tW8bSBm91RX9vFH2OMd2nwn1Zhfl2YT99YEGa7pPzU2Er50mgadTb+S9AXS8HVv0/C9ZmQ54XpsOkdwPqnwfAvk4OjPvcAZFPUyvS6vnqu/op8wOglfloj9hc6mXU76WGhxqW6TP/KbHrTSrDE9IWHFffSdTfMnOw3ngIgdqVKrl/PWwVE/HA9/1A9H5qKcitosu5BOq75wwAmL7p2EBCBzB7Jp1mLhOhePpbJ/V9dotpKLUKZGWajmq4ulZXIeXhMGy2EhbPsNGBDw5MsDeGobzaPmrv5imSfYInqvmeZRhKNxAFbgg/AmDoLC+9+21F+l9O1Gdy95F90yVY/a+JyQCs9faDZ9HiY8posizKw2f0N6Z6OHVvNtM9+Dx8To9jORzkar1dowOkTE+fiZBOhNXhts4yr20YzkETk0I4m8jJxKcwGVZzU0DpNeEv3Faprw2/lQjL7S2vwioe2Ualf6s6xElg7X3y0DBMf7eoXnhyFvtEcLgcynv9BA3rPozeXfq73Tg8q/rrbcsxAefAjheF8EjvNGsLBAzP6LxlykwWwl3h+knafZq0vXiRX5sXpCDFoPCjfJrYZzhu6K4eqva8ERVM2GIz4zq5MNR71OVg270sc9tlSn3agJpsMBS4UnNw9eGvGuHpF7mE/FtKZxmZj9hcFVUHOEqMwyHQwl8RYD8s3yRrJwtJg9YGjVNOYSTdJKRQSJhShUl2BI4xuOSJWxBhpAOZ3IqoIm/SBRdkI/+IgEWRXyrvTpWSPeV9mPTMNV3fyaIVfdpSqa95OFA/V0oQbA4gVnmN45TxdxcT7m4HfxRrwbKPw6HISddEt8GTJgP34TSBxOKZK4gO7T1B7AUeuXLMKBG2A+bICwu3/8nW50m9RuqUeWB1x4ubP/d5g7eJr59I1WrtSirJW1yl15btHlrCHhraIu4lbnleFH5LXsc4J2fqcg3raSh0/SUWutpe/4i2FtSelGv6Ive9BGc6ntAQkLmpDb2KhqyOja2xHXnnQ6qj8bZumI2lqjiedbAPe5UEZ3KZvZRBe2o7qNN34t+dX4IkFqNiWXpdLa4DQXnukCArbCi7DoDN2ZvNu9Gq7mmnbQ0EeY82OaI3l47spVeMrCz+L+dS/1pWAwZScZlZy4feFOmHZDzheXmLfXrbZKgh26Jk2nhlCf8Oh7ebDgp38B9t82j8+9QIUOityXyQ/ODIw/6AuLcvE5sKzCU3McYmm5Zg4yvT6vjKu/oX9kHCBy2YqCIl0ODZydXVzZqqRy2eXxuk2GTUQvu2607mSDk2iob7Q/4J30ZbLpxrDan4u7HhRqLjU9JL2ZQ+hKu26yoTjSavfSTK6vOAkKIB/C2gxaRKRfRIVi9u3SY8VKQe72+MVZMcm3BbfFn+T3Gus+ttKC7hejyxpnSV/41bl92zp2E1ZFdamExFPRcrWWbkOpcOckWmHRmL4jIRB1V9sdHfzzT9rP9n3Y+2Fz4w0zwVGovozLG4DgX+FF5wjTKzzHLXWzDCUlBhVPqawbomAtGlefPdLDb87JtCbxYkq3iIVHCWmBqjifPNqb2+5yWNrNfEu39Xitg6i12k11vL7j4igqE0nl63N3yoi9ilzJXjJ6NPxh03BP2yl+jcpc7FARqjqXuoO37DFXVVBiKOJJU1zjJxsauxuoZrvT3mglOOdVp09DILxHCxjdhMgTFfJxORPivau40I9ilOuK4nVEJhrX12h2kb5+dPSTC6XjNI/ABib9nLbqb/gFuVJXnE2l7OFW19uqGng3buzDs/HM/TvijlHpx6QndA1EmaXc7iA5UarH+2AmVIwxvfMggJshyipN5B1ZNAjBfwyeOt3ZrRQNUBqrqczMc7a3dzkMtUU2ylGQZhfxjGxheNGBCCryYMqWTSRm3psHcz66efbmEJ9zTfWVsCcT5kIYBO4Y0MtB0D0Zg/fUFa6skpVYo6/+gPTeRvGF7xRHaogM9JHWpI8j8QuoSlZSqeHhZXg6nopfoSv2+a0Pax2VDW3U1X7WLnS39Unt8WoC77vELZIVlufzDm0ZhhlGChZNtB/v6igQN/A5B1Tf74MZj85bgKM77Y9qBjdTnFKczNuy89IfeurnauDYGiuJ1ipTXTP54NiWu0vpUOJ25yQkUIlJ6ZEbSIxuvwHBZ+40P/6Ij7fBn7n9LXvjKWOBvrzQmGRMof+IeybPUB+Pg5dUuD+C2bBpRNQL82D69o8q5MyL3u3cLFGNinUT97OjDPpdGn46tLnRBovWdI2E/l+Qw1x9wmAnMGIbPYaHFR5TY3BDtdXeyOtwSyRtlFVtr6izNdhtjhq7yWFsKHIUNEhqBZUHdKn5ooxdB/P2a/MIba4+T0bKEMeMyy7Du7+9k3cOGCshMK2PZjNg76XEv0b2Mb1qbyRXYNij21tONKVkWZLoSFfM24unRZ+KvyqnFPkZOXvzjEU1uXalI69JMVB4VHm0KFdByAtKlDIy9ko43QaDgXwM7N+XOqP56dnGdN4Bo7LFSdpNVouFX17fUNbI+/mHi7+dLGlVNlEfGBrtTT0mZzCuL+SOuHZFhOUJkg9Jxz/9ouvUCcrii+D2tZRrO6huTVueiNxzOGnDu/tGRlzWekc9v6HeVTPC49yscJ+ltf8azF58G1InRdP1khvtteoqbpAQiWBK/PjK/fsyxal8uIV2FG4p2qMlstBFXXXFdtKXgqJ0hhgdnfBSN0o0G8yXSahGLleH+Tivv+foegpvQbvLtAe0/HTEwTEV7iH6pjmbZrBY/jWEMOENr4N7ptt96nTGCYEwLVMg7Envo2COz8F1ox0Wfc0nJPyAYpXhxTv8Tkc05rJwEu9HW3SGXZMmO/3oZ9F3xG2r6aoFzST+Hhq/2FRgTe/N6A+F6UcHO0/VOzs6OjtP1l23EycQzlCzMtEpXXWxKq9EJhHIJIVKRYFUT3gT0J8Um0sO6YhsNKY162JJXxIK15Xv8CvK5ka7LNqqm+QfqKrKaKyiTCa9ykKd2zy+oiuF4GCBH8psr3Cyd7TQELabddW3SO93NP6w4hg//svamrIdpO8witTpd6r9+OGfzwS9AALx83dhO8xmPr1J791jMVR9QEIc+vXghyszc4oLZfzcgtxCWipD+Uk9u3lZOSp5BiUrVhTJlMQEii7YVnTQ72FIW1MaQ2I/LWUxdIZA5UZCk7aGtkWfdZ1t9uO8PrdsM4Uj0E5D+UH/CqUbHX624jCqL3cY7fyOnjZTM8/dr1xL4Y0oSmNI0Pmx3n8GdR4NlT3B9A75VWLRVV4nYRf6+76r67IUakUmX1YkV8qLiNtoZ0FE0WTU59U1hh0kFqBtemM0HTXo3CjJrKuia1OPmttb7W283h4/pvVoi74scZLX06r+KtrTNpi3rp8JLu9+Lt2eZq/FqzBzArPpu+RzgO7BKggI/R1TVFEy97pnPaavHwKJMCr5J5gB6PTYGYpzDRe4YftoQd43NPB3vvoTvLyHJkfk5XG/QOGKiPw4Nd3Xz2uteprp3SjGoInU0/i63eg9s950hYTZSNfQomvjQWAXoJ/gdfKvUT/h6QX5WpWcv3Ud19HYbGvnnb92GM+YK9y2WyJ0NSoozrpneSqWu2hfOfAr9x8oWrGzZIeGVtVQicUQT+IsFF2qj/OXTYcbrad1QudiO+p3Ntc18Zy12iInZdbZyhw1RIetpbOXPJnTKUhJPhIt4nPmq/pbf/n1j8t0Vh7Dl9zyZtVnpa1SW471kJGYGxX53qr7yUNS6lqWQ5JFZspy07Yf+uS6jJ9ZduyAdatJGVzYPKYY433z4/m/3YnzrPNQ8a3S1m7S3dbSPuxO2t5Bf/1doPo8Pu8nGn8E3WOZ8KCPW+phaQqUhgJensh6h4KK71GDpbJLZSfehPnsIhNmvcfaJEDZ/g58Hfewl58TTZgbqiyNfM6nqon9eV097bS1V2H2mrN2ujj7x/0nkqhaZx0j4Q6SGtIM4jJxmagsy0hrxa1ltetM2kMkNiCZVEbfd8SprTcpmI+uHLtQOcDPMYgNqWVpZRllEv/yVno5fZId8qsrdDjum+4Oe1MXv6XOZmt0EDuQRXvC7DZ3m4J7zJ01XdUER66BBByd550CgZvcTK+cPjnwtnT2JXV1cWma9P30ZYpDhWdEP0s+LfbUmIdshBtXpKORkrqSxoTzGJ3DxCh+kehnX4VF5yGg775ruNY+aiM4ZRVuCf39cqFX6ZPAkS8gMpw2rqbrI8GUW5928S1YGuQ519rjau312GsuWWmzkemoX2PSFEpVcmVOXsbBO0FFrTWWkxb6VUk6GtPYSroOPsLzgzIFR0WS7NQkeUlcCZEOu9xIYNXVOjvrjzt7mjtHVwY1ZhpKhVqCLhk5luaBGo7Aiv8c3Hm1rbgkLT8m9XVp7EaQBJW4LaazfkfH0tGwtlbVeKQp4TKeexHPNymrCvVKQ4leVZKfn56rSM4j5MVadQEpGsjpdNbVtJj5jePN12/B21eA6vm6baztks02YiE4gopBuTdUcLbI0UIzvAQWcQuyWduEqcVbeZHsCeB9DNMn4GW1IwiXs5OLTA0aSsYuPayMLtzfXRzk7GGNdx2vv+VsrGjkrcfkNjx9LX65ThkEwK7tbrjQNE5wonBOHuR/9z59e5zlviH76skl/88UHG66IFsl4CUsOUufmozBU6e6eopSTlNaq9lg4tV3drqpY7Yye7GNqJcn2bJ4guji/eFU1MFk//UJTayAF+lulKyQ1hS25QRb1LXFRaQiV5ai4DuyWHfbBvsGyBaVS9rJVzTrrHa7oynoSu2FU/2XiH/rTuvglU+B946/Rd2EYCaEehu4/SdO9J7K7BKK0rOEInemh4Kkl049m0tJyaDnujN7qbci/nfd7N/LCU+b9B36rKi+83tf+z/1Dht8gv/DEpS1POW7cH4LhDovOXFJCxsbW5B/shkXtcAa59UGXNNCYEfLc3zX5uqA52oCpp+ZDoHPHwvgwO+B3nzu/xdgALuhdZ0KDWVuZHN0cmVhbQ1lbmRvYmoNNDkgMCBvYmoNPDwvU3VidHlwZS9UeXBlMUMvTGVuZ3RoIDM4OTgvRmlsdGVyL0ZsYXRlRGVjb2RlPj5zdHJlYW0NCmjexFd5VFPXuk/QZB+VptfeHocTmxNb7XBr1VYFHKqIOICACoLgzBAgAglkIAwZIBNhMDPzmBBCABlUcKyi4Py0ttVOlqrVeq23ra/T7T7ezVrvneC9d7217nprvfX+uf8kZ39n7+/7fb/vt7+9D5MxOYDBZDJnhUdviFwX8Xa0UCQUi7ZKxO9EC9KE8hz/u3kUl0nNnEzNCcSpVwJnoNNofA7b+TcFC/7wIjVz+pU500NfYkyi3TAeM35jTl4nzi2UCDMyZfz3Fi9evMD/+x5/4m/Z2jRxioAfVyiVCXKk/AhRqliSK5YkywRpC/lrs7P5sf5lUn6sQCqQ5PuN8QvjFvK30hNEMn64QLqQv2RJ8IKgxUsXPsfJF0r5AqEsUyDhJ/Mlggwh7VgiSOPLJMlpgpxkSRZf7H/zP4bp/P8dA18o4tO++PEioX8UJ6ONUn6yKG0R7UU8ESVVLBfJJEIayaINcdsLcwX8EH6aIP1fWKO5YDIYHAaDy2C8ymS8xWQsYDAWMhlLGYwQBiPsRUbcJMZOJuMOg3GfwZjvpy6SEc1IZTQxJzHLmL8EvB7gmzR/kmvyHya7WSGsBtZTdhr7JojCXsH02KdTwqd8OJU5tWfajGmJ0/4j8K3AisDbL6S+cI8Tyul/UXyy8gw17wz80xlm5WTK9GzruIkNzegijlZDBwt+x0Z8dA6H/sG4HYyz9048w9WIHrOpYdz/hPwjDirkvH4eVsy7yITnoANHSrZqGwsq2RyUp4EvJMEpEEAOE06h3sWFEklGpievt7e9o69f6jlAVoy/j/d62gd6JR3CA5I8YbpH2kNyoL7SVwrfvHEcpsG4EgXzWcgMH4i0q6qzv9kM126CW6NhaGbpLJQy3pK5RK2P1M4WQbEPhDr01a1X6gbrBxuOYTCd3batJbFWUJeq00brMBEohV042sjuGuu6130XM7M58LXK/kdPIKP33E+bIONSL5N6Af4Vv9Tw1ZG/EKfyj2W281wH9tau4aJGEfuO3mIIIcbngRCDPtjAE0EFuPNRre8sebFnYPgG8Z/vH5/fwEPv1uJwB+g21zptPJuzzdLOfTi4fV3w3v2IQSYL8UE2DLy5543XwpNXk9EVBa23CA68Wen78clPx+HmJ3If81nuMx6O2kTsL/QOOhxagsbgEnDPYf3MzvOhVhH4Wu8wBvthBOuMq/Q0DJcPrLTrrPcImATHUJLfHuy3d/rAigk7Nc+/fszO4/DpSN9R831MeJWmc6VNa7tPUHPBfaftK7/3dhH4Su80BBHjc0GQ1rCSThJwoIxe9PipF74EozNpfMvolbtt8prEkYQrr8HAsCfXrt/4cOjwtYsd1bftmA+ViUCb6aShqkQknJ0cHxUZGyfKzVflGzAYBr512j+30YGaReCO3ml8lxifDZZqdaF+Nlt9YLlN63hAwK2g0Vxf5hZ/8+rY/FvLMQ61qbLrr0PUFl/7Y+azn+nwQY4yW/mvpfC/Zpme2swPnHTUcIDk4yqUR6lYKFTEfqS1GbToj0qUMkv/qn6vUahPUWhiDVgOVHeBTTaZo/xUxeHKE5av6+GhWWY2zB3vYLWxoZ46yrKwzeNvVs0rM6zUzfanP1TpK8qHrwxRQUNaOv00f3m0IvYnZW6VdR9mFln2LCaQygTGF1FqFlokYp8qa9O1SrAW6UF9OIFEYHHZLlM2z7hLoo4tw0RQ6wMbLPJ64weYyWc6/WcCVhwE1KrxRlYv9Tr7sfmEuZtnPe6uGzVjnA7lwMB9mP4IxvRJFUxqCVWB664Zjpb1YzXCfXVJXDRzVchbKOD7xE/Syc9Sz2WEE+H79oTN3/3L1WJets6WWBfkkM+uMTboOnSYznNIf5QL5zy6/zsMePd0yBC5YnBP78fESP+52/d94VHNPA7VUJ3vhVHU8laFDy6FbzL/FutPVkpLX2vRqLYoNySgbcloJlbO3gpXboPL4mAQdoCdhJbFoeAdaDltT4ZzBHBWGpypOltV/am/MFYRuKxrKPWsGEEbRlHYMIrA+tln4JIR+N4IDMUOsofRGzfQ5hG0BOtj34WHLsEY93Xf1zXOm9UYp1RzTfUEvvrNyRNMavNRvNTLMpaqjBpuUVH9CRJGgvOlg+ldvGZ5tjObG1uySSDKxxRKdUkxIe1UtDTW2JutPEe301Vbj9VWN9ibuad7UteTCiAvXJu7JR+LL8zLSSKiz8Tc7jzd7z3KsxTbVXVqrKSmTdvEXfMXvKgwWynl5qS1Dw+0NQ80k67qwZa2GoyjOXLiIRT/GHQR1imYcCn1Ng5HQYoqUrnbgEnBVYPZEE2MnwF5F86WHqcZh1N+g6/DKe89QQFqtUlbQIZF487mTruH+9XNKIShKYnrV1WRu0S9LXrSVF1e3UBwsjW3pN9C3wdMag5k4Sn7sjTJ3PgFJyHvt5HhK7296pxDpM5hNdm4tW63u8bkVNWQdcoDdancCrYgpjg5noxIyty4hkCMz+ZD/NKN45dO8DhfaK7ndhY9hdKHmYdLFbDI00dLqmUYzzazBBaD9RxBPQKp6g3KeD0mAR8ZbKYoAvGAQ5Z3UM2lD4JAFIB4aO7vYWO17VbXAHllgLUZXG37ss5twVDwRbxImqU6wI0JG4WB8PW7A8f6jhQJ3SQnl87kGzh9yPW4eoBJ/REy8QMZguJU7vrQUTiznISYBU6vbjyItVoszlbiTtXGz4LoJBLjc/ckkyn78qLXE4h16w04/dDHzWPXeGgNvIMP9+zcUUEqDcYiXvn2HRUJ3LG6Y8eOcTno7cqO2w9h+mBOF8wZYZ6nInFxjqWE9RE6yY40GKIMvFxo7ADvO/SWTwg4+DuotVs8RieGph5hl993nqxtwZqqG2rauT2+AkUb6dQ6K6odNU670+yw1lbUl9YUt4jrMqtSjJmFGTnxuwt36uWYXl4mFhFywGlGjmEY+1li/pF70d9pD8F53+afSLkt6FY4dK1MKpPGkm5MNCSZsKbsLKeQTnHV/B2IvWlw92kFWVyQlbtfWVFiKXCq6uQeeX+JtCBDnK8oVpYWVsmxbVWXIyGbC2fDwO9/fRrSGk0KheUZ3L1FrS119U21TtLU2FzexH3w5+Hf+0q6C9vIC6ZGZ6vX0TgbmUvwkd7YNe9npu2vIOMzRj//4vDQUbJ1PBwf8paXdpC+kmaJkIjZtXtRaNzQeW+zx93Ga2h22U5xOXcrvRcfwO0Poy/7VU7VzfCCWJveep2A6wGcGje8PCEhIzODB++BZHW0cqeeVv41g7mMVr4YROiMW/xs53hBnM1gv0ZAPejy9jf1c6/0CJaTaCWI0uvj6BmAgyIqvRcgY9FD2KT4CQYwIY/qwrvaPb4eabsoRyLNEnkkPhIGjnfhXrDZZrDdJOCPYE9honqHjtbpBa2ljNZpMtioN0Q/d7gdqfPh498X/9PjK7THbjftUdaekyOlPbbTHuehefhlra1sI4ESwLLyGMNeXlmmXlaiUhdJSjL1mNKk16kJiTu/3umwOKp57pYbX/Y/xVqGrUM0gkdgd2GCOl6HcU5M0DQXLl/fn9dRqYBHaK7qaa7SzZL6zIED/W/Cqfk9R083tXZ4Bvrbaz6swToAStGycsFJo1lbICrKE6XJZcXFRWqRAaMywT66ze7yt5HLBqtxMzGeBSIN+gg/mUVeEGXT2W4QMAActForLVynw6CsJc9vvLL82C6MgxL9UCh6V0PTDD9X/rnUzyBdE1mU8Lwx2UwRfo90eaL0fq4oVqWX3jFbHq65ZlbAnIfMZ0P+MtsNZjpKPPhx5+hKcZ5GJedJi8WFIjl2VpHcvZObJS0pyiVFhflF+UpsDOxSxKv36Wj/o1qzka5Fqt9/pB9xtpe+KOhsdPlLQbtvwDPAveAVrCVRGNisM279u0AS6EvIVQImguaK2vJaXtdAX3MvPS8tjESrwIZS43OZfD8BNPbB6qtmmmDP31F+6Ef5A41SJC0pEPEkxflKhRK7A3YXJKmTtDSkc6UTbYyGZDRG0CnDvAlFWuiFJcDjG3APcK90pKz3K3L9PxSp6a3/GZb+HNPLhLVUAr4AvbwGLUcBY2gSnPsznPIFDIKcRT+h6aRaiN89sQi9gMidybErE5/QFyT22csXSM6nSNsJd34wTPeia0nfHaALsp56Cf8SJBbEFu31q/ay3krDGk+keTBsNvDE0NQJVtv0tlsEnAnq9B3azgoMzvDAaT/APxE/RjxGk9UFxpJC3pJleIvncGsX9+bVWLodT04IX5UlaHLlk5zVE/y8A5khd5lwK/wBhwyQqNijSdRhMjCitZo2E0gAIvWGGD/tWi8dzmij93IUONfW1dHObao1qBpIm8FZXmvF2qrr29yER+rN2JOckJDN4wRreg99DvGxzw8x4efwS9zkLrmqc2HO/Fznfu47MVvWvf+R8GIuOSzpkCUTqVm5GTF7L18v5InLqgTODXbVbGXzqYJh7tg3p777JLFvdQ+5pzXDPUQc7ujs/6A3dWsrj4Ne01wefADz6NbNhKP9uNbL0qvkOhlXIqz/ioSO30Cdw+wurcboIvDYavPajaywvSDX391voiH2ioG0G84Gi7OJxxnTXBfkd3kPP4AxDxP7avxH3Bk87yBLYNbZzxLwPig25RlFphyT0CSuoEvRZ2D1GB2GHQTSgOwsoSqTuz+5/T4J54AbVafNh3gFJpFRbBKb8kxy//ROA8vzfHoSeHVk/8det7PJx/M2tja6mrANwG5os3XYvfbZnfZOm5u+wdn8zcgBV9A1mb6pg0lJ6YMAReSxR7X2Ek26IjoFsXM3vQcrZqn7bdUnHVgHysgD53TV6rYdnZtOounH0DRbUZXKqDSq9QVFWbJkhfRAAVak0WqLibxuSWdDrbXVxms477p4Ay69CZd13/Wc8446HcNOjJNT2Tfgglf7VPUumgYunIurJKzodFlBKHchewxyv4TTxyCur59Ff64JNLZGAyln6/YpozSpHaWzGjpZFzobGj5xdVV2c1cgYhV6aRl62aGcBR+wGw43nm4YwiZ2Sv4vt35R0Jvl/q9MuIrqwX1ud2eXzC0WS2U54naZl4TrZvyLLTjo/7Ot/lna7XTM9InqwgA6bOj/NSxcN174b9SC3PWM14qULhjcdKkRHXSxUY0LPDeqXDCk6XIjsrowVO+awmtbZwmcYg2cemjqw2lU9cvUTvy/BRgAHxJFhQoNZW5kc3RyZWFtDWVuZG9iag01MCAwIG9iag08PC9TdWJ0eXBlL1R5cGUxQy9MZW5ndGggMTYzMy9GaWx0ZXIvRmxhdGVEZWNvZGU+PnN0cmVhbQ0KaN50U2tQG9cZ3cVIWddYTlqvB7S2dvOYepI4hHHchrQJrWObxG4xBhmKn7FAiyTA2tXqhUQiCSTAvGz0BiQE4qEHih9DzNOWYxIDTR3c1m3txKF2ZuJO26STNp2kV/TSma7on/ZH79y59zvn3u9835y5F0UyMxAURTfvLSo8sOfAs0UqtYpRH+KY5/br0vz2FIGmsjOtWRmprVl4alvWFngCrm4Vev5pEYCvN6U2Pja/Vdj8bWQdr4J8zSds3MOwJk6lUOqonXl5eTvS6861dRe1tn1vt5yppCmpSaujT2up/eoqhmMZTqaj5bnU7ro6qjSdrKVKaS3NGdJkWa40lzrEX1Dz9N4XXsjf8VLeiz9MRy/u+H7ertz/9EyptBSt0ilpjpJRHK1Q8focLad0nExOn5ZxtRSTPvkvWE39/1YolZritagytSqNpDqe1FIytfx5XoVZq1LF6NU6TkVrc58vlB42sTSVT8np6v9xkB8oIkI2IU8ghcjryAGkCClBpMhhpBzZmHbsJzxRhTQiX6ElGVRGV8Yf1rHrPs+syPwS5HckU08lwTNJtCMzdWbl0OoZITgL53FYANwC8CchpOB1HKTBquuRVeHJtRgUQB4LU+/i6QimkYgStSVB5/b3UHANOHFoFpoOC4BZKPquFQhzDde+QT+z4rHo4Dtx4xCj0moUpwf0UVIElk0r3/kXGgH0RGqLEV1BI/hel8Njva0HG/TgMSPAGbAvu84O51bjx/MbWw7acxysANQKnZECp8MVW8wJz4zNBxMYoIXeEvcxl8x5qtVW6HCw2cAmhGVgDIf7hZOfzvw++UesSyi6aV048wmQ3um/jIK/gUfxo0fKGBlx0Lww5+3wdvnJL4bBy3NfiieVl8pl5bqaU5KXiyufeE4MN9xkZ67cCf35M8l2sIjHBo3KE7IT8EmaDILM5EykD3P5At29hOgB9E6AV+4rDeOGxbtHPgLi30p/Z5t2XGg1oilVqgSvtypsJe1YSF/nqSUUFeaaSrKiqqbogPi1eOUNi+Q485apQdxu6TGONMAMaenJ9lNYUduDI38hvgDU4v1J+fiz18hjI9r+PrHf7fV7JTd80yORMHYpNn79tjhypq+lV+JzdXa5ycDZUX8sgcEYjOMK9djCXHBmME5G+kf7Y8TUUFUpVXywnGRXEXzf/ovXLk29cytB9jqiDW8bsRk2wrFi+THljyWin3oM95ZbHhR/DoqNAP17hxEF3AqOK40qjtR0Bk3DRHwoMkYOt1sGNUTnagw36JQaK9Hc5h52kr8CMcGsrzOhJ9h9lWWHSb9OMBqPB92Eq6NR30wWQY/gJWNPwwBx4eOFy2+Tol0ew827E5+mHh/RGu/xlWrBelzNVGpsRHOrM+YkJ8DRy6D8MijDBs+1e5oIS6mm6RWyVRtpF8w4HW80kiqYr1yb2NOGgC5EjN2e/uBdUgS7x5sNoH7KYkhlPfjZJArsKR/e2K2z1Onq9Tm2kzUWhYmtz3FxQ/7R3oQ3pxrupuGr1XCP5aC1qcjawmWDBv+5Ee7s0e4Wt28+JwpIgT003BYgbgZ+M5V8H7vxYfTukvhh5dWnWLrVzkiaaLw7FO4KEPOz+p1w8zOQ2KtlQ302UhQPGsCTt8G2r36wnPayFFzEvUnBr/vaZziCLaosrSB7dIJoPDHgIdwdjTXNZD3FwE0aym3PDrsjrvBZ/5L/F4Fb/dNjs+EElhgKeP2Ez99i9ZF8ax0ep8fl9br87t6OgKMH620y+8xE1aHXnq4gRZ3W5PQH95f+cQUFAiu+/Nc7dye1seJpUhFVj1wUnx8Jx84PG7kBidPubPM6sT6Pty8oHlXF36g9ZmDrJFVKa+1pccVE9bRKMlvt03PiWg1TVVMdHtdIWlz2LmuzudHyZqcZU85Vz0pE4Ij1l8cNDz+2LYOMexf4t28DQpxhFdomwtHmHnOSI2DLKMiMfIPZhIUa3udy24mcV+UwE4qlxJv24FUfGfqkf7n/HnYr0Dqg471RlJSQPq0geiEachGuLjvXTJp+ZCowFWAQ0STqI8RwzDcQJa9fWvj51Q/5n+6oaTXaldguY2/9IDG2NDV/hRTpwyvbBqE9DAqCS33QExbCntAjPCkZgG+FQX5wMQC7wxjsDa+XDO45l7X+/Lc+2pAybwYP8X8LMAAiOxA3Cg1lbmRzdHJlYW0NZW5kb2JqDTUxIDAgb2JqDTw8L1N0ZW1WIDc3L0ZvbnROYW1lL0RNRkpDSitNaW5pb25Qcm8tSXQvRm9udEZpbGUzIDUwIDAgUi9GbGFncyA5OC9EZXNjZW50IC0yNTYvRm9udEJCb3hbLTIwMSAtMzYwIDE2ODQgMTAwMl0vQXNjZW50IDAvQ2FwSGVpZ2h0IDAvVHlwZS9Gb250RGVzY3JpcHRvci9JdGFsaWNBbmdsZSAtMTIvU3RlbUggMzQvQ2hhclNldCgvc3BhY2UvaHlwaGVuL3BlcmlvZC9BL3MvcC9lL3IvZy9pL2wvdSk+Pg1lbmRvYmoNNTIgMCBvYmoNPDwvU3VidHlwZS9YTUwvTGVuZ3RoIDI0MTUxL1R5cGUvTWV0YWRhdGE+PnN0cmVhbQ0KPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4xLWMwMzYgNDYuMjc3MDkyLCBGcmkgRmViIDIzIDIwMDcgMTQ6MTY6MTggICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+CiAgICAgICAgIDxkYzpmb3JtYXQ+YXBwbGljYXRpb24vcG9zdHNjcmlwdDwvZGM6Zm9ybWF0PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6eGFwPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4YXBHSW1nPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvZy9pbWcvIj4KICAgICAgICAgPHhhcDpDcmVhdG9yVG9vbD5BZG9iZSBJbGx1c3RyYXRvciBDUzM8L3hhcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhhcDpDcmVhdGVEYXRlPjIwMDgtMDYtMDlUMTY6MjQ6MzUrMDM6MDA8L3hhcDpDcmVhdGVEYXRlPgogICAgICAgICA8eGFwOk1vZGlmeURhdGU+MjAwOC0wNi0wOVQxNjoyNDozNSswMzowMDwveGFwOk1vZGlmeURhdGU+CiAgICAgICAgIDx4YXA6TWV0YWRhdGFEYXRlPjIwMDgtMDYtMDlUMTY6MjQ6MzUrMDM6MDA8L3hhcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4YXA6VGh1bWJuYWlscz4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8eGFwR0ltZzp3aWR0aD4yMDg8L3hhcEdJbWc6d2lkdGg+CiAgICAgICAgICAgICAgICAgIDx4YXBHSW1nOmhlaWdodD4yNTY8L3hhcEdJbWc6aGVpZ2h0PgogICAgICAgICAgICAgICAgICA8eGFwR0ltZzpmb3JtYXQ+SlBFRzwveGFwR0ltZzpmb3JtYXQ+CiAgICAgICAgICAgICAgICAgIDx4YXBHSW1nOmltYWdlPi85ai80QUFRU2taSlJnQUJBZ0VBU0FCSUFBRC83UUFzVUdodmRHOXphRzl3SURNdU1BQTRRa2xOQSswQUFBQUFBQkFBU0FBQUFBRUEmI3hBO0FRQklBQUFBQVFBQi8rNEFEa0ZrYjJKbEFHVEFBQUFBQWYvYkFJUUFCZ1FFQkFVRUJnVUZCZ2tHQlFZSkN3Z0dCZ2dMREFvS0N3b0smI3hBO0RCQU1EQXdNREF3UURBNFBFQThPREJNVEZCUVRFeHdiR3hzY0h4OGZIeDhmSHg4Zkh3RUhCd2NOREEwWUVCQVlHaFVSRlJvZkh4OGYmI3hBO0h4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zi84QUFFUWdCQUFEUUF3RVImI3hBO0FBSVJBUU1SQWYvRUFhSUFBQUFIQVFFQkFRRUFBQUFBQUFBQUFBUUZBd0lHQVFBSENBa0tDd0VBQWdJREFRRUJBUUVBQUFBQUFBQUEmI3hBO0FRQUNBd1FGQmdjSUNRb0xFQUFDQVFNREFnUUNCZ2NEQkFJR0FuTUJBZ01SQkFBRklSSXhRVkVHRTJFaWNZRVVNcEdoQnhXeFFpUEImI3hBO1V0SGhNeFppOENSeWd2RWxRelJUa3FLeVkzUENOVVFuazZPek5oZFVaSFREMHVJSUpvTUpDaGdaaEpSRlJxUzBWdE5WS0JyeTQvUEUmI3hBOzFPVDBaWFdGbGFXMXhkWGw5V1oyaHBhbXRzYlc1dlkzUjFkbmQ0ZVhwN2ZIMStmM09FaFlhSGlJbUtpNHlOam8rQ2s1U1ZscGVZbVomI3hBO3FibkoyZW41S2pwS1dtcDZpcHFxdXNyYTZ2b1JBQUlDQVFJREJRVUVCUVlFQ0FNRGJRRUFBaEVEQkNFU01VRUZVUk5oSWdaeGdaRXkmI3hBO29iSHdGTUhSNFNOQ0ZWSmljdkV6SkRSRGdoYVNVeVdpWTdMQ0IzUFNOZUpFZ3hkVWt3Z0pDaGdaSmpaRkdpZGtkRlUzOHFPend5Z3AmI3hBOzArUHpoSlNrdE1UVTVQUmxkWVdWcGJYRjFlWDFSbFptZG9hV3ByYkcxdWIyUjFkbmQ0ZVhwN2ZIMStmM09FaFlhSGlJbUtpNHlOam8mI3hBOytEbEpXV2w1aVptcHVjblo2ZmtxT2twYWFucUttcXE2eXRycSt2L2FBQXdEQVFBQ0VRTVJBRDhBOVU0cTdGWFlxN0ZYWXE3RlhZcTcmI3hBO0ZYWXE3RlZrOXhCYnd0TmNTTERDZ3E4c2pCVlVlSlkwQXdFZ0N5eWpBeU5BV1dHNnYrYzM1YmFZV1dYV29yaVJkdUZvcjNGVDdOR0cmI3hBO1QvaHNwbHFZRHpkenAvWjNXNWVXTWdmMHZUOSs3SGJqL25KVDh2NG1vbHZxTTQzK0tPR0lEYi9YbFRya0JxNDl4L0h4ZGpEMk4xaDUmI3hBO21BK0ovUkV0Mi84QXprbitYMHBvOEdvd0R4a2hpSS80U1Y4VHE0OXgvSHhXZnNickJ5TUQ4VCttSVpIby93Q2NmNWI2cXlwQnJVVU0mI3hBO3JtbnAzUWUzSVBoeWxDcDl6Wk1hbUI2MDYzVWV6MnR4Ym5HU1A2UHErN2RtRU0wTThTeXd5TExFNHFraUVNcEhpQ05qbHdJTzRkUEsmI3hBO0ppYUlvcjhMRjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3FkeGMyOXRCSmNYRWl3d1JLV2tsa0lWVlUmI3hBO2RTU2RnTUJJQXNzb1FNaUJFV1M4ZDgwL241TmMzLzZFOGhhZStyYWhJU2kzakl6Sld0S3hSRDRuQS9tYWc5aU13OG1xSjJqK1BoK1AmI3hBO2M5bG9mWlVSaDR1cmw0Y082L3ZQVDNEZExyWDhsdnpBODJ5cmYrZk5la2hWdmlXeFFpWjFyMkNxVmdpLzJJYklqVHpsdkw5Yms1UGEmI3hBO1BSNlFjR2t4Zy8wdVgvSGo4YVp2by81RS9scnBxcVcwMXIrVmY5MjNranlFL05GS1IvOEFDNWVOTERyditQSjBXbzlxTmJrL2o0Ui8mI3hBO1JGZnQrMU5QMForVlducUlUYTZIYWdiY1dTMFFrZ2Q2aXBPQStEMTRmc2NYeDlmazN2TkwvVE4vb244cTlTSG9MYWFKZDEyQ0lsbzcmI3hBO1ZJN2NSVUg1WWdZZW5EOWkrUHI4Vy9GbWovcGtvMW44aHZ5MjFKU1k3QjlQbElJOVd6bFpQK0VmMUkvK0Z4T2xqMDIvSG01bW05cWQmI3hBO2JpNXk0eC9TSDZkajlyQ0xyOG5mekk4blN0ZmVSZGNlNWhVOGpZc3dpZHFiME1ia3dTL1RUNVpRZFBPRzhmc2QzRDJoMFdzSEJxOFkmI3hBO2lmNTNQN2ZxQ2IrVWZ6OVZiNGFMNTVzbTBiVWtQcHRkOEdTTGwwL2V4dDhVZGZIZGZrTW5qMVhTWDQ5NC9IdWNUWCt5dnA4WFNTOFMmI3hBO0hkMStCNi9mNzNyOE0wTThTVFF1c3NNaWhvNUVJWldVaW9JSTJJT1pnSU80ZU9sRXhOSFloZmhRN0ZYWXE3RlhZcTdGWFlxN0ZYWXEmI3hBOzdGWFlxN0ZYWXE3RlhZcWd0YTFuVGRGMHk0MVBVNTF0N0syWG5MSzMzQUFkU1NkZ0IxT1JuTVJGbHYwMm1ubW1NY0JjcFBCTG05ODUmI3hBOy9uVHJiV2RsejByeWRaeVZrZGdTcG9kaTlLZXBNUnVFcnhYOFRnRXl5bnkrNTc2R0xUZGk0dUtYN3pVeUg0cnVqNTh5OWEwalFmSW4mI3hBOzViYUE4b2FLd3QxQUYxcUZ3YXpUTjI1TlRreDhFVWZJWmxSakRFTEx5V28xV3I3U3pWdk05SWprUHgzbjV2Sy9PUDhBemtyZVNTU1cmI3hBOzNsUzBXR0ViRFVMc2NwRDdwRDlsZmJrVDhobVBQVXlQTFo2cnM3Mk1pQUphaVZuK2JIbDhUK3F2ZXhTTHl2OEFuVjU1cFBjcmZUMnMmI3hBO2dxSkx5WDZ2QnhKNnBHNVJTUDhBVVhLUkNVOTZKL0htN2FXdDdMME8wZUFTSDgwY1IrZS8ybE9MWC9uR1R6bElnYTUxR3dnSk82cTAmI3hBOzBoQS81RnFLNVorV241T0hrOXROTUQ2WVRQeUg2V3J2L25HWHpuR2hhMjFDd25JT3lGcFl5UjdWakkvSEg4dFB5WEg3YWFZbjFSbVAmI3hBO2tmMHBQSm9INTErUTZ6d0MvdHJTS2xaTGFUNnpiVUhRc2ltUkFQOEFYWEsrR1VOOXc1ZzFYWmV2MlBBWkh2SERMNTdINUZtSGszL24mI3hBO0pXWVBIYStiTFFOR2RqcU5vS01QZVNIb2Zjb1IvcTVkRFVrZlZ1NmZ0SDJNRkdXbmwvbXkvUWYxL042ZHIzbGJ5TitZK2hSM0RHSzcmI3hBO2prVS9VOVV0aVBXaVArUzNzZXFNUG96SWxDR1FXSGw5THJ0VjJkbEkzaWVzVHlQNDd3OG8wN1dmT1A1TmE1SHBXczg5VDhwWGJINnYmI3hBO0tsYUtLN3ZEeXJ3ZGVyUlZvZnh6RmpLV0kwZVg0L0g0dDZ6TnA5TjJ6aU9URjZOUkhuKzN2SGRMK3g3N3BlcVdHcTZmYjZqcDh5M0YmI3hBO25kSUpJSms2TXAvVjRFZHN6NHlFaFllQXo0SjRwbUV4VW84d2lzazFPeFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1SkFCSk4mI3hBO0FOeVRpcjU4OHk2bHFuNXUrZTE4dDZSTTBYbGJTMkwzRnl2MldDbmkwNThTMzJZZ2ZuNDVycHlPV1ZEbCtOMzBQUlljZlpHazhmSUwmI3hBO3p6NUQ5SDZaZko2cnJXcytWUHl6OG5SMGpFTm5hcjZOalpJZjNrOHBGYVZQVXNmaWRqODh5cFNqaWk4cHB0UHFPMDlTZDdsTGVSNkEmI3hBO2Zqa0h6eVc4L2ZtOTVvSUc4VVo2ZkV0cFp4SHg2N21udXpaZytxY3U4dm9sYVRzakI1LzdLWi9Id0QxM1QvS241WGZsVHAwV29hek0mI3hBO2x6cTFLcGN6cUpKM2NmOEFMTkFPWEFlL2J1MlpQQkRIdkxjdkg1ZGZyKzFabUdJY09QdUd3L3pwZGZ4UVliNWsvd0NjbXRabmQ0dkwmI3hBOzJuUldjTmFMY1hmNzJVang0S1ZSVC93V1FscVpIbHM3clIreGVPSXZOTXlQZEhZZlBuOXpDTHo4NS96TnVwQzc2N0xIdlVMQ2tVU2omI3hBOzJvaUwrT1VuSkk5Uzd6SDdPYUdBb1l4OGJQM2x1ei9Pajh6YlIrU2E1TElPNnpKRktEL3dhSDhNUmtrT1JLTW5zNW9aamZHQjdpUjkmI3hBO3haejVaLzV5YTFPSjBpOHg2YkhjdzlHdWJPc2NvOXpHNUtOOUJYTG82cVE1N3VpMXZzWEFpOEV5RDNTM0h6NS9leTNVL0pQNVkvbWwmI3hBO3BzbXFhQlBIYWFwVDQ3bTNVSklybnRkVy93QVBML1cySjdOVEorSERKdkhZdW93ZHBhN3N1WXg1Z1pZKzQ4djgyWDQ5enlXMHZ2UHYmI3hBOzVRK2FHZ2xRaUdRMWtnSkp0THVJYmMwYnhIaVBpWG9mRE1jR1dPWGNYcnNtTFNkcjRMSFB2L2lpZng4QytoYkc4OG8vbWQ1TUplTVgmI3hBO0ZoZERqUGJzUUpyZWRmY1Y0dW5WVDNIc2N6UVk1WS9qWjg3eTQ5UjJacWVkVGp5UFNRL1NDOHM4bDZ6cW41VitlWmZKK3ZTdEo1ZTEmI3hBO0J3MWxka1VSVEllS1RyNEszMlpCMk8vYmZHeHpPS1ZIbCtOL3graDZydExUNCsxZEtOVGhGWm9mVVBkekg2WXZvSE5nK2ZPeFYyS3UmI3hBO3hWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3ZNdno3ODZTYUQ1VEdtV2I4ZFMxc3RicHhQeExBQisrWVUzcWFoQjg4eGRWa29WMy9jOVAmI3hBOzdLOW1qUHFPT1gwWTkvajAvWDhFei9LM3lmYWVTUEpLdGU4WWJ5YVA2N3E4NzdjQ0U1Y0NmQ0pOdm5VOThsZ2h3UnN1TDI1MmhMWGEmI3hBO3IwN3hCNFlEOGQ1L1E4STh3NnJybjVzZm1IRmFXTlZ0V1l3NmZHMWVFRnNwcTh6Z2R5UGliNkI0Wmh5a1p5OTczdWt3WXV5ZEdaVCsmI3hBO3JuTHpsM0Q3aDgzcnZtYnpCNWMvSi95ZmI2Um84S3phdGNLVEFqVTVTU1VvOTFjVTNwWG9QOWlLQWJaTXBERUtIMVBJYUxTWnUyTlMmI3hBO2NtUTFqSFB5SDgyUDQ4M3pacmV1YXJybXBUYWxxdHk5MWVUbXJ5dWUzWlZIUlZIWURZWmhrM3pmU3ROcGNlQ0FoakhERUlIQTVEc1YmI3hBO2RpcnNWVEhRUE1Pc2VYOVRpMVBTYmxyVzdoT3pLZG1IZFhYb3ludURoQkkzRGphdlNZOVJqTU1nNG9uOGJQcEhSdFc4c2ZuSjVLbTAmI3hBOy9VWTF0OVl0Z0RNaTd2Qk5TaXp3azdsRzdqL1luc2N6SWtaWTBmcUg0L0g5ajVycWRQbjdHMVFuQTNqUEx1a1A1cDgvN1hrbms3ekImI3hBO3JmNVdlZjV0TzFRTXRrWkJCcWtJcVZlSTdwUEdPNVVIa3ZpS2p2bU5DWmhMNy94OXoxL2FPa3hkcTZRVHgvVlZ4UG4xaWZ1KzE3ZCsmI3hBO2NQa21Eemg1TmU0c2xXWFVyRkRkNmJLbnhHUmVQSjRsSTZpUmVudlRNdlVRNG84UTZmYzhQN1BkcEhSNm1wYlFsNlplWG44UHV0VC8mI3hBO0FDTjg2TjVrOG1Sd1hMbDlTMGdyYTNMSGNzbFAzTWgrYWloOTFPT21uY2E3bVh0UDJiK1cxSk1mb3llb2ZwSDQ3M29tWkx6anNWZGkmI3hBO3JzVmRpcnNWZGlyc1ZkaXJzVmRpcnNWZURYa2YrTnYrY2hGdHBBWk5NOHVBRjBPNi93Q2kwWTFIVGU1a0NuMnpYbjE1Zkw5WDdmdmUmI3hBOzl4bjhsMlB4RDY4MysrLzQ2RS8vQU9jalBOYjZYNVRoMGEzZmpjNnpJVmxwMUZ2RFJwUCtDWXFQbFhMZFZQWUJ3UFpEUURMcURsUDAmI3hBOzR4L3NqeS9TZ2Z5SzBDeDhzZVI3L3dBNmFwUkh1NDNsRG1sVXRJSzdDdmVSMUo5L2h5R0FDTVRNdC90UnFwYXJWUjB1UCtFZ2Y1eC8mI3hBO1VQMHZDdk4zbWUvOHplWWJ6V2IwbjFMbHlZNDZraU9JYkpHdGV5ci9BRnpHSkpObDd2cy9SUTB1R09LUEtQMm5xVW53T2E3RlhZcTcmI3hBO0ZYWXE3RlUrOGorYmIzeXA1bHROWnRTU0ltNDNNSTZTd04vZVJtdmlPbmdhSEpSa1ltdzRIYWVnanE4RXNVdXZMeVBRdmF2K2NndkwmI3hBO2RscmZsYXc4NjZaU1UyNlIrck1vL3ZMTzRvWTJQK283aW4rc2N5ZFJHd0poNG4yVDFrc0dvbHBjbTEzdDNTanorWSs1UFA4QW5IcnomI3hBO1Urc2VTdjBiTzVlNjBSeGIxUFV3UFZvZnVveUQyWEo2V2RnanVjRDJ0MFBnNnJqSDA1QmZ4Ni9yK0xGdkxLRHlUK2Z0N295ZnV0TTEmI3hBO3dONkNEN0lFdzlhS2xmNVpGYU1aVEQwWks2Y3ZueS9RN1hXbjg3MlJITHpuaTUvRFkvWlJlOVpzSGdYWXE3RlhZcTdGWFlxN0ZYWXEmI3hBOzdGWFlxN0ZWc3NpUlJ2STVvaUFzeDYwQUZUMHdFMExURUVtZzhRLzV4dmhOL3FIbWp6RlB2UGRUSWdKMzNrWjVwTi9jbGN3ZElOeVQmI3hBO3pBL0gzUGMrMk12RGhod2psRWZkUUg2V0lmOEFPUWQ5UHFuNWxKcGNacWJPQzN0WTA3ZXBQKzlyOVBxcmxlcGw2ejVPMzlrOFF4YUUmI3hBOzVEL0VaSDREYjlEUC93QStidUx5NytXV25lWGJOaXFYTHcyWUErR3R2YXB5YnA0c3FaZHFQVEFSL0d6ei9zdGpPbzEwczB1bHkrTWomI3hBOy9hK2E4eEgweDJLdXhWMkt1eFYyS3V4VjJLdnBmOG01bDgxL2xCZStYN284Mmcrc2FlT1haSkU5U0p2OWlaS0QvVnpMd2ppeG1QNC8mI3hBO0Z2bVh0Rkg4cDJqSE5Icnd6K1d4Kzc3V0IvOEFPTjJweTJYbnU2MDE2cXQ5YVNLeUhiOTdBd2NiZXk4eGxXbWw2eDUvMnUrOXNjSW4mI3hBO3BJekg4TWg4aitBeWYvbklGVHBQbS95ajVsaitHU0dRbzhuZ0xXWkpsQjl2M2paUFY3U0I4dnVkWjdKbnhkUG53SHFQOTBDUDBCN24mI3hBO21lOEk3RlhZcTdGWFlxN0ZYWXE4Mzg5Zm4xNU84a2E2MmphN1o2akhjK21zMFVzVUVieFN4djBlTmpLdFJVRlR0MUdLc2QvNkcyL0smI3hBO3ovZk9wLzhBU1BIL0FOVnNWZC8wTnQrVm4rK2RULzZSNC84QXF0aXJ2K2h0dnlzLzN6cWYvU1BIL3dCVnNWVUwvd0Q1eW4vTFBVYkcmI3hBOzQwK0NMVWhQZVJQYnhGN2VNTHpsVW92SWlVN1ZPUXlSNG9rZDRiY0V4REpHUjVBZ3BSNVMvTURRZnlYZ3UvTEhuR0s1L1RGMUtMNVImI3hBO1pLazhRZ2RGalNyRjQvaTVSdlVmTEt0UGpNUnZ6ZDc3U2RwNDlabmpMSGZER05iN2IyZjJKWHFPbDNubUhXVy9PQzJpSjhscmNwcU0mI3hBO2hkbFc3K3JXRWl4emdSVlB4VmdZS09YaGxFc01qUGx0YnQ5SjdRYWZGMmQ0Ry9pY0VoeTJzM1gzcGo1czErSDg4WkxPMzhqeFRjdEMmI3hBO0VzbW9KZjhBQzNCRjBVRVJTalNjcWVpOWZETGRUak1xb1c0SHN4MnRnMFp5ZUxmcTRhb1h5dS92Q1EvOUM3L21UL3ZpMS82U0YvcG0mI3hBO040TSs3N3YxdldmNkx0RjN5LzBxMlgvbkh6OHhZbzJsbGp0STQwQlozYTVRS0FPcEpQVEFjTXh6SDNmclRIMnMwWk5BeXY4QXFzQzEmI3hBO2JTLzBiZEcyTjNiWGNpMUR0YXllcWdJL3l3QXJmN0VuS2dYZjZmUDRrZUxobEgrc0srem44MEZoYjNZcWo5RzBnNnBkQzFTN3RyU1YmI3hBO2lBaHU1UFJRay84QUZoSEFmN0lqQVM0K3AxSGhSNGpHVWgvUkYvWnpaMm4vQURqMytZMGlLNlJXam80REt5M0NrRUhjRUVETFJobWUmI3hBO24zZnJkQ2ZhM1JBMFRML1NydjhBb1hmOHlmOEFmRnIvQU5KQy93Qk1QZ3o3dnUvV2ovUmRvdStYK2xaQjVVODFXZjVJQzYwenp2Rk4mI3hBOzYrc2NMbXlXd0NYQ2hJdVNPWEphT2hKSXpKMDJPVWJKMmVROXB1MWNPc25BNHI5SU4yS1N6UXRNdmZKT3JXbjVxNm5HdzhuVEY3cUwmI3hBOzBXVjdsb05TaVlXd01OVkZmM3lGaFhiSzhPR1VaQ3hzSFpkcCswR216NkR3UmZpVkRwMUJGL2NVeTgxK2N0Sy9PMDJ1aCtTb2JqOUkmI3hBOzZaNmw5Y0MrUklJL1JQR0kwY08veGNuWGFuNnNzMU9NeW9oMWZzMTJyaTBlU1p5M1VvOU4rcWVXdi9PV1g1WVIyMFVja2VwdElpS3ImI3hBO3Q5WGpOU0JRbXBseklpS0FCZWRtUVpFaFUvNkcyL0t6L2ZPcC93RFNQSC8xV3lUQjMvUTIzNVdmNzUxUC9wSGovd0NxMkt1LzZHMi8mI3hBO0t6L2ZPcC85SThmL0FGV3hWazNrSDg4L0tQbnJXVzByUXJUVUdtamlhYWVlYUJFaGpRYkRtNGthbkk3QVV4VjZKaXJzVmVlZm5iK1YmI3hBO2x0K1lIbFI3ZUZWVFhiRGxOcEZ3MUI4ZFBpaGMvd0FrdEtleG9lMkt2aFM3dExtenVwclM2aWFDNXQzYUtlR1FGWFIwUEZsWUhvUVImI3hBO2lsU3hWMktyNFpYaG1TVlB0eHNIV3ZpcHFNVmU1ZjhBT1cwYVhIbTd5L3JVUUl0OVIwaVAwMnAxNFRTU2RmSGpNdUtBOUcvSThONWkmI3hBOy93Q2NiOVQwT01lcEpIRnFtbklnb1NIbVJwbDdkYTNBSXJpcnozL25FRFdZclh6M3FtbHlOeC9TTmdXaUg4MGx2SXJVL3dDQWR6OUcmI3hBO0tsOVMrWi9NK2orV2RIbTFiVnBoRmJSQ2lxTjNrYy9aampYOXBtL3oyeUdUSUlDeTVlaTBXVFU1Qmp4aTVIN1BNdmxUOHdmelg4eWUmI3hBO2NiaDQ1cERhYU9HckJwc1RIaFFkREtkdlViNTdEc00xczhobWQzMWZzbnNMQm94WUhGazZ5UDZPNWhXUWQyN0ZYWXE3RldkZmwzK2ImI3hBO3ZtUHlmY0pCemErMFVuOTlwOHJINFI0d3NhOEc5dWg4TytXWThoaHlkRDJ2MkJoMWd2NmN2ODRmcDcvdmZWUGx6ekhwSG1MU0lOVjAmI3hBO3FjVDJrNDJQUmtZZmFSMS9aWmU0ell3bUpDdytVNnpSNU5Qa09QSUtrUHhZOG55Yi93QTVhNnVML3dETXkxMHlHcm5UYkNHSjBGU2YmI3hBO1duZDVhQWU2T21UY2NQU3YrY2ttL1FYNUhhUm9idCsrYVd4c1NvSXFSYlFNN0gzQU1ReFE4Ky81eFZMMk54NTA4d1ZLeDZYcE5XZnMmI3hBO0N4YVlkUVIveDduRlM4SHhTN0ZYWXFpTlAwKzkxRyt0N0N4aGE0dkx1UlliZUJCVm5rYzhWVUQzSnhWOTRmazUrV05uK1gvbEtMVHgmI3hBO3hrMWE3NHo2dmRMKzNOVFpGUDhBSkVEeFg2VDN4UXp2RlhZcTdGWHpUL3psTCtVUE5IOC9hSkQ4YUFMcjF1ZzZyOWxMb0FlR3l5ZlEmI3hBOzM4eHhWOHhZcGRpcnNWZTgvbUtQOFdmODQ2K1RQTTBaOVM1OHVQOEFvdSs4VVNndCtUSDNNTUovMldLRXkvNXc5ODJKYjZ2clBsYWQmI3hBO3dCZlJyZldTbnZKRDhFcWozWkdVL0pjVkxDL00wTjUrVXY1OHRlMjhUQzB0YjBYdHJHdTNxMk4xWG5Hdit3ZDR2bU1Vc2cvTjd6N2UmI3hBO2ViUE5NdytPTFM5T2Q3ZXh0WEJVamlhUEk2bm83a2ZRS0R0bXJ5ejRwVyt1K3p2WmtOTnB3ZWM1Z1NKKzRmQmcyVnUvZGlyc1ZkaXImI3hBO3NWZGlyUHZ5ZC9NSzc4cCtaRWhrRWsrazZpeXhYZHJHQzdCanNrc2FEcXluc09vK2pMY016R1E4M25QYWJzeUdvMHhueW5qQmtENUQmI3hBO21QeDFZNytYRmxlL21oK2V5NnRlUjF0MnZHMWUvVTFaVXQ3ZGdZb2p2OW12cHhkZW1iTjhtWlAvQU01ZmViSTczelJwZmxxQnFycEUmI3hBO0RYRjJCL3Y2NjRsVlArckVpbi9aWW9DaDVWRGVVZjhBbkdMekRyRWhNZDU1dXV2cU5uMjVRbjl5dy80QmJnNHE4RnhTN0ZYWXErcWYmI3hBOytjWFB5aE5qYXA1NzF1Q2w1ZElSb2NEamVPRmhScmdnL3RTRFpQOEFKMy9hR0tIMFZpcnNWZGlyc1ZXWEZ2QmN3U1c5eEdzc0V5TkgmI3hBO0xFNERLeU1LTXJBN0VFR2h4VjhNZm5wK1ZNM2tIelV5MnFzM2wvVWkwMmxUR3A0Q3RYdDJQODBaTzNpdEQxcmlsNXRpcnNWZTQvOEEmI3hBO09PT3NXR3NXWG1MOHNOWWs0MlhtUzNlWFQyWTdKZElsSDRpb3F4VlZrSC9HUEZCZWFhZGVhLzhBbDM1L2p1Q25wYXY1ZnZDc3NSSkMmI3hBO3Y2WktTSlgrU1ZDUlh1cHhTK3BmekJrL0xYelZaZVF2ekN2cHFXY2QvRDZiaFE1ZUpnMGp3enFEMGhtaUhQclQ0aCsxbFdYS0lWYm4mI3hBO2RuOW5aZFhLVWNmT01UTDludktUL256K1Y1ZHBQT21oSUpZSmdKTlZoaStMcVA4QWVsT1BWU1B0L3dEQmVPWXVmRlhxSEl2WmV5M2ImI3hBO2RWcGN1eEgway83bjlYeWVGWmpQZU94VjJLdXhWMkt1eFY3NytSWDVZZm8rTWVkZk1LQ0FSeHRKcHNNM3crbWxEeXVaT1ZPUHcxNFYmI3hBOzdmRjRaazRNZjhaNUQ4VytmKzFIYmZpSDhyaDMzOVJIWCtpUDAvTHZSZjVmWFg1Y2VSL0tYbkh6NXB4SnM1OVJ1U29ZQkc0STFiYTAmI3hBO2g2bWptUUZhL3dBd3Iwekx4WlJNV0hrZTBlejhta3lDR1Q2akVINS9xNVBsNktQekQrWWZuMEtQMzJzK1lMd2xxRDRWTWhxeDlraVQmI3hBO2YyVVpZNEwwZi9uSmJYOU90cnpSUHk4MFZ2OEFjWDVVdFVqbXBUNHJsMFVBTVJzV1NNQW4vS1pzVUI0bmlsMkt2VS95Qy9LV1R6MzUmI3hBO24rczM4Wi93M3BUTEpxREdvRXo5VXRsUCtWMWZ3WDNJeFY5dlJ4eHhSckhHb1NOQUZSRkFDcW9GQUFCMEF4UXV4VjJLdXhWMkt1eFYmI3hBO2pYNWllUk5KODhlVmJ2UWRSSEgxUnp0TGtDclFYQ2crbkt2eUpvUjNGUjN4VjhDZVpmTG1xK1c5ZHZORTFhRXdYOWpJWTVVN0dtNnUmI3hBO3A3cTYwWlQzR0tVc3hWRjZScXQvcEdxV21xYWZLWUwyeWxTZTNsSDdMeHNHSDBiYmpGWHUzNXI2SFkvbWQ1SnRmelU4c1FnNnJheEwmI3hBO2IrYXRPajNkV2lVQXljZHlmVEhmdkhRL3NuRkRFZnlvOHQrWmZOM2xuWHRMMDY0ZVpORmFIVUxiU3p1SGVZUEhONmZnNVZGMjcwcDEmI3hBO3pHMU9NeUZqbzlKN005cHcwdW9QaWJRbUt2dTd2ZzlOL0tYODU1UEx2RHkxNW9ESFNZeVlvYmxsSmt0VFdoamtXbFRHRFh0VmZsMHgmI3hBOzhPYmgyUDB2VDl2ZXpnMUg3L0IvZWN5T2t2TWVmM3NsODlma1BwSG1DTTY5NUt1WUludVI2djFRTURhUzEzNVF1dGVCSjdmWi93QlgmI3hBO0p6MDRJdUhKMW5aZnRUazA1OEhWQW5oMnYrSWU4ZGZ2OTd3N1gvS2ZtVHk5Y0dEV2RQbXNuclJXa1UrbTMrcElLbzNUc2N4aUNEUmUmI3hBOzYwbXZ3YWdYaWtKZmY4dWFVNEhMZGlxY2VYdkovbWJ6RmNDRFJ0T211eVRScEZXa1M5dmprYWlMOUp3Z0VtaHU0V3I3UXdhY1hsbUkmI3hBOy9mOEFMbTl6OGova2JvWGxhSC9FUG5TNmdubXRSNnZvTWFXa0ZOK1VqTlQxR0h5NCt4MnpLaGdFUmMzaGUwL2FmTHFqNE9sQkFsdGYmI3hBOzhSOTNkOS91WWorYkg1dzNmbTJmL0RubHBaUDBSSTZvenFyQ2E4ZXRGVUtQaUVkYVVXbFQzOE1xelp1UGJvN2ZzSDJlanBCNCtldkUmI3hBOyt5SDdmUG84MC9OL3k1NWs4bzZSb09oYWpka1JhZ3NtcXphYXV5UlRta0s4elg0blZGcDdWSUdaV254bU1kK3J5WHRIMm5EVjZqaWgmI3hBOzlFUndnOSs1M1pyK1crazJuNVMvbDlkZm1UNWdpWC9FbXJSRzM4c2FiS1BqVVNDb2RnZHh6SHh0NElLZFdwbVE4KzhDMURVTHpVYismI3hBOzR2NzJWcDd5N2tlYTRtYzFaNUpHTE14UHVUaWxENHFuSGxIeXJxM21yekZaYURwTWZxWGw2L0JTYThVVWJ2STVIUlVVRW5GWDM1NUYmI3hBOzhsNlI1TThzV2VnYVd2N2kyV3NzeEFEelROL2VTdlQ5cGo5d29PZ3hRbitLdXhWMkt1eFYyS3V4VjJLdkZmOEFuSkw4b1I1cjBML0UmI3hBO2Vqd2N2TU9reGt5Um9QaXViVmZpYVAzZVBkaytrZHhpcjQyeFM3RldiZmxSK2FHcStRUE1JdllBYm5TcnVrV3JhY2QxbWhyMUFPd2smI3hBO1NwNEg2T2hPS3ZwUHlEL3lySHl2cnNubTN5N2ZwRjVZODZCWUk0NmNZck85Z0pjeFBYKzZEaVEvQ3crRWorVWlsZVRLSUVYMWN6U2EmI3hBO0RMcUJJNHh4R0FzanJYbDdtUS9tVCtTK2grYjFiVXRQWk5QMXhoeSt0S0t3ejdiZXNxOS84dGQvR3VWWmRPSmJ4NXU0N0c5bzh1ajkmI3hBO0UvWGk3dW85MzZ2dWVLeFhuNXFmbFZxSHBNSmJXMVovN3FRZXRZeis2bjdOVC9rbFc4Y3d3WlFQYzl0TEhvTzFZWHRLWHltUHg4UTkmI3hBO0UwWC9BSnlXMEM4ZytyZVpOSGtoNWpqSzl2eHVJVzl6SEp3WUQyK0xMeHFiRlNGL2p1L2E4N3FmWXpOQThXRElENzlqOHgreEhuelAmI3hBOy93QTQ0YXFwbG5nc0lwRFF1cldVa0RWcWVwU05RVDhpY0psaEkzRmZQOURqL2t1MnNXd015UDY0UDNseSthLytjY3RJQW10b0xDV1UmI3hBO1ZLQkxLU1ovb1o0eUFmbVJnRXNJR3d2NS9wVTZIdHJOdEl6QS9yZ2ZjVXQxei9uSmZScldBMjNsblIza0tqakZKZGNZWVYrVVVaWmkmI3hBO1BhcTRuVTBLaUsvSDQ2dVRwZll6TE04V2ZKWHUzUHpQN1hueGI4MVB6VjFBQ2t0emFxMjIzbzJFSC9HdGZ2YktQVk05NWVoclFkbFEmI3hBOzZSbDg1bjhmQVBiL0FNdC95ZDBIeVpIK2tMdDB2OWFDa3ZmU0RqSEFLZkVJVlAyZmR6djhodG1aaXdDTzU1dkQ5c2UwT2JXbmdqNmMmI3hBO1g4M3FmZjhBcTVNVTg5VGZsaHIydWY4QUt3Zk1GNHQxNWM4cEo5UnRyVUtDdDdxSlByY0VxZjNxcXJMUmVoTlNUd0c5dVBLSlhUcU4mI3hBO1pvTXVtNFJrRlNrTHJxQjV2bXY4MFB6TDFyOHdQTWo2dGY4QTdtMWlCajA2d1ZpeVFRMTZiOVhicTdkejdVR1dPSXcvRld3Q1NBQlUmI3hBO25ZQVlxKzAvK2NkZnlqSGt6eTcrbU5WaDQrWmRYUldtVmg4VnRibWpKQjdNZnRTZTlCK3ppaDYvaXJzVmRpcnNWZGlyc1ZkaXJzVmQmI3hBO2lyNCsvd0NjbVB5aS93QU5hMGZOV2p3Y2RDMVdRL1dva0h3MjEyMVNSUWRJNWVxK0JxUERGTHczRlhZcXlUeU5xTUs2MWE2VHFWN0omI3hBO2E2RnFGeEdsNlZJS1J1UVk0N2dxMjM3b3ZVOStOUlhmSzhtUGpGT3c3TTdSbm84d3l3MzZFZDQ3dngxZlJsdHJuNXBmbEpJdG5xOXYmI3hBOyttL0t5dHhobUJZb2lrN0NPV2hhSTdmWWNVOFBITUlTbmkyNmZaK1B4VDJVOU5vTzFoeFl6NFdmcVAxanI3eHYzdlN2THY1ci9sNTUmI3hBO3R0ZnFyWGNVTTB3cExwdW9oVUo3OGZqckhKL3NTY3lSbmhJVWZ0ZVoxbllXczBrdUxoSkEvaWoremNJZlcveUovTGZWV2FSYkJ0UGwmI3hBO2NmM2xqSVlodjNFYmM0aDlDNG5UUVBMWnMwM3RScmNXM0Z4aitrTCszWS9heFc1LzV4ZjBGaWZxMnQzVVk3Q1NPT1QvQUlqNmVWSFMmI3hBO0hvZnMvYTdXSHR0bS9peHhQeEkvVzNiZjg0ditYMUkrdGExZHlqOW9SUnh4ay9MbDZtSTBoNm43UDJyUDIyemZ3NDRqM2tuOVRLOUYmI3hBOy9JMzh0OUlZVEhUemZTcHVKTDZReWdVOFUrR0w3MXl5T21nT2U3cWRUN1RhM050eGNJL29pdnQ1L2FxZVpmemQvTDd5cGJtMlM2anUmI3hBO3JpRmVNV25hZUZmaVIreVN0STQvcE5mYkdXZUVSUTM5ekhSZGdhelZuaTRURUgrS1g0c3ZOYmpVUHpSL051UXcyc1g2Qzhva24xSmkmI3hBO1dFYklEdnpjOFduSS9sV2krTk91WTVNOHA4dnNlbGppMEhaQXVSOFhVZmFQK0orTzc1djg0NnRGZGF0UFphZmRTM0doV00waWFZSkQmI3hBO1FNbGVKbTREWU5OeDVINkIyR1p1UEdJQ25pKzBkZlBWNWpsbnpQVHVIY2tPV09DN0ZYdm4vT01QNVFqWE5VWHpuclVITFNOT2twcGsmI3hBO0xqNFo3cEQvQUhsRDFTRS9lL3lJeFErdDhWZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkaXFYK1lOQjB2WDlGdk5HMVNFVDZmZlJtS2VNK0ImI3hBOzZFSHN5bWpLZXgzeFY4RGZtWCtYK3FlUlBOZDFvZDhDOFMvdmJDN3BSWjdkaWVFZzk5cU1PekE0cFlyaXJzVmZaSC9PT1g1c1dubTcmI3hBO3kwdmxiV3BGZlh0TWg5SUpMUS9XN1JSeFYvaSsweUQ0WkI4bTdtZ0l2bW9KQnNNbDh6L2tMNUMxdDVKN2VCOUp1M3FUSlprTEdXUGMmI3hBO3dzQ24vQThjeDU2V0o1YlBSNkwycDFlQUFFK0pIK2x6K2ZQNTJ4QmZ5WC9OUFFLanl2NXNyYnJzdHU4azF1S2R2M1k5YUtveW44dE8mI3hBO1BJL0xiOGZOMjU5bzlCcVA4WXdiOTlBL2JzVlFRLzhBT1VGbWhWWkliMENnV3BzSy9PckNNbjZjUU0zbjlqRXk3Q21lUmovcC93QnImI3hBO2piLzg1UDNpaFhtaHNnYWhnRFlBL2Vna1AzSEVqTnkzK3hSUHNLSFF5LzAvN0ZoL0pQOEFNelhpditLdk5wOUEvYWdqZWE0Rk80NE4mI3hBOzZNWUp4L0xUbHpQNmZ4ODJYK2lUUTZmL0FCZkJ2MzBJL2J1V1krVi95SjhnNkU2VHkyemFyZUpRaWE5SWRBUnY4TVFDeC84QUJBNWQmI3hBO0RTeEhQZDAydTlxTlhuMkI4T1BkSDlmTmhuL09TLzVzMjNsenkrL2t6UnBGR3M2bkQ2ZDM2VzMxV3pZVUkyNlBLdndxT3kxTzN3NWsmI3hBO2dVODhTU2JMNUN4VjJLc3gvS3I4dWRSOC9lYmJmUjdibEZaSlNiVTd3Q29odDFQeEh3NXQ5bEI0KzFjVmZlMmo2UnAyamFWYTZWcHMmI3hBO0MyOWhaUkxEYndyMFZFRkI4ejRrOVR2aWhHWXE3RlhZcTdGWFlxN0ZYWXE3RlhZcTdGWFlxODgvTzM4ckxiOHdQS2oyOEtxbXUySEsmI3hBO2JTTGhxRDQ2ZkZDNS9rbHBUMk5EMnhWOEtYZHBjMmQxTmFYVVRRWE51N1JUd3lBcTZPaDRzckE5Q0NNVXFXS29yU3RWMUhTZFJ0OVMmI3hBOzAyNGUwdjdSeExiM0VSb3lNTzQvaU8rS3ZycjhwdjhBbkpueTk1amhnMHZ6VkpIbyt2YklMbGp3dExocTBCVmovZE9mNVdOUEE5c1UmI3hBO1BiMVlNQXlrRlNLZ2pvUmlyc1ZkaXJVa2lSbzBrakJJMEJaM1kwQUEzSkpPS3ZDZnphLzV5ZDBQUW9adEo4blNSNnJyUnFqMzYvSGEmI3hBO1c1OFFla3plSEg0ZkVuN09Ldmt2VU5RdnRTdnA3Ky9uZTZ2YnAybHVMaVZpenU3R3BaaWNVb2ZGVVJwK24zdW8zMXZZV01MWEY1ZHkmI3hBO0xEYndJS3M4am5pcWdlNU9LdnZEOG5QeXhzL3kvd0RLVVduampKcTEzeG4xZTZYOXVhbXlLZjVJZ2VLL1NlK0tHZDRxN0ZYWXE3RlgmI3hBO1lxN0ZYWXE3RlhZcTdGWFlxN0ZYWXErYWYrY3BmeWg1by9uN1JJZmpRQmRldDBIVmZzcGRBRHcyV1Q2Ry9tT0t2bUxGTHNWZGlyTHYmI3hBO0tYNXMvbUg1VFZZdEUxdWVDMVhwWnljWjdjRDJpbERvdit4QU9LdlJySC9uTDc4eG9ZdUYxcDJsM1RDbEpUSE5HeDhlWEdYajl3R0smI3hBOzAxZi9BUE9YdjVqenhjTFhUOUx0R05heWlLYVJoOHVjdkg3MU9LMDgzODIvbW4rWUhtME5IcjJ0VDNOc3hxYk5Dc052dDAvY3hCRU4mI3hBO1BFaXVLc1V4VjJLdXhWOVUvd0RPTG41UW14dFU4OTYzQlM4dWtJME9CeHZIQ3dvMXdRZjJwQnNuK1R2KzBNVVBvckZYWXE3RlhZcTcmI3hBO0ZYWXE3RlhZcTdGWFlxN0ZYWXE3RlhZcXN1TGVDNWdrdDdpTlpZSmthT1dKd0dWa1lVWldCMklJTkRpcjRZL1BUOHFadklQbXBsdFYmI3hBO1p2TCtwRnB0S21OVHdGYXZic2Y1b3lkdkZhSHJYRkx6YkZYWXE3RlhZcTdGWFlxN0ZYWXE5VC9JTDhwWlBQZm1mNnpmeG4vRGVsTXMmI3hBO21vTWFnVFAxUzJVLzVYVi9CZmNqRlgyOUhISEZHc2NhaEkwQVZFVUFLcWdVQUFIUURGQzdGWFlxN0ZYWXE3RlhZcTdGWFlxN0ZYWXEmI3hBOzdGWFlxN0ZYWXE3RldOZm1KNUUwbnp4NVZ1OUIxRWNmVkhPMHVRS3RCY0tENmNxL0ltaEhjVkhmRlh3SjVsOHVhcjViMTI4MFRWb1QmI3hBO0JmMk1oamxUc2FicTZudXJyUmxQY1lwU3pGWFlxN0ZYWXE3RlhZcW5IbEh5cnEzbXJ6RlphRHBNZnFYbDYvQlNhOFVVYnZJNUhSVVUmI3hBO0VuRlgzNTVGOGw2UjVNOHNXZWdhV3Y3aTJXc3N4QUR6VE4vZVN2VDlwajl3b09neFFuK0t1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjImI3hBO0t1eFYyS3V4VjJLdXhWMkt2RmYrY2t2eWhIbXZRdjhBRWVqd2N2TU9reGt5Um9QaXViVmZpYVAzZVBkaytrZHhpcjQyeFM3RlhZcTcmI3hBO0ZYWXEyQVNRQUtrN0FERlgybi96anIrVVk4bWVYZjB4cXNQSHpMcTZLMHlzUGl0cmMwWklQWmo5cVQzb1AyY1VQWDhWZGlyc1ZkaXImI3hBO3NWZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkaXJzVmRpcnNWZGlyc1ZmSDMvT1RINVJmNGExbythdEhnNDZGcXNoK3RSSVBodHJ0cWtpZzYmI3hBO1J5OVY4RFVlR0tYaHVLdXhWMkt1eFY3NS93QTR3L2xDTmMxUmZPZXRRY3RJMDZTbW1RdVBobnVrUDk1UTlVaFAzdjhBSWpGRDYzeFYmI3hBOzJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLcGY1ZzBIUzlmMFc4MGJWSVJQcDk5R1lwNHo0SG8mI3hBO1FlekthTXA3SGZGWHdOK1pmNWY2cDVFODEzV2gzd0x4TCs5c0x1bEZudDJKNFNEMzJvdzdNRGlsaXVLdXhWbVA1VmZsenFQbjd6YmImI3hBOzZQYmNvckpLVGFuZUFWRU51cCtJK0hOdnNvUEgycmlyNzIwZlNOTzBiU3JYU3ROZ1czc0xLSlliZUZlaW9nb1BtZkVucWQ4VUl6RlgmI3hBO1lxN0ZYWXE3RlhZcTdGWFlxN0ZYWXE3RlhZcTdGWFlxN0ZYWXE3RlhZcTdGWFlxN0ZYbm41Mi9sWmJmbUI1VWUzaFZVMTJ3NVRhUmMmI3hBO05RZkhUNG9YUDhrdEtleG9lMkt2aFM3dExtenVwclM2aWFDNXQzYUtlR1FGWFIwUEZsWUhvUVJpbGZwK24zdW8zMXZZV01MWEY1ZHkmI3hBO0xEYndJS3M4am5pcWdlNU9LdnZEOG5QeXhzL3kvd0RLVVduampKcTEzeG4xZTZYOXVhbXlLZjVJZ2VLL1NlK0tHZDRxN0ZYWXE3RlgmI3hBO1lxN0ZYWXE3RlhZcTdGWFlxN0ZYWXE3RlhZcTdGWFlxN0ZYWXE3RlhZcTdGWFlxK2FmOEFuS1g4b2VhUDUrMFNINDBBWFhyZEIxWDcmI3hBO0tYUUE4TmxrK2h2NWppcU0vd0NjWFB5aE5qYXA1NzF1Q2w1ZElSb2NEamVPRmhScmdnL3RTRFpQOG5mOW9ZcStpc1ZkaXJzVmRpcnMmI3hBO1ZkaXJzVmRpcnNWZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkaXF5ZUNDNGdrZ25qV2FDWlRITEZJQXlPakNqS3kmI3hBO25ZZ2pZZzRxM0hISEZHc2NhaEkwQVZFVUFLcWdVQUFIUURGVjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYmI3hBOzJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWRDZpSmpwOTBJZVgmI3hBO3Jlay9wY0s4dVhFOGFVNzF4VjgwZmtiWi9ubEYrWStudjVzYnpBZEVFZHg2NDFHVzdlMjVlaTNwOGhLeFN2T2xLOThWUStoMmY1N2omI3hBOzg0cmVTN2J6Ri9ocjlOa3lDU1c3Tm45VCtzR2xWTGVuNlhEdFNsTVZmVStLdXhWMkt1eFYyS3ZIZitja1lQekdtMGJSaDVJT3FDNkYmI3hBO3hLYno5RXZPaitud0hIMVBSS21sZWxjVlIvOEF6anBENTdpOGszcStkVHFKMVU2bEtZZjBxOHp6L1YvUWc0OFRNV2JoejUwN1ZyaXImI3hBOzFQRlhZcTdGWFlxN0ZYWXE3RlhZcTdGWFlxN0ZYWXE3Rlh5RCtjdjV5L21ib2Y1bTY5cE9rNjlOYTZmYXpJdHZicWtKQ0F3b3hBTEkmI3hBO1QxSjc0cXd6L29ZRDg0ZitwbW4vQU9SY0gvVlBGTlByejhtTmMxWFhmeXgwTFZ0V3VHdTlSdW9wR3VMaGdvTEZaNUZGUW9VZlpVRHAmI3hBO2loTC9BTS92TXV1ZVcveXl2OVcwUzdheTFDS2EyV080UUt4QWVaVllVY01Od2ZERlhuZi9BRGpGK1pQbmZ6WjVnMXEyOHhhckpxRUYmI3hBO3RhUnlRSklzYWhYTW5Fa2NGWHRpckUvejAvT0Q4eWZMMzVxYTNvK2phNU5aNmJhL1ZmUXRrU0VxdnFXY01qVUxJeDNkeWV1S1gwOTUmI3hBO1B2TG05OHBhSmUzVWhsdXJtd3RacDVUUUZwSklWWm1OS0RjbkZERWZ6Kzh5NjU1Yi9MSy8xYlJMdHJMVUlwclpZN2hBckVCNWxWaFImI3hBO3d3M0I4TVZmTEZ0L3prUitjbHZKNmkrWTVIN0ZaSUxXUlNLMTZORWZ3eFRUMkw4blArY25yclhOWnRmTG5uQ0NHTzV2WEVObHF0dVAmI3hBO1RScG1ORVNhTWtnRnpzR1dnclFVNzRvZlJXS3ZGUDhBbko3eno1cjhwYUpvbHg1ZDFGOVBtdXJtV09kNDFSaXlyR0NBZWF0M3hWRWYmI3hBOzg0eWVkZk5IbXp5cnExNTVodjMxQzV0NzcwWVpKRlJTcWVpamNmZ1ZSMUp4VjZaNXd2TG15OHBhM2Uyc2hpdXJhd3Vwb0pSUWxaSTQmI3hBO1daV0ZhallqRlh4TC93QkRBZm5EL3dCVE5QOEE4aTRQK3FlS2FSMmhmbngrYmx4cmVuMjgzbU9kNFpybUdPUkRIQlFxMGdCRzBmY0gmI3hBO0ZEN2p4VlR1YmlHMnRwYm1kZ2tNQ05KSzU2QlVGV1AwQVlxK0Zyci9BSnlFL04yUzVsa2k4eFR4Uk83TkhFSTRLS3BOUW9yR2VneFQmI3hBO1Q3ZjBEVkUxYlF0TzFXT25EVUxXRzZUajBwTkdzZ3Avd1dLRWRpcjVSL1AzODNQekc4dWZtZHFPazZKcmN0bHAwTVZzMFZ1aVJNQVgmI3hBO2dSbTNkR083R3ZYRldiL21qK2F1ditYdnlQOEFLbW9XZDgwZm1mekJhV0RtOEFReWY3ekpQY3loU0N2eE1RcDIvYXhWS2Y4QW5HbnomI3hBO2grWnZuTHpGcUY3cnV0ejNlaWFYQUZhQmtpVlpMaWMwakJLb3BvcXF6YkhyVEZYMGJpcnNWZWZmbnJZMlgvS3F2TTl4OVhqOWY2b1QmI3hBOzYzQmVkZWFqN1ZLNHErY2YrY1VyZUNmODBYU2VOWlUvUnR3ZUxxR0ZlY2ZZNHFYMmJGRkZGR0k0a1dPTmZzb29DZ2ZJREZYbFAvT1UmI3hBO1Ava250VC80ejJuL0FDZlhGWGxQL09HLy9LVStZZjhBbUJpLzVQWXFXRC84NUtmK1RxOHgvd0RSbC8xQVFZcGZaUGtML2xCdkx2OEEmI3hBOzJ6TEwvcUhURkRCUCtjb2YvSlBhbi94bnRQOEFrK3VLdklQK2NSdE4wN1VmTUhtTzIxQzFpdTdaN0NNUERPaXlJUVphR3FzQ01WTHkmI3hBO3pYTk50TFA4enI3VGRDSmUxZzFtUzMwMzB5U2VLM0pXSUl3TzlOZ0QzNjRwZm9WaWg4Ny9BUE9aUC9LT2VYUCtZeWIvQUpOREZVVi8mI3hBO3poei9BTW9Wcm4vYlMvNWtSNHE5OVpWZFNyQU1yQ2pLZHdRZXh4Vjh3LzhBT1pObmFXLytFUHE4RWNQTDlJOHZUVlZyVDZyU3RBUEgmI3hBO0ZReS8vbkU2eHNwdnl3bGxtdDQ1SkJxZHdBN29yTUtSeEVia1lxOXd4VmhuNXk2eWRHL0szek5mS3dWL3FNbHZHeDdQZFV0MUk5K1UmI3hBO29wNzRxK0FRamxDNEI0S1FDM1lFMUlINEhGTDdyLzV4NTFuOUsvbERvRWpOeWx0STVMS1FmeS9WNVdqUWY4aXdweFE5R3hWOFJmOEEmI3hBO09UMy9BSk9QVnY4QWpEYWY5UXlZcENVL20xNXRHc3grVWRKaGs1Mm1nZVh0TnRxQTFIMWlXMWpsbVB6RlVRKzY0cStyZnlBOGwvNFUmI3hBOy9MUFRZSm8rR29ha1AwamZWSHhCNXdDaW4zU0lJcEhqWEZEMGJGWFlxd1Q4OVA4QXlVZm1mL21EUC9FMXhWODMvd0RPSmY4QTVOUi8mI3hBOysyYmMvd0RFNHNVbDlsNG9lVC84NVEvK1NlMVAvalBhZjhuMXhWNVQvd0E0Yi84QUtVK1lmK1lHTC9rOWlwWVAvd0E1S2Y4QWs2dk0mI3hBO2YvUmwvd0JRRUdLWDJUNUMvd0NVRzh1LzlzeXkvd0NvZE1VTUUvNXloLzhBSlBhbi93QVo3VC9rK3VLdmp6UVBNUG1qUlk3NTlDdmImI3hBO214VzRpOUsrbHRTeUV4RTdCblhkUlgzeFM5TS81eGtYOHZUNTZoZnpGTElOZkRqOUFSeUtQcXBuUFFsd2ErdFgrN0REajc4cVlxK3omI3hBOzhVUG5mL25Nbi9sSFBMbi9BREdUZjhtaGlxSy81dzUvNVFyWFArMmwvd0F5SThWZS9ZcStadjhBbk5IL0FLWTcvdDVmOWl1S1F5Ly8mI3hBO0FKeEovd0RKV1RmOXRPNC81Tnc0b2UxWXE4Uy81eTMxbjZuK1d0dnA2bjk1cWQvRkd5K01jS3RLeCtoMVRGWHoxQjVWRGZrUmRlWkEmI3hBO0tTcjVoanQvK2VLMmhxZitSa294Uzl5LzV3NzFreitVTmMwaGlDYkMrUzRYeEMzVVFVRDVjcmRzVVBvREZYeEYvd0E1UGY4QWs0OVcmI3hBOy93Q01OcC8xREppa1BMWUp6RmNSVEZSSVkyVnVEN3FlSkZGSThOcVlxL1NIUWRXdGRZMFRUOVd0UDk1ZFF0b3JtRWRhSk1nZFI5QU8mI3hBO0tFZGlyc1ZZSitlbi9rby9NLzhBekJuL0FJbXVLdm0vL25Fdi93QW1vLzhBMnpibi9pY1dLUyt5OFVQS2YrY24wZHZ5ZDFVcXBJU2UmI3hBOzBMa0N0QjlZUVZQMGtERlhrMy9PRzdML0FJcjh3TFVjallSa0wzSUV3cWZ4eFVzRi93Q2NqNVk1ZnpvOHh0RzNKUTFxaEkvbVN5Z1YmI3hBO2g5REFqRkw3TzhqeHZGNUs4dnh1S09tbTJhc090Q0lFQjZZb1lGL3psRC81SjdVLytNOXAvd0FuMXhWNVAvemg1RkZMNWs4eHhTb3MmI3hBO2tVbGhHc2tiQU1ySzB0Q0NEc1FSaXBlUy9tUEZwZW0vbVBycWVYMldPd3RkUWxOazBCK0JPTDFwR1IyUnRscGlsK2dkaExMTFkyOHMmI3hBO3Uwc2tTTklLVStKbEJPM3p4UStmditjeWYrVWM4dWY4eGszL0FDYUdLb3IvQUp3NS93Q1VLMXovQUxhWC9NaVBGWHYyS3ZtYi9uTkgmI3hBOy9wanYrM2wvMks0cERMLytjU2YvQUNWazMvYlR1UDhBazNEaWg3VmlyNVkvNXpLMWt5YTE1YzBVR2d0cmFlOGNkejlZa0VTMStYMWQmI3hBO3FZcUhpYWVmZk5hZVQzOG5MZWdlWEpKZlhleDlHRGVRT0pPWHE4UFYrMG8vYjl1bUtYckgvT0lHc2kyOCthbnBidFJOUjA4dWc4WkwmI3hBO2VSU0Ivd0FBNzRxWDEzaWg4UmY4NVBmK1RqMWIvakRhZjlReVlwREh2ekIvTDkvSzJpZVQ5U0RGNC9NV2xKZlBKdlQxbll5RlIvcXcmI3hBO3pRZysrS3ZwNy9uRm56UCtsL3l2aXNKSDVYT2lYRWxtd1AydlNZK3RFVDdVa0tEL0FGY1VQWU1WZGlyQnZ6eGplVDhwdk15UnFYZHImI3hBO1FoVlVWSitOZWdHS3ZuUC9BSnhSc3J5SDgwbmVhQ1NOUDBiY0RrNk1vcnpqN2tZcVgyTGlxUmVlZksxdjVyOG82cjVlbmYwMTFHQm8mI3hBO2tscFhoSUtQRTlPL0dSVk5NVmZEVnhhZm1OK1ZubWVRajZ4b21xeGg0VnUwWDkxTkVUdVkzWUZKRWJpRC9hTVVwbitXL3dDV3ZtMzgmI3hBO3kvTnFYRnlseEpwMDAvcjYxclUzTGlWTGNwYVNOOXVWK2lnZk03WXErN1k0NDRvMWpqVUpHZ0NvbzJBQUZBQmloNVovems1RkxMK1UmI3hBO09wSkVqU09aN1NpcUN4Mm5Yc01WZkgyaHllZHJBM01HaC9wRzJlOWpFVjBsbUprYVdPdjJHOVBjclh0aWw2bitUdjhBempsNXAxalcmI3hBOzdUVmZOTmpKcFdnV3NpelBiWFNtTzR1U2hEQ0lRbWpvaC9hWmdOdW5zb2ZZZUt2bnYvbk1PM3VKL0x2bDBReFBLUmR6RWhGTFUvZEQmI3hBO3d4VkZmODRmMjg4SGt2VzFtamVKanFWUUhVcVNQUWo4Y1ZlOVlxK2F2K2N5N1c1bi93QUllaEU4dkg5STh1Q2xxVitxMHJURldYZjgmI3hBOzRuUXpRL2xmTWswYlJ2OEFwTzRQRndWTlBUaTdIRlhzK0t2aVgvbkpPNXZ0Vy9OelZmUmdsbHQ3R09DemlkVVlqNElnejBvTzBqdGkmI3hBO3I2bjAzeVBwNS9MRzI4dkd6aDlkdEZTd1pqR25JeU5haUptSnAxTEdwT0t2a2I4aVo5UzBYODJ2THR5OXRMSEhMY216bDVveWlsMGomI3hBO1FiMUhabkJ4Uys3TVVQaW4vbkpxeHZaZnpnMVY0cmVTUkREYVVaVVpoL3ZPbmNERlhwWDV2ZVZKdFYvNXh2OEFLR29SUXM5NW9kanAmI3hBO2NyS0FTNGltdFk0SkY0OWZ0c2hQeXhWaS93RHppVHJGL3BublhVTkV1SVpZN1hWN1htaFpXQyt2YW5rdlVkNDNreFY5YVlxLy85az08L3hhcEdJbWc6aW1hZ2U+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwveGFwOlRodW1ibmFpbHM+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyI+CiAgICAgICAgIDx4YXBNTTpEb2N1bWVudElEPnV1aWQ6OEI4MThEMEZDNTM3REQxMUJEQjJGMThGM0JGREVDOUY8L3hhcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4YXBNTTpJbnN0YW5jZUlEPnV1aWQ6OEM4MThEMEZDNTM3REQxMUJEQjJGMThGM0JGREVDOUY8L3hhcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4YXBNTTpEZXJpdmVkRnJvbSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSIvPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6eGFwVFBnPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvdC9wZy8iCiAgICAgICAgICAgIHhtbG5zOnN0RGltPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvRGltZW5zaW9ucyMiCiAgICAgICAgICAgIHhtbG5zOnhhcEc9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9nLyI+CiAgICAgICAgIDx4YXBUUGc6TWF4UGFnZVNpemUgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3REaW06dz4yMDkuOTk5OTk0PC9zdERpbTp3PgogICAgICAgICAgICA8c3REaW06aD4yOTcuMDAwMDI0PC9zdERpbTpoPgogICAgICAgICAgICA8c3REaW06dW5pdD5NaWxsaW1ldGVyczwvc3REaW06dW5pdD4KICAgICAgICAgPC94YXBUUGc6TWF4UGFnZVNpemU+CiAgICAgICAgIDx4YXBUUGc6TlBhZ2VzPjE8L3hhcFRQZzpOUGFnZXM+CiAgICAgICAgIDx4YXBUUGc6SGFzVmlzaWJsZVRyYW5zcGFyZW5jeT5GYWxzZTwveGFwVFBnOkhhc1Zpc2libGVUcmFuc3BhcmVuY3k+CiAgICAgICAgIDx4YXBUUGc6SGFzVmlzaWJsZU92ZXJwcmludD5GYWxzZTwveGFwVFBnOkhhc1Zpc2libGVPdmVycHJpbnQ+CiAgICAgICAgIDx4YXBUUGc6UGxhdGVOYW1lcz4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+TWFnZW50YTwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpPlllbGxvdzwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpPkJsYWNrPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94YXBUUGc6UGxhdGVOYW1lcz4KICAgICAgICAgPHhhcFRQZzpTd2F0Y2hHcm91cHM+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHhhcEc6Z3JvdXBOYW1lPkRlZmF1bHQgU3dhdGNoIEdyb3VwPC94YXBHOmdyb3VwTmFtZT4KICAgICAgICAgICAgICAgICAgPHhhcEc6Z3JvdXBUeXBlPjA8L3hhcEc6Z3JvdXBUeXBlPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3hhcFRQZzpTd2F0Y2hHcm91cHM+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCg1lbmRzdHJlYW0NZW5kb2JqDTUzIDAgb2JqDTw8L01ldGFkYXRhIDUyIDAgUj4+DWVuZG9iag0xIDAgb2JqDTw8L0Nyb3BCb3hbMCAwIDU5NSA4NDJdL1BhcmVudCAyMSAwIFIvQ29udGVudHMgMyAwIFIvUm90YXRlIDAvTWVkaWFCb3hbMCAwIDU5NSA4NDJdL1Jlc291cmNlcyAyIDAgUi9UeXBlL1BhZ2U+Pg1lbmRvYmoNMiAwIG9iag08PC9Gb250PDwvRjEgMjggMCBSL0YyIDM4IDAgUi9GMyA0NyAwIFIvRjQg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L01UOTcvTVQxMTYvTVQxMjEvTVQ2NS9NVDc4L01UNzkvTVQ3Ni9NVDExOCk+Pg1lbmRvYmoNMTIgMCBvYmoNPDwvRGlmZmVyZW5jZXNbMi9NVDUxL01UNDgvTVQ1MC9NVDUzL01UNDkvTVQ4NS9NVDQ3L01UMTA5L01UMTA4L01UNjYvTVQxMDEvTVQxMDIvTVQxMTEvTVQxMTQvTVQzMi9NVDY5L01UMTIwL01UOTkvTVQxMDUvTVQxMTUvTVQ3My9NVDEwMC9NVDk3L01UMTE2L01UMTIxL01UNjUvTVQ3OC9NVDc5L01UNzYvTVQxMThdL1R5cGUvRW5jb2Rpbmc+Pg1lbmRvYmoNMTMgMCBvYmoNPDwvT1BNIDEvT1AgZmFsc2Uvb3AgZmFsc2UvVHlwZS9FeHRHU3RhdGUvU0EgdHJ1ZS9TTSAwLjAwMj4+DWVuZG9iag0xNCAwIG9iag08PC9PUE0gMS9PUCB0cnVlL29wIHRydWUvVHlwZS9FeHRHU3RhdGUvU0EgdHJ1ZS9TTSAwLjAwMj4+DWVuZG9iag0xNSAwIG9iag08PC9Dcm9wQm94WzAgMCA1OTUgODQyXS9QYXJlbnQgMjEgMCBSL0NvbnRlbnRzIDE3IDAgUi9Sb3RhdGUgMC9NZWRpYUJveFswIDAgNTk1IDg0Ml0vUmVzb3VyY2VzIDE2IDAgUi9UeXBlL1BhZ2U+Pg1lbmRvYmoNMTYgMCBvYmoNPDwvRm9udDw8L0YxIDI4IDAgUi9GNCAyOSAwIFI+Pi9Qcm9jU2V0Wy9QREYvVGV4dF0vRXh0R1N0YXRlPDwvR1MyIDM1IDAgUi9HUzMgMzYgMCBSPj4+Pg1lbmRvYmoNMTcgMCBvYmoNPDwvTGVuZ3RoIDM0MjIvRmlsdGVyL0ZsYXRlRGVjb2RlPj5zdHJlYW0NCmjejFnJdiJHFj3HVd7oK94S9YHojJxTWqF5LrWgXC5bXoSSEESRA52DbPQTvefDvOq9/8ArLfpGDoDUIPvUOUUKksh49713373Bv3c4KdrhJvlmQI7jsACvPc+xmOXYlMkdM/CY7ZNtcmb4FO98oWTHIN82mWGTE9gscKnX/Inb64/rf9Odf54OLBrnO7bFHJM8x2OG45Dtc+YHxC1meIH+0qO+0dQ3Hgx3/nnCidPwcYfzahW82DZzeBCQ53LGrYCGcfMMjmf0mGEYJg1DvDf8dadzJx9lJpNQ5rvDbzvHw63bMR2fub7bbsdGLKZvbdiPXe/HZ061jn5d7sh2mBdwe8OWuN4S477j62393OFst8dd02VO51ZEsczo7vqiSycyy9RYUv+0S9dpEoqRoAGjG1VkKqRPv6mRxJYiKXK5+8vwYsdklmXb1OPMDGw842iHmYZXP0KEYVomRU6PaUbFRNKDSqN0rEIRkQgL9aSKOaWPJJNRio8jVca9kczUkxxVaw//scMM03Tr1fBU8ZtKxvSI76YZ9iSKMpNdQuDWPlmmt0+OafdcVn25t9qZF9hWtTMkxq1gsCzPrlc1axgs5neGL88vCaJm9OlBPqtC7tFQJIu4S4PFNFpM9WuyeIxEMlpksaChmkXYbXcLDqtCYKYTNEEcoRZCqb9GT5Iu03gWqanI52kSiWyxfHKXbtIHGdFwMaNLVYhZi8daKlfIyKdqwSsV46sj+l5lU1moChhnn3jPNDZBYjeQOLxexVoVxGU5L+OwpH6Xjl6exy8J9W+79PtzLBO6vu7SgczxRDobdmmYiSdg8bS1GizTasrhOHmU01whVtRUVVBT+oQ3RiqhuzR6YfQ5KvN2RSA1VrlibeRGG7TTJM4wbARn3Hes+9094nbQ406wNffrwFmuVa9hr0K+SkuV0wXr0vk4EVmW0n3nD/mkMnW/i8iLl2xKv6PmPpGKJE1FNKOJyAuButCZS8S2+FdpylNU16fnBzGnr2K+SMIFvkzfYZHkoYwIAXnvlK7jBPUyznqesqKMyg901qXjfKrSUExpQMOX4iUJX3SKTpAs8UFkIqH/spsuneLdhL5n23bLLXdZqYmc56jBAYoqRqrO1CxFtugUjfqhADBRrD7QV5koOko/4gGZKADFSCx71zJaJrjp9XOUZK7yQiLb5XxcRiLO0U4JyWKqdP0yGpYA+QJN8KiZIpzI+L3so+dN/75jIvu20QMDbseOm3bd9qbXROfucpPZnQpKbneuRQEC+pUOwHoXaZmNJrJcRHTUpS8qmdJR/w0DnrP3mr6h2sBsqPZ2Ms+XzKfDAgxZxXyvFgWvkAJbxrIQD2kE2PO9FQ/6XoOl0pwRikKlSU4qUQkYKY6rvxn1Y6YRbJ7INAUE+/SDvkTs3Q20ep7npSSzSxZ3ehbG6jswBnVktuE3nOHt8oDxGkZUr9XpRxgYH6nPwBI6nX8+d+kr09whszSiM/Zdt219XUzFduJYo0/L4hVbd27+zNJH9TxPZ6IAnt+wyvGqetCiag5SjQDKtGLEC7oGHw5CsAhm7+YyMlBGBuOG1+Ocb+XJ9byaQZNXf9WJA1BFjEipnxSY9jHa4UBFFYE1VF61PB2Jj4tCj5R+MkVXbpsdxko/1LSA7W9k72VKODRTtangbUpOXxIwzjWSMBR6zF/i6lCFKv0YlfQdo8EM0/lEo6oRzdVfpOTt8LmVGcY7As7p9+iPl/gFJCOeVT22gEobquY3l9G7/FylW1+1JMQNHQe3XeZ1TjMJ6ro6RE+KcYJAjjCeTtFV6a+gPoJ2GUzVbIYPbq903+aTJAWdDLp/I5pWDWDeJzJ5EGVMgzudTBGhkXLdqgmqVujJrC/Qm1W7/vwf5+aX5pMNvQWqW5M8j1GpRnm9KqqjIjg0qG/uc9Pd4xbv+dvnNPeMpuc4bzFxO4NwEqtRQWdnZ180LpnGZQjauhFTkUhCF56kGUhXJyihz92tms0zmvq5LjMxohNGd1KTtKaVKtS8fIBwifBWRlFa80+LSzqWySr8wGrQTCtay+dJgVEpNVnRXf+L6drMo1iEWTqbiLEEIteghtuJwCbDNNpG+aAyc9/me+SCqEz7HUnTNoXrWa3YrZvCXPUGN+EjOkcq+QOIoaYuBYYdZlrdFuD74zEoK1fPiCDFiEVDR2qmir9RTFajLlCKmuNGlbwrtd47JkheESeatWmaZpBZUFl6AGqeqBoRd0H0vYMBFJ23Zxo9SNa/1jq4soz2u9aqbo5KKPuELrt0Bq2DAh+gTbORQpIOr/forkwSrbTlbzILVS6RrTlU/6gMt8o8gztWM2PtZlBh3Wkl/aMSa+kaiiDtM8KTQ7w8zFEQYVSO9JPW7MAmqbtsUJGg7lBWeK1WnOnKovNzeIjneaxr6bBe/UoWhZ5+MAWcu/vc4b1XoNbkyuG5NLeiGAyXu+S4zPast4y/oiN7BeHSHAFDNR7nWiyflFk4Gad48t0e/Xj+A6PzBL2XVM2Cpv+c4PUtgo7v1x3uNolCUy2bIR3PMT+gu0EgpbY7uoleqYY7mUuBx7IN/LNcBnc9NWjYQaWZ9rmFiWdvmHhO0Fa06bbt46zi/lEJ+gpfIH6FnqUfrpaXQ5DNYJ7AwNEAevQnbFbh+uJqr9nwtsBNaJv6OXVEg4YwoDRBZ2BWlGepm2mpkl4BoNaoZzkO7UYs92EiUMpyJOHVClnQITgsJ/jXquyKlG6x7rzm9F4sRwrPG73rtg5bFjxPvpXZnOkVQm1GI+qjIrTc0FC7+xRYICvPM3r4z94EdKPseUMY3F3BrF0Q+EfSxZkmdojQr4D6rlzkE4mNa4qXkYYdV1cqGeWwxDHddrdWl9+anj6KRTcICvc0xVKn2iLgLbrAxDtMYRUExGmS0ixL0fEVz69jjE5vVJnvtM48n0GMSg3nkjJ0nmRStMaekAH4fKn7dizSROXvg6zCZvgUVIs0boD6Tcd0e6ZjbS9bOBi7hdNbwflVxCJOsT+tfi7hQFOCeb1U0M1Cd+5nOccdlYiYqAw3Qj32t4MJ1ddU7FRzAPphIKal0sk4w+TNJxFW1tNXo6CfXZ2i7NGVCOF5H9dUvdtM9ePHRxkWeqD2UekPqO5Kw2vdcNxCikQcrx2VHL09KjF4e7rhN3T5qlEOwVjAP1taBzqTIiomsKOpZuhB+fANe8i772bmRozTuVhJ68q37pMbdIm7oBTP3J4b01wOI3+Vm0v5B1pzpsUdfUJ6jsosL8Fy8LQVKJX8WgfhNhJ5LLYlx7DtZqtXclYgyjdx65TcyWgpYJq7UBug0pnCbWk2Xzklrg/h9Kw4hLdV6ZPIw6r7b6Fp4dTQozr5H7WVh+JXcWU8msMLuu9oNwnqb/zHGo4wuTX8GsTqfPB+t1uJZNS6g2/y+13iPW87mku2g2vjr3RO8Fbn3KEAp/RTl27LMIcqRu9fyzCX0M3D6swPbAhc5nQLMVbmYSS3oRtYvKHWQQqjI3NwD2TBqJYHDVnoqR9KGtf8Xb23qd15a6T0QWE8m4lEYaFaF2T6hHFUi+2QauoPwQayGfxHN/21FbnRrDRCr42rIZlPJRgf7RNX8TA6gX8gaFumtTf8MOq39cdafhtOsFEhGK71f/arZu71SGD2W0e5KuzD8vk5jeD6rhhdlXm+GCf4Ux+nHmaLJ4wRBCO11O5j2wstOqHnZSLw1tbiNupIOwf4unha4PtI2QEmUJjSKa5kkiYLfXWewG/outI1Dq0nwrKQLTsvy5EbbQkFTVpTOKCy0NpcRbXEQqtoKEmMJki3PsR6lZXZqhvfcIZvNEy8dqKhU4Na03KvnhHNZd6QTyWZwC5aDKPzdZLeOQPS5p3fd2x9Amj6QS+w3tMzy2zZXrvEmpc6nECwFohbe2Sw0HwqtbZ5UtAb9ZAHMejTCzTNNaMjJYtnHcGWVK2dXyy9+bUKJ0Ki9i7SOVqD6WNP2ZqoJaBAaDlFJ3MIHyFjtRFgeMam7MtMyxlM7AgjXXfjZF7AGoY0wQ7HGXyx/hwrT0pt1Vl1ypXIaINorOTn6vgIfsNEa5iu8x6vm81GTHMF6EmmZYs+Q4YAS5IUnIP4wXlIbwvAAbxBoT1iPBPFZCKLd2Ri0MpEcHAKLsg1Zi3jaG7IdC0hzDetrwGe1JNuGa5ptDuuAdkDQ73OQvoQqXE1CwAWfEZzhDen+ujRcazuBrowfd4zA5PRX1OG7bWUsWbMLjCIpTbsIA1YsvihymtfS8AoooOqY74AzFhEsSaMA6iBrVzB2/Oz5YnVrNUUj6oAd+dNB4IZViWX1b5fvoJjY3vbTRdV5z9tIhqkV4VG/dkselVSkAu+uUeea2xiXM+1K8L161+3YFhMZiMS33CZ5Wj6izcrE2AndXaCuk4tmwW2bWINgLEusPKZRIfINUGhT/X10EqLB8AM/KsVgmoDAfkwh1bgYgMOc03td+O17u7cpHtkVem2mWciB8brTP/c+SGNcEu9rXd+AOT6SDqwlr9H2syCknn7+9/qZ0hgwRwPHMuhdH1bZ2P9V781SC3XaX58/NfO/wQYAHBmMSMKDWVuZHN0cmVhbQ1lbmRvYmoNMTggMCBvYmoNPDwvU3VidHlwZS9UeXBlMS9Gb250RGVzY3JpcHRvciAxMSAwIFIvTGFzdENoYXIgMzEvV2lkdGhzWzU1NiA1NTYgNTU2IDU1NiA1NTYgNjEyIDI3OCA3NzggMjIxIDU1NiA0NDQgMzMzIDUwMCAzODggMjc4IDU1NiA0NDQgMzg5IDIyMSAzODggMjc4IDUwMCA0NDQgMzMzIDQ0NCA1NTYgNjEyIDYxMiA0NDQgNDQ0XS9CYXNlRm9udC9ETUZLRUcrUXVvcnVtL0ZpcnN0Q2hhciAyL0VuY29kaW5nIDEyIDAgUi9UeXBlL0ZvbnQ+Pg1lbmRvYmoNMTkgMCBvYmoNPDwvTnVtc1swIDIwIDAgUl0+Pg1lbmRvYmoNMjAgMCBvYmoNPDwvU3QgMzYxL1MvRD4+DWVuZG9iag0yMSAwIG9iag08PC9Db3VudCA1L1R5cGUvUGFnZXMvS2lkc1syNiAwIFIgMSAwIFIgNCAwIFIgNyAwIFIgMTUgMCBSXT4+DWVuZG9iag0yMiAwIG9iag08PC9TdWJ0eXBlL1hNTC9MZW5ndGggMzU4MS9UeXBlL01ldGFkYXRhPj5zdHJlYW0NCjw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDQuMC1jMzE2IDQ0LjI1MzkyMSwgU3VuIE9jdCAwMSAyMDA2IDE3OjA4OjIzIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA4LjEuMCAoTWFjaW50b3NoKTwvcGRmOlByb2R1Y2VyPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOmNyZWF0b3I+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpPnR1Yml0YWs8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgICAgIDxkYzp0aXRsZT4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+c2FnLTM5LTMtNC0wOTAyLTIxOnNhZy0wPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOkFsdD4KICAgICAgICAgPC9kYzp0aXRsZT4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4YXA6TW9kaWZ5RGF0ZT4yMDA5LTA2LTI2VDA5OjQ1OjA0KzAzOjAwPC94YXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhhcDpDcmVhdG9yVG9vbD5RdWFya1hQcmVzcyA3LjMxPC94YXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4YXA6Q3JlYXRlRGF0ZT4yMDA5LTA2LTI2VDA5OjQ1OjA0KzAzOjAwPC94YXA6Q3JlYXRlRGF0ZT4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIj4KICAgICAgICAgPHhhcE1NOkRvY3VtZW50SUQ+dXVpZDozOGViMGFhMC02M2M5LTBjNGYtYTIzZi1mNTE4NzQ1MzQwODI8L3hhcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4YXBNTTpJbnN0YW5jZUlEPnV1aWQ6MGZmZjg5YzUtY2JjMy0wYjQyLTlhODItNmE2MGE2M2UyNzA4PC94YXBNTTpJbnN0YW5jZUlEPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+DWVuZHN0cmVhbQ1lbmRvYmoNMjMgMCBvYmoNPDwvQ3JlYXRpb25EYXRlKEQ6MjAwOTA2MjYwOTQ1MDQrMDMnMDAnKS9BdXRob3IodHViaXRhaykvQ3JlYXRvcihRdWFya1hQcmVzcyA3LjMxKS9Qcm9kdWNlcihBY3JvYmF0IERpc3RpbGxlciA4LjEuMCBcKE1hY2ludG9zaFwpKS9Nb2REYXRlKEQ6MjAwOTA2MjYwOTQ1MDQrMDMnMDAnKS9UaXRsZShzYWctMzktMy00LTA5MDItMjE6c2FnLTApPj4NZW5kb2JqDXhyZWYNMCAyNA0wMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwNTc0MjIgMDAwMDAgbg0KMDAwMDA1NzU0OSAwMDAwMCBuDQowMDAwMDU3NjczIDAwMDAwIG4NCjAwMDAwNjA2NjIgMDAwMDAgbg0KMDAwMDA2MDc4OSAwMDAwMCBuDQowMDAwMDYwOTEzIDAwMDAwIG4NCjAwMDAwNjM4MDMgMDAwMDAgbg0KMDAwMDA2MzkzMCAwMDAwMCBuDQowMDAwMDY0MDY2IDAwMDAwIG4NCjAwMDAwNjcyMTUgMDAwMDAgbg0KMDAwMDA3MTcxMiAwMDAwMCBuDQowMDAwMDcyMDU0IDAwMDAwIG4NCjAwMDAwNzIyNjcgMDAwMDAgbg0KMDAwMDA3MjM0NCAwMDAwMCBuDQowMDAwMDcyNDE5IDAwMDAwIG4NCjAwMDAwNzI1NDkgMDAwMDAgbg0KMDAwMDA3MjY1NCAwMDAwMCBuDQowMDAwMDc2MTQ2IDAwMDAwIG4NCjAwMDAwNzY0MDQgMDAwMDAgbg0KMDAwMDA3NjQ0MCAwMDAwMCBuDQowMDAwMDc2NDcyIDAwMDAwIG4NCjAwMDAwNzY1NTAgMDAwMDAgbg0KMDAwMDA4MDIwOCAwMDAwMCBuDQp0cmFpbGVyDTw8L1NpemUgMjQ+Pg1zdGFydHhyZWYNMTE2DSUlRU9GDQ==", - "directory": "/tmp", - "fileName": "04-valid.pdf", - "fileSize": "81 kB" - } - }, - "json": { - "numpages": 5, - "numrender": 5, - "info": { - "object": true - }, - "metadata": { - "object": true - }, - "text": "Turk J Med Sci\n2009; 39 (3): 361-365\nΒ© TÜBΔ°TAK\nE-mail: medsci@tubitak.gov.tr\ndoi:10.3906/sag-0902-21\n361\nORIGINAL ARTICLE\nAcute effect of speed exercise on nitric oxide (NO)\nlevel of footballers\nAim: Exercise is one of the low-cost and easiest ways for improving life standards and physical\nfitness, and reducing body stress. Nitric oxide (NO) is defined as the β€œsurprising soldier mediator”\nof biological systems. NO is one of the relaxation factors coming from the vascular endothelium.\nThis relaxation in smooth muscles leads to vasodilatation in veins. The purpose of this study is to\nevaluate the acute effect of 20-meter sprints of footballers on NO levels.\nMaterials and Methods: 22 footballers with an age range of 18–32 were voluntarily enrolled in the\nstudy. The heights and weights of the subjects were measured. Speed measures were taken with a\nphotocell system. The 20-meter sprint was repeated for 10 times. Blood samples were taken before\nand immediately after the sprint. For statistical analysis paired t test was used.\nResults: The mean age, height, and weight of the footballers included in the study were 24.21 Β±\n3.41 years, 173 Β± 7.04 cm, and 67.85 Β± 5.17 kg, respectively. The mean NO values were 21.45 Β± 2.08\nimmediately after the exercise and 25.59 Β± 1.59 before the exercise (mean Β± SD). This decrease in\nthe NO level after the exercise, compared to before, were not statistically meaningful (P = 0.052).\nConclusions: The fact that the exercise was short-term yet with maximal load and negative\ndevelopments occurred within the body may have highlighted the oxidative damage. The NO\ndefence used against this damage may have decreased the values.\nKey Words: Nitric oxide, speed exercise, footballer\nFutbolcularda sΓΌrat egzersizinin nitrik oksit (NO)\ndΓΌzeyi ΓΌzerine akut etkisi\nAmaΓ§: Egzersiz, insanlarΔ± stresten uzaklaştΔ±ran, hayat standartlarΔ±nΔ± yΓΌkselten ve fiziksel\nuygunluğu iyi duruma getirmek iΓ§in kullanΔ±lan en ucuz ve kolay yoldur. Nitrik oksit (NO)\nbiyolojik sistemlerin β€œΕŸaşırtΔ±cΔ± asker aracΔ±sı” olarak tanΔ±mlanΔ±r. NO vaskΓΌler endotelyumdan Γ§Δ±kan\ndinlenme faktΓΆrΓΌdΓΌr. Bu dΓΌz kaslardaki relaks damarlarla vasodilatasyona neden olur. Bu\nΓ§alışmanΔ±n amacΔ±; futbolcularda 20 metrelik sΓΌrat koşularΔ±nΔ±n NO dΓΌzeylerine akut etkisini\naraştΔ±rmaktΔ±r.\nGereΓ§ ve YΓΆntem: AraştΔ±rmaya yaşlarΔ± 18-32 yaş arasΔ±nda değişen 22 futbolcu gΓΆnΓΌllΓΌ olarak\nkatΔ±ldΔ±. Deneklerin boy ve beden ağırlΔ±k ΓΆlΓ§ΓΌmleri alΔ±ndΔ±. SΓΌrat ΓΆlΓ§ΓΌmleri fotosel ile yapΔ±ldΔ±. 20\nmetrelik sΓΌrat koşusu 10 kez tekrar ettirildi. SΓΌrat egzersizi ΓΆncesi ve hemen sonrasΔ± kan ΓΆrnekleri\nalΔ±ndΔ±. Δ°statistiksel analiz iΓ§in paired t testi kullanΔ±ldΔ±.\nBulgular: Γ‡alışmaya dahil edilen futbolcularΔ±n yaşlarΔ± 24,21 Β± 3,41 yΔ±l, boylarΔ± 173 Β± 7,04 cm. ve\nbeden ağırlığı 67,85 Β± 5,17 kg. olarak belirlendi. SΓΌrat egzersizi ΓΆncesi NO değerleri 25,59 Β±\n1,59’ iken, egzersiz hemen sonrasΔ± 21,45 Β± 2,08 olarak bulundu (A.O Β± SS). Egzersizden hemen\nsonrasΔ±ndaki NO dΓΌzeyindeki bu düşüş istatistiksel olarak anlamlΔ± değildi (P = 0,052).\nSonuΓ§: Egzersizin kΔ±sa sΓΌreli ancak maksimal yΓΌklenmeli olmasΔ±, vΓΌcutta meydana gelen negatif\ngelişmeler oksidatif hasarΔ± ΓΆne Γ§Δ±karmış olabilir. Bu hasara karşı kullanΔ±lan NO savunmasΔ±,\ndeğerleri aşağıya düşürmüş olabilir.\nAnahtar SΓΆzcΓΌkler: Nitrik oksit (NO), sΓΌrat egzersizi, futbolcu\nΓ–zcan SAYGIN\nThe School of Physical\nEducation and Sports,\nMuğla University,\nMuğla - TURKEY\nReceived: February 25, 2009\nAccepted: April 30, 2009\nCorrespondence\nΓ–zcan SAYGIN\nThe School of Physical\nEducation and Sports,\nMuğla University,\nMuğla - TURKEY\nosaygin@mu.edu.tr\n\nIntroduction\nUntil 15-20 years ago, NO was thought to be\nmerely the exhaust gas of automobiles, an\natmospheric gas found in cigarettes, and an agent\npolluting the atmosphere. It has been articulated in\nprevious studies that NO, which has been qualified\nas a harmful molecule since it is a free radical due to\nthe unpaired electron it bore, is actually an\nimportant molecule that balances the blood pressure\nand vasodilatation (1,2).\nNO causes vasodilatation in veins and accelerates\nblood flow. NO, which regulates the blood\ncirculation, also keeps the veins clean. The vein\nnetwork rich in NO is slippery like Teflon and allows\nfor the flow of plaques preventing the enlargement\nof clots, whereas the unhealthy vein, or the vein poor\nin NO, leads to collection of plaques in the adhesive\ninner surface of the vein (3,4).\nNO radical prevents the excessive accumulation\nof free radicals in tissues by reacting with other free\nradicals (5,6). Whereas other free oxygen radicals\nare harmful in every concentration, NO plays a role\nin regulating a range of physiological events, such as\ndigestion system, host defence and non-specific\nimmunity. However, when generated\ninappropriately and excessively, it causes a lot of\npathological conditions (7).\nSport generally has significant features like speed,\nstrength, endurance, and flexibility. Speed is the\nability to carry oneself from one point to another in\nthe shortest time possible (8).\nIn sports trainings, the organism is exposed to\nloads which are over daily life levels. In exercise, it is\nblood that provides the metabolic and O\n2 \nneeds of\nthe tissues. Blood pressure is the force that enables\nthe blood flow. Blood pressure is the pressure that\nexerts the blood on the vein walls (9).\nThe benefits of exercising have been proven\nplenty of times. However, negative changes can also\nbe expected in connection with the short-term and\nextreme changes that exercise may cause in the\nhuman body. However, exercise, if performed\nregularly and efficiently, helps strengthen the\ncardiovascular, hormonal, and immune system, and\nincrease the muscle mass.\nThis study was conducted to analyze the acute\neffect of speed exercise on NO levels of footballers.\nMaterials and Methods\nSelection of the Subjects\nTwenty-two active, healthy footballers, with an\nage range of 18-32, free of obvious health problems\nand medications were enrolled into this study. In the\nstudy, the necessary explanations were provided to\nthe subjects and their consents were obtained.\nMethod of the Study\nThe subjects carried out the test after a 20-min\nwarm-up, 15 min of which was dedicated to general\nand 5 min to specific warm-up. The test comprised\n10 sprints of 20 m. The subjects started the sprint\nwithout a start order, but when they felt ready and\ncompleted it in maximum speed. Blood measures\nwere taken twice, before and immediately after the\nsprint.\nInstruments\nHeight and Weight Measure\nThe heights of the subjects were measured\nwithout shoes, with a stadiometer (Holtain, UK) in\ncm; and they were weighed in shorts with an\nelectronic scale (Seca, Germany) in kg.\nSpeed Measure\nThe speed was measured in a gym on a smooth\nand synthetic floor. The time between the start and\nfinish points were measured with a 0.01 s sensitive\nphotocell system (New Test 2000, Finland). Cones\nwere used in order to specify the sprint field.\nBlood Measures\nBlood samples were drown from antecubital vein\nusing the heparinised tubes. The samples were taken\nbefore and immediately after the loading. The\nelements were precipitated by centrifuge for 5 min at\n3500 rpm; the plasma part at the top was taken into\nEppendorf tubes and kept at -80 Β°C until analysis.\nNitrite determination\nNitrite was measured using the Griess reaction\n(10). Briefly, plasma samples were diluted 4-fold\nwith distilled water and deproteinized by adding\nl/20th volume of zinc sulfate (300 g/l) to give a final\nTurk J Med SciEffect of speed exercise on NO in footballers\nSAYGIN, Γ–\n362\n\nconcentration of 15 g/l. After centrifugation at\n10,000Γ—g for 5 min at room temperature (or 1000Γ—g\nfor 15 min), 100 ΞΌl of supernate was applied to a\nmicrotiter plate well, followed by 100/ΞΌl of Griess\nreagent (1 g/l sulfanilamide, 25 g/l phosphoric acid,\nand 0.1 g/l N-1-naphthylethylenediamine). After 10\nmin of colour development at room temperature,\nthe absorbance was measured on a microplate\nreader (Tiertek Multiskan MCC/340; Flow Lab,\nMcLean, VA) at a wavelength of 540 nm. Each\nsample was assayed in duplicate wells. Background\nvalues were obtained by treating samples as\ndescribed but by using 25 g/l phosphoric acid\ninstead of complete Griesa reagent. Calibration\ncurves were genereated with sodium nitrite and\npotassium nitrate in distilled water (linear range 0-\n100 ΞΌmol/l). The detection limit of the assay is ~1.5\nΞΌmol/l in distilled water. There was no difference\nbetween the spectrum of authentic nitrite in distilled\nwater and the spectra of negative plasma samples\nsupplemented with exogenous nitrite or the spectra\nof positive plasma samples. In all these specimens,\nmaximal absorbance occurred at 540 nm (data not\nshown). The molar absorptivity of the coloured\nproduct was 39,500 l mol\n-1 \ncm\n-1\nNitrate determination\nNitrate was measured as nitrite after enzymatic\nconversion by nitrate reductase (EC 1.6.6.2) as\ndescribed by Schmidt et al. (11). Briefly, 100 ΞΌl of\nplasma was diluted 4-fold with distilled water.\nNADPH, FAD, and nitrate reductase from\nAspergillus spp. (Boehringer Mannheim,\nMannheim, Germany) were added to yield final\nconcentrations of 50 ΞΌmol/, 5 ΞΌmol/l, and 200 U/l,\nrespectively.\nSamples were further incubated for 5 min at 37\nΒ°C to oxidize NADPH [which interferes with the\nassay] (11), deproteinized, and assayed with Griess\nreagent as described above. Values obtained by this\nprocedure represent the sum of nitrite and nitrate.\nNitrate concentrations were obtained by subtracting\nnitrite concentrations from the total nitrate + nitrite\nconcentrations.\nStatistical Analysis\nSPSS 16.0 statistics program was used in\nanalysing the data obtained. The arithmetic mean\nand standard deviation of all the variants of the\nfootballers included in the study were calculated.\nPaired samples t-test was used to compare the NO\nvalues taken before and immediately after the speed\nexercise. The difference was assumed significant if\nthe p value was below 0.05.\nResults\nThe demographic results of the group were\nsummarized in Tables 1 and 2. NO values were\nfound to be 21.45 Β± 2.08 immediately after the\nexercise whereas they were 25.59 Β± 1.59 before the\nexercise. This decrease immediately after the\nexercise, in comparison with before, was not a\nstatistically significant (P = 0.052, Figure 1).\nTable 1. Age (years), height (cm) and weight (kg) of footballers.\nArithmetic Mean Standard Deviation Minimum Maximum\nAge (years) 24.21 3.41 18.00 32.00\nHeight (cm) 173.2 7.04 162 185\nWeight (kg) 67.85 5.17 62.32 77.67\nTable 2. Serum NO (U/Ml) levels of footballers before speed exercise and immediately after speed exercise.\nArithmetic Mean Standard Deviation t p\nSERUM Before Exercise 25.59 1.59 1.980 .052\nNO U/ml Immediately After Exercise 21.45 2.08\nJune 2009Effect of speed exercise on NO in footballers\nNo: 3Vol: 39\n363\n\nTurk J Med SciEffect of speed exercise on NO in footballers\nSAYGIN, Γ–\n364\nDiscussion\nRecent studies show that exercise has different\neffects on NO level. Presumed reasons for those\ndifferences are the type, duration, and degree of\nexercise. Particularly acute and heavy exercises can\ntrigger oxidative damage (12). The proportions of\noxidants and antioxidants to emerge during the\nexercise vary according to the degree of exercise.\nWhile damaging oxidant system is more activated\nduring heavy and rigorous exercises, regular and\nshort-term sport activities that are not maximal\nactivate the antioxidant systems better (13).\nThere are various basic sources of oxidant\nproducts, such as NO products, oxygen radicals\nformed through purine metabolism, and\nprostaglandin. NO products, like peroxinitrites, can\ncontribute to oxidative damage (14). NO, thus, can\ncontribute to cell damage in many cells.\nXia and colleagues studied the effect of different\ndegrees of exercise on NO level and they showed\nthat there was no significant change in NO in low\nand mild level exercises, whereas there was an\nincrease in NO concentration in high level exercises\n(15). In contrast to that study, we noted that there\nwas a 5 U/ml decrease in NO levels after the exercise\nin comparison with those before the exercise. This\ncan be attributed to a set of factors. One of them is\nthe contribution of NO to antioxidant defence in the\nfight with free radicals occurring in acute exercises\nof maximal level (16).\nYamamato et al. state that there is no meaningful\ndifference between the plasma and serum NO levels\nbefore and immediately after exercise for aerobic\ntype physical exercise (17).\nIn another study, KeΓ§etepen and Dursun found a\ndecrease in NO values immediately after exercise in\na study where sportsmen, who do sports regularly,\nperform exercise for 2 min consecutively at 30, 40,\n50 km/h against 100 W power, and then at\nmaximum speed, using a bicycle ergometer (18).\nRadak et al. also state that muscular damage can\noccur in connection with the increase in NO \nX\nproduction in skeletal muscles during eccentric\ncontraction (19). Cuzzolin et al. state in the study\nthey carried out on 6 active and 6 sedentary subjects\nthat acute exercise can lead to NO\nX \nformation (20).\nIn another study, a decrease was observed in\nnitric oxide synthesis inhibition and active blood\nflow after the dynamic knee-extensor exercise. In the\nsame study, NO inhibition was greater in heavy\nexercise when compared with low level exercise (21).\nAnother study concludes that NO is not essential\nfor the good performance of skeleton muscles in\nhealthy humans (22).\nJungestern et al. compared long-distance runners\nand students who do not exercise regularly and\ncame up with a meaningful difference in NO levels\nof long distance runners after exercise in\ncomparison with those before exercise.\nFurthermore, there was a meaningful increase in\nNO levels of students who do not exercise regularly\nafter exercise in comparison with before (23).\nIn our study, the NO levels may have been found\nto be low for that moment since the blood samples\nwere taken immediately after maximal loading. As a\nresult of the increase in radicals during heavy\nexercise, it is possible for some of the NO to be\ndirected to radicals. However, different results could\nhave been obtained if blood samples had been taken\nat regular intervals after exercise.\nThe fact that the exercise was short-term yet with\nmaximal load and the negative developments that\noccurred within the body may have highlighted the\noxidative damage. The NO defence used against this\ndamage may have decreased the values.\n\u0002\u0003\n\u0004\u0005\n\u0004\u0003\n\u0006\u0005\n\u0006\u0003\n\u0005\n\u0003\n\u0007\b\n\u000e\u000f \u0010\u0011\u0012 \u000f\u0013\u0014\u0015\n\u0016 \u0017\u0014\u0018\u0019 \u001a\u0010\u001b \u0019 \u000f\u0010\u0011\u0012 \u000f\u0013\u0014\u0015\n\u001c\u001d\u0010\u001e \u001f\nFigure 1. Average serum NO (U/ml) Levels of footballers before\nand immediately after speed exercise.\n\nReferences\n1. Palmer RMJ, Ferrige AG, Moncada S. Nitric Oxide release\naccounts for the biological activity of endothelium-derived\nrelaxing factor. Nature, 1993; 327; 524-6.\n2. TΓΌzΓΌn, M. Obezite: TanΔ±m, SΔ±klΔ±k, SΔ±nΔ±flandΔ±rma Tipleri,\nDereceleri ve KomplikasyonlarΔ±. Obezite, Nobel TΔ±p Kitap\nevleri Limited Şirketi, 1995; 1-20.\n3. Kuyumcu A, DΓΌzgΓΌn AP, Γ–zmen MM, Besler HT, Travma ve\nEnfeksiyonda Nitrik Oksidin RolΓΌ. Ulus Travma Dergisi.\n2004; 10(3): 149-159.\n4. Louis J., Ignarro (Γ§eviri) Γ–ztΓΌrk Γ–. NO ile kalp hastalΔ±klarΔ±na\nson, Ozbay YayΔ±ncΔ±lΔ±k Δ°stanbul 2007.\n5. Kurtuluş H, Eskiocak S TΓΌtΓΌncΓΌler F, Başaran Ü.N, GΓΌlen Ş.\nDeneysel Sitemik Hipoksi Geliştirilmiş Yeni Doğan ratlarda\nN-Asetisistein uygulamsΔ±nΔ±n etkileri. Turk J. Of biochem.\n2003; 28(2):40-44.\n6. Matthew BG, JourdheuΔ±l D, Wink DA. Nitric Oxide I.\nPhysiologicalchemistry of Nitric Oxide and its metabolites:\nimplications ininflammation. Am. J. Physiol. 1999; Vol. 276,\nIssue 2, 315-321.\n7. Aladağ A.M, TurkΓΆz, Y., Γ–zerol H.Δ°, Nitrik oksit ve\nNΓΆrofizyopatolojik Etkileri. TΓΌrkiye Klinikleri J Med Sci.\n2000; 20.107-111.\n8. Sevim Y. Antrenman Bilgisi. Nobel YayΔ±n DağıtΔ±m, Ankara,\n2007.\n9. GΓΌnay M., Tamer K., Cicioğlu Δ°. Spor Fizyolojisi ve\nPerformans Γ–lΓ§ΓΌmΓΌ, Gazi Kitapevi, Ankara 2006.\n10. Green LC, Wagner DA, Glogowski J, Skipper PL, Wishnok JS,\nTannenbaum SR. Analysis of nitrate, nitrite and [β€˜5N]nitrate\nin biological fluids. Anal Biochem 1982;126:131-8.\n11. Schmidt HHHW, Warner TD, Nakane M, Forstermann U,\nMurad F. Regulation and subcellular location of nitrogen\noxide synthases in RAW264.7 macrophages. Mol Pharmacol\n1992;41: 615-24.\n12. DinΓ§er C, Kayserilioğlu A. Egzersizde oluşan lipit\nperoksidasyonu ve E vitamninin koruyucu etkisi. Spor ve TΔ±p\n1995; 7:20-23.\n13. Duncan K, Harris S, Ardies CM: Running exercise may reduce\nrisk for lung and liver cancer by including activity of\nantioxidant and phase II enzymes. Cancer Lett 1997; 116;151-\n158.\n14. Moncada S, Higgs A, Furchgott R: XIV. International Union\nof Pharmacology Nomencaluture in Nitric Oxide Research.\nPharmacol Rev 1997; 49(2);137-141.\n15. Xia Y, Dawson VL, Dawson TM, Synder SH, Zureier JL: Nitric\nOxide Synthase Generates Superoxide and Nitric Oxide in\nArgininedepletet Cells leading to Proxynitrit-mediated\nCellular Injury. Proc Natl Acad Sci 1996; 93: 6770-6774.\n16. Traverse JH, Wank YL, RuΔ±sheng D, Nelson D, Lindstorm P,\nArcher LS, Gong G, Bache JR. Coranary no production in\nresponse to exercise and entothelium dependent agaonis\nCiculationt 2000; 101: 2526-2531.\n17. Yamamoto K., Kondo T, Kimata A, Ueyama J, Shirotori A,\nOkada Y, Sakui D, Hakashlima M, and Yamada S.: Lack Of\nEffect of Aerobic Physical Exercise on Endothelium-Derived\nNitric Oxide Concentrations in Healthy Young Subjects,\nNagoya J Med Sci 2007; 69, 167-172.\n18. KeΓ§etepen L O., Dursun N, Effects of Exercise on Plasma\nLeptin Concentrations and Relation of Leptin to Respiratory,\nCardiovascular Parameters, SağlΔ±k Bilimleri Dergisi (Journal\nOf Health Sciences), 2006; 15 (1) 1-7.\n19. Radak Z, Pucsok S, Mecseki T, Ferdinandy P. Muscle\nSorenesinduced reduction in force generation is\naccomppanied by increased nitric oxide content and DNA\ndamage in skeletal muscle. Free rad. Biol. Med. 1999; 26:1059-\n1063.\n20. CuzzolΔ±n L. LussΔ±gnolΔ± S. CrΔ±vellente F. AdamΔ± A. Schena F.\nBellavΔ±te P. Brocco G. BenonΔ± G. Influence of an acuteexercise\nonneutrophil and platelet adhesion, nitric oxide plasma\nmetabolites in inactive and active subjects. Int J Sports Med.\n2000; 21(4): 289-93.\n21. Christopher K, Dyke, David N. Proctor, Niki M. Dietz and\nMichael. Joyner. Role of nitric oxide in exercise hyperaemia\nduring prolonged rhythmic handgripping in humans. Journel\nof Physiol. 1995; 259-265.\n22. Frank A, Dinenno, Micheal J Joyner. Blunte sympathhetic\nvasoconstriction in contracting skeletal muscle of healthy\nhumans: is nitric oxide obligatory. J physiology 2003; 553,\n281-292.\n23. Jungersten L, Ambring A, Wall B and Wennmalm A. Both\nphysical fitness and acute exercise regulate nitric oxide\nformation in healthy humans. J Appl Physiol. 1997; 82: 760-\n764.\nJune 2009Effect of speed exercise on NO in footballers\nNo: 3Vol: 39\n365", - "version": "2.16.105" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Read PDF" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-01-28T15:29:03.061Z", - "stoppedAt": "2025-01-28T15:29:03.400Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/105-snapshot.json b/test-workflows/snapshots/105-snapshot.json deleted file mode 100644 index 21a74d29152..00000000000 --- a/test-workflows/snapshots/105-snapshot.json +++ /dev/null @@ -1,191 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343994464, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Function": [ - { - "startTime": 1747343994464, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 2, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "binary": { - "data": { - "data": "VGVzdCBXcml0ZSBCaW5hcnkgRmlsZSBub2Rl", - "fileExtension": "txt", - "fileName": "file.txt" - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Write Binary File": [ - { - "startTime": 1747343994467, - "executionIndex": 2, - "source": [ - { - "previousNode": "Function" - } - ], - "hints": [], - "executionTime": 74, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "fileName": "/tmp/test_write_binary_file.txt" - }, - "pairedItem": { - "item": 0 - }, - "binary": { - "data": { - "data": "VGVzdCBXcml0ZSBCaW5hcnkgRmlsZSBub2Rl", - "fileExtension": "txt", - "fileName": "file.txt" - } - } - } - ] - ] - } - } - ], - "Read Binary File": [ - { - "startTime": 1747343994541, - "executionIndex": 3, - "source": [ - { - "previousNode": "Write Binary File" - } - ], - "hints": [], - "executionTime": 18, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "fileName": "/tmp/test_write_binary_file.txt" - }, - "binary": { - "data": { - "mimeType": "text/plain", - "fileType": "text", - "fileExtension": "txt", - "data": "VGVzdCBXcml0ZSBCaW5hcnkgRmlsZSBub2Rl", - "directory": "/tmp", - "fileName": "test_write_binary_file.txt", - "fileSize": "27 B" - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Function1": [ - { - "startTime": 1747343994559, - "executionIndex": 4, - "source": [ - { - "previousNode": "Read Binary File" - } - ], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "fileName": "/tmp/test_write_binary_file.txt" - }, - "binary": { - "data": { - "mimeType": "text/plain", - "fileType": "text", - "fileExtension": "txt", - "data": "VGVzdCBXcml0ZSBCaW5hcnkgRmlsZSBub2Rl", - "directory": "/tmp", - "fileName": "test_write_binary_file.txt", - "fileSize": "27 B" - } - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Function1" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:54.464Z", - "stoppedAt": "2025-05-15T21:19:54.560Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/107-snapshot.json b/test-workflows/snapshots/107-snapshot.json deleted file mode 100644 index 53baf6e7db7..00000000000 --- a/test-workflows/snapshots/107-snapshot.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343994481, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Read Binary Files": [ - { - "startTime": 1747343994481, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 54, - "executionStatus": "success", - "data": { - "main": [ - [] - ] - } - } - ] - }, - "lastNodeExecuted": "Read Binary Files" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:54.481Z", - "stoppedAt": "2025-05-15T21:19:54.535Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/108-snapshot.json b/test-workflows/snapshots/108-snapshot.json deleted file mode 100644 index a5d205582ba..00000000000 --- a/test-workflows/snapshots/108-snapshot.json +++ /dev/null @@ -1,1363 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343994502, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set": [ - { - "startTime": 1747343994502, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "value1": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set1": [ - { - "startTime": 1747343994502, - "executionIndex": 2, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "value2": 5 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set2": [ - { - "startTime": 1747343994502, - "executionIndex": 3, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "prop1": 1, - "prop3": -1 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set3": [ - { - "startTime": 1747343994503, - "executionIndex": 4, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "prop2": 2, - "prop4": -1 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set7": [ - { - "startTime": 1747343994503, - "executionIndex": 5, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "prop1": 1, - "prop3": -1 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set6": [ - { - "startTime": 1747343994503, - "executionIndex": 6, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "prop2": 2, - "prop3": -2, - "prop4": -3 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set9": [ - { - "startTime": 1747343994503, - "executionIndex": 7, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "prop1": 1, - "prop2": -1 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set8": [ - { - "startTime": 1747343994503, - "executionIndex": 8, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "prop3": 2, - "prop4": -4 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set11": [ - { - "startTime": 1747343994503, - "executionIndex": 9, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "prop1": 1, - "prop2": -1 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set10": [ - { - "startTime": 1747343994503, - "executionIndex": 10, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "prop3": 2, - "prop4": -4 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set13": [ - { - "startTime": 1747343994503, - "executionIndex": 11, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "prop1": 1, - "prop2": -1 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set12": [ - { - "startTime": 1747343994503, - "executionIndex": 12, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "prop3": 2, - "prop4": -4 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Function11": [ - { - "startTime": 1747343994503, - "executionIndex": 13, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "title": "Input1item1" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "title": "Input1item2" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "title": "Input1item3" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Function12": [ - { - "startTime": 1747343994504, - "executionIndex": 14, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 2, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "title": "Input2item1" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "title": "Input2item2" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "title": "Input2item3" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "title": "Input2item4" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Merge": [ - { - "startTime": 1747343994506, - "executionIndex": 15, - "source": [ - { - "previousNode": "Set" - }, - { - "previousNode": "Set1" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "value1": true - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "value2": 5 - }, - "pairedItem": { - "item": 0, - "input": 1 - } - } - ] - ] - } - } - ], - "Merge1": [ - { - "startTime": 1747343994506, - "executionIndex": 16, - "source": [ - { - "previousNode": "Set2" - }, - { - "previousNode": "Set3" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "prop1": 1, - "prop3": -1 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Merge5": [ - { - "startTime": 1747343994506, - "executionIndex": 17, - "source": [ - { - "previousNode": "Set7" - }, - { - "previousNode": "Set6" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "prop1": 1, - "prop3": -1 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Merge6": [ - { - "startTime": 1747343994506, - "executionIndex": 18, - "source": [ - { - "previousNode": "Set7" - }, - { - "previousNode": "Set6" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "prop1": 1, - "prop3": -1 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Merge7": [ - { - "startTime": 1747343994506, - "executionIndex": 19, - "source": [ - { - "previousNode": "Set7" - }, - { - "previousNode": "Set6" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "prop1": 1, - "prop3": -1 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Merge8": [ - { - "startTime": 1747343994506, - "executionIndex": 20, - "source": [ - { - "previousNode": "Set9" - }, - { - "previousNode": "Set8" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "prop1": 1, - "prop2": -1, - "prop3": 2, - "prop4": -4 - }, - "pairedItem": [ - { - "item": 0 - }, - { - "item": 0, - "input": 1 - } - ] - } - ] - ] - } - } - ], - "Merge9": [ - { - "startTime": 1747343994506, - "executionIndex": 21, - "source": [ - { - "previousNode": "Set11" - }, - { - "previousNode": "Set10" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "prop1": 1, - "prop2": -1 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Merge10": [ - { - "startTime": 1747343994506, - "executionIndex": 22, - "source": [ - { - "previousNode": "Set13" - }, - { - "previousNode": "Set12" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "prop1": 1, - "prop2": -1 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Merge3": [ - { - "startTime": 1747343994506, - "executionIndex": 23, - "source": [ - { - "previousNode": "Function11" - }, - { - "previousNode": "Function12" - } - ], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "title": "Input2item1" - }, - "pairedItem": [ - { - "item": 0 - }, - { - "item": 0, - "input": 1 - } - ] - }, - { - "json": { - "title": "Input2item2" - }, - "pairedItem": [ - { - "item": 1 - }, - { - "item": 1, - "input": 1 - } - ] - }, - { - "json": { - "title": "Input2item3" - }, - "pairedItem": [ - { - "item": 2 - }, - { - "item": 2, - "input": 1 - } - ] - } - ] - ] - } - } - ], - "Merge2": [ - { - "startTime": 1747343994507, - "executionIndex": 24, - "source": [ - { - "previousNode": "Function11" - }, - { - "previousNode": "Function12" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "title": "Input2item1" - }, - "pairedItem": [ - { - "item": 0 - }, - { - "item": 0, - "input": 1 - } - ] - }, - { - "json": { - "title": "Input2item2" - }, - "pairedItem": [ - { - "item": 1 - }, - { - "item": 1, - "input": 1 - } - ] - }, - { - "json": { - "title": "Input2item3" - }, - "pairedItem": [ - { - "item": 2 - }, - { - "item": 2, - "input": 1 - } - ] - } - ] - ] - } - } - ], - "Merge4": [ - { - "startTime": 1747343994507, - "executionIndex": 25, - "source": [ - { - "previousNode": "Function11" - }, - { - "previousNode": "Function12" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "title": "Input2item1" - }, - "pairedItem": [ - { - "item": 0 - }, - { - "item": 0, - "input": 1 - } - ] - }, - { - "json": { - "title": "Input2item2" - }, - "pairedItem": [ - { - "item": 1 - }, - { - "item": 1, - "input": 1 - } - ] - }, - { - "json": { - "title": "Input2item3" - }, - "pairedItem": [ - { - "item": 2 - }, - { - "item": 2, - "input": 1 - } - ] - }, - { - "json": { - "title": "Input2item4" - }, - "pairedItem": { - "item": 3, - "input": 1 - } - } - ] - ] - } - } - ], - "Function": [ - { - "startTime": 1747343994507, - "executionIndex": 26, - "source": [ - { - "previousNode": "Merge" - } - ], - "hints": [], - "executionTime": 2, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "value1": true - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - }, - { - "json": { - "value2": 5 - }, - "pairedItem": { - "item": 1 - }, - "index": 1 - } - ] - ] - } - } - ], - "Function1": [ - { - "startTime": 1747343994509, - "executionIndex": 27, - "source": [ - { - "previousNode": "Merge1" - } - ], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "prop1": 1, - "prop3": -1 - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Function5": [ - { - "startTime": 1747343994510, - "executionIndex": 28, - "source": [ - { - "previousNode": "Merge5" - } - ], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "prop1": 1, - "prop3": -1 - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Function6": [ - { - "startTime": 1747343994511, - "executionIndex": 29, - "source": [ - { - "previousNode": "Merge6" - } - ], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "prop1": 1, - "prop3": -1 - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Function7": [ - { - "startTime": 1747343994512, - "executionIndex": 30, - "source": [ - { - "previousNode": "Merge7" - } - ], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "prop1": 1, - "prop3": -1 - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Function8": [ - { - "startTime": 1747343994513, - "executionIndex": 31, - "source": [ - { - "previousNode": "Merge8" - } - ], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "prop1": 1, - "prop2": -1, - "prop3": 2, - "prop4": -4 - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Function9": [ - { - "startTime": 1747343994514, - "executionIndex": 32, - "source": [ - { - "previousNode": "Merge9" - } - ], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "prop1": 1, - "prop2": -1 - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Function10": [ - { - "startTime": 1747343994515, - "executionIndex": 33, - "source": [ - { - "previousNode": "Merge10" - } - ], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "prop1": 1, - "prop2": -1 - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Function3": [ - { - "startTime": 1747343994516, - "executionIndex": 34, - "source": [ - { - "previousNode": "Merge3" - } - ], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "title": "Input2item1" - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - }, - { - "json": { - "title": "Input2item2" - }, - "pairedItem": { - "item": 1 - }, - "index": 1 - }, - { - "json": { - "title": "Input2item3" - }, - "pairedItem": { - "item": 2 - }, - "index": 2 - } - ] - ] - } - } - ], - "Function2": [ - { - "startTime": 1747343994517, - "executionIndex": 35, - "source": [ - { - "previousNode": "Merge2" - } - ], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "title": "Input2item1" - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - }, - { - "json": { - "title": "Input2item2" - }, - "pairedItem": { - "item": 1 - }, - "index": 1 - }, - { - "json": { - "title": "Input2item3" - }, - "pairedItem": { - "item": 2 - }, - "index": 2 - } - ] - ] - } - } - ], - "Function4": [ - { - "startTime": 1747343994518, - "executionIndex": 36, - "source": [ - { - "previousNode": "Merge4" - } - ], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "title": "Input2item1" - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - }, - { - "json": { - "title": "Input2item2" - }, - "pairedItem": { - "item": 1 - }, - "index": 1 - }, - { - "json": { - "title": "Input2item3" - }, - "pairedItem": { - "item": 2 - }, - "index": 2 - }, - { - "json": { - "title": "Input2item4" - }, - "pairedItem": { - "item": 3 - }, - "index": 3 - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Function4" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:54.502Z", - "stoppedAt": "2025-05-15T21:19:54.519Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/109-snapshot.json b/test-workflows/snapshots/109-snapshot.json deleted file mode 100644 index d5636a7ce8d..00000000000 --- a/test-workflows/snapshots/109-snapshot.json +++ /dev/null @@ -1,423 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343895845, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "CustomerIo": [ - { - "startTime": 1747343895845, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 391, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 1, - "deduplicate_id": "1:1621034971", - "name": "Onboarding Campaign", - "type": "segment", - "created": 1614868557, - "updated": 1621034971, - "active": false, - "state": "draft", - "actions": [ - "json array" - ], - "first_started": 0, - "created_by": "nodeqa@n8n.io", - "tags": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "CustomerIo3": [ - { - "startTime": 1747343896236, - "executionIndex": 2, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 184, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "customer1747343896241", - "email": "fakeemail1747343896244@gmail.com" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "CustomerIo1": [ - { - "startTime": 1747343896420, - "executionIndex": 3, - "source": [ - { - "previousNode": "CustomerIo" - } - ], - "hints": [], - "executionTime": 393, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "series": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "CustomerIo5": [ - { - "startTime": 1747343896813, - "executionIndex": 4, - "source": [ - { - "previousNode": "CustomerIo3" - } - ], - "hints": [], - "executionTime": 173, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "CustomerIo7": [ - { - "startTime": 1747343896986, - "executionIndex": 5, - "source": [ - { - "previousNode": "CustomerIo3" - } - ], - "hints": [], - "executionTime": 167, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "CustomerIo2": [ - { - "startTime": 1747343897153, - "executionIndex": 6, - "source": [ - { - "previousNode": "CustomerIo1" - } - ], - "hints": [], - "executionTime": 365, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 1, - "deduplicate_id": "1:1621034971", - "name": "Onboarding Campaign", - "type": "segment", - "created": 1614868557, - "updated": 1621034971, - "active": false, - "state": "draft", - "actions": [ - "json array" - ], - "first_started": 0, - "tags": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": 2, - "deduplicate_id": "2:1621034971", - "name": "Re-engage Inactive Users", - "type": "segment", - "created": 1614868557, - "updated": 1621034971, - "active": false, - "state": "draft", - "actions": [ - "json array" - ], - "first_started": 0, - "tags": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": 4, - "deduplicate_id": "4:1646029232", - "name": "Order Confirmation", - "type": "event", - "created": 1614868557, - "updated": 1646029232, - "active": false, - "state": "draft", - "actions": [ - "json array" - ], - "first_started": 0, - "tags": [ - "json array" - ], - "event_name": "purchase" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": 5, - "deduplicate_id": "5:1646029232", - "name": "Anniversary Campaign", - "type": "date", - "created": 1614868557, - "updated": 1646029232, - "active": false, - "state": "draft", - "actions": [ - "json array" - ], - "first_started": 0, - "tags": [ - "json array" - ], - "frequency": "yearly", - "date_attribute": "created_at", - "timezone": "US/Eastern", - "use_customer_timezone": false, - "start_hour": 10, - "start_minutes": 0 - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": 7, - "deduplicate_id": "7:1657207430", - "name": "test cmpg", - "type": "segment", - "created": 1657207358, - "updated": 1657207430, - "active": false, - "state": "draft", - "actions": [ - "json array" - ], - "first_started": 0, - "tags": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "CustomerIo6": [ - { - "startTime": 1747343897518, - "executionIndex": 7, - "source": [ - { - "previousNode": "CustomerIo5" - } - ], - "hints": [], - "executionTime": 166, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "CustomerIo8": [ - { - "startTime": 1747343897684, - "executionIndex": 8, - "source": [ - { - "previousNode": "CustomerIo7" - } - ], - "hints": [], - "executionTime": 178, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "CustomerIo4": [ - { - "startTime": 1747343897862, - "executionIndex": 9, - "source": [ - { - "previousNode": "CustomerIo8" - } - ], - "hints": [], - "executionTime": 168, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "CustomerIo4" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:18:15.844Z", - "stoppedAt": "2025-05-15T21:18:18.030Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/11-snapshot.json b/test-workflows/snapshots/11-snapshot.json deleted file mode 100644 index 07206f8aed1..00000000000 --- a/test-workflows/snapshots/11-snapshot.json +++ /dev/null @@ -1,642 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343994528, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mailchimp1": [ - { - "startTime": 1747343994528, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 2401, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "c81277605b129fdafaacede5ae34e07c", - "email_address": "nodeqa@n8n.io", - "unique_email_id": "cb7624ba4b", - "contact_id": "2f4ff7f445018adb50969f99df88dd9e", - "full_name": "node qa", - "web_id": 502612022, - "email_type": "html", - "status": "subscribed", - "consents_to_one_to_one_messaging": true, - "sms_phone_number": "", - "sms_subscription_status": "", - "sms_subscription_last_updated": "", - "merge_fields": { - "object": true - }, - "interests": { - "object": true - }, - "stats": { - "object": true - }, - "ip_signup": "", - "timestamp_signup": "", - "ip_opt": "41.62.62.149", - "timestamp_opt": "2021-02-19T10:59:04+00:00", - "member_rating": 2, - "last_changed": "2025-05-15T21:19:00+00:00", - "language": "", - "vip": false, - "email_client": "", - "location": { - "object": true - }, - "source": "Admin Add", - "tags_count": 0, - "tags": [ - "json array" - ], - "list_id": "eb9ad4be19", - "_links": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Function": [ - { - "startTime": 1747343996929, - "executionIndex": 2, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "email": "test43996930@gmail.com" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mailchimp7": [ - { - "startTime": 1747343996930, - "executionIndex": 3, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 398, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "category_id": "2adbc0d543", - "list_id": "eb9ad4be19", - "id": "928c597e2a", - "name": "QA", - "subscriber_count": "1", - "display_order": 1, - "_links": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mailchimp8": [ - { - "startTime": 1747343997328, - "executionIndex": 4, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 446, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "e117a6f053", - "status": "sent", - "settings": { - "object": true - }, - "tracking": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mailchimp": [ - { - "startTime": 1747343997774, - "executionIndex": 5, - "source": [ - { - "previousNode": "Mailchimp1" - } - ], - "hints": [], - "executionTime": 359, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "c81277605b129fdafaacede5ae34e07c", - "email_address": "nodeqa@n8n.io", - "unique_email_id": "cb7624ba4b", - "contact_id": "2f4ff7f445018adb50969f99df88dd9e", - "full_name": "node qa", - "web_id": 502612022, - "email_type": "html", - "status": "subscribed", - "consents_to_one_to_one_messaging": true, - "sms_phone_number": "", - "sms_subscription_status": "", - "sms_subscription_last_updated": "", - "merge_fields": { - "object": true - }, - "interests": { - "object": true - }, - "stats": { - "object": true - }, - "ip_signup": "", - "timestamp_signup": "", - "ip_opt": "41.62.62.149", - "timestamp_opt": "2021-02-19T10:59:04+00:00", - "member_rating": 2, - "last_changed": "2025-05-15T21:19:00+00:00", - "language": "", - "vip": false, - "email_client": "", - "location": { - "object": true - }, - "source": "Admin Add", - "tags_count": 0, - "tags": [ - "json array" - ], - "list_id": "eb9ad4be19", - "_links": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mailchimp3": [ - { - "startTime": 1747343998133, - "executionIndex": 6, - "source": [ - { - "previousNode": "Function" - } - ], - "hints": [], - "executionTime": 571, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "e73ff29160716a59a89fa9ebe5dfb51d", - "email_address": "test43996930@gmail.com", - "unique_email_id": "a157130acb", - "contact_id": "77fbbbd43baa1fdc2164af11cdc785a5", - "full_name": "", - "web_id": 606621185, - "email_type": "html", - "status": "subscribed", - "consents_to_one_to_one_messaging": true, - "sms_phone_number": "", - "sms_subscription_status": "", - "sms_subscription_last_updated": "", - "merge_fields": { - "object": true - }, - "interests": { - "object": true - }, - "stats": { - "object": true - }, - "ip_signup": "", - "timestamp_signup": "", - "ip_opt": "193.203.152.163", - "timestamp_opt": "2025-05-15T21:19:58+00:00", - "member_rating": 2, - "last_changed": "2025-05-15T21:19:58+00:00", - "language": "", - "vip": false, - "email_client": "", - "location": { - "object": true - }, - "source": "API - Generic", - "tags_count": 0, - "tags": [ - "json array" - ], - "list_id": "eb9ad4be19", - "_links": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mailchimp9": [ - { - "startTime": 1747343998704, - "executionIndex": 7, - "source": [ - { - "previousNode": "Mailchimp8" - } - ], - "hints": [], - "executionTime": 372, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "e117a6f053", - "web_id": 4820246, - "type": "plaintext", - "create_time": "2021-02-19T12:32:03+00:00", - "archive_url": "http://eepurl.com/hq3G0v", - "long_archive_url": "https://us1.campaign-archive.com/?u=396affb9e515ed83edaecbba9&id=e117a6f053", - "status": "sent", - "emails_sent": 1, - "send_time": "2021-02-19T12:33:21+00:00", - "content_type": "template", - "needs_block_refresh": false, - "resendable": false, - "recipients": { - "object": true - }, - "settings": { - "object": true - }, - "tracking": { - "object": true - }, - "report_summary": { - "object": true - }, - "delivery_status": { - "object": true - }, - "_links": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mailchimp2": [ - { - "startTime": 1747343999076, - "executionIndex": 8, - "source": [ - { - "previousNode": "Mailchimp" - } - ], - "hints": [], - "executionTime": 454, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "c81277605b129fdafaacede5ae34e07c", - "email_address": "nodeqa@n8n.io", - "unique_email_id": "cb7624ba4b", - "contact_id": "2f4ff7f445018adb50969f99df88dd9e", - "full_name": "node qa", - "web_id": 502612022, - "email_type": "html", - "status": "subscribed", - "consents_to_one_to_one_messaging": true, - "sms_phone_number": "", - "sms_subscription_status": "", - "sms_subscription_last_updated": "", - "merge_fields": { - "object": true - }, - "interests": { - "object": true - }, - "stats": { - "object": true - }, - "ip_signup": "", - "timestamp_signup": "", - "ip_opt": "41.62.62.149", - "timestamp_opt": "2021-02-19T10:59:04+00:00", - "member_rating": 2, - "last_changed": "2025-05-15T21:19:00+00:00", - "language": "", - "vip": false, - "email_client": "", - "location": { - "object": true - }, - "source": "Admin Add", - "tags_count": 0, - "tags": [ - "json array" - ], - "list_id": "eb9ad4be19", - "_links": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mailchimp4": [ - { - "startTime": 1747343999530, - "executionIndex": 9, - "source": [ - { - "previousNode": "Mailchimp" - } - ], - "hints": [], - "executionTime": 429, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mailchimp6": [ - { - "startTime": 1747343999959, - "executionIndex": 10, - "source": [ - { - "previousNode": "Mailchimp3" - } - ], - "hints": [], - "executionTime": 514, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mailchimp10": [ - { - "startTime": 1747344000473, - "executionIndex": 11, - "source": [ - { - "previousNode": "Mailchimp9" - } - ], - "hints": [], - "executionTime": 2041, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "3e3f70f4ea", - "web_id": 11040424, - "type": "plaintext", - "create_time": "2025-05-15T21:20:00+00:00", - "archive_url": "http://eepurl.com/jeUIs2", - "long_archive_url": "https://us1.campaign-archive.com/?u=396affb9e515ed83edaecbba9&id=3e3f70f4ea", - "status": "save", - "emails_sent": 0, - "send_time": "", - "content_type": "template", - "needs_block_refresh": false, - "resendable": false, - "recipients": { - "object": true - }, - "settings": { - "object": true - }, - "tracking": { - "object": true - }, - "delivery_status": { - "object": true - }, - "_links": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mailchimp5": [ - { - "startTime": 1747344002514, - "executionIndex": 12, - "source": [ - { - "previousNode": "Mailchimp4" - } - ], - "hints": [], - "executionTime": 369, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mailchimp11": [ - { - "startTime": 1747344002883, - "executionIndex": 13, - "source": [ - { - "previousNode": "Mailchimp10" - } - ], - "hints": [], - "executionTime": 621, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Mailchimp11" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:54.527Z", - "stoppedAt": "2025-05-15T21:20:03.504Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/110-snapshot.json b/test-workflows/snapshots/110-snapshot.json deleted file mode 100644 index a9aeaa27a38..00000000000 --- a/test-workflows/snapshots/110-snapshot.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343907477, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "GraphQL": [ - { - "startTime": 1747343907477, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 177, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Function": [ - { - "startTime": 1747343907655, - "executionIndex": 2, - "source": [ - { - "previousNode": "GraphQL" - } - ], - "hints": [], - "executionTime": 4, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": { - "object": true - } - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Function" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:18:27.477Z", - "stoppedAt": "2025-05-15T21:18:27.659Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/111-snapshot.json b/test-workflows/snapshots/111-snapshot.json deleted file mode 100644 index bc3ba27fcd8..00000000000 --- a/test-workflows/snapshots/111-snapshot.json +++ /dev/null @@ -1,320 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343994482, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Function": [ - { - "startTime": 1747343994482, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 2, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "names": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "names": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "names": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "names": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Spreadsheet File": [ - { - "startTime": 1747343994484, - "executionIndex": 2, - "source": [ - { - "previousNode": "Function" - } - ], - "hints": [], - "executionTime": 7, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "binary": { - "data": { - "mimeType": "text/html", - "fileType": "html", - "fileExtension": "html", - "data": "PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiLz48dGl0bGU+U2hlZXRKUyBUYWJsZSBFeHBvcnQ8L3RpdGxlPjwvaGVhZD48Ym9keT48dGFibGU+PHRyPjx0ZCBkYXRhLXQ9InMiIGRhdGEtdj0ibmFtZXMuMCIgaWQ9InNqcy1BMSI+bmFtZXMuMDwvdGQ+PHRkIGRhdGEtdD0icyIgZGF0YS12PSJuYW1lcy4xIiBpZD0ic2pzLUIxIj5uYW1lcy4xPC90ZD48dGQgZGF0YS10PSJzIiBkYXRhLXY9Im5hbWVzLjIiIGlkPSJzanMtQzEiPm5hbWVzLjI8L3RkPjx0ZCBkYXRhLXQ9InMiIGRhdGEtdj0ibmFtZXMuMyIgaWQ9InNqcy1EMSI+bmFtZXMuMzwvdGQ+PC90cj48dHI+PHRkIGRhdGEtdD0icyIgZGF0YS12PSJ0ZXN0MSIgaWQ9InNqcy1BMiI+dGVzdDE8L3RkPjx0ZCBkYXRhLXQ9InMiIGRhdGEtdj0idGVzdDEyIiBpZD0ic2pzLUIyIj50ZXN0MTI8L3RkPjx0ZCBkYXRhLXQ9InMiIGRhdGEtdj0idGVzdDEzIiBpZD0ic2pzLUMyIj50ZXN0MTM8L3RkPjx0ZCBkYXRhLXQ9InMiIGRhdGEtdj0idGVzdDE0IiBpZD0ic2pzLUQyIj50ZXN0MTQ8L3RkPjwvdHI+PHRyPjx0ZCBkYXRhLXQ9InMiIGRhdGEtdj0idGVzdDIiIGlkPSJzanMtQTMiPnRlc3QyPC90ZD48dGQgZGF0YS10PSJzIiBkYXRhLXY9InRlc3QyMiIgaWQ9InNqcy1CMyI+dGVzdDIyPC90ZD48dGQgZGF0YS10PSJzIiBkYXRhLXY9InRlc3QyMyIgaWQ9InNqcy1DMyI+dGVzdDIzPC90ZD48dGQgZGF0YS10PSJzIiBkYXRhLXY9InRlc3QyNCIgaWQ9InNqcy1EMyI+dGVzdDI0PC90ZD48L3RyPjx0cj48dGQgZGF0YS10PSJzIiBkYXRhLXY9InRlc3QzIiBpZD0ic2pzLUE0Ij50ZXN0MzwvdGQ+PHRkIGRhdGEtdD0icyIgZGF0YS12PSJ0ZXN0MzIiIGlkPSJzanMtQjQiPnRlc3QzMjwvdGQ+PHRkIGRhdGEtdD0icyIgZGF0YS12PSJ0ZXN0MzMiIGlkPSJzanMtQzQiPnRlc3QzMzwvdGQ+PHRkIGRhdGEtdD0icyIgZGF0YS12PSJ0ZXN0MzQiIGlkPSJzanMtRDQiPnRlc3QzNDwvdGQ+PC90cj48dHI+PHRkIGRhdGEtdD0icyIgZGF0YS12PSJ0ZXN0NCIgaWQ9InNqcy1BNSI+dGVzdDQ8L3RkPjx0ZCBkYXRhLXQ9InMiIGRhdGEtdj0idGVzdDQyIiBpZD0ic2pzLUI1Ij50ZXN0NDI8L3RkPjx0ZCBkYXRhLXQ9InMiIGRhdGEtdj0idGVzdDQzIiBpZD0ic2pzLUM1Ij50ZXN0NDM8L3RkPjx0ZCBkYXRhLXQ9InMiIGRhdGEtdj0idGVzdDQ0IiBpZD0ic2pzLUQ1Ij50ZXN0NDQ8L3RkPjwvdHI+PC90YWJsZT48L2JvZHk+PC9odG1sPg==", - "fileName": "spreadsheet.html", - "fileSize": "1.24 kB" - } - }, - "pairedItem": [ - { - "item": 0 - }, - { - "item": 1 - }, - { - "item": 2 - }, - { - "item": 3 - } - ] - } - ] - ] - } - } - ], - "Function1": [ - { - "startTime": 1747343994491, - "executionIndex": 3, - "source": [ - { - "previousNode": "Spreadsheet File" - } - ], - "hints": [], - "executionTime": 2, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "binary": { - "data": { - "mimeType": "text/html", - "fileType": "html", - "fileExtension": "html", - "data": "PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiLz48dGl0bGU+U2hlZXRKUyBUYWJsZSBFeHBvcnQ8L3RpdGxlPjwvaGVhZD48Ym9keT48dGFibGU+PHRyPjx0ZCBkYXRhLXQ9InMiIGRhdGEtdj0ibmFtZXMuMCIgaWQ9InNqcy1BMSI+bmFtZXMuMDwvdGQ+PHRkIGRhdGEtdD0icyIgZGF0YS12PSJuYW1lcy4xIiBpZD0ic2pzLUIxIj5uYW1lcy4xPC90ZD48dGQgZGF0YS10PSJzIiBkYXRhLXY9Im5hbWVzLjIiIGlkPSJzanMtQzEiPm5hbWVzLjI8L3RkPjx0ZCBkYXRhLXQ9InMiIGRhdGEtdj0ibmFtZXMuMyIgaWQ9InNqcy1EMSI+bmFtZXMuMzwvdGQ+PC90cj48dHI+PHRkIGRhdGEtdD0icyIgZGF0YS12PSJ0ZXN0MSIgaWQ9InNqcy1BMiI+dGVzdDE8L3RkPjx0ZCBkYXRhLXQ9InMiIGRhdGEtdj0idGVzdDEyIiBpZD0ic2pzLUIyIj50ZXN0MTI8L3RkPjx0ZCBkYXRhLXQ9InMiIGRhdGEtdj0idGVzdDEzIiBpZD0ic2pzLUMyIj50ZXN0MTM8L3RkPjx0ZCBkYXRhLXQ9InMiIGRhdGEtdj0idGVzdDE0IiBpZD0ic2pzLUQyIj50ZXN0MTQ8L3RkPjwvdHI+PHRyPjx0ZCBkYXRhLXQ9InMiIGRhdGEtdj0idGVzdDIiIGlkPSJzanMtQTMiPnRlc3QyPC90ZD48dGQgZGF0YS10PSJzIiBkYXRhLXY9InRlc3QyMiIgaWQ9InNqcy1CMyI+dGVzdDIyPC90ZD48dGQgZGF0YS10PSJzIiBkYXRhLXY9InRlc3QyMyIgaWQ9InNqcy1DMyI+dGVzdDIzPC90ZD48dGQgZGF0YS10PSJzIiBkYXRhLXY9InRlc3QyNCIgaWQ9InNqcy1EMyI+dGVzdDI0PC90ZD48L3RyPjx0cj48dGQgZGF0YS10PSJzIiBkYXRhLXY9InRlc3QzIiBpZD0ic2pzLUE0Ij50ZXN0MzwvdGQ+PHRkIGRhdGEtdD0icyIgZGF0YS12PSJ0ZXN0MzIiIGlkPSJzanMtQjQiPnRlc3QzMjwvdGQ+PHRkIGRhdGEtdD0icyIgZGF0YS12PSJ0ZXN0MzMiIGlkPSJzanMtQzQiPnRlc3QzMzwvdGQ+PHRkIGRhdGEtdD0icyIgZGF0YS12PSJ0ZXN0MzQiIGlkPSJzanMtRDQiPnRlc3QzNDwvdGQ+PC90cj48dHI+PHRkIGRhdGEtdD0icyIgZGF0YS12PSJ0ZXN0NCIgaWQ9InNqcy1BNSI+dGVzdDQ8L3RkPjx0ZCBkYXRhLXQ9InMiIGRhdGEtdj0idGVzdDQyIiBpZD0ic2pzLUI1Ij50ZXN0NDI8L3RkPjx0ZCBkYXRhLXQ9InMiIGRhdGEtdj0idGVzdDQzIiBpZD0ic2pzLUM1Ij50ZXN0NDM8L3RkPjx0ZCBkYXRhLXQ9InMiIGRhdGEtdj0idGVzdDQ0IiBpZD0ic2pzLUQ1Ij50ZXN0NDQ8L3RkPjwvdHI+PC90YWJsZT48L2JvZHk+PC9odG1sPg==", - "fileName": "spreadsheet.html", - "fileSize": "1.24 kB" - } - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Spreadsheet File1": [ - { - "startTime": 1747343994493, - "executionIndex": 4, - "source": [ - { - "previousNode": "Spreadsheet File" - } - ], - "hints": [], - "executionTime": 3, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "names.0": "test1", - "names.1": "test12", - "names.2": "test13", - "names.3": "test14" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "names.0": "test2", - "names.1": "test22", - "names.2": "test23", - "names.3": "test24" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "names.0": "test3", - "names.1": "test32", - "names.2": "test33", - "names.3": "test34" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "names.0": "test4", - "names.1": "test42", - "names.2": "test43", - "names.3": "test44" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Function2": [ - { - "startTime": 1747343994496, - "executionIndex": 5, - "source": [ - { - "previousNode": "Spreadsheet File1" - } - ], - "hints": [], - "executionTime": 2, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "names.0": "test1", - "names.1": "test12", - "names.2": "test13", - "names.3": "test14" - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - }, - { - "json": { - "names.0": "test2", - "names.1": "test22", - "names.2": "test23", - "names.3": "test24" - }, - "pairedItem": { - "item": 1 - }, - "index": 1 - }, - { - "json": { - "names.0": "test3", - "names.1": "test32", - "names.2": "test33", - "names.3": "test34" - }, - "pairedItem": { - "item": 2 - }, - "index": 2 - }, - { - "json": { - "names.0": "test4", - "names.1": "test42", - "names.2": "test43", - "names.3": "test44" - }, - "pairedItem": { - "item": 3 - }, - "index": 3 - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Function2" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:54.482Z", - "stoppedAt": "2025-05-15T21:19:54.498Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/112-snapshot.json b/test-workflows/snapshots/112-snapshot.json deleted file mode 100644 index ad81ee53728..00000000000 --- a/test-workflows/snapshots/112-snapshot.json +++ /dev/null @@ -1,172 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1710331886879, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "RabbitMQ": [ - { - "startTime": 1710331886879, - "executionTime": 703, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "RabbitMQ1": [ - { - "startTime": 1710331887582, - "executionTime": 244, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "RabbitMQ2": [ - { - "startTime": 1710331887826, - "executionTime": 262, - "source": [ - { - "previousNode": "RabbitMQ1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "RabbitMQ3": [ - { - "startTime": 1710331888088, - "executionTime": 260, - "source": [ - { - "previousNode": "RabbitMQ2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "RabbitMQ4": [ - { - "startTime": 1710331888349, - "executionTime": 240, - "source": [ - { - "previousNode": "RabbitMQ3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "RabbitMQ4" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2024-03-13T12:11:26.879Z", - "stoppedAt": "2024-03-13T12:11:28.589Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/113-snapshot.json b/test-workflows/snapshots/113-snapshot.json deleted file mode 100644 index 5d49069f3e2..00000000000 --- a/test-workflows/snapshots/113-snapshot.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1710331887198, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set": [ - { - "startTime": 1710331887198, - "executionTime": 3, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "message": "AMQPMessage1710331887201" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AMQP Sender": [ - { - "startTime": 1710331887201, - "executionTime": 449, - "source": [ - { - "previousNode": "Set" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 0 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "AMQP Sender" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2024-03-13T12:11:27.197Z", - "stoppedAt": "2024-03-13T12:11:27.650Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/114-snapshot.json b/test-workflows/snapshots/114-snapshot.json deleted file mode 100644 index e2375c9096d..00000000000 --- a/test-workflows/snapshots/114-snapshot.json +++ /dev/null @@ -1,619 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343994499, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Monday.com": [ - { - "startTime": 1747343994499, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 1493, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "9163279560" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Monday.com1": [ - { - "startTime": 1747343995992, - "executionIndex": 2, - "source": [ - { - "previousNode": "Monday.com" - } - ], - "hints": [], - "executionTime": 705, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "9163279560", - "name": "Board1747343994501", - "description": { - "object": true - }, - "state": "active", - "board_folder_id": { - "object": true - }, - "board_kind": "private", - "owners": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Monday.com2": [ - { - "startTime": 1747343996697, - "executionIndex": 3, - "source": [ - { - "previousNode": "Monday.com1" - } - ], - "hints": [], - "executionTime": 363, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "9163279560", - "name": "Board1747343994501", - "description": { - "object": true - }, - "state": "active", - "board_folder_id": { - "object": true - }, - "board_kind": "private", - "owners": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Monday.com4": [ - { - "startTime": 1747343997060, - "executionIndex": 4, - "source": [ - { - "previousNode": "Monday.com2" - } - ], - "hints": [], - "executionTime": 820, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "boolean_mkqzts11" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Monday.com6": [ - { - "startTime": 1747343997880, - "executionIndex": 5, - "source": [ - { - "previousNode": "Monday.com4" - } - ], - "hints": [], - "executionTime": 707, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "group_mkqzjrxd" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Monday.com9": [ - { - "startTime": 1747343998587, - "executionIndex": 6, - "source": [ - { - "previousNode": "Monday.com6" - } - ], - "hints": [], - "executionTime": 699, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "9163280038" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Monday.com10": [ - { - "startTime": 1747343999286, - "executionIndex": 7, - "source": [ - { - "previousNode": "Monday.com9" - } - ], - "hints": [], - "executionTime": 1154, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "4124607906" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Monday.com11": [ - { - "startTime": 1747344000440, - "executionIndex": 8, - "source": [ - { - "previousNode": "Monday.com10" - } - ], - "hints": [], - "executionTime": 627, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "9163280038" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Monday.com12": [ - { - "startTime": 1747344001067, - "executionIndex": 9, - "source": [ - { - "previousNode": "Monday.com11" - } - ], - "hints": [], - "executionTime": 334, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "9163280038", - "name": "Item1747343998592", - "created_at": "2025-05-15T21:19:59Z", - "state": "active", - "column_values": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Monday.com13": [ - { - "startTime": 1747344001401, - "executionIndex": 10, - "source": [ - { - "previousNode": "Monday.com12" - } - ], - "hints": [], - "executionTime": 568, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "9163280038", - "name": "Item1747343998592", - "created_at": "2025-05-15T21:19:59Z", - "state": "active", - "column_values": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Monday.com14": [ - { - "startTime": 1747344001969, - "executionIndex": 11, - "source": [ - { - "previousNode": "Monday.com13" - } - ], - "hints": [], - "executionTime": 562, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "9163279581", - "name": "Task 1", - "created_at": "2025-05-15T21:19:55Z", - "state": "active", - "board": { - "object": true - }, - "column_values": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Monday.com15": [ - { - "startTime": 1747344002531, - "executionIndex": 12, - "source": [ - { - "previousNode": "Monday.com14" - } - ], - "hints": [], - "executionTime": 819, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "9163280038" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Monday.com16": [ - { - "startTime": 1747344003350, - "executionIndex": 13, - "source": [ - { - "previousNode": "Monday.com15" - } - ], - "hints": [], - "executionTime": 809, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "9163280038" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Monday.com7": [ - { - "startTime": 1747344004159, - "executionIndex": 14, - "source": [ - { - "previousNode": "Monday.com16" - } - ], - "hints": [], - "executionTime": 1162, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "group_mkqzjrxd" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Monday.com8": [ - { - "startTime": 1747344005321, - "executionIndex": 15, - "source": [ - { - "previousNode": "Monday.com7" - } - ], - "hints": [], - "executionTime": 373, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "topics", - "title": "Group Title", - "color": "#037f4c", - "position": "65536", - "archived": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Monday.com5": [ - { - "startTime": 1747344005695, - "executionIndex": 16, - "source": [ - { - "previousNode": "Monday.com8" - } - ], - "hints": [], - "executionTime": 340, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "name", - "title": "Name", - "type": "name", - "settings_str": "{}", - "archived": false - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": "boolean_mkqzts11", - "title": "Column1747343997063", - "type": "checkbox", - "settings_str": "{}", - "archived": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Merge": [ - { - "startTime": 1747344006035, - "executionIndex": 17, - "source": [ - { - "previousNode": "Monday.com5" - }, - { - "previousNode": "Monday.com5" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": [ - { - "item": 0 - }, - { - "item": 1 - } - ] - } - ] - ] - } - } - ], - "Monday.com3": [ - { - "startTime": 1747344006036, - "executionIndex": 18, - "source": [ - { - "previousNode": "Merge" - } - ], - "hints": [], - "executionTime": 660, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "9163279560" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Monday.com3" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:54.498Z", - "stoppedAt": "2025-05-15T21:20:06.696Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/115-snapshot.json b/test-workflows/snapshots/115-snapshot.json deleted file mode 100644 index 569dc8085e6..00000000000 --- a/test-workflows/snapshots/115-snapshot.json +++ /dev/null @@ -1,186 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1710331887209, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Cockpit": [ - { - "startTime": 1710331887209, - "executionTime": 302, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "Name": "entry1710331887212", - "_by": "604887bce94fea0ea177c951", - "_modified": 1710331887, - "_created": 1710331887, - "_id": "65f197ef674387269e75af55" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Cockpit3": [ - { - "startTime": 1710331887511, - "executionTime": 83, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "FixedName", - "_mby": "604887bce94fea0ea177c951", - "_by": "604887bce94fea0ea177c951" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Cockpit4": [ - { - "startTime": 1710331887594, - "executionTime": 74, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "name1710331887596", - "tag": "tag1710331887597" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Cockpit1": [ - { - "startTime": 1710331887668, - "executionTime": 76, - "source": [ - { - "previousNode": "Cockpit" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": "65f197ef674387269e75af55", - "Name": "UpdatedEntry1710331887671", - "_by": "604887bce94fea0ea177c951", - "_modified": 1710331887 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Cockpit2": [ - { - "startTime": 1710331887744, - "executionTime": 55, - "source": [ - { - "previousNode": "Cockpit1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "Name": "UpdatedEntry1615366572785", - "_by": "604887bce94fea0ea177c951", - "_modified": 1615366572, - "_created": 1615366532, - "_id": "6048898478f13b61a46fc881" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Cockpit2" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2024-03-13T12:11:27.209Z", - "stoppedAt": "2024-03-13T12:11:27.799Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/116-snapshot.json b/test-workflows/snapshots/116-snapshot.json deleted file mode 100644 index 3f540e7358e..00000000000 --- a/test-workflows/snapshots/116-snapshot.json +++ /dev/null @@ -1,611 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1676891405872, - "executionTime": 1, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Ghost": [ - { - "startTime": 1676891405873, - "executionTime": 475, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "63f3550e3464df0001bf1bbc", - "uuid": "25ff3cb7-725f-478d-9710-8798ce3ceccd", - "title": "PostTitle1676891405907", - "slug": "posttitle1676891405907", - "mobiledoc": "{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[],\"markups\":[],\"sections\":[[1,\"p\",[[0,[],0,\"Post Content written at 1676891405907\"]]]]}", - "comment_id": "63f3550e3464df0001bf1bbc", - "feature_image": { - "object": true - }, - "featured": false, - "status": "draft", - "visibility": "public", - "created_at": "2023-02-20T11:10:06.000Z", - "updated_at": "2023-02-20T11:10:06.000Z", - "published_at": { - "object": true - }, - "custom_excerpt": { - "object": true - }, - "codeinjection_head": { - "object": true - }, - "codeinjection_foot": { - "object": true - }, - "custom_template": { - "object": true - }, - "canonical_url": { - "object": true - }, - "authors": [ - "json array" - ], - "tags": [ - "json array" - ], - "primary_author": { - "object": true - }, - "primary_tag": { - "object": true - }, - "url": "http://localhost:2368/p/25ff3cb7-725f-478d-9710-8798ce3ceccd/", - "excerpt": "Post Content written at 1676891405907", - "og_image": { - "object": true - }, - "og_title": { - "object": true - }, - "og_description": { - "object": true - }, - "twitter_image": { - "object": true - }, - "twitter_title": { - "object": true - }, - "twitter_description": { - "object": true - }, - "meta_title": { - "object": true - }, - "meta_description": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Ghost1": [ - { - "startTime": 1676891406348, - "executionTime": 386, - "source": [ - { - "previousNode": "Ghost" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "63f3550e3464df0001bf1bbc", - "uuid": "25ff3cb7-725f-478d-9710-8798ce3ceccd", - "title": "UpdateTitle1676891406349", - "slug": "posttitle1676891405907", - "mobiledoc": "{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[],\"markups\":[],\"sections\":[[1,\"p\",[[0,[],0,\"Post Content written at 1676891405907\"]]]]}", - "comment_id": "63f3550e3464df0001bf1bbc", - "feature_image": { - "object": true - }, - "featured": false, - "status": "draft", - "visibility": "public", - "created_at": "2023-02-20T11:10:06.000Z", - "updated_at": "2023-02-20T11:10:06.000Z", - "published_at": { - "object": true - }, - "custom_excerpt": { - "object": true - }, - "codeinjection_head": { - "object": true - }, - "codeinjection_foot": { - "object": true - }, - "custom_template": { - "object": true - }, - "canonical_url": { - "object": true - }, - "tags": [ - "json array" - ], - "authors": [ - "json array" - ], - "primary_author": { - "object": true - }, - "primary_tag": { - "object": true - }, - "url": "http://localhost:2368/p/25ff3cb7-725f-478d-9710-8798ce3ceccd/", - "excerpt": "Post Content written at 1676891405907", - "og_image": { - "object": true - }, - "og_title": { - "object": true - }, - "og_description": { - "object": true - }, - "twitter_image": { - "object": true - }, - "twitter_title": { - "object": true - }, - "twitter_description": { - "object": true - }, - "meta_title": { - "object": true - }, - "meta_description": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Ghost2": [ - { - "startTime": 1676891406734, - "executionTime": 248, - "source": [ - { - "previousNode": "Ghost1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "63f3550e3464df0001bf1bbc", - "uuid": "25ff3cb7-725f-478d-9710-8798ce3ceccd", - "title": "UpdateTitle1676891406349", - "slug": "posttitle1676891405907", - "mobiledoc": "{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[],\"markups\":[],\"sections\":[[1,\"p\",[[0,[],0,\"Post Content written at 1676891405907\"]]]]}", - "comment_id": "63f3550e3464df0001bf1bbc", - "feature_image": { - "object": true - }, - "featured": false, - "status": "draft", - "visibility": "public", - "created_at": "2023-02-20T11:10:06.000Z", - "updated_at": "2023-02-20T11:10:06.000Z", - "published_at": { - "object": true - }, - "custom_excerpt": { - "object": true - }, - "codeinjection_head": { - "object": true - }, - "codeinjection_foot": { - "object": true - }, - "custom_template": { - "object": true - }, - "canonical_url": { - "object": true - }, - "tags": [ - "json array" - ], - "authors": [ - "json array" - ], - "primary_author": { - "object": true - }, - "primary_tag": { - "object": true - }, - "url": "http://localhost:2368/p/25ff3cb7-725f-478d-9710-8798ce3ceccd/", - "excerpt": "Post Content written at 1676891405907", - "og_image": { - "object": true - }, - "og_title": { - "object": true - }, - "og_description": { - "object": true - }, - "twitter_image": { - "object": true - }, - "twitter_title": { - "object": true - }, - "twitter_description": { - "object": true - }, - "meta_title": { - "object": true - }, - "meta_description": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Ghost3": [ - { - "startTime": 1676891406983, - "executionTime": 244, - "source": [ - { - "previousNode": "Ghost2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "63f3550e3464df0001bf1bbc", - "uuid": "25ff3cb7-725f-478d-9710-8798ce3ceccd", - "title": "UpdateTitle1676891406349", - "slug": "posttitle1676891405907", - "mobiledoc": "{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[],\"markups\":[],\"sections\":[[1,\"p\",[[0,[],0,\"Post Content written at 1676891405907\"]]]]}", - "comment_id": "63f3550e3464df0001bf1bbc", - "feature_image": { - "object": true - }, - "featured": false, - "status": "draft", - "visibility": "public", - "created_at": "2023-02-20T11:10:06.000Z", - "updated_at": "2023-02-20T11:10:06.000Z", - "published_at": { - "object": true - }, - "custom_excerpt": { - "object": true - }, - "codeinjection_head": { - "object": true - }, - "codeinjection_foot": { - "object": true - }, - "custom_template": { - "object": true - }, - "canonical_url": { - "object": true - }, - "tags": [ - "json array" - ], - "authors": [ - "json array" - ], - "primary_author": { - "object": true - }, - "primary_tag": { - "object": true - }, - "url": "http://localhost:2368/p/25ff3cb7-725f-478d-9710-8798ce3ceccd/", - "excerpt": "Post Content written at 1676891405907", - "og_image": { - "object": true - }, - "og_title": { - "object": true - }, - "og_description": { - "object": true - }, - "twitter_image": { - "object": true - }, - "twitter_title": { - "object": true - }, - "twitter_description": { - "object": true - }, - "meta_title": { - "object": true - }, - "meta_description": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Ghost4": [ - { - "startTime": 1676891407227, - "executionTime": 164, - "source": [ - { - "previousNode": "Ghost3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "60489c2d8b68c800011955f0", - "uuid": "51c60db4-8ef0-4de9-8529-c1cde7460591", - "title": "Welcome to Ghost", - "slug": "welcome", - "html": "

A few things you should know

  1. Ghost is designed for ambitious, professional publishers who want to actively build a business around their content. That's who it works best for.
  2. The entire platform can be modified and customised to suit your needs. It's very powerful, but does require some knowledge of code. Ghost is not necessarily a good platform for beginners or people who just want a simple personal blog.
  3. It's possible to work with all your favourite tools and apps with hundreds of integrations to speed up your workflows, connect email lists, build communities and much more.

Behind the scenes

Ghost is made by an independent non-profit organisation called the Ghost Foundation. We are 100% self funded by revenue from our Ghost(Pro) service, and every penny we make is re-invested into funding further development of free, open source technology for modern publishing.

The version of Ghost you are looking at right now would not have been made possible without generous contributions from the open source community.

Next up, the editor

The main thing you'll want to read about next is probably: the Ghost editor. This is where the good stuff happens.

By the way, once you're done reading, you can simply delete the default Ghost user from your team to remove all of these introductory posts!
", - "comment_id": "60489c2d8b68c800011955f0", - "feature_image": "https://static.ghost.org/v3.0.0/images/welcome-to-ghost.png", - "featured": false, - "visibility": "public", - "email_recipient_filter": "none", - "created_at": "2021-03-10T10:15:09.000+00:00", - "updated_at": "2021-03-10T10:15:09.000+00:00", - "published_at": "2021-03-10T10:15:15.000+00:00", - "custom_excerpt": "Welcome, it's great to have you here.\nWe know that first impressions are important, so we've populated your new site with some initial getting started posts that will help you get familiar with everything in no time.", - "codeinjection_head": { - "object": true - }, - "codeinjection_foot": { - "object": true - }, - "custom_template": { - "object": true - }, - "canonical_url": { - "object": true - }, - "url": "http://localhost:2368/welcome/", - "excerpt": "Welcome, it's great to have you here.\nWe know that first impressions are important, so we've populated your new site with some initial getting started posts that will help you get familiar with everything in no time.", - "reading_time": 1, - "access": true, - "send_email_when_published": false, - "og_image": { - "object": true - }, - "og_title": { - "object": true - }, - "og_description": { - "object": true - }, - "twitter_image": { - "object": true - }, - "twitter_title": { - "object": true - }, - "twitter_description": { - "object": true - }, - "meta_title": { - "object": true - }, - "meta_description": { - "object": true - }, - "email_subject": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Ghost5": [ - { - "startTime": 1676891407391, - "executionTime": 182, - "source": [ - { - "previousNode": "Ghost4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "60489c2d8b68c800011955f0", - "uuid": "51c60db4-8ef0-4de9-8529-c1cde7460591", - "title": "Welcome to Ghost", - "slug": "welcome", - "html": "

A few things you should know

  1. Ghost is designed for ambitious, professional publishers who want to actively build a business around their content. That's who it works best for.
  2. The entire platform can be modified and customised to suit your needs. It's very powerful, but does require some knowledge of code. Ghost is not necessarily a good platform for beginners or people who just want a simple personal blog.
  3. It's possible to work with all your favourite tools and apps with hundreds of integrations to speed up your workflows, connect email lists, build communities and much more.

Behind the scenes

Ghost is made by an independent non-profit organisation called the Ghost Foundation. We are 100% self funded by revenue from our Ghost(Pro) service, and every penny we make is re-invested into funding further development of free, open source technology for modern publishing.

The version of Ghost you are looking at right now would not have been made possible without generous contributions from the open source community.

Next up, the editor

The main thing you'll want to read about next is probably: the Ghost editor. This is where the good stuff happens.

By the way, once you're done reading, you can simply delete the default Ghost user from your team to remove all of these introductory posts!
", - "comment_id": "60489c2d8b68c800011955f0", - "feature_image": "https://static.ghost.org/v3.0.0/images/welcome-to-ghost.png", - "featured": false, - "visibility": "public", - "email_recipient_filter": "none", - "created_at": "2021-03-10T10:15:09.000+00:00", - "updated_at": "2021-03-10T10:15:09.000+00:00", - "published_at": "2021-03-10T10:15:15.000+00:00", - "custom_excerpt": "Welcome, it's great to have you here.\nWe know that first impressions are important, so we've populated your new site with some initial getting started posts that will help you get familiar with everything in no time.", - "codeinjection_head": { - "object": true - }, - "codeinjection_foot": { - "object": true - }, - "custom_template": { - "object": true - }, - "canonical_url": { - "object": true - }, - "url": "http://localhost:2368/welcome/", - "excerpt": "Welcome, it's great to have you here.\nWe know that first impressions are important, so we've populated your new site with some initial getting started posts that will help you get familiar with everything in no time.", - "reading_time": 1, - "access": true, - "send_email_when_published": false, - "og_image": { - "object": true - }, - "og_title": { - "object": true - }, - "og_description": { - "object": true - }, - "twitter_image": { - "object": true - }, - "twitter_title": { - "object": true - }, - "twitter_description": { - "object": true - }, - "meta_title": { - "object": true - }, - "meta_description": { - "object": true - }, - "email_subject": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Ghost6": [ - { - "startTime": 1676891407573, - "executionTime": 170, - "source": [ - { - "previousNode": "Ghost5" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Ghost6" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-02-20T11:10:05.871Z", - "stoppedAt": "2023-02-20T11:10:07.743Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/117-snapshot.json b/test-workflows/snapshots/117-snapshot.json deleted file mode 100644 index d3bdd215502..00000000000 --- a/test-workflows/snapshots/117-snapshot.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1710331887222, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gotify": [ - { - "startTime": 1710331887223, - "executionTime": 287, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 1306, - "appid": 1, - "message": "Message content 1710331887225", - "title": "Title1710331887228", - "priority": 0, - "date": "2024-03-13T12:11:27.484571026Z" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gotify1": [ - { - "startTime": 1710331887510, - "executionTime": 58, - "source": [ - { - "previousNode": "Gotify" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 1306, - "appid": 1, - "message": "Message content 1710331887225", - "title": "Title1710331887228", - "priority": 0, - "date": "2024-03-13T12:11:27.484571026Z" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gotify2": [ - { - "startTime": 1710331887568, - "executionTime": 62, - "source": [ - { - "previousNode": "Gotify1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Gotify2" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2024-03-13T12:11:27.222Z", - "stoppedAt": "2024-03-13T12:11:27.630Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/118-snapshot.json b/test-workflows/snapshots/118-snapshot.json deleted file mode 100644 index 12dd8d496a1..00000000000 --- a/test-workflows/snapshots/118-snapshot.json +++ /dev/null @@ -1,554 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1710331887342, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set": [ - { - "startTime": 1710331887342, - "executionTime": 3, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "key": "TestKey", - "value": "Value1710331887344" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Redis": [ - { - "startTime": 1710331887345, - "executionTime": 230, - "source": [ - { - "previousNode": "Set" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "redis_version": 6.2, - "redis_git_sha1": 0, - "redis_git_dirty": 0, - "redis_build_id": "a26c8b6d79010f4f", - "redis_mode": "standalone", - "os": "Linux 5.4.0-65-generic x86_64", - "arch_bits": 64, - "multiplexing_api": "epoll", - "atomicvar_api": "c11-builtin", - "gcc_version": 8.3, - "process_id": 1, - "process_supervised": "no", - "run_id": "335ae737a685624354ebf06e053072c8dde37824", - "tcp_port": 6379, - "server_time_usec": 1710331887537701, - "uptime_in_seconds": 34307370, - "uptime_in_days": 397, - "hz": 10, - "configured_hz": 10, - "lru_clock": 15833071, - "executable": "/data/redis-server", - "config_file": "/usr/local/etc/redis.conf", - "io_threads_active": 0, - "connected_clients": 1, - "cluster_connections": 0, - "maxclients": 10000, - "client_recent_max_input_buffer": 40, - "client_recent_max_output_buffer": 0, - "blocked_clients": 0, - "tracking_clients": 0, - "clients_in_timeout_table": 0, - "used_memory": 988872, - "used_memory_human": "965.70K", - "used_memory_rss": 4448256, - "used_memory_rss_human": "4.24M", - "used_memory_peak": 3094400, - "used_memory_peak_human": "2.95M", - "used_memory_peak_perc": "31.96%", - "used_memory_overhead": 831184, - "used_memory_startup": 810184, - "used_memory_dataset": 157688, - "used_memory_dataset_perc": "88.25%", - "allocator_allocated": 1020376, - "allocator_active": 1339392, - "allocator_resident": 3866624, - "total_system_memory": 16395214848, - "total_system_memory_human": "15.27G", - "used_memory_lua": 37888, - "used_memory_lua_human": "37.00K", - "used_memory_scripts": 0, - "used_memory_scripts_human": "0B", - "number_of_cached_scripts": 0, - "maxmemory": 0, - "maxmemory_human": "0B", - "maxmemory_policy": "noeviction", - "allocator_frag_ratio": 1.31, - "allocator_frag_bytes": 319016, - "allocator_rss_ratio": 2.89, - "allocator_rss_bytes": 2527232, - "rss_overhead_ratio": 1.15, - "rss_overhead_bytes": 581632, - "mem_fragmentation_ratio": 4.51, - "mem_fragmentation_bytes": 3461176, - "mem_not_counted_for_evict": 0, - "mem_replication_backlog": 0, - "mem_clients_slaves": 0, - "mem_clients_normal": 20520, - "mem_aof_buffer": 0, - "mem_allocator": "jemalloc-5.1.0", - "active_defrag_running": 0, - "lazyfree_pending_objects": 0, - "lazyfreed_objects": 0, - "loading": 0, - "current_cow_size": 0, - "current_fork_perc": "0.00%", - "current_save_keys_processed": 0, - "current_save_keys_total": 0, - "rdb_changes_since_last_save": 0, - "rdb_bgsave_in_progress": 0, - "rdb_last_save_time": 1710299433, - "rdb_last_bgsave_status": "ok", - "rdb_last_bgsave_time_sec": 0, - "rdb_current_bgsave_time_sec": "-1", - "rdb_last_cow_size": 483328, - "aof_enabled": 0, - "aof_rewrite_in_progress": 0, - "aof_rewrite_scheduled": 0, - "aof_last_rewrite_time_sec": "-1", - "aof_current_rewrite_time_sec": "-1", - "aof_last_bgrewrite_status": "ok", - "aof_last_write_status": "ok", - "aof_last_cow_size": 0, - "module_fork_in_progress": 0, - "module_fork_last_cow_size": 0, - "total_connections_received": 43137, - "total_commands_processed": 389780, - "instantaneous_ops_per_sec": 1, - "total_net_input_bytes": 7316126, - "total_net_output_bytes": 47053879, - "instantaneous_input_kbps": 0.09, - "instantaneous_output_kbps": 0.11, - "rejected_connections": 0, - "sync_full": 0, - "sync_partial_ok": 0, - "sync_partial_err": 0, - "expired_keys": 0, - "expired_stale_perc": 0, - "expired_time_cap_reached_count": 0, - "expire_cycle_cpu_milliseconds": 1228670, - "evicted_keys": 0, - "keyspace_hits": 3820, - "keyspace_misses": 0, - "pubsub_channels": 0, - "pubsub_patterns": 0, - "latest_fork_usec": 983, - "total_forks": 108873, - "migrate_cached_sockets": 0, - "slave_expires_tracked_keys": 0, - "active_defrag_hits": 0, - "active_defrag_misses": 0, - "active_defrag_key_hits": 0, - "active_defrag_key_misses": 0, - "tracking_total_keys": 0, - "tracking_total_items": 0, - "tracking_total_prefixes": 0, - "unexpected_error_replies": 0, - "total_error_replies": 400712, - "dump_payload_sanitizations": 0, - "total_reads_processed": 266496, - "total_writes_processed": 227508, - "io_threaded_reads_processed": 0, - "io_threaded_writes_processed": 0, - "role": "master", - "connected_slaves": 0, - "master_failover_state": "no-failover", - "master_replid": "5bcfb8d0e50aae43141a6bc4de0e07b90f780906", - "master_replid2": 0, - "master_repl_offset": 0, - "second_repl_offset": "-1", - "repl_backlog_active": 0, - "repl_backlog_size": 1048576, - "repl_backlog_first_byte_offset": 0, - "repl_backlog_histlen": 0, - "used_cpu_sys": 81544.939292, - "used_cpu_user": 114072.000995, - "used_cpu_sys_children": 259.550501, - "used_cpu_user_children": 136.476364, - "used_cpu_sys_main_thread": 81531.244451, - "used_cpu_user_main_thread": 114059.326093, - "errorstat_ERR": { - "object": true - }, - "errorstat_MISCONF": { - "object": true - }, - "errorstat_NOAUTH": { - "object": true - }, - "errorstat_WRONGPASS": { - "object": true - }, - "cluster_enabled": 0, - "db0": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Redis1": [ - { - "startTime": 1710331887575, - "executionTime": 143, - "source": [ - { - "previousNode": "Redis" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "redis_version": 6.2, - "redis_git_sha1": 0, - "redis_git_dirty": 0, - "redis_build_id": "a26c8b6d79010f4f", - "redis_mode": "standalone", - "os": "Linux 5.4.0-65-generic x86_64", - "arch_bits": 64, - "multiplexing_api": "epoll", - "atomicvar_api": "c11-builtin", - "gcc_version": 8.3, - "process_id": 1, - "process_supervised": "no", - "run_id": "335ae737a685624354ebf06e053072c8dde37824", - "tcp_port": 6379, - "server_time_usec": 1710331887537701, - "uptime_in_seconds": 34307370, - "uptime_in_days": 397, - "hz": 10, - "configured_hz": 10, - "lru_clock": 15833071, - "executable": "/data/redis-server", - "config_file": "/usr/local/etc/redis.conf", - "io_threads_active": 0, - "connected_clients": 1, - "cluster_connections": 0, - "maxclients": 10000, - "client_recent_max_input_buffer": 40, - "client_recent_max_output_buffer": 0, - "blocked_clients": 0, - "tracking_clients": 0, - "clients_in_timeout_table": 0, - "used_memory": 988872, - "used_memory_human": "965.70K", - "used_memory_rss": 4448256, - "used_memory_rss_human": "4.24M", - "used_memory_peak": 3094400, - "used_memory_peak_human": "2.95M", - "used_memory_peak_perc": "31.96%", - "used_memory_overhead": 831184, - "used_memory_startup": 810184, - "used_memory_dataset": 157688, - "used_memory_dataset_perc": "88.25%", - "allocator_allocated": 1020376, - "allocator_active": 1339392, - "allocator_resident": 3866624, - "total_system_memory": 16395214848, - "total_system_memory_human": "15.27G", - "used_memory_lua": 37888, - "used_memory_lua_human": "37.00K", - "used_memory_scripts": 0, - "used_memory_scripts_human": "0B", - "number_of_cached_scripts": 0, - "maxmemory": 0, - "maxmemory_human": "0B", - "maxmemory_policy": "noeviction", - "allocator_frag_ratio": 1.31, - "allocator_frag_bytes": 319016, - "allocator_rss_ratio": 2.89, - "allocator_rss_bytes": 2527232, - "rss_overhead_ratio": 1.15, - "rss_overhead_bytes": 581632, - "mem_fragmentation_ratio": 4.51, - "mem_fragmentation_bytes": 3461176, - "mem_not_counted_for_evict": 0, - "mem_replication_backlog": 0, - "mem_clients_slaves": 0, - "mem_clients_normal": 20520, - "mem_aof_buffer": 0, - "mem_allocator": "jemalloc-5.1.0", - "active_defrag_running": 0, - "lazyfree_pending_objects": 0, - "lazyfreed_objects": 0, - "loading": 0, - "current_cow_size": 0, - "current_fork_perc": "0.00%", - "current_save_keys_processed": 0, - "current_save_keys_total": 0, - "rdb_changes_since_last_save": 0, - "rdb_bgsave_in_progress": 0, - "rdb_last_save_time": 1710299433, - "rdb_last_bgsave_status": "ok", - "rdb_last_bgsave_time_sec": 0, - "rdb_current_bgsave_time_sec": "-1", - "rdb_last_cow_size": 483328, - "aof_enabled": 0, - "aof_rewrite_in_progress": 0, - "aof_rewrite_scheduled": 0, - "aof_last_rewrite_time_sec": "-1", - "aof_current_rewrite_time_sec": "-1", - "aof_last_bgrewrite_status": "ok", - "aof_last_write_status": "ok", - "aof_last_cow_size": 0, - "module_fork_in_progress": 0, - "module_fork_last_cow_size": 0, - "total_connections_received": 43137, - "total_commands_processed": 389780, - "instantaneous_ops_per_sec": 1, - "total_net_input_bytes": 7316126, - "total_net_output_bytes": 47053879, - "instantaneous_input_kbps": 0.09, - "instantaneous_output_kbps": 0.11, - "rejected_connections": 0, - "sync_full": 0, - "sync_partial_ok": 0, - "sync_partial_err": 0, - "expired_keys": 0, - "expired_stale_perc": 0, - "expired_time_cap_reached_count": 0, - "expire_cycle_cpu_milliseconds": 1228670, - "evicted_keys": 0, - "keyspace_hits": 3820, - "keyspace_misses": 0, - "pubsub_channels": 0, - "pubsub_patterns": 0, - "latest_fork_usec": 983, - "total_forks": 108873, - "migrate_cached_sockets": 0, - "slave_expires_tracked_keys": 0, - "active_defrag_hits": 0, - "active_defrag_misses": 0, - "active_defrag_key_hits": 0, - "active_defrag_key_misses": 0, - "tracking_total_keys": 0, - "tracking_total_items": 0, - "tracking_total_prefixes": 0, - "unexpected_error_replies": 0, - "total_error_replies": 400712, - "dump_payload_sanitizations": 0, - "total_reads_processed": 266496, - "total_writes_processed": 227508, - "io_threaded_reads_processed": 0, - "io_threaded_writes_processed": 0, - "role": "master", - "connected_slaves": 0, - "master_failover_state": "no-failover", - "master_replid": "5bcfb8d0e50aae43141a6bc4de0e07b90f780906", - "master_replid2": 0, - "master_repl_offset": 0, - "second_repl_offset": "-1", - "repl_backlog_active": 0, - "repl_backlog_size": 1048576, - "repl_backlog_first_byte_offset": 0, - "repl_backlog_histlen": 0, - "used_cpu_sys": 81544.939292, - "used_cpu_user": 114072.000995, - "used_cpu_sys_children": 259.550501, - "used_cpu_user_children": 136.476364, - "used_cpu_sys_main_thread": 81531.244451, - "used_cpu_user_main_thread": 114059.326093, - "errorstat_ERR": { - "object": true - }, - "errorstat_MISCONF": { - "object": true - }, - "errorstat_NOAUTH": { - "object": true - }, - "errorstat_WRONGPASS": { - "object": true - }, - "cluster_enabled": 0, - "db0": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Redis2": [ - { - "startTime": 1710331887718, - "executionTime": 166, - "source": [ - { - "previousNode": "Redis1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "TestKey": "Value1710331887344" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Redis3": [ - { - "startTime": 1710331887885, - "executionTime": 124, - "source": [ - { - "previousNode": "Redis2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "value": "Value1710331887344" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Redis4": [ - { - "startTime": 1710331888009, - "executionTime": 126, - "source": [ - { - "previousNode": "Redis3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "value": "Value1710331887344" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Function": [ - { - "startTime": 1710331888135, - "executionTime": 3, - "source": [ - { - "previousNode": "Redis3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "value": "Value1710331887344" - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Function" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2024-03-13T12:11:27.342Z", - "stoppedAt": "2024-03-13T12:11:28.138Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/119-snapshot.json b/test-workflows/snapshots/119-snapshot.json deleted file mode 100644 index d0f9c2130d5..00000000000 --- a/test-workflows/snapshots/119-snapshot.json +++ /dev/null @@ -1,166 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1676891406511, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set": [ - { - "startTime": 1676891406512, - "executionTime": 65, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 90783, - "name": "Name1676891406577" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "CrateDB": [ - { - "startTime": 1676891406578, - "executionTime": 322, - "source": [ - { - "previousNode": "Set" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 90783, - "name": "Name1676891406577" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set1": [ - { - "startTime": 1676891406901, - "executionTime": 13, - "source": [ - { - "previousNode": "CrateDB" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 90783, - "name": "UpdatedName1676891406903" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "CrateDB1": [ - { - "startTime": 1676891406916, - "executionTime": 310, - "source": [ - { - "previousNode": "Set1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 90783, - "name": "UpdatedName1676891406903" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "CrateDB2": [ - { - "startTime": 1676891407227, - "executionTime": 251, - "source": [ - { - "previousNode": "CrateDB1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [] - ] - } - } - ] - }, - "lastNodeExecuted": "CrateDB2" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-02-20T11:10:06.509Z", - "stoppedAt": "2023-02-20T11:10:07.478Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/120-snapshot.json b/test-workflows/snapshots/120-snapshot.json deleted file mode 100644 index b71f50845fc..00000000000 --- a/test-workflows/snapshots/120-snapshot.json +++ /dev/null @@ -1,223 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1710331887427, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set": [ - { - "startTime": 1710331887427, - "executionTime": 10, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 65660, - "name": "Name1710331887437" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "MySQL": [ - { - "startTime": 1710331887437, - "executionTime": 151, - "source": [ - { - "previousNode": "Set" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "fieldCount": 0, - "affectedRows": 1, - "insertId": 0, - "info": "", - "serverStatus": 2, - "warningStatus": 0 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set1": [ - { - "startTime": 1710331887589, - "executionTime": 4, - "source": [ - { - "previousNode": "MySQL" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "fieldCount": 0, - "affectedRows": 1, - "insertId": 0, - "info": "", - "serverStatus": 2, - "warningStatus": 0, - "id": 65660, - "name": "UpdatedName1710331887592" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "MySQL1": [ - { - "startTime": 1710331887593, - "executionTime": 133, - "source": [ - { - "previousNode": "Set1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "fieldCount": 0, - "affectedRows": 1, - "insertId": 0, - "info": "Rows matched: 1 Changed: 1 Warnings: 0", - "serverStatus": 34, - "warningStatus": 0, - "changedRows": 1 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "MySQL2": [ - { - "startTime": 1710331887726, - "executionTime": 123, - "source": [ - { - "previousNode": "MySQL1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 21457, - "name": "Name1627394768518" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "MySQL3": [ - { - "startTime": 1710331887849, - "executionTime": 128, - "source": [ - { - "previousNode": "MySQL2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "fieldCount": 0, - "affectedRows": 1, - "insertId": 0, - "info": "", - "serverStatus": 34, - "warningStatus": 0 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "MySQL3" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2024-03-13T12:11:27.426Z", - "stoppedAt": "2024-03-13T12:11:27.977Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/124-snapshot.json b/test-workflows/snapshots/124-snapshot.json deleted file mode 100644 index 2e5626f4a12..00000000000 --- a/test-workflows/snapshots/124-snapshot.json +++ /dev/null @@ -1,139 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1676891407793, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set": [ - { - "startTime": 1676891407794, - "executionTime": 100, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 545, - "name": "Name1676891407894" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "QuestDB": [ - { - "startTime": 1676891407894, - "executionTime": 172, - "source": [ - { - "previousNode": "Set" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 545, - "name": "Name1676891407894" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "QuestDB1": [ - { - "startTime": 1676891408068, - "executionTime": 123, - "source": [ - { - "previousNode": "QuestDB" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 545, - "name": "Name1676891407894" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "QuestDB2": [ - { - "startTime": 1676891408192, - "executionTime": 119, - "source": [ - { - "previousNode": "QuestDB1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [] - ] - } - } - ] - }, - "lastNodeExecuted": "QuestDB2" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-02-20T11:10:07.791Z", - "stoppedAt": "2023-02-20T11:10:08.312Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/125-snapshot.json b/test-workflows/snapshots/125-snapshot.json deleted file mode 100644 index 9d2d326573d..00000000000 --- a/test-workflows/snapshots/125-snapshot.json +++ /dev/null @@ -1,338 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1676891408444, - "executionTime": 1, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set": [ - { - "startTime": 1676891408445, - "executionTime": 42, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 555, - "name": "Name1676891408487" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Postgres": [ - { - "startTime": 1676891408487, - "executionTime": 187, - "source": [ - { - "previousNode": "Set" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 555, - "name": "Name1676891408487" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set1": [ - { - "startTime": 1676891408675, - "executionTime": 3, - "source": [ - { - "previousNode": "Postgres" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 555, - "name": "UpdatedName1676891408677" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Postgres1": [ - { - "startTime": 1676891408678, - "executionTime": 194, - "source": [ - { - "previousNode": "Set1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 555, - "name": "UpdatedName1676891408677" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Postgres2": [ - { - "startTime": 1676891408873, - "executionTime": 202, - "source": [ - { - "previousNode": "Postgres1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": { - "object": true - }, - "name": "omar456" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": { - "object": true - }, - "name": "omar123" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": { - "object": true - }, - "name": "omar456" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": { - "object": true - }, - "name": "omar123" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": { - "object": true - }, - "name": "omar456" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": { - "object": true - }, - "name": "omar123" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": { - "object": true - }, - "name": "omar456" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": { - "object": true - }, - "name": "omar123" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": { - "object": true - }, - "name": "omar456" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": { - "object": true - }, - "name": "omar123" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": { - "object": true - }, - "name": "omar456" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": { - "object": true - }, - "name": "omar123" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": 555, - "name": "UpdatedName1676891408677" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": { - "object": true - }, - "name": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Postgres3": [ - { - "startTime": 1676891409075, - "executionTime": 126, - "source": [ - { - "previousNode": "Postgres2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [] - ] - } - } - ] - }, - "lastNodeExecuted": "Postgres3" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-02-20T11:10:08.443Z", - "stoppedAt": "2023-02-20T11:10:09.202Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/128-snapshot.json b/test-workflows/snapshots/128-snapshot.json deleted file mode 100644 index 59f07446d0f..00000000000 --- a/test-workflows/snapshots/128-snapshot.json +++ /dev/null @@ -1,137 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1710331887439, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Yourls": [ - { - "startTime": 1710331887439, - "executionTime": 121, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "url": { - "object": true - }, - "status": "success", - "message": "https://n8n.io/1710331887441 added to database", - "title": "n8n-ulr with random suffix", - "shorturl": "http://157.90.159.163:8095/10c", - "statusCode": 200 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Yourls1": [ - { - "startTime": 1710331887560, - "executionTime": 80, - "source": [ - { - "previousNode": "Yourls" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "shorturl": "http://157.90.159.163:8095/10c", - "url": "https://n8n.io/1710331887441", - "title": "n8n-ulr with random suffix", - "timestamp": "2024-03-13 12:11:27", - "ip": "84.145.34.143", - "clicks": "0" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Yourls2": [ - { - "startTime": 1710331887641, - "executionTime": 64, - "source": [ - { - "previousNode": "Yourls1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "keyword": "10c", - "shorturl": "http://157.90.159.163:8095/10c", - "longurl": "https://n8n.io/1710331887441", - "title": "n8n-ulr with random suffix", - "message": "success", - "statusCode": 200 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Yourls2" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2024-03-13T12:11:27.439Z", - "stoppedAt": "2024-03-13T12:11:27.705Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/130-snapshot.json b/test-workflows/snapshots/130-snapshot.json deleted file mode 100644 index 6307d075573..00000000000 --- a/test-workflows/snapshots/130-snapshot.json +++ /dev/null @@ -1,815 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1676891410333, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wekan": [ - { - "startTime": 1676891410334, - "executionTime": 226, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": "QDPRfemxRr6XDXZbE", - "defaultSwimlaneId": "7EEQmusaGFfc4beR2" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wekan1": [ - { - "startTime": 1676891410560, - "executionTime": 93, - "source": [ - { - "previousNode": "Wekan" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": "QDPRfemxRr6XDXZbE", - "title": "Board1676891410370", - "members": [ - "json array" - ], - "permission": "private", - "color": "belize", - "slug": "board1676891410370", - "archived": false, - "createdAt": "2023-02-20T11:10:10.525Z", - "modifiedAt": "2023-02-20T11:10:10.525Z", - "stars": 0, - "labels": [ - "json array" - ], - "subtasksDefaultBoardId": { - "object": true - }, - "subtasksDefaultListId": { - "object": true - }, - "dateSettingsDefaultBoardId": { - "object": true - }, - "dateSettingsDefaultListId": { - "object": true - }, - "allowsSubtasks": true, - "allowsAttachments": true, - "allowsChecklists": true, - "allowsComments": true, - "allowsDescriptionTitle": true, - "allowsDescriptionText": true, - "allowsActivities": true, - "allowsLabels": true, - "allowsAssignee": true, - "allowsMembers": true, - "allowsRequestedBy": true, - "allowsAssignedBy": true, - "allowsReceivedDate": true, - "allowsStartDate": true, - "allowsEndDate": true, - "allowsDueDate": true, - "presentParentTask": "no-parent", - "isOvertime": false, - "type": "board", - "sort": 4 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wekan2": [ - { - "startTime": 1676891410653, - "executionTime": 87, - "source": [ - { - "previousNode": "Wekan1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": "P2rsgwsk7pdqeLvgs", - "title": "Templates" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wekan4": [ - { - "startTime": 1676891410741, - "executionTime": 129, - "source": [ - { - "previousNode": "Wekan2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": "hmHTXSeYTdC2huq4i" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wekan5": [ - { - "startTime": 1676891410871, - "executionTime": 88, - "source": [ - { - "previousNode": "Wekan4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": "hmHTXSeYTdC2huq4i", - "title": "List1676891410743", - "boardId": "QDPRfemxRr6XDXZbE", - "sort": 0, - "starred": false, - "archived": false, - "swimlaneId": "", - "createdAt": "2023-02-20T11:10:10.871Z", - "updatedAt": "2023-02-20T11:10:10.871Z", - "modifiedAt": "2023-02-20T11:10:10.871Z", - "wipLimit": { - "object": true - }, - "type": "list" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wekan6": [ - { - "startTime": 1676891410959, - "executionTime": 75, - "source": [ - { - "previousNode": "Wekan5" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": "hmHTXSeYTdC2huq4i", - "title": "List1676891410743" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wekan8": [ - { - "startTime": 1676891411034, - "executionTime": 106, - "source": [ - { - "previousNode": "Wekan6" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": "3eghZWSaCNrXDF5Fq" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wekan9": [ - { - "startTime": 1676891411140, - "executionTime": 88, - "source": [ - { - "previousNode": "Wekan8" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": "3eghZWSaCNrXDF5Fq" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wekan10": [ - { - "startTime": 1676891411228, - "executionTime": 82, - "source": [ - { - "previousNode": "Wekan9" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": "3eghZWSaCNrXDF5Fq", - "title": "UpdatedCard1676891411141", - "boardId": "QDPRfemxRr6XDXZbE", - "listId": "hmHTXSeYTdC2huq4i", - "userId": "E27bvzwJ5A26xfAPG", - "swimlaneId": "CJ44cd7gPRf8qT3Xb", - "sort": 0, - "archived": false, - "parentId": "", - "coverId": "", - "createdAt": "2023-02-20T11:10:11.153Z", - "modifiedAt": "2023-02-20T11:10:11.243Z", - "customFields": [ - "json array" - ], - "dateLastActivity": "2023-02-20T11:10:11.243Z", - "description": "", - "requestedBy": "", - "assignedBy": "", - "labelIds": [ - "json array" - ], - "members": [ - "json array" - ], - "assignees": [ - "json array" - ], - "spentTime": 0, - "isOvertime": false, - "subtaskSort": -1, - "type": "cardType-card", - "linkedId": "", - "vote": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wekan11": [ - { - "startTime": 1676891411310, - "executionTime": 97, - "source": [ - { - "previousNode": "Wekan10" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": "3eghZWSaCNrXDF5Fq", - "title": "UpdatedCard1676891411141", - "description": "", - "assignees": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wekan13": [ - { - "startTime": 1676891411407, - "executionTime": 79, - "source": [ - { - "previousNode": "Wekan11" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": "jYfDm5RWaj9H5cCYx" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wekan17": [ - { - "startTime": 1676891411486, - "executionTime": 180, - "source": [ - { - "previousNode": "Wekan11" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": "Kjz6WRTqtowBCsSJm" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wekan14": [ - { - "startTime": 1676891411666, - "executionTime": 95, - "source": [ - { - "previousNode": "Wekan13" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": "jYfDm5RWaj9H5cCYx", - "userId": "E27bvzwJ5A26xfAPG", - "text": "CardComment1676891411409", - "cardId": "3eghZWSaCNrXDF5Fq", - "boardId": "QDPRfemxRr6XDXZbE", - "createdAt": "2023-02-20T11:10:11.510Z", - "modifiedAt": "2023-02-20T11:10:11.510Z" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wekan18": [ - { - "startTime": 1676891411762, - "executionTime": 104, - "source": [ - { - "previousNode": "Wekan17" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": "Kjz6WRTqtowBCsSJm", - "title": "Checklist1676891411489", - "cardId": "3eghZWSaCNrXDF5Fq", - "sort": 0, - "createdAt": "2023-02-20T11:10:11.607Z", - "modifiedAt": "2023-02-20T11:10:11.606Z", - "items": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wekan15": [ - { - "startTime": 1676891411867, - "executionTime": 76, - "source": [ - { - "previousNode": "Wekan14" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": "jYfDm5RWaj9H5cCYx", - "comment": "CardComment1676891411409", - "authorId": "E27bvzwJ5A26xfAPG" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wekan19": [ - { - "startTime": 1676891411944, - "executionTime": 82, - "source": [ - { - "previousNode": "Wekan18" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": "Kjz6WRTqtowBCsSJm", - "title": "Checklist1676891411489" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wekan16": [ - { - "startTime": 1676891412026, - "executionTime": 122, - "source": [ - { - "previousNode": "Wekan15" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": "3eghZWSaCNrXDF5Fq" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wekan21": [ - { - "startTime": 1676891412149, - "executionTime": 91, - "source": [ - { - "previousNode": "Wekan19" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": "ud2FR3gp7ki3dGx5X", - "cardId": "3eghZWSaCNrXDF5Fq", - "checklistId": "Kjz6WRTqtowBCsSJm", - "title": "ChecklistItem1676891411489", - "sort": 0, - "isFinished": false, - "createdAt": "2023-02-20T11:10:11.641Z", - "modifiedAt": "2023-02-20T11:10:11.641Z" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wekan22": [ - { - "startTime": 1676891412240, - "executionTime": 79, - "source": [ - { - "previousNode": "Wekan21" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": "ud2FR3gp7ki3dGx5X" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wekan23": [ - { - "startTime": 1676891412319, - "executionTime": 87, - "source": [ - { - "previousNode": "Wekan22" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": "ud2FR3gp7ki3dGx5X" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wekan20": [ - { - "startTime": 1676891412406, - "executionTime": 156, - "source": [ - { - "previousNode": "Wekan23" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": "Kjz6WRTqtowBCsSJm" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Merge": [ - { - "startTime": 1676891412562, - "executionTime": 2, - "source": [ - { - "previousNode": "Wekan20" - }, - { - "previousNode": "Wekan16" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {} - } - ] - ] - } - } - ], - "Wekan12": [ - { - "startTime": 1676891412565, - "executionTime": 112, - "source": [ - { - "previousNode": "Merge" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": "3eghZWSaCNrXDF5Fq" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wekan7": [ - { - "startTime": 1676891412678, - "executionTime": 108, - "source": [ - { - "previousNode": "Wekan12" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": "hmHTXSeYTdC2huq4i" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wekan3": [ - { - "startTime": 1676891412786, - "executionTime": 137, - "source": [ - { - "previousNode": "Wekan7" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": "QDPRfemxRr6XDXZbE" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Wekan3" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-02-20T11:10:10.328Z", - "stoppedAt": "2023-02-20T11:10:12.923Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/131-snapshot.json b/test-workflows/snapshots/131-snapshot.json deleted file mode 100644 index 1d919ca46fa..00000000000 --- a/test-workflows/snapshots/131-snapshot.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "hints": [], - "startTime": 1738078143830, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Line": [ - { - "hints": [], - "startTime": 1738078143831, - "executionTime": 1446, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": 200, - "message": "ok" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Line" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-01-28T15:29:03.830Z", - "stoppedAt": "2025-01-28T15:29:05.277Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/132-snapshot.json b/test-workflows/snapshots/132-snapshot.json deleted file mode 100644 index 93cabc03cbe..00000000000 --- a/test-workflows/snapshots/132-snapshot.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343994524, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mandrill": [ - { - "startTime": 1747343994524, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 578, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "email": "nodeqa1747343994527@email.test", - "status": "rejected", - "_id": "8111baeb0ff141db9aa0f2f7cc96a08d", - "reject_reason": "unsigned", - "queued_reason": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mandrill1": [ - { - "startTime": 1747343995102, - "executionIndex": 2, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 512, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "email": "nodeqa1747343995103@email.test", - "status": "rejected", - "_id": "769293eaca9843c2926c7ec1e5df052a", - "reject_reason": "unsigned", - "queued_reason": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Mandrill1" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:54.524Z", - "stoppedAt": "2025-05-15T21:19:55.614Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/133-snapshot.json b/test-workflows/snapshots/133-snapshot.json deleted file mode 100644 index c2f1955bdd2..00000000000 --- a/test-workflows/snapshots/133-snapshot.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1710331887804, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Twilio": [ - { - "startTime": 1710331887804, - "executionTime": 661, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "body": "Message1710331887805", - "num_segments": "1", - "direction": "outbound-api", - "from": "+15005550006", - "date_updated": "Wed, 13 Mar 2024 12:11:28 +0000", - "price": { - "object": true - }, - "error_message": { - "object": true - }, - "uri": "/2010-04-01/Accounts/AC8dd0c6e08b0f196d34adde4f00507d9f/Messages/SMd99c4e5b501391cb4fbe91937f23ec3b.json", - "account_sid": "AC8dd0c6e08b0f196d34adde4f00507d9f", - "num_media": "0", - "to": "+15005550006", - "date_created": "Wed, 13 Mar 2024 12:11:28 +0000", - "status": "queued", - "sid": "SMd99c4e5b501391cb4fbe91937f23ec3b", - "date_sent": { - "object": true - }, - "messaging_service_sid": { - "object": true - }, - "error_code": { - "object": true - }, - "price_unit": "USD", - "api_version": "2010-04-01", - "subresource_uris": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Twilio" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2024-03-13T12:11:27.804Z", - "stoppedAt": "2024-03-13T12:11:28.465Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/139-snapshot.json b/test-workflows/snapshots/139-snapshot.json deleted file mode 100644 index d717f2bfdb5..00000000000 --- a/test-workflows/snapshots/139-snapshot.json +++ /dev/null @@ -1,1081 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1676891410936, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Shopify": [ - { - "startTime": 1676891410937, - "executionTime": 1041, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 7841209778338, - "title": "Product1676891410950", - "body_html": { - "object": true - }, - "vendor": "nodeqa", - "product_type": "", - "created_at": "2023-02-20T12:10:11+01:00", - "handle": "product1676891410950", - "updated_at": "2023-02-20T12:10:11+01:00", - "published_at": "2023-02-20T12:10:11+01:00", - "template_suffix": { - "object": true - }, - "status": "active", - "published_scope": "web", - "tags": "", - "admin_graphql_api_id": "gid://shopify/Product/7841209778338", - "variants": [ - "json array" - ], - "options": [ - "json array" - ], - "images": [ - "json array" - ], - "image": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Shopify5": [ - { - "startTime": 1676891411978, - "executionTime": 1231, - "source": [ - { - "previousNode": "Shopify" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 5468425748642, - "admin_graphql_api_id": "gid://shopify/Order/5468425748642", - "app_id": 5034533, - "browser_ip": { - "object": true - }, - "buyer_accepts_marketing": false, - "cancel_reason": { - "object": true - }, - "cancelled_at": { - "object": true - }, - "cart_token": { - "object": true - }, - "checkout_id": { - "object": true - }, - "checkout_token": { - "object": true - }, - "closed_at": { - "object": true - }, - "confirmed": true, - "contact_email": "fake1676891411979@gmail.com", - "created_at": "2023-02-20T12:10:12+01:00", - "currency": "EUR", - "current_subtotal_price": "101.00", - "current_subtotal_price_set": { - "object": true - }, - "current_total_discounts": "0.00", - "current_total_discounts_set": { - "object": true - }, - "current_total_duties_set": { - "object": true - }, - "current_total_price": "101.00", - "current_total_price_set": { - "object": true - }, - "current_total_tax": "0.00", - "current_total_tax_set": { - "object": true - }, - "customer_locale": { - "object": true - }, - "device_id": { - "object": true - }, - "discount_codes": [ - "json array" - ], - "email": "fake1676891411979@gmail.com", - "estimated_taxes": false, - "financial_status": "paid", - "fulfillment_status": { - "object": true - }, - "gateway": "", - "landing_site": { - "object": true - }, - "landing_site_ref": { - "object": true - }, - "location_id": { - "object": true - }, - "name": "#1459", - "note": { - "object": true - }, - "note_attributes": [ - "json array" - ], - "number": 459, - "order_number": 1459, - "order_status_url": "https://nodeqa.myshopify.com/55417208994/orders/596116053fc1733011dffefadd82db64/authenticate?key=448c588adb1bc7e54b87b243e1c8ac74", - "original_total_duties_set": { - "object": true - }, - "payment_gateway_names": [ - "json array" - ], - "phone": { - "object": true - }, - "presentment_currency": "EUR", - "processed_at": "2023-02-20T12:10:12+01:00", - "processing_method": "", - "reference": { - "object": true - }, - "referring_site": { - "object": true - }, - "source_identifier": { - "object": true - }, - "source_name": "5034533", - "source_url": { - "object": true - }, - "subtotal_price": "101.00", - "subtotal_price_set": { - "object": true - }, - "tags": "test", - "tax_lines": [ - "json array" - ], - "taxes_included": false, - "test": true, - "token": "596116053fc1733011dffefadd82db64", - "total_discounts": "0.00", - "total_discounts_set": { - "object": true - }, - "total_line_items_price": "101.00", - "total_line_items_price_set": { - "object": true - }, - "total_outstanding": "101.00", - "total_price": "101.00", - "total_price_set": { - "object": true - }, - "total_price_usd": "108.02", - "total_shipping_price_set": { - "object": true - }, - "total_tax": "0.00", - "total_tax_set": { - "object": true - }, - "total_tip_received": "0.00", - "total_weight": 0, - "updated_at": "2023-02-20T12:10:12+01:00", - "user_id": { - "object": true - }, - "customer": { - "object": true - }, - "discount_applications": [ - "json array" - ], - "fulfillments": [ - "json array" - ], - "line_items": [ - "json array" - ], - "payment_terms": { - "object": true - }, - "refunds": [ - "json array" - ], - "shipping_lines": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Shopify6": [ - { - "startTime": 1676891413209, - "executionTime": 610, - "source": [ - { - "previousNode": "Shopify5" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 5468425748642, - "admin_graphql_api_id": "gid://shopify/Order/5468425748642", - "app_id": 5034533, - "browser_ip": { - "object": true - }, - "buyer_accepts_marketing": false, - "cancel_reason": { - "object": true - }, - "cancelled_at": { - "object": true - }, - "cart_token": { - "object": true - }, - "checkout_id": { - "object": true - }, - "checkout_token": { - "object": true - }, - "closed_at": { - "object": true - }, - "confirmed": true, - "contact_email": "updatedfake1676891411979@gmail.com", - "created_at": "2023-02-20T12:10:12+01:00", - "currency": "EUR", - "current_subtotal_price": "101.00", - "current_subtotal_price_set": { - "object": true - }, - "current_total_discounts": "0.00", - "current_total_discounts_set": { - "object": true - }, - "current_total_duties_set": { - "object": true - }, - "current_total_price": "101.00", - "current_total_price_set": { - "object": true - }, - "current_total_tax": "0.00", - "current_total_tax_set": { - "object": true - }, - "customer_locale": { - "object": true - }, - "device_id": { - "object": true - }, - "discount_codes": [ - "json array" - ], - "email": "updatedfake1676891411979@gmail.com", - "estimated_taxes": false, - "financial_status": "paid", - "fulfillment_status": { - "object": true - }, - "gateway": "", - "landing_site": { - "object": true - }, - "landing_site_ref": { - "object": true - }, - "location_id": { - "object": true - }, - "name": "#1459", - "note": { - "object": true - }, - "note_attributes": [ - "json array" - ], - "number": 459, - "order_number": 1459, - "order_status_url": "https://nodeqa.myshopify.com/55417208994/orders/596116053fc1733011dffefadd82db64/authenticate?key=448c588adb1bc7e54b87b243e1c8ac74", - "original_total_duties_set": { - "object": true - }, - "payment_gateway_names": [ - "json array" - ], - "phone": { - "object": true - }, - "presentment_currency": "EUR", - "processed_at": "2023-02-20T12:10:12+01:00", - "processing_method": "", - "reference": { - "object": true - }, - "referring_site": { - "object": true - }, - "source_identifier": { - "object": true - }, - "source_name": "5034533", - "source_url": { - "object": true - }, - "subtotal_price": "101.00", - "subtotal_price_set": { - "object": true - }, - "tags": "test", - "tax_lines": [ - "json array" - ], - "taxes_included": false, - "test": true, - "token": "596116053fc1733011dffefadd82db64", - "total_discounts": "0.00", - "total_discounts_set": { - "object": true - }, - "total_line_items_price": "101.00", - "total_line_items_price_set": { - "object": true - }, - "total_outstanding": "101.00", - "total_price": "101.00", - "total_price_set": { - "object": true - }, - "total_price_usd": "108.02", - "total_shipping_price_set": { - "object": true - }, - "total_tax": "0.00", - "total_tax_set": { - "object": true - }, - "total_tip_received": "0.00", - "total_weight": 0, - "updated_at": "2023-02-20T12:10:13+01:00", - "user_id": { - "object": true - }, - "customer": { - "object": true - }, - "discount_applications": [ - "json array" - ], - "fulfillments": [ - "json array" - ], - "line_items": [ - "json array" - ], - "payment_terms": { - "object": true - }, - "refunds": [ - "json array" - ], - "shipping_lines": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Shopify7": [ - { - "startTime": 1676891413820, - "executionTime": 526, - "source": [ - { - "previousNode": "Shopify6" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 5468425748642, - "admin_graphql_api_id": "gid://shopify/Order/5468425748642", - "app_id": 5034533, - "browser_ip": { - "object": true - }, - "buyer_accepts_marketing": false, - "cancel_reason": { - "object": true - }, - "cancelled_at": { - "object": true - }, - "cart_token": { - "object": true - }, - "checkout_id": { - "object": true - }, - "checkout_token": { - "object": true - }, - "closed_at": { - "object": true - }, - "confirmed": true, - "contact_email": "updatedfake1676891411979@gmail.com", - "created_at": "2023-02-20T12:10:12+01:00", - "currency": "EUR", - "current_subtotal_price": "101.00", - "current_subtotal_price_set": { - "object": true - }, - "current_total_discounts": "0.00", - "current_total_discounts_set": { - "object": true - }, - "current_total_duties_set": { - "object": true - }, - "current_total_price": "101.00", - "current_total_price_set": { - "object": true - }, - "current_total_tax": "0.00", - "current_total_tax_set": { - "object": true - }, - "customer_locale": { - "object": true - }, - "device_id": { - "object": true - }, - "discount_codes": [ - "json array" - ], - "email": "updatedfake1676891411979@gmail.com", - "estimated_taxes": false, - "financial_status": "paid", - "fulfillment_status": { - "object": true - }, - "gateway": "", - "landing_site": { - "object": true - }, - "landing_site_ref": { - "object": true - }, - "location_id": { - "object": true - }, - "name": "#1459", - "note": { - "object": true - }, - "note_attributes": [ - "json array" - ], - "number": 459, - "order_number": 1459, - "order_status_url": "https://nodeqa.myshopify.com/55417208994/orders/596116053fc1733011dffefadd82db64/authenticate?key=448c588adb1bc7e54b87b243e1c8ac74", - "original_total_duties_set": { - "object": true - }, - "payment_gateway_names": [ - "json array" - ], - "phone": { - "object": true - }, - "presentment_currency": "EUR", - "processed_at": "2023-02-20T12:10:12+01:00", - "processing_method": "", - "reference": { - "object": true - }, - "referring_site": { - "object": true - }, - "source_identifier": { - "object": true - }, - "source_name": "5034533", - "source_url": { - "object": true - }, - "subtotal_price": "101.00", - "subtotal_price_set": { - "object": true - }, - "tags": "test", - "tax_lines": [ - "json array" - ], - "taxes_included": false, - "test": true, - "token": "596116053fc1733011dffefadd82db64", - "total_discounts": "0.00", - "total_discounts_set": { - "object": true - }, - "total_line_items_price": "101.00", - "total_line_items_price_set": { - "object": true - }, - "total_outstanding": "101.00", - "total_price": "101.00", - "total_price_set": { - "object": true - }, - "total_price_usd": "108.02", - "total_shipping_price_set": { - "object": true - }, - "total_tax": "0.00", - "total_tax_set": { - "object": true - }, - "total_tip_received": "0.00", - "total_weight": 0, - "updated_at": "2023-02-20T12:10:13+01:00", - "user_id": { - "object": true - }, - "customer": { - "object": true - }, - "discount_applications": [ - "json array" - ], - "fulfillments": [ - "json array" - ], - "line_items": [ - "json array" - ], - "payment_terms": { - "object": true - }, - "refunds": [ - "json array" - ], - "shipping_lines": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Shopify8": [ - { - "startTime": 1676891414347, - "executionTime": 328, - "source": [ - { - "previousNode": "Shopify7" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 5468425748642, - "admin_graphql_api_id": "gid://shopify/Order/5468425748642", - "app_id": 5034533, - "browser_ip": { - "object": true - }, - "buyer_accepts_marketing": false, - "cancel_reason": { - "object": true - }, - "cancelled_at": { - "object": true - }, - "cart_token": { - "object": true - }, - "checkout_id": { - "object": true - }, - "checkout_token": { - "object": true - }, - "closed_at": { - "object": true - }, - "confirmed": true, - "contact_email": "updatedfake1676891411979@gmail.com", - "created_at": "2023-02-20T12:10:12+01:00", - "currency": "EUR", - "current_subtotal_price": "101.00", - "current_subtotal_price_set": { - "object": true - }, - "current_total_discounts": "0.00", - "current_total_discounts_set": { - "object": true - }, - "current_total_duties_set": { - "object": true - }, - "current_total_price": "101.00", - "current_total_price_set": { - "object": true - }, - "current_total_tax": "0.00", - "current_total_tax_set": { - "object": true - }, - "customer_locale": { - "object": true - }, - "device_id": { - "object": true - }, - "discount_codes": [ - "json array" - ], - "email": "updatedfake1676891411979@gmail.com", - "estimated_taxes": false, - "financial_status": "paid", - "fulfillment_status": { - "object": true - }, - "gateway": "", - "landing_site": { - "object": true - }, - "landing_site_ref": { - "object": true - }, - "location_id": { - "object": true - }, - "name": "#1459", - "note": { - "object": true - }, - "note_attributes": [ - "json array" - ], - "number": 459, - "order_number": 1459, - "order_status_url": "https://nodeqa.myshopify.com/55417208994/orders/596116053fc1733011dffefadd82db64/authenticate?key=448c588adb1bc7e54b87b243e1c8ac74", - "original_total_duties_set": { - "object": true - }, - "payment_gateway_names": [ - "json array" - ], - "phone": { - "object": true - }, - "presentment_currency": "EUR", - "processed_at": "2023-02-20T12:10:12+01:00", - "processing_method": "", - "reference": { - "object": true - }, - "referring_site": { - "object": true - }, - "source_identifier": { - "object": true - }, - "source_name": "5034533", - "source_url": { - "object": true - }, - "subtotal_price": "101.00", - "subtotal_price_set": { - "object": true - }, - "tags": "test", - "tax_lines": [ - "json array" - ], - "taxes_included": false, - "test": true, - "token": "596116053fc1733011dffefadd82db64", - "total_discounts": "0.00", - "total_discounts_set": { - "object": true - }, - "total_line_items_price": "101.00", - "total_line_items_price_set": { - "object": true - }, - "total_outstanding": "101.00", - "total_price": "101.00", - "total_price_set": { - "object": true - }, - "total_price_usd": "108.02", - "total_shipping_price_set": { - "object": true - }, - "total_tax": "0.00", - "total_tax_set": { - "object": true - }, - "total_tip_received": "0.00", - "total_weight": 0, - "updated_at": "2023-02-20T12:10:13+01:00", - "user_id": { - "object": true - }, - "customer": { - "object": true - }, - "discount_applications": [ - "json array" - ], - "fulfillments": [ - "json array" - ], - "line_items": [ - "json array" - ], - "payment_terms": { - "object": true - }, - "refunds": [ - "json array" - ], - "shipping_lines": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Shopify9": [ - { - "startTime": 1676891414676, - "executionTime": 588, - "source": [ - { - "previousNode": "Shopify8" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Shopify1": [ - { - "startTime": 1676891415264, - "executionTime": 715, - "source": [ - { - "previousNode": "Shopify9" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 7841209778338, - "title": "UpdatedProduct1676891410950", - "body_html": { - "object": true - }, - "vendor": "nodeqa", - "product_type": "", - "created_at": "2023-02-20T12:10:11+01:00", - "handle": "product1676891410950", - "updated_at": "2023-02-20T12:10:15+01:00", - "published_at": "2023-02-20T12:10:11+01:00", - "template_suffix": { - "object": true - }, - "status": "active", - "published_scope": "web", - "tags": "", - "admin_graphql_api_id": "gid://shopify/Product/7841209778338", - "variants": [ - "json array" - ], - "options": [ - "json array" - ], - "images": [ - "json array" - ], - "image": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Shopify2": [ - { - "startTime": 1676891415979, - "executionTime": 355, - "source": [ - { - "previousNode": "Shopify1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 7841209778338, - "title": "UpdatedProduct1676891410950", - "body_html": { - "object": true - }, - "vendor": "nodeqa", - "product_type": "", - "created_at": "2023-02-20T12:10:11+01:00", - "handle": "product1676891410950", - "updated_at": "2023-02-20T12:10:15+01:00", - "published_at": "2023-02-20T12:10:11+01:00", - "template_suffix": { - "object": true - }, - "status": "active", - "published_scope": "web", - "tags": "", - "admin_graphql_api_id": "gid://shopify/Product/7841209778338", - "variants": [ - "json array" - ], - "options": [ - "json array" - ], - "images": [ - "json array" - ], - "image": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Shopify3": [ - { - "startTime": 1676891416334, - "executionTime": 319, - "source": [ - { - "previousNode": "Shopify2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 6940369715362, - "title": "Beanie", - "body_html": { - "object": true - }, - "vendor": "nodeqa", - "product_type": "Accessories", - "created_at": "2021-07-19T18:05:28+01:00", - "handle": "beanie", - "updated_at": "2021-08-31T19:36:01+01:00", - "published_at": "2021-07-19T18:05:28+01:00", - "template_suffix": { - "object": true - }, - "status": "active", - "published_scope": "web", - "tags": "", - "admin_graphql_api_id": "gid://shopify/Product/6940369715362", - "variants": [ - "json array" - ], - "options": [ - "json array" - ], - "images": [ - "json array" - ], - "image": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Shopify4": [ - { - "startTime": 1676891416653, - "executionTime": 939, - "source": [ - { - "previousNode": "Shopify3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Shopify4" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-02-20T11:10:10.928Z", - "stoppedAt": "2023-02-20T11:10:17.592Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/140-snapshot.json b/test-workflows/snapshots/140-snapshot.json deleted file mode 100644 index 86625753cbf..00000000000 --- a/test-workflows/snapshots/140-snapshot.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343994520, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mailgun": [ - { - "startTime": 1747343994520, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 689, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "<20250515211955.750e4c368fa24e88@sandbox9d3ed7f14628495f83c01d31dbc98ce4.mailgun.org>", - "message": "Queued. Thank you." - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Mailgun" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:54.520Z", - "stoppedAt": "2025-05-15T21:19:55.209Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/143-snapshot.json b/test-workflows/snapshots/143-snapshot.json deleted file mode 100644 index 086917dd301..00000000000 --- a/test-workflows/snapshots/143-snapshot.json +++ /dev/null @@ -1,278 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "hints": [], - "startTime": 1738078145786, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Clearbit2": [ - { - "hints": [], - "startTime": 1738078145786, - "executionTime": 523, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "f949b35a-6158-41c7-8b50-dc2c238cfbf3", - "name": { - "object": true - }, - "email": "jan@n8n.io", - "location": "Berlin, Berlin, DE", - "timeZone": "Europe/Berlin", - "utcOffset": 1, - "geo": { - "object": true - }, - "bio": { - "object": true - }, - "site": { - "object": true - }, - "avatar": "https://d1ts43dypk8bqh.cloudfront.net/v1/avatars/f949b35a-6158-41c7-8b50-dc2c238cfbf3", - "employment": { - "object": true - }, - "facebook": { - "object": true - }, - "github": { - "object": true - }, - "twitter": { - "object": true - }, - "linkedin": { - "object": true - }, - "googleplus": { - "object": true - }, - "gravatar": { - "object": true - }, - "fuzzy": false, - "emailProvider": false, - "indexedAt": "2025-01-16T15:13:36.503Z", - "phone": { - "object": true - }, - "inactiveAt": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Clearbit": [ - { - "hints": [], - "startTime": 1738078146310, - "executionTime": 530, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "546ba3f6-a6b7-41a1-aed8-4f9bba4119e8", - "name": "n8n", - "legalName": { - "object": true - }, - "domain": "n8n.io", - "domainAliases": [ - "json array" - ], - "site": { - "object": true - }, - "category": { - "object": true - }, - "tags": [ - "json array" - ], - "description": "n8n.io is a leading low-code automation tool that connects anything to everything through its open, fair code model, enabling users to build multi-step workflows with ease.", - "foundedYear": 2019, - "location": "Borsigstraße 27, 10115 Berlin, Germany", - "timeZone": "Europe/Berlin", - "utcOffset": 1, - "geo": { - "object": true - }, - "logo": "https://logo.clearbit.com/n8n.io", - "facebook": { - "object": true - }, - "linkedin": { - "object": true - }, - "twitter": { - "object": true - }, - "crunchbase": { - "object": true - }, - "emailProvider": false, - "type": "private", - "ticker": { - "object": true - }, - "identifiers": { - "object": true - }, - "phone": { - "object": true - }, - "metrics": { - "object": true - }, - "indexedAt": "2025-01-02T01:00:13.309Z", - "tech": [ - "json array" - ], - "techCategories": [ - "json array" - ], - "parent": { - "object": true - }, - "ultimateParent": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Clearbit1": [ - { - "hints": [], - "startTime": 1738078146840, - "executionTime": 262, - "source": [ - { - "previousNode": "Clearbit" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "Nielsen Norman Group", - "domain": "nngroup.com", - "logo": "https://logo.clearbit.com/nngroup.com" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "name": "Новости НН.Ρ€Ρƒ", - "domain": "nn.ru", - "logo": "https://logo.clearbit.com/nn.ru" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "name": "NNY360", - "domain": "nny360.com", - "logo": "https://logo.clearbit.com/nny360.com" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "name": "City of Newport News, VA - Government", - "domain": "nnva.gov", - "logo": "https://logo.clearbit.com/nnva.gov" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "name": "NNNOW", - "domain": "nnnow.com", - "logo": "https://logo.clearbit.com/nnnow.com" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Clearbit1" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-01-28T15:29:05.785Z", - "stoppedAt": "2025-01-28T15:29:07.103Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/145-snapshot.json b/test-workflows/snapshots/145-snapshot.json deleted file mode 100644 index 142ed174a94..00000000000 --- a/test-workflows/snapshots/145-snapshot.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1706635217888, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Peekalink1": [ - { - "startTime": 1706635217888, - "executionTime": 1099, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "url": "https://example.com/", - "domain": "example.com", - "lastUpdated": "2024-01-28T02:10:25.125799Z", - "nextUpdate": "2024-02-04T02:10:25.123122Z", - "contentType": "html", - "mimeType": "text/html", - "size": 648, - "redirected": false, - "title": "Example Domain", - "description": "This domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.", - "name": "EXAMPLE.COM", - "trackersDetected": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Peekalink": [ - { - "startTime": 1706635218987, - "executionTime": 285, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "isAvailable": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Peekalink" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2024-01-30T17:20:17.888Z", - "stoppedAt": "2024-01-30T17:20:19.272Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/146-snapshot.json b/test-workflows/snapshots/146-snapshot.json deleted file mode 100644 index c512f6112d6..00000000000 --- a/test-workflows/snapshots/146-snapshot.json +++ /dev/null @@ -1,198 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1676891412800, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set": [ - { - "startTime": 1676891412801, - "executionTime": 35, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "temperature": 40.4032385941659, - "location": "n8n", - "time": "2023-02-20T11:10:12.835Z" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "TimescaleDB": [ - { - "startTime": 1676891412836, - "executionTime": 177, - "source": [ - { - "previousNode": "Set" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "time": "2023-02-20T11:10:12.835Z", - "location": "n8n", - "temperature": 40.4032385941659 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "TimescaleDB2": [ - { - "startTime": 1676891413014, - "executionTime": 178, - "source": [ - { - "previousNode": "TimescaleDB" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "time": "2023-02-20T11:10:12.835Z", - "location": "n8n", - "temperature": 40.4032385941659 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set1": [ - { - "startTime": 1676891413193, - "executionTime": 1, - "source": [ - { - "previousNode": "TimescaleDB2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "time": "2023-02-20T11:10:12.835Z", - "location": "updatedn8n", - "temperature": 40.4032385941659 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "TimescaleDB1": [ - { - "startTime": 1676891413195, - "executionTime": 192, - "source": [ - { - "previousNode": "Set1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "time": "2023-02-20T11:10:12.835Z", - "location": "updatedn8n", - "temperature": "40.4032385941659" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "TimescaleDB3": [ - { - "startTime": 1676891413387, - "executionTime": 157, - "source": [ - { - "previousNode": "TimescaleDB1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [] - ] - } - } - ] - }, - "lastNodeExecuted": "TimescaleDB3" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-02-20T11:10:12.798Z", - "stoppedAt": "2023-02-20T11:10:13.544Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/147-snapshot.json b/test-workflows/snapshots/147-snapshot.json deleted file mode 100644 index 27e044ccc6d..00000000000 --- a/test-workflows/snapshots/147-snapshot.json +++ /dev/null @@ -1,613 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1683532113975, - "executionTime": 1, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Raindrop": [ - { - "startTime": 1683532113976, - "executionTime": 482, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "tfa": { - "object": true - }, - "files": { - "object": true - }, - "_id": 618756, - "pro": false, - "name": "nodeqa", - "fullName": "nodeqa", - "email": "nodeqa@n8n.io", - "groups": [ - "json array" - ], - "lastAction": "2023-05-08T02:25:37.144Z", - "lastVisit": "2023-05-08T02:23:04.375Z", - "registered": "2021-03-24T08:38:18.892Z", - "lastUpdate": "2023-05-08T02:25:37.144Z", - "config": { - "object": true - }, - "avatar": "", - "password": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Raindrop1": [ - { - "startTime": 1683532114459, - "executionTime": 258, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "title": "Collection1683532114491", - "description": "", - "user": { - "object": true - }, - "public": false, - "count": 0, - "cover": [ - "json array" - ], - "expanded": true, - "creatorRef": 618756, - "lastAction": "2023-05-08T07:48:34.585Z", - "created": "2023-05-08T07:48:34.586Z", - "lastUpdate": "2023-05-08T07:48:34.586Z", - "_id": 34146645, - "sort": 34146645, - "slug": "collection1683532114491", - "__v": 0, - "access": { - "object": true - }, - "author": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Raindrop2": [ - { - "startTime": 1683532114718, - "executionTime": 136, - "source": [ - { - "previousNode": "Raindrop1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "view": "list", - "_id": 34146645, - "title": "Collection1683532114491", - "description": "", - "user": { - "object": true - }, - "public": false, - "count": 0, - "cover": [ - "json array" - ], - "expanded": true, - "creatorRef": { - "object": true - }, - "lastAction": "2023-05-08T07:48:34.585Z", - "created": "2023-05-08T07:48:34.586Z", - "lastUpdate": "2023-05-08T07:48:34.586Z", - "sort": 34146645, - "slug": "collection1683532114491", - "access": { - "object": true - }, - "author": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Raindrop3": [ - { - "startTime": 1683532114854, - "executionTime": 165, - "source": [ - { - "previousNode": "Raindrop2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": 34146645, - "title": "UpdatedCollection1683532114491", - "description": "", - "slug": "updated-collection1683532114491", - "user": { - "object": true - }, - "creatorRef": { - "object": true - }, - "public": false, - "view": "list", - "count": 0, - "cover": [ - "json array" - ], - "sort": 34146645, - "expanded": true, - "lastAction": "2023-05-08T07:48:34.585Z", - "created": "2023-05-08T07:48:34.586Z", - "lastUpdate": "2023-05-08T07:48:34.983Z", - "access": { - "object": true - }, - "author": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Raindrop4": [ - { - "startTime": 1683532115020, - "executionTime": 137, - "source": [ - { - "previousNode": "Raindrop3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": 34146645, - "title": "UpdatedCollection1683532114491", - "description": "", - "user": { - "object": true - }, - "public": false, - "count": 0, - "cover": [ - "json array" - ], - "expanded": true, - "creatorRef": { - "object": true - }, - "lastAction": "2023-05-08T07:48:34.585Z", - "created": "2023-05-08T07:48:34.586Z", - "lastUpdate": "2023-05-08T07:48:34.983Z", - "sort": 34146645, - "slug": "updated-collection1683532114491", - "view": "list", - "access": { - "object": true - }, - "author": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Raindrop6": [ - { - "startTime": 1683532115158, - "executionTime": 191, - "source": [ - { - "previousNode": "Raindrop4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "link": "https://n8n.io/", - "title": "Bookmark1683532115161", - "excerpt": "", - "note": "", - "type": "link", - "user": { - "object": true - }, - "cover": "", - "tags": [ - "json array" - ], - "removed": false, - "collection": { - "object": true - }, - "media": [ - "json array" - ], - "created": "2023-05-08T07:48:35.288Z", - "lastUpdate": "2023-05-08T07:48:35.288Z", - "domain": "n8n.io", - "_id": 569394745, - "creatorRef": 618756, - "sort": 569394745, - "__v": 0, - "collectionId": 34146645 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Raindrop7": [ - { - "startTime": 1683532115349, - "executionTime": 132, - "source": [ - { - "previousNode": "Raindrop6" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": 569394745, - "link": "https://n8n.io/", - "title": "Bookmark1683532115161", - "excerpt": "", - "note": "", - "type": "link", - "user": { - "object": true - }, - "cover": "", - "tags": [ - "json array" - ], - "removed": false, - "collection": { - "object": true - }, - "media": [ - "json array" - ], - "created": "2023-05-08T07:48:35.288Z", - "lastUpdate": "2023-05-08T07:48:35.288Z", - "domain": "n8n.io", - "creatorRef": { - "object": true - }, - "sort": 569394745, - "highlights": [ - "json array" - ], - "collectionId": 34146645 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Raindrop8": [ - { - "startTime": 1683532115482, - "executionTime": 175, - "source": [ - { - "previousNode": "Raindrop7" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": 569394745, - "link": "https://n8n.io/", - "domain": "n8n.io", - "title": "UpdatedBookmark1683532115161", - "excerpt": "", - "note": "", - "type": "link", - "user": { - "object": true - }, - "creatorRef": { - "object": true - }, - "cover": "", - "media": [ - "json array" - ], - "tags": [ - "json array" - ], - "highlights": [ - "json array" - ], - "removed": false, - "sort": 569394745, - "created": "2023-05-08T07:48:35.288Z", - "lastUpdate": "2023-05-08T07:48:35.624Z", - "collection": { - "object": true - }, - "__v": 1, - "collectionId": 34146645 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Raindrop9": [ - { - "startTime": 1683532115658, - "executionTime": 143, - "source": [ - { - "previousNode": "Raindrop8" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": 569394745, - "link": "https://n8n.io/", - "title": "UpdatedBookmark1683532115161", - "excerpt": "", - "note": "", - "type": "link", - "user": { - "object": true - }, - "cover": "", - "tags": [ - "json array" - ], - "removed": false, - "collection": { - "object": true - }, - "media": [ - "json array" - ], - "created": "2023-05-08T07:48:35.288Z", - "lastUpdate": "2023-05-08T07:48:35.624Z", - "domain": "n8n.io", - "creatorRef": { - "object": true - }, - "sort": 569394745, - "highlights": [ - "json array" - ], - "collectionId": 34146645 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Raindrop11": [ - { - "startTime": 1683532115802, - "executionTime": 272, - "source": [ - { - "previousNode": "Raindrop9" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_id": "automation", - "count": 4 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Raindrop12": [ - { - "startTime": 1683532116075, - "executionTime": 153, - "source": [ - { - "previousNode": "Raindrop11" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Raindrop10": [ - { - "startTime": 1683532116228, - "executionTime": 178, - "source": [ - { - "previousNode": "Raindrop12" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Raindrop5": [ - { - "startTime": 1683532116406, - "executionTime": 227, - "source": [ - { - "previousNode": "Raindrop10" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Raindrop5" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-05-08T07:48:33.974Z", - "stoppedAt": "2023-05-08T07:48:36.634Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/148-snapshot.json b/test-workflows/snapshots/148-snapshot.json deleted file mode 100644 index c59e62edad7..00000000000 --- a/test-workflows/snapshots/148-snapshot.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1676891413308, - "executionTime": 1, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "DeepL": [ - { - "startTime": 1676891413309, - "executionTime": 601, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "detected_source_language": "EN", - "text": "n8n (ausgesprochen n-eight-n) hilft Ihnen, jede App mit einer API auf der Welt miteinander zu verbinden, um ihre Daten ohne eine einzige Zeile Code zu teilen und zu manipulieren. Es ist ein einfach zu bedienender, benutzerfreundlicher und hochgradig anpassbarer Dienst." - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Function": [ - { - "startTime": 1676891413911, - "executionTime": 10, - "source": [ - { - "previousNode": "DeepL" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "detected_source_language": "EN", - "text": "n8n (ausgesprochen n-eight-n) hilft Ihnen, jede App mit einer API auf der Welt miteinander zu verbinden, um ihre Daten ohne eine einzige Zeile Code zu teilen und zu manipulieren. Es ist ein einfach zu bedienender, benutzerfreundlicher und hochgradig anpassbarer Dienst." - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Function" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-02-20T11:10:13.307Z", - "stoppedAt": "2023-02-20T11:10:13.921Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/15-snapshot.json b/test-workflows/snapshots/15-snapshot.json deleted file mode 100644 index 8e0447d4fcf..00000000000 --- a/test-workflows/snapshots/15-snapshot.json +++ /dev/null @@ -1,644 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343994529, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Dropbox8": [ - { - "startTime": 1747343994529, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 1620, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "metadata": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Read Binary File": [ - { - "startTime": 1747343996149, - "executionIndex": 2, - "source": [ - { - "previousNode": "Dropbox8" - } - ], - "hints": [], - "executionTime": 6, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "metadata": { - "object": true - } - }, - "binary": { - "data": { - "mimeType": "image/png", - "fileType": "image", - "fileExtension": "png", - "data": "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", - "directory": "/tmp", - "fileName": "n8n-logo.png", - "fileSize": "2.67 kB" - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.8 seconds": [ - { - "startTime": 1747343996155, - "executionIndex": 3, - "source": [ - { - "previousNode": "Read Binary File" - } - ], - "hints": [], - "executionTime": 803, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "metadata": { - "object": true - } - }, - "binary": { - "data": { - "mimeType": "image/png", - "fileType": "image", - "fileExtension": "png", - "data": "iVBORw0KGgoAAAANSUhEUgAAAdAAAABqCAMAAAA7pfCVAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAqUExURQAAADhNW/9tWv9tWjhNW/9tWv9tWjhNW6teWv9tWjhNWzhNW/9tWjhNW0y9HhoAAAAMdFJOUwDD4n+KTrBCECcoZqF2YcgAAAnPSURBVHja7Z3ZmqsgDIDLvti+/+tO9wKSBFCsdsjV+U7HavnJQhLwdDqgKCWEUOo05AfECX5+CRcD6sFFfWi+mNoxKr+D8450aOlBxepzXvRQ0kM6T36GhLsxPL/EcxD9NZ6D6PH8J85zED2a6DMlegzSgUScaRFjmA5rcLVQSolEa/lYvBxUQfXLXToxVPSYwqHoJ4p9h4oeRRQczUbGeOQADxjiOmR9OgLdfaQMbsVNVDjmJ0M/Ogbz+9ZU83OFZNxkaHSHzf02ziqagFEVI849Ks68CqoBdI+LyzLJJWzdALoHsbqBZz7q6QfUGsnY5SqMyclvMSpKX0UcsNBg+XnvQO10Z/kRJnszfTuh45maNp5b+lB5yYjsmowKfgk/cKqgRsRWUa5nl7xM2yTEDqajqpFnduL2WIdOF1BkX6slnH0Y3iP50UYHmkemiCB4ZZ79iLr377uPz5FUNFmwaOWKHe48VcTXdzzmcvkCUfFJnKhjJaZjBdWuagJoxBuvNKnthRDTDejTANljhUXiXFnycnD2T5/Xt7hhfMumOz0TLWFYt2ERhwRaX8LUQH+f0x3axHxAzuTj3qkXUD375zpBqGrcqueuF9oafSs0kip1uvebKE0vUhcpqIRCpS4q6t4D4lYMipx41bN4XQbqcyG1yU80NI3M1q18XnZba0ozMPj5EO2SMtKPyfqYp6v001jBG/fqpcrCkVBHN0QxBQudtTqt3xaXWZh1F5vr1m6nEZlR4yVjnq2DgVvCdEsUo5qygovWLBPyWZ+VS0BUrDw/amY+VDeB9m3ypnWjaEgKLnOhObPaN859B3lrbHmFVYD4dmQXUd6rNXo9vdFGiDdQzL92AnoLRW6nR6yfvCm3ZvguP7seUPQRV4zxUaCyN9BOybhyotQuvxWBwi0rxRbKTvKpY4xBBes3ULtEQ41k3aqor6r7ve5u2kIO1cYzx2xB+dLlzW4mog6SPZ/xNElJLD/SE5bgmwPNZSFsUktlJUFxWEhHac5Sy6YeCxgZ8foK5qLyZUZJs+oZ/eoHN8vK0uweC3zmF2ZqpZnSOLMVQJEg2mTLtLMJU1DN0k2hZ24qLCxfxo28XCsyHfsYHlNcOEEWm2auvdHXQROnhOhlPgdncw2qul+Yx7DopFsdHPxUs/ntyjSFo+E50JgMUUI/BA4HZTrOU3kpbIJTtmweMKVlGA8Nua0BKlFnQHRSxFkY/kr4uZgpJ1cSb1eW2EUFzYGO9YQU6FRRCrNgC1Eur5B8mW+uopJ/LEurtAoKMGIFnGuDBV2ZgFQ0mjxiM6BIxZoh+aDUO7GMRYyBWgbfyVcAZdU8A6Icto8aVVEBu0qVL1PGumu3AhpWrNlNiHGOC6J29t8S4hDGLLMbyUVAZdJRaq4iZY6ow6BxrHzMkdBHZDQxWXX07LHwt9/7KZukCxUvC+Oi8Kp8reV2o2l+o5clDwvjxOoy/CKG+c/QbERhr5xVs1y2RhfGSqGg1lOHbllkwqz+59AYpKnWo7XN1HKyyQQR5kRMgCjmDL6qoHMFSlx4uJHUpAEBXs0q24DCG3IV/bvaDBLZU7VNWdUjxpDWXVvTXAYBZdDPiKfMPZTmaDXLNfc/8/oO255AZ8sGhioOHN0wykR7aG60A53w1U/cY0GMcVELratOOmxx8JdBl4ETmi6CeVoCqKlKPZUBZfhqNph9lsyVF21aqM4Pb3KQm0FjWV+UWyhbfLAig9wMlGx98aG5J7yaaHOhONBtDuYzeCgLf1aaksm5OOzTVqCMNNoyuP+/AGoRoNgSQZp5OlwivUZZ3HIhUIv+jORP/L8wubImojRJRDnfJ2pBoOzUAWhJJ5P8zKj/EBT5CqA2A87LS1nELHsAlQUL2SDy+gfLFlYTUcostrhmDS4TfQ+gRT7482gatbllO3MzvUN7SizICqCgWkdIp5qwZy2grOTKSzTyCsNyO9I0EoxOWFbJp/7ObpdAkfJ2uDi1FQuTpUCL1rGfmzhE06Jql8W0VxV8tmFyPgZqygcPzQIESjp9AagsAxrXyCzIE233SoMc4Ds3K581A53KtBpQ630AVVCdWlEFbg74RHiX31YF7magjOjqydtchg75xiY3jUdfbVfJ/iNOrkz4cydh0rsS+8qNWlCWA6ViD7NjoGq2Ve8qJU1isz1hPHOhgCcBZXPdqx1MKLcRUGrw8ia5L9CiZUv0RwVrk3wEoxpWNKVtnMneRl5/XloPoOYLQGVBV5KNHpzefQltP6WngkLstCjGWXq8xk8CnQp2pSaWg8oHgYk6cioITKthoIKvkIxYAvSyI5NbUlBNfbtq3axEEM1ZanolCp/UWZUCXhQUmf0EReRDhdF3UbEL83Uo0SwxEij2lTVEW4BKXBt8PjHYGagkVTRTHYA3LBFjiBx8m58IFFB861QF0UWJhfxFRGKhE1BP9ZllnxoCQ78+F3B49I413uKWy4m2ALVoUXwCRrYz0JPET0iCelJVBqkuOulL15y2QRyaoVsj7lWABmOH9JWlK4jeQD3aAePhDrUUqS7d8JdmhzC3u7gRWPcE6sEGvrB+BnTlVQG15imWTgpLhOiEtk5Z9dwPyLVQVdlz976QOF0TPXhq7kC5bj3BpglovLHlc2XciOKbgHry8cAsP4M6xsOaHvvOy9/Qo+GSBPIjPTTT/1WBXpi8Ss6L3j+b7ptOGNo8Xwj0fiNfAjR5pmTbKXsrtZEV+9u6CXJgVpzhCM4xE7xeRUuBJubQU/v2YP0hgMYPgwKdmejkqdiVOGObnZ5ORMUwGwH6YcervWgjULwtF+366wiUnmdf44kdgIxsX3S8tn2lFShBFDkDUBKrxCVAKaL+9D0BjyhH3auqTeoSQCWiDazugHIcqC8HOiFAT9j2cPbVl+GWvESAo+sdvQJQjwyehbYTMjSBJE+0LUCBYs90gk61+aq5LaoFAHGPq4xzCaCxOsxwy5IDgcqA+mKg+DOd4h3hn4j4+++qpuuoFg+PS27i2VMg9+Ile0vGjiSDBx3DdrPezy+BFOV2JN3sYfKPhz/TaX6UmDSnPQivt7iNJ+0uEvMkIaXxp92In6R8PNW0m6ei3KgmgqnxLt+9idUD6I+JGEB/TLBXNlM+1I7hOxhStzzKHfINpJoX7zY88PtS/5U49T6bTKOdJny8Pf1wbLGwSJxHTHQ40TBRdR4W94AuFew3FJvuFR6ylvB8q5ni2+7mH9JFRe8vCbiK4N1euzNkUxVd2Jg7ZGeBbuf3EA75htHt+p6zIVsvXb5zBNmQDYkOB3pAEcPe/pofhd42PHK4BxUrCt8rOeQwyxfdtFV1yI61NKyVajG08yf0VCkhlBowy+UP8oj4tnqDbLEAAAAASUVORK5CYII=", - "directory": "/tmp", - "fileName": "n8n-logo.png", - "fileSize": "2.67 kB" - } - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Dropbox": [ - { - "startTime": 1747343996958, - "executionIndex": 4, - "source": [ - { - "previousNode": "Sleep 0.8 seconds" - } - ], - "hints": [], - "executionTime": 1679, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "testFile", - "path_lower": "/testfolder1747343995365/testfile", - "path_display": "/testFolder1747343995365/testFile", - "id": "id:2Tke52G4OWEAAAAAAAAc-A", - "client_modified": "2025-05-15T21:19:58Z", - "server_modified": "2025-05-15T21:19:58Z", - "rev": "01635333a543eef0000000222408c10", - "size": 2675, - "is_downloadable": true, - "content_hash": "1fbea2b44830c71ca338c89a5e3a45585f74d9e15c19bfef69b19b38e9da99b9" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.8 seconds1": [ - { - "startTime": 1747343998638, - "executionIndex": 5, - "source": [ - { - "previousNode": "Dropbox" - } - ], - "hints": [], - "executionTime": 801, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "testFile", - "path_lower": "/testfolder1747343995365/testfile", - "path_display": "/testFolder1747343995365/testFile", - "id": "id:2Tke52G4OWEAAAAAAAAc-A", - "client_modified": "2025-05-15T21:19:58Z", - "server_modified": "2025-05-15T21:19:58Z", - "rev": "01635333a543eef0000000222408c10", - "size": 2675, - "is_downloadable": true, - "content_hash": "1fbea2b44830c71ca338c89a5e3a45585f74d9e15c19bfef69b19b38e9da99b9" - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Dropbox2": [ - { - "startTime": 1747343999439, - "executionIndex": 6, - "source": [ - { - "previousNode": "Sleep 0.8 seconds1" - } - ], - "hints": [], - "executionTime": 3055, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "metadata": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Dropbox3": [ - { - "startTime": 1747344002494, - "executionIndex": 7, - "source": [ - { - "previousNode": "Dropbox2" - } - ], - "hints": [], - "executionTime": 2030, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "metadata": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Dropbox5": [ - { - "startTime": 1747344004524, - "executionIndex": 8, - "source": [ - { - "previousNode": "Dropbox2" - } - ], - "hints": [], - "executionTime": 1541, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "metadata": { - "object": true - } - }, - "binary": { - "data": { - "mimeType": "image/png", - "fileType": "image", - "fileExtension": "png", - "data": "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", - "directory": "/testFolder1747343995365", - "fileName": "moveTestFile1747344000304", - "fileSize": "2.67 kB" - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.8 seconds2": [ - { - "startTime": 1747344006065, - "executionIndex": 9, - "source": [ - { - "previousNode": "Dropbox3" - } - ], - "hints": [], - "executionTime": 806, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "metadata": { - "object": true - } - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Sleep 0.8 seconds3": [ - { - "startTime": 1747344006871, - "executionIndex": 10, - "source": [ - { - "previousNode": "Dropbox5" - } - ], - "hints": [], - "executionTime": 807, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "metadata": { - "object": true - } - }, - "binary": { - "data": { - "mimeType": "image/png", - "fileType": "image", - "fileExtension": "png", - "data": "iVBORw0KGgoAAAANSUhEUgAAAdAAAABqCAMAAAA7pfCVAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAqUExURQAAADhNW/9tWv9tWjhNW/9tWv9tWjhNW6teWv9tWjhNWzhNW/9tWjhNW0y9HhoAAAAMdFJOUwDD4n+KTrBCECcoZqF2YcgAAAnPSURBVHja7Z3ZmqsgDIDLvti+/+tO9wKSBFCsdsjV+U7HavnJQhLwdDqgKCWEUOo05AfECX5+CRcD6sFFfWi+mNoxKr+D8450aOlBxepzXvRQ0kM6T36GhLsxPL/EcxD9NZ6D6PH8J85zED2a6DMlegzSgUScaRFjmA5rcLVQSolEa/lYvBxUQfXLXToxVPSYwqHoJ4p9h4oeRRQczUbGeOQADxjiOmR9OgLdfaQMbsVNVDjmJ0M/Ogbz+9ZU83OFZNxkaHSHzf02ziqagFEVI849Ks68CqoBdI+LyzLJJWzdALoHsbqBZz7q6QfUGsnY5SqMyclvMSpKX0UcsNBg+XnvQO10Z/kRJnszfTuh45maNp5b+lB5yYjsmowKfgk/cKqgRsRWUa5nl7xM2yTEDqajqpFnduL2WIdOF1BkX6slnH0Y3iP50UYHmkemiCB4ZZ79iLr377uPz5FUNFmwaOWKHe48VcTXdzzmcvkCUfFJnKhjJaZjBdWuagJoxBuvNKnthRDTDejTANljhUXiXFnycnD2T5/Xt7hhfMumOz0TLWFYt2ERhwRaX8LUQH+f0x3axHxAzuTj3qkXUD375zpBqGrcqueuF9oafSs0kip1uvebKE0vUhcpqIRCpS4q6t4D4lYMipx41bN4XQbqcyG1yU80NI3M1q18XnZba0ozMPj5EO2SMtKPyfqYp6v001jBG/fqpcrCkVBHN0QxBQudtTqt3xaXWZh1F5vr1m6nEZlR4yVjnq2DgVvCdEsUo5qygovWLBPyWZ+VS0BUrDw/amY+VDeB9m3ypnWjaEgKLnOhObPaN859B3lrbHmFVYD4dmQXUd6rNXo9vdFGiDdQzL92AnoLRW6nR6yfvCm3ZvguP7seUPQRV4zxUaCyN9BOybhyotQuvxWBwi0rxRbKTvKpY4xBBes3ULtEQ41k3aqor6r7ve5u2kIO1cYzx2xB+dLlzW4mog6SPZ/xNElJLD/SE5bgmwPNZSFsUktlJUFxWEhHac5Sy6YeCxgZ8foK5qLyZUZJs+oZ/eoHN8vK0uweC3zmF2ZqpZnSOLMVQJEg2mTLtLMJU1DN0k2hZ24qLCxfxo28XCsyHfsYHlNcOEEWm2auvdHXQROnhOhlPgdncw2qul+Yx7DopFsdHPxUs/ntyjSFo+E50JgMUUI/BA4HZTrOU3kpbIJTtmweMKVlGA8Nua0BKlFnQHRSxFkY/kr4uZgpJ1cSb1eW2EUFzYGO9YQU6FRRCrNgC1Eur5B8mW+uopJ/LEurtAoKMGIFnGuDBV2ZgFQ0mjxiM6BIxZoh+aDUO7GMRYyBWgbfyVcAZdU8A6Icto8aVVEBu0qVL1PGumu3AhpWrNlNiHGOC6J29t8S4hDGLLMbyUVAZdJRaq4iZY6ow6BxrHzMkdBHZDQxWXX07LHwt9/7KZukCxUvC+Oi8Kp8reV2o2l+o5clDwvjxOoy/CKG+c/QbERhr5xVs1y2RhfGSqGg1lOHbllkwqz+59AYpKnWo7XN1HKyyQQR5kRMgCjmDL6qoHMFSlx4uJHUpAEBXs0q24DCG3IV/bvaDBLZU7VNWdUjxpDWXVvTXAYBZdDPiKfMPZTmaDXLNfc/8/oO255AZ8sGhioOHN0wykR7aG60A53w1U/cY0GMcVELratOOmxx8JdBl4ETmi6CeVoCqKlKPZUBZfhqNph9lsyVF21aqM4Pb3KQm0FjWV+UWyhbfLAig9wMlGx98aG5J7yaaHOhONBtDuYzeCgLf1aaksm5OOzTVqCMNNoyuP+/AGoRoNgSQZp5OlwivUZZ3HIhUIv+jORP/L8wubImojRJRDnfJ2pBoOzUAWhJJ5P8zKj/EBT5CqA2A87LS1nELHsAlQUL2SDy+gfLFlYTUcostrhmDS4TfQ+gRT7482gatbllO3MzvUN7SizICqCgWkdIp5qwZy2grOTKSzTyCsNyO9I0EoxOWFbJp/7ObpdAkfJ2uDi1FQuTpUCL1rGfmzhE06Jql8W0VxV8tmFyPgZqygcPzQIESjp9AagsAxrXyCzIE233SoMc4Ds3K581A53KtBpQ630AVVCdWlEFbg74RHiX31YF7magjOjqydtchg75xiY3jUdfbVfJ/iNOrkz4cydh0rsS+8qNWlCWA6ViD7NjoGq2Ve8qJU1isz1hPHOhgCcBZXPdqx1MKLcRUGrw8ia5L9CiZUv0RwVrk3wEoxpWNKVtnMneRl5/XloPoOYLQGVBV5KNHpzefQltP6WngkLstCjGWXq8xk8CnQp2pSaWg8oHgYk6cioITKthoIKvkIxYAvSyI5NbUlBNfbtq3axEEM1ZanolCp/UWZUCXhQUmf0EReRDhdF3UbEL83Uo0SwxEij2lTVEW4BKXBt8PjHYGagkVTRTHYA3LBFjiBx8m58IFFB861QF0UWJhfxFRGKhE1BP9ZllnxoCQ78+F3B49I413uKWy4m2ALVoUXwCRrYz0JPET0iCelJVBqkuOulL15y2QRyaoVsj7lWABmOH9JWlK4jeQD3aAePhDrUUqS7d8JdmhzC3u7gRWPcE6sEGvrB+BnTlVQG15imWTgpLhOiEtk5Z9dwPyLVQVdlz976QOF0TPXhq7kC5bj3BpglovLHlc2XciOKbgHry8cAsP4M6xsOaHvvOy9/Qo+GSBPIjPTTT/1WBXpi8Ss6L3j+b7ptOGNo8Xwj0fiNfAjR5pmTbKXsrtZEV+9u6CXJgVpzhCM4xE7xeRUuBJubQU/v2YP0hgMYPgwKdmejkqdiVOGObnZ5ORMUwGwH6YcervWgjULwtF+366wiUnmdf44kdgIxsX3S8tn2lFShBFDkDUBKrxCVAKaL+9D0BjyhH3auqTeoSQCWiDazugHIcqC8HOiFAT9j2cPbVl+GWvESAo+sdvQJQjwyehbYTMjSBJE+0LUCBYs90gk61+aq5LaoFAHGPq4xzCaCxOsxwy5IDgcqA+mKg+DOd4h3hn4j4+++qpuuoFg+PS27i2VMg9+Ile0vGjiSDBx3DdrPezy+BFOV2JN3sYfKPhz/TaX6UmDSnPQivt7iNJ+0uEvMkIaXxp92In6R8PNW0m6ei3KgmgqnxLt+9idUD6I+JGEB/TLBXNlM+1I7hOxhStzzKHfINpJoX7zY88PtS/5U49T6bTKOdJny8Pf1wbLGwSJxHTHQ40TBRdR4W94AuFew3FJvuFR6ylvB8q5ni2+7mH9JFRe8vCbiK4N1euzNkUxVd2Jg7ZGeBbuf3EA75htHt+p6zIVsvXb5zBNmQDYkOB3pAEcPe/pofhd42PHK4BxUrCt8rOeQwyxfdtFV1yI61NKyVajG08yf0VCkhlBowy+UP8oj4tnqDbLEAAAAASUVORK5CYII=", - "directory": "/testFolder1747343995365", - "fileName": "moveTestFile1747344000304", - "fileSize": "2.67 kB" - } - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Dropbox4": [ - { - "startTime": 1747344007678, - "executionIndex": 11, - "source": [ - { - "previousNode": "Sleep 0.8 seconds2" - } - ], - "hints": [], - "executionTime": 1769, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "metadata": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Dropbox6": [ - { - "startTime": 1747344009447, - "executionIndex": 12, - "source": [ - { - "previousNode": "Sleep 0.8 seconds3" - } - ], - "hints": [], - "executionTime": 1815, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "metadata": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.8 seconds6": [ - { - "startTime": 1747344011262, - "executionIndex": 13, - "source": [ - { - "previousNode": "Dropbox6" - } - ], - "hints": [], - "executionTime": 803, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "metadata": { - "object": true - } - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Dropbox10": [ - { - "startTime": 1747344012065, - "executionIndex": 14, - "source": [ - { - "previousNode": "Sleep 0.8 seconds6" - } - ], - "hints": [], - "executionTime": 3083, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "metadata": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.8 seconds5": [ - { - "startTime": 1747344015149, - "executionIndex": 15, - "source": [ - { - "previousNode": "Dropbox10" - } - ], - "hints": [], - "executionTime": 805, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "metadata": { - "object": true - } - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Dropbox9": [ - { - "startTime": 1747344015954, - "executionIndex": 16, - "source": [ - { - "previousNode": "Sleep 0.8 seconds5" - } - ], - "hints": [], - "executionTime": 1070, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": [ - { - "item": 0, - "input": 0 - } - ] - } - ] - ] - } - } - ], - "Sleep 0.8 seconds4": [ - { - "startTime": 1747344017024, - "executionIndex": 17, - "source": [ - { - "previousNode": "Dropbox9" - } - ], - "hints": [], - "executionTime": 806, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Dropbox11": [ - { - "startTime": 1747344017830, - "executionIndex": 18, - "source": [ - { - "previousNode": "Sleep 0.8 seconds4" - } - ], - "hints": [], - "executionTime": 1794, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "metadata": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Dropbox11" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:54.529Z", - "stoppedAt": "2025-05-15T21:20:19.624Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/150-snapshot.json b/test-workflows/snapshots/150-snapshot.json deleted file mode 100644 index b0239c7278c..00000000000 --- a/test-workflows/snapshots/150-snapshot.json +++ /dev/null @@ -1,184 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343994529, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "PostHog": [ - { - "startTime": 1747343994529, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 175, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": 1 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "PostHog1": [ - { - "startTime": 1747343994704, - "executionIndex": 2, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 79, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": 1 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "PostHog2": [ - { - "startTime": 1747343994783, - "executionIndex": 3, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 75, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": 1 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "PostHog3": [ - { - "startTime": 1747343994858, - "executionIndex": 4, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 82, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": 1 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "PostHog4": [ - { - "startTime": 1747343994940, - "executionIndex": 5, - "source": [ - { - "previousNode": "PostHog3" - } - ], - "hints": [], - "executionTime": 67, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": 1 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "PostHog4" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:54.529Z", - "stoppedAt": "2025-05-15T21:19:55.007Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/151-snapshot.json b/test-workflows/snapshots/151-snapshot.json deleted file mode 100644 index 1c2a4ae4d36..00000000000 --- a/test-workflows/snapshots/151-snapshot.json +++ /dev/null @@ -1,799 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1710331888599, - "executionTime": 1, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wise5": [ - { - "startTime": 1710331888600, - "executionTime": 341, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 700007874, - "business": { - "object": true - }, - "profile": 16154361, - "accountHolderName": "Node QA", - "currency": "EUR", - "country": "NL", - "type": "iban", - "details": { - "object": true - }, - "user": 5681537, - "active": true, - "ownedByCustomer": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wise4": [ - { - "startTime": 1710331888941, - "executionTime": 384, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 16154361, - "type": "personal", - "details": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wise3": [ - { - "startTime": 1710331889325, - "executionTime": 240, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "rate": 1.09309, - "source": "EUR", - "target": "USD", - "time": "2024-03-12T00:00:00+0000" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wise2": [ - { - "startTime": 1710331889565, - "executionTime": 249, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "accountHolder": { - "object": true - }, - "issuer": { - "object": true - }, - "bankDetails": [ - "json array" - ], - "transactions": [ - "json array" - ], - "startOfStatementBalance": { - "object": true - }, - "endOfStatementBalance": { - "object": true - }, - "endOfStatementUnrealisedGainLoss": { - "object": true - }, - "balanceAssetConfiguration": { - "object": true - }, - "query": { - "object": true - }, - "request": { - "object": true - }, - "feeSummary": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wise6": [ - { - "startTime": 1710331889814, - "executionTime": 751, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "sourceAmount": 2, - "guaranteedTargetAmountAllowed": false, - "targetAmountAllowed": true, - "paymentOptions": [ - "json array" - ], - "notices": [ - "json array" - ], - "transferFlowConfig": { - "object": true - }, - "rateTimestamp": "2024-03-13T12:11:29Z", - "clientId": "transferwise-personal-tokens", - "expirationTime": "2024-03-13T12:41:29Z", - "id": "9d0519da-b525-4d4d-92c2-d9ca1df535ad", - "type": "REGULAR", - "createdTime": "2024-03-13T12:11:29Z", - "user": 5681537, - "rateType": "FIXED", - "rateExpirationTime": "2024-04-12T12:11:29Z", - "payOut": "BANK_TRANSFER", - "guaranteedTargetAmount": false, - "providedAmountType": "SOURCE", - "status": "PENDING", - "profile": 16154361, - "rate": 1, - "sourceCurrency": "EUR", - "targetCurrency": "EUR", - "payInCountry": "GB", - "funding": "POST" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wise14": [ - { - "startTime": 1710331890565, - "executionTime": 513, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "sourceAmount": 2, - "guaranteedTargetAmountAllowed": false, - "targetAmountAllowed": true, - "paymentOptions": [ - "json array" - ], - "notices": [ - "json array" - ], - "transferFlowConfig": { - "object": true - }, - "rateTimestamp": "2024-03-13T12:11:30Z", - "clientId": "transferwise-personal-tokens", - "expirationTime": "2024-03-13T12:41:30Z", - "id": "f4ac8d5d-2d97-4a7f-a695-c6709e1a930d", - "type": "REGULAR", - "createdTime": "2024-03-13T12:11:30Z", - "user": 5681537, - "rateType": "FIXED", - "rateExpirationTime": "2024-04-12T12:11:30Z", - "payOut": "BANK_TRANSFER", - "guaranteedTargetAmount": false, - "providedAmountType": "SOURCE", - "status": "PENDING", - "profile": 16154361, - "rate": 1, - "sourceCurrency": "EUR", - "targetCurrency": "EUR", - "payInCountry": "GB", - "funding": "POST" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wise12": [ - { - "startTime": 1710331891078, - "executionTime": 304, - "source": [ - { - "previousNode": "Wise4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 16154361, - "type": "personal", - "details": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": 16154362, - "type": "business", - "details": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wise": [ - { - "startTime": 1710331891382, - "executionTime": 282, - "source": [ - { - "previousNode": "Wise2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 23302, - "profileId": 16154361, - "recipientId": 147784111, - "creationTime": "2021-03-24T14:32:25.979Z", - "modificationTime": "2021-03-24T14:32:25.979Z", - "active": true, - "eligible": true, - "balances": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wise7": [ - { - "startTime": 1710331891664, - "executionTime": 471, - "source": [ - { - "previousNode": "Wise6" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "sourceAmount": 2, - "guaranteedTargetAmountAllowed": false, - "targetAmountAllowed": true, - "paymentOptions": [ - "json array" - ], - "notices": [ - "json array" - ], - "transferFlowConfig": { - "object": true - }, - "rateTimestamp": "2024-03-13T12:11:29Z", - "clientId": "transferwise-personal-tokens", - "expirationTime": "2024-03-13T12:41:29Z", - "id": "9d0519da-b525-4d4d-92c2-d9ca1df535ad", - "type": "REGULAR", - "createdTime": "2024-03-13T12:11:29Z", - "user": 5681537, - "rateType": "FIXED", - "rateExpirationTime": "2024-04-12T12:11:29Z", - "payOut": "BANK_TRANSFER", - "guaranteedTargetAmount": false, - "providedAmountType": "SOURCE", - "payInCountry": "GB", - "funding": "POST", - "status": "PENDING", - "profile": 16154361, - "rate": 1, - "sourceCurrency": "EUR", - "targetCurrency": "EUR" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wise16": [ - { - "startTime": 1710331892136, - "executionTime": 2032, - "source": [ - { - "previousNode": "Wise14" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 53112532, - "user": 5681537, - "targetAccount": 700007874, - "sourceAccount": { - "object": true - }, - "quote": { - "object": true - }, - "quoteUuid": "f4ac8d5d-2d97-4a7f-a695-c6709e1a930d", - "status": "incoming_payment_waiting", - "reference": "", - "rate": 1, - "created": "2024-03-13 12:11:34", - "business": { - "object": true - }, - "transferRequest": { - "object": true - }, - "details": { - "object": true - }, - "hasActiveIssues": false, - "sourceCurrency": "EUR", - "sourceValue": 1.37, - "targetCurrency": "EUR", - "targetValue": 1.37, - "customerTransactionId": "6c67d18c-6639-4158-b8a6-325858c7d155" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wise1": [ - { - "startTime": 1710331894168, - "executionTime": 136, - "source": [ - { - "previousNode": "Wise" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "code": "AED", - "hasBankDetails": false, - "payInAllowed": false, - "sampleBankDetails": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wise8": [ - { - "startTime": 1710331894305, - "executionTime": 1875, - "source": [ - { - "previousNode": "Wise7" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 53112534, - "user": 5681537, - "targetAccount": 700007874, - "sourceAccount": { - "object": true - }, - "quote": { - "object": true - }, - "quoteUuid": "9d0519da-b525-4d4d-92c2-d9ca1df535ad", - "status": "incoming_payment_waiting", - "reference": "", - "rate": 1, - "created": "2024-03-13 12:11:36", - "business": { - "object": true - }, - "transferRequest": { - "object": true - }, - "details": { - "object": true - }, - "hasActiveIssues": false, - "sourceCurrency": "EUR", - "sourceValue": 1.37, - "targetCurrency": "EUR", - "targetValue": 1.37, - "customerTransactionId": "f162e8de-8d10-4bc9-88ef-4840fd22b6a5" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wise15": [ - { - "startTime": 1710331896180, - "executionTime": 258, - "source": [ - { - "previousNode": "Wise16" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 53112532, - "user": 5681537, - "targetAccount": 700007874, - "sourceAccount": { - "object": true - }, - "quote": { - "object": true - }, - "quoteUuid": "f4ac8d5d-2d97-4a7f-a695-c6709e1a930d", - "status": "cancelled", - "reference": "", - "rate": 1, - "created": "2024-03-13 12:11:34", - "business": { - "object": true - }, - "transferRequest": { - "object": true - }, - "details": { - "object": true - }, - "hasActiveIssues": false, - "sourceCurrency": "EUR", - "sourceValue": 1.37, - "targetCurrency": "EUR", - "targetValue": 1.37, - "customerTransactionId": "6c67d18c-6639-4158-b8a6-325858c7d155" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wise9": [ - { - "startTime": 1710331896438, - "executionTime": 250, - "source": [ - { - "previousNode": "Wise8" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 53112534, - "user": 5681537, - "targetAccount": 700007874, - "sourceAccount": { - "object": true - }, - "quote": { - "object": true - }, - "quoteUuid": "9d0519da-b525-4d4d-92c2-d9ca1df535ad", - "status": "incoming_payment_waiting", - "reference": "", - "rate": 1, - "created": "2024-03-13 12:11:36", - "business": { - "object": true - }, - "transferRequest": { - "object": true - }, - "details": { - "object": true - }, - "hasActiveIssues": false, - "sourceCurrency": "EUR", - "sourceValue": 1.37, - "targetCurrency": "EUR", - "targetValue": 1.37, - "customerTransactionId": "f162e8de-8d10-4bc9-88ef-4840fd22b6a5" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wise10": [ - { - "startTime": 1710331896689, - "executionTime": 355, - "source": [ - { - "previousNode": "Wise9" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 52915297, - "user": 5681537, - "targetAccount": 147784111, - "sourceAccount": { - "object": true - }, - "quote": { - "object": true - }, - "quoteUuid": "2eabfb55-3b8f-4d8d-82dc-b92db67d5117", - "status": "cancelled", - "reference": "", - "rate": 1, - "created": "2024-02-13 02:08:50", - "business": { - "object": true - }, - "transferRequest": { - "object": true - }, - "details": { - "object": true - }, - "hasActiveIssues": false, - "sourceCurrency": "EUR", - "sourceValue": 2, - "targetCurrency": "EUR", - "targetValue": 2, - "customerTransactionId": "f0431a1e-fe5f-456a-a254-4c7cc774545d" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wise13": [ - { - "startTime": 1710331897044, - "executionTime": 0, - "source": [ - { - "previousNode": "Wise10" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 52915297, - "user": 5681537, - "targetAccount": 147784111, - "sourceAccount": { - "object": true - }, - "quote": { - "object": true - }, - "quoteUuid": "2eabfb55-3b8f-4d8d-82dc-b92db67d5117", - "status": "cancelled", - "reference": "", - "rate": 1, - "created": "2024-02-13 02:08:50", - "business": { - "object": true - }, - "transferRequest": { - "object": true - }, - "details": { - "object": true - }, - "hasActiveIssues": false, - "sourceCurrency": "EUR", - "sourceValue": 2, - "targetCurrency": "EUR", - "targetValue": 2, - "customerTransactionId": "f0431a1e-fe5f-456a-a254-4c7cc774545d" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Wise13" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2024-03-13T12:11:28.599Z", - "stoppedAt": "2024-03-13T12:11:37.044Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/152-snapshot.json b/test-workflows/snapshots/152-snapshot.json deleted file mode 100644 index 2baedf18ed2..00000000000 --- a/test-workflows/snapshots/152-snapshot.json +++ /dev/null @@ -1,171 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343994528, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AWS Comprehend": [ - { - "startTime": 1747343994528, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 535, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "en": 0.995190441608429 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AWS Comprehend1": [ - { - "startTime": 1747343995063, - "executionIndex": 2, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 441, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "Sentiment": "POSITIVE", - "SentimentScore": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AWS Comprehend2": [ - { - "startTime": 1747343995504, - "executionIndex": 3, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 533, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "BeginOffset": 0, - "EndOffset": 3, - "Score": 0.4956623315811157, - "Text": "n8n", - "Type": "OTHER" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "BeginOffset": 18, - "EndOffset": 23, - "Score": 0.4929276704788208, - "Text": "eight", - "Type": "OTHER" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "BeginOffset": 53, - "EndOffset": 62, - "Score": 0.7383686304092407, - "Text": "every app", - "Type": "QUANTITY" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "BeginOffset": 147, - "EndOffset": 158, - "Score": 0.9422106146812439, - "Text": "single line", - "Type": "QUANTITY" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "AWS Comprehend2" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:54.528Z", - "stoppedAt": "2025-05-15T21:19:56.037Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/153-snapshot.json b/test-workflows/snapshots/153-snapshot.json deleted file mode 100644 index 377e07d13b4..00000000000 --- a/test-workflows/snapshots/153-snapshot.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343994432, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AWS Lambda": [ - { - "startTime": 1747343994433, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 493, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": "Hello world!, this is n8n" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AWS Lambda1": [ - { - "startTime": 1747343994926, - "executionIndex": 2, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 296, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": "Hello world!, this is nodeqa" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "AWS Lambda1" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:54.431Z", - "stoppedAt": "2025-05-15T21:19:55.222Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/154-snapshot.json b/test-workflows/snapshots/154-snapshot.json deleted file mode 100644 index ca074f32258..00000000000 --- a/test-workflows/snapshots/154-snapshot.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343994435, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Function": [ - { - "startTime": 1747343994435, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 14, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "binary": { - "data": { - "data": "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", - "mimeType": "image/png", - "fileExtension": "png", - "fileName": "n8n-logo.png" - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AWS Rekognition": [ - { - "startTime": 1747343994449, - "executionIndex": 2, - "source": [ - { - "previousNode": "Function" - } - ], - "hints": [], - "executionTime": 953, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "TextDetections": [ - "json array" - ], - "TextModelVersion": "3.0" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "AWS Rekognition" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:54.434Z", - "stoppedAt": "2025-05-15T21:19:55.402Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/155-snapshot.json b/test-workflows/snapshots/155-snapshot.json deleted file mode 100644 index 740fd25b16a..00000000000 --- a/test-workflows/snapshots/155-snapshot.json +++ /dev/null @@ -1,523 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343994451, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set": [ - { - "startTime": 1747343994451, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 12, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "bucketName": "Bucket1747343994463" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AWS S3": [ - { - "startTime": 1747343994463, - "executionIndex": 2, - "source": [ - { - "previousNode": "Set" - } - ], - "hints": [], - "executionTime": 679, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AWS S": [ - { - "startTime": 1747343995142, - "executionIndex": 3, - "source": [ - { - "previousNode": "AWS S3" - } - ], - "hints": [], - "executionTime": 399, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "Name": "adi.testing", - "CreationDate": "2023-09-20T10:14:46.000Z" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set1": [ - { - "startTime": 1747343995541, - "executionIndex": 4, - "source": [ - { - "previousNode": "AWS S3" - } - ], - "hints": [], - "executionTime": 2, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "folderName": "Folder1747343995543" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Function": [ - { - "startTime": 1747343995543, - "executionIndex": 5, - "source": [ - { - "previousNode": "AWS S" - } - ], - "hints": [], - "executionTime": 2, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "binary": { - "data": { - "data": "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", - "mimeType": "image/png", - "fileExtension": "png", - "fileName": "n8n-logo.png" - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AWS S8": [ - { - "startTime": 1747343995545, - "executionIndex": 6, - "source": [ - { - "previousNode": "Set1" - } - ], - "hints": [], - "executionTime": 881, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AWS S2": [ - { - "startTime": 1747343996426, - "executionIndex": 7, - "source": [ - { - "previousNode": "Function" - } - ], - "hints": [], - "executionTime": 930, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AWS S9": [ - { - "startTime": 1747343997356, - "executionIndex": 8, - "source": [ - { - "previousNode": "AWS S8" - } - ], - "hints": [], - "executionTime": 712, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "Key": "Folder1747343995543/", - "LastModified": "2025-05-15T21:19:57.000Z", - "ETag": "\"d41d8cd98f00b204e9800998ecf8427e\"", - "ChecksumAlgorithm": "CRC64NVME", - "ChecksumType": "FULL_OBJECT", - "Size": "0", - "StorageClass": "STANDARD" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AWS S4": [ - { - "startTime": 1747343998068, - "executionIndex": 9, - "source": [ - { - "previousNode": "AWS S2" - } - ], - "hints": [], - "executionTime": 714, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "Key": "n8n-logo.png", - "LastModified": "2025-05-15T21:19:58.000Z", - "ETag": "\"174dbbfbcabb9dc0c2e82002e5ce289e\"", - "ChecksumAlgorithm": "CRC64NVME", - "ChecksumType": "FULL_OBJECT", - "Size": "2675", - "StorageClass": "STANDARD" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AWS S10": [ - { - "startTime": 1747343998782, - "executionIndex": 10, - "source": [ - { - "previousNode": "AWS S9" - } - ], - "hints": [], - "executionTime": 1222, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "deleted": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AWS S5": [ - { - "startTime": 1747344000004, - "executionIndex": 11, - "source": [ - { - "previousNode": "AWS S4" - } - ], - "hints": [], - "executionTime": 686, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "Key": "n8n-logo.png", - "LastModified": "2025-05-15T21:19:58.000Z", - "ETag": "\"174dbbfbcabb9dc0c2e82002e5ce289e\"", - "ChecksumAlgorithm": "CRC64NVME", - "ChecksumType": "FULL_OBJECT", - "Size": "2675", - "StorageClass": "STANDARD" - }, - "binary": { - "data": { - "mimeType": "image/png", - "fileType": "image", - "fileExtension": "png", - "data": "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", - "fileName": "n8n-logo.png", - "fileSize": "2.67 kB" - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AWS S6": [ - { - "startTime": 1747344000690, - "executionIndex": 12, - "source": [ - { - "previousNode": "AWS S5" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "Key": "n8n-logo.png", - "LastModified": "2025-05-15T21:19:58.000Z", - "ETag": "\"174dbbfbcabb9dc0c2e82002e5ce289e\"", - "ChecksumAlgorithm": "CRC64NVME", - "ChecksumType": "FULL_OBJECT", - "Size": "2675", - "StorageClass": "STANDARD" - }, - "binary": { - "data": { - "mimeType": "image/png", - "fileType": "image", - "fileExtension": "png", - "data": "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", - "fileName": "n8n-logo.png", - "fileSize": "2.67 kB" - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AWS S1": [ - { - "startTime": 1747344000690, - "executionIndex": 13, - "source": [ - { - "previousNode": "AWS S6" - } - ], - "hints": [], - "executionTime": 756, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "Key": "n8n-logo.png", - "LastModified": "2025-05-15T21:19:58.000Z", - "ETag": "\"174dbbfbcabb9dc0c2e82002e5ce289e\"", - "ChecksumAlgorithm": "CRC64NVME", - "ChecksumType": "FULL_OBJECT", - "Size": "2675", - "StorageClass": "STANDARD" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AWS S7": [ - { - "startTime": 1747344001446, - "executionIndex": 14, - "source": [ - { - "previousNode": "AWS S1" - } - ], - "hints": [], - "executionTime": 720, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AWS S31": [ - { - "startTime": 1747344002166, - "executionIndex": 15, - "source": [ - { - "previousNode": "AWS S7" - } - ], - "hints": [], - "executionTime": 525, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "AWS S31" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:54.450Z", - "stoppedAt": "2025-05-15T21:20:02.691Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/156-snapshot.json b/test-workflows/snapshots/156-snapshot.json deleted file mode 100644 index d78e5e45d1a..00000000000 --- a/test-workflows/snapshots/156-snapshot.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343994614, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AWS SNS": [ - { - "startTime": 1747343994614, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 524, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "MessageId": "b5fb53f6-51c2-58a7-94fd-33560d79f48c" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "AWS SNS" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:54.614Z", - "stoppedAt": "2025-05-15T21:19:55.138Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/16-snapshot.json b/test-workflows/snapshots/16-snapshot.json deleted file mode 100644 index 9c51fab1b8e..00000000000 --- a/test-workflows/snapshots/16-snapshot.json +++ /dev/null @@ -1,132 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343994612, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "OpenWeatherMap": [ - { - "startTime": 1747343994612, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 145, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "coord": { - "object": true - }, - "weather": [ - "json array" - ], - "base": "stations", - "main": { - "object": true - }, - "visibility": 10000, - "wind": { - "object": true - }, - "clouds": { - "object": true - }, - "dt": 1747343894, - "sys": { - "object": true - }, - "timezone": 7200, - "id": 2950159, - "name": "Berlin", - "cod": 200 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "OpenWeatherMap1": [ - { - "startTime": 1747343994757, - "executionIndex": 2, - "source": [ - { - "previousNode": "OpenWeatherMap" - } - ], - "hints": [], - "executionTime": 143, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "cod": "200", - "message": 0, - "cnt": 40, - "list": [ - "json array" - ], - "city": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "OpenWeatherMap1" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:54.612Z", - "stoppedAt": "2025-05-15T21:19:54.900Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/161-snapshot.json b/test-workflows/snapshots/161-snapshot.json deleted file mode 100644 index ea8f6bd4159..00000000000 --- a/test-workflows/snapshots/161-snapshot.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343994612, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Vonage": [ - { - "startTime": 1747343994612, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 101, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": "9", - "error-text": "Quota Exceeded - rejected", - "to": "010", - "messagePrice": "0.05000000" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Vonage" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:54.612Z", - "stoppedAt": "2025-05-15T21:19:54.713Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/162-snapshot.json b/test-workflows/snapshots/162-snapshot.json deleted file mode 100644 index 5a6e575ecb9..00000000000 --- a/test-workflows/snapshots/162-snapshot.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343994616, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AWS SQS1": [ - { - "startTime": 1747343994616, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 477, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "MessageId": "d7d01c99-6045-4687-aa22-3696b28a71dc", - "MD5OfMessageBody": "b5c549a1b61608ae9c9e5aa4ca926eaf", - "MD5OfMessageAttributes": "563c033205d4d7ddc71dceef55cae220", - "SequenceNumber": "184914760783929180160" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AWS SQS": [ - { - "startTime": 1747343995093, - "executionIndex": 2, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 458, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "MessageId": "002ae7dd-846a-4ca2-a0d6-bd95aa9ca6b0", - "MD5OfMessageBody": "a6b50b8dda796ce940cd81ac4078f1e0", - "MD5OfMessageAttributes": "563c033205d4d7ddc71dceef55cae220" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "AWS SQS" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:54.616Z", - "stoppedAt": "2025-05-15T21:19:55.551Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/163-snapshot.json b/test-workflows/snapshots/163-snapshot.json deleted file mode 100644 index 6b0c27ad184..00000000000 --- a/test-workflows/snapshots/163-snapshot.json +++ /dev/null @@ -1,302 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1678116858540, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Slides": [ - { - "startTime": 1678116858541, - "executionTime": 1809, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "presentationId": "1-6V0k7PVcPC90kFahRHD7_TjLP6W9-3Muf-PjlNVTN0", - "pageSize": { - "object": true - }, - "slides": [ - "json array" - ], - "title": "SlidesMon, 06 Mar 2023 15:34:18 GMT", - "masters": [ - "json array" - ], - "layouts": [ - "json array" - ], - "locale": "en", - "revisionId": "M-s2cBLdEa4K1A", - "notesMaster": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Slides3": [ - { - "startTime": 1678116860351, - "executionTime": 1496, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "presentationId": "1y7glcx_2V4LQoSWXTkBbn-kWRLBEAsn7I27B6RQ3cdo", - "replies": [ - "json array" - ], - "writeControl": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Slides1": [ - { - "startTime": 1678116861848, - "executionTime": 703, - "source": [ - { - "previousNode": "Google Slides" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "presentationId": "1-6V0k7PVcPC90kFahRHD7_TjLP6W9-3Muf-PjlNVTN0", - "pageSize": { - "object": true - }, - "slides": [ - "json array" - ], - "title": "SlidesMon, 06 Mar 2023 15:34:18 GMT", - "masters": [ - "json array" - ], - "layouts": [ - "json array" - ], - "locale": "en", - "revisionId": "M-s2cBLdEa4K1A", - "notesMaster": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Slides4": [ - { - "startTime": 1678116862552, - "executionTime": 1078, - "source": [ - { - "previousNode": "Google Slides" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "width": 1600, - "height": 900, - "contentUrl": "https://lh3.googleusercontent.com/NS47n8mpkUBEGGOaqfTxrbk40A0gu3ISENHFprG6BcQDWjmrMF5-LwFVYJ9dxyTGYpJ-a1OwLvWPCabzaHTeMKFQs_ZxdgY_UmJG4vZcyaXAIIM8yDzqSuNBWwiO1Jzco0TbPQj_UXmQlU5_7f5_pO4ZVO96NpI-HVariL4E3OV8rXS7qf5BEs39975C6Rt1GuRprL-CCE5zr-lO_DXhP5imOBv07CMGwjMVKMTGq7xbxRN41rTRLDg=s1600" - }, - "pairedItem": { - "item": 0 - }, - "binary": { - "data": { - "mimeType": "image/png", - "fileType": "image", - "fileExtension": "png", - "data": "iVBORw0KGgoAAAANSUhEUgAABkAAAAOECAIAAAB2L2r1AAAAA3NCSVQICAjb4U/gAAAYxElEQVR4nOzYMQEAIAzAMMC/5+GAlx6Jgt7dM7MAAAAAoOr8DgAAAACAFwMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAIA0AwsAAACANAMLAAAAgDQDCwAAAOC2Y8cCAAAAAIP8raexozBiTWABAAAAsCawAAAAAFgTWAAAAACsCSwAAAAA1gQWAAAAAGsCCwAAAIA1gQUAAADAmsACAAAAYE1gAQAAALAmsAAAAABYE1gAAAAArAksAAAAANYEFgAAAABrAgsAAACANYEFAAAAwJrAAgAAAGBNYAEAAACwJrAAAAAAWBNYAAAAAKwJLAAAAADWBBYAAAAAawILAAAAgDWBBQAAAMCawAIAAABgTWABAAAAsCawAAAAAFgTWAAAAACsCSwAAAAA1gQWAAAAAGsCCwAAAIA1gQUAAADAmsACAAAAYE1gAQAAALAmsAAAAABYE1gAAAAArAksAAAAANYEFgAAAABrAgsAAACAtQBWkwoFDcwppQAAAABJRU5ErkJggg==", - "fileName": "p.png", - "fileSize": "6.41 kB" - } - } - } - ] - ] - } - } - ], - "Google Slides6": [ - { - "startTime": 1678116863630, - "executionTime": 370, - "source": [ - { - "previousNode": "Google Slides3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "presentationId": "1y7glcx_2V4LQoSWXTkBbn-kWRLBEAsn7I27B6RQ3cdo", - "replies": [ - "json array" - ], - "writeControl": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Slides2": [ - { - "startTime": 1678116864000, - "executionTime": 316, - "source": [ - { - "previousNode": "Google Slides1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "objectId": "p", - "pageElements": [ - "json array" - ], - "slideProperties": { - "object": true - }, - "pageProperties": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Slides5": [ - { - "startTime": 1678116864316, - "executionTime": 345, - "source": [ - { - "previousNode": "Google Slides4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "objectId": "p", - "pageElements": [ - "json array" - ], - "slideProperties": { - "object": true - }, - "revisionId": "M-s2cBLdEa4K1A", - "pageProperties": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Google Slides5" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-03-06T15:34:18.538Z", - "stoppedAt": "2023-03-06T15:34:24.661Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/164-snapshot.json b/test-workflows/snapshots/164-snapshot.json deleted file mode 100644 index 8f82b91778b..00000000000 --- a/test-workflows/snapshots/164-snapshot.json +++ /dev/null @@ -1,1007 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1676891416118, - "executionTime": 1, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set": [ - { - "startTime": 1676891416119, - "executionTime": 22, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "SpaceTag1676891416141" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ClickUp1": [ - { - "startTime": 1676891416142, - "executionTime": 735, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "901000766205", - "name": "TestList1676891416143", - "deleted": false, - "orderindex": 0, - "content": "", - "priority": { - "object": true - }, - "assignee": { - "object": true - }, - "due_date": { - "object": true - }, - "start_date": { - "object": true - }, - "folder": { - "object": true - }, - "space": { - "object": true - }, - "inbound_address": "a.t.901000766205.u-8779387.564f037f-66ec-4d77-a344-4feb14a9593b@tasks.clickup.com", - "archived": false, - "override_statuses": false, - "statuses": [ - "json array" - ], - "permission_level": "create" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ClickUp": [ - { - "startTime": 1676891416877, - "executionTime": 345, - "source": [ - { - "previousNode": "Set" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.8 second": [ - { - "startTime": 1676891417222, - "executionTime": 826, - "source": [ - { - "previousNode": "ClickUp1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "901000766205", - "name": "TestList1676891416143", - "deleted": false, - "orderindex": 0, - "content": "", - "priority": { - "object": true - }, - "assignee": { - "object": true - }, - "due_date": { - "object": true - }, - "start_date": { - "object": true - }, - "folder": { - "object": true - }, - "space": { - "object": true - }, - "inbound_address": "a.t.901000766205.u-8779387.564f037f-66ec-4d77-a344-4feb14a9593b@tasks.clickup.com", - "archived": false, - "override_statuses": false, - "statuses": [ - "json array" - ], - "permission_level": "create" - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Sleep 0.8 second1": [ - { - "startTime": 1676891418048, - "executionTime": 804, - "source": [ - { - "previousNode": "ClickUp" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "ClickUp7": [ - { - "startTime": 1676891418852, - "executionTime": 477, - "source": [ - { - "previousNode": "Sleep 0.8 second" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "901000766208", - "name": "TestList1676891418852", - "deleted": false, - "orderindex": 0, - "content": "", - "priority": { - "object": true - }, - "assignee": { - "object": true - }, - "due_date": { - "object": true - }, - "start_date": { - "object": true - }, - "folder": { - "object": true - }, - "space": { - "object": true - }, - "inbound_address": "a.t.901000766208.u-8779387.59e26336-ac3f-4f57-92f8-d4bfb70eec27@tasks.clickup.com", - "archived": false, - "override_statuses": false, - "statuses": [ - "json array" - ], - "permission_level": "create" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ClickUp2": [ - { - "startTime": 1676891419329, - "executionTime": 411, - "source": [ - { - "previousNode": "Sleep 0.8 second1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "spacetag1626268329609", - "tag_fg": "#fff", - "tag_bg": "#FF6D5A", - "creator": 8779387 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.8 second5": [ - { - "startTime": 1676891419740, - "executionTime": 804, - "source": [ - { - "previousNode": "ClickUp7" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "901000766208", - "name": "TestList1676891418852", - "deleted": false, - "orderindex": 0, - "content": "", - "priority": { - "object": true - }, - "assignee": { - "object": true - }, - "due_date": { - "object": true - }, - "start_date": { - "object": true - }, - "folder": { - "object": true - }, - "space": { - "object": true - }, - "inbound_address": "a.t.901000766208.u-8779387.59e26336-ac3f-4f57-92f8-d4bfb70eec27@tasks.clickup.com", - "archived": false, - "override_statuses": false, - "statuses": [ - "json array" - ], - "permission_level": "create" - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Set1": [ - { - "startTime": 1676891420544, - "executionTime": 1, - "source": [ - { - "previousNode": "ClickUp2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "spacetag1626268329609", - "tag_fg": "#fff", - "tag_bg": "#FF6D5A", - "creator": 8779387, - "updatedname": "UpdatedSpaceTag1676891420545" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ClickUp5": [ - { - "startTime": 1676891420545, - "executionTime": 780, - "source": [ - { - "previousNode": "Sleep 0.8 second5" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "8677f32j9", - "custom_id": { - "object": true - }, - "name": "testTask1676891420545", - "text_content": "", - "description": "", - "status": { - "object": true - }, - "orderindex": "2978.00000000000000000000000000000000", - "date_created": "1676891420964", - "date_updated": "1676891420964", - "date_closed": { - "object": true - }, - "date_done": { - "object": true - }, - "archived": false, - "creator": { - "object": true - }, - "assignees": [ - "json array" - ], - "watchers": [ - "json array" - ], - "checklists": [ - "json array" - ], - "tags": [ - "json array" - ], - "parent": { - "object": true - }, - "priority": { - "object": true - }, - "due_date": { - "object": true - }, - "start_date": { - "object": true - }, - "points": { - "object": true - }, - "time_estimate": { - "object": true - }, - "time_spent": 0, - "custom_fields": [ - "json array" - ], - "dependencies": [ - "json array" - ], - "linked_tasks": [ - "json array" - ], - "team_id": "4651110", - "url": "https://app.clickup.com/t/8677f32j9", - "permission_level": "create", - "list": { - "object": true - }, - "project": { - "object": true - }, - "folder": { - "object": true - }, - "space": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.8 second2": [ - { - "startTime": 1676891421325, - "executionTime": 804, - "source": [ - { - "previousNode": "Set1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "spacetag1626268329609", - "tag_fg": "#fff", - "tag_bg": "#FF6D5A", - "creator": 8779387, - "updatedname": "UpdatedSpaceTag1676891420545" - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Sleep 0.8 second4": [ - { - "startTime": 1676891422130, - "executionTime": 804, - "source": [ - { - "previousNode": "ClickUp5" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "8677f32j9", - "custom_id": { - "object": true - }, - "name": "testTask1676891420545", - "text_content": "", - "description": "", - "status": { - "object": true - }, - "orderindex": "2978.00000000000000000000000000000000", - "date_created": "1676891420964", - "date_updated": "1676891420964", - "date_closed": { - "object": true - }, - "date_done": { - "object": true - }, - "archived": false, - "creator": { - "object": true - }, - "assignees": [ - "json array" - ], - "watchers": [ - "json array" - ], - "checklists": [ - "json array" - ], - "tags": [ - "json array" - ], - "parent": { - "object": true - }, - "priority": { - "object": true - }, - "due_date": { - "object": true - }, - "start_date": { - "object": true - }, - "points": { - "object": true - }, - "time_estimate": { - "object": true - }, - "time_spent": 0, - "custom_fields": [ - "json array" - ], - "dependencies": [ - "json array" - ], - "linked_tasks": [ - "json array" - ], - "team_id": "4651110", - "url": "https://app.clickup.com/t/8677f32j9", - "permission_level": "create", - "list": { - "object": true - }, - "project": { - "object": true - }, - "folder": { - "object": true - }, - "space": { - "object": true - } - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "ClickUp3": [ - { - "startTime": 1676891422935, - "executionTime": 563, - "source": [ - { - "previousNode": "Sleep 0.8 second2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set2": [ - { - "startTime": 1676891423498, - "executionTime": 1, - "source": [ - { - "previousNode": "Sleep 0.8 second4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "TaskTag1676891423498" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.8 second3": [ - { - "startTime": 1676891423499, - "executionTime": 814, - "source": [ - { - "previousNode": "ClickUp3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "ClickUp8": [ - { - "startTime": 1676891424316, - "executionTime": 420, - "source": [ - { - "previousNode": "Set2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ClickUp4": [ - { - "startTime": 1676891424736, - "executionTime": 407, - "source": [ - { - "previousNode": "Sleep 0.8 second3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.8 second6": [ - { - "startTime": 1676891425143, - "executionTime": 803, - "source": [ - { - "previousNode": "ClickUp8" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "ClickUp9": [ - { - "startTime": 1676891425946, - "executionTime": 374, - "source": [ - { - "previousNode": "Sleep 0.8 second6" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.8 second7": [ - { - "startTime": 1676891426321, - "executionTime": 804, - "source": [ - { - "previousNode": "ClickUp9" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "ClickUp6": [ - { - "startTime": 1676891427125, - "executionTime": 476, - "source": [ - { - "previousNode": "Sleep 0.8 second7" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.8 second8": [ - { - "startTime": 1676891427601, - "executionTime": 809, - "source": [ - { - "previousNode": "ClickUp6" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "ClickUp10": [ - { - "startTime": 1676891428410, - "executionTime": 391, - "source": [ - { - "previousNode": "Sleep 0.8 second8" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ClickUp11": [ - { - "startTime": 1676891428802, - "executionTime": 427, - "source": [ - { - "previousNode": "ClickUp10" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ClickUp12": [ - { - "startTime": 1676891429230, - "executionTime": 430, - "source": [ - { - "previousNode": "ClickUp11" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ClickUp13": [ - { - "startTime": 1676891429661, - "executionTime": 1616, - "source": [ - { - "previousNode": "ClickUp12" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "ClickUp13" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-02-20T11:10:16.115Z", - "stoppedAt": "2023-02-20T11:10:31.277Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/166-snapshot.json b/test-workflows/snapshots/166-snapshot.json deleted file mode 100644 index 8ab9de02358..00000000000 --- a/test-workflows/snapshots/166-snapshot.json +++ /dev/null @@ -1,1263 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343994642, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Intercom5": [ - { - "startTime": 1747343994642, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 561, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "type": "contact", - "id": "68265a7bb7d1a40b6f941f79", - "user_id": "857da08e-5ee1-4418-ab8b-798a404c72c0", - "anonymous": true, - "email": "fake1747343994644@email.com", - "phone": { - "object": true - }, - "name": { - "object": true - }, - "pseudonym": "Cyan Locomotive", - "avatar": { - "object": true - }, - "app_id": "t5y9d4d1", - "companies": { - "object": true - }, - "location_data": { - "object": true - }, - "last_request_at": { - "object": true - }, - "created_at": 1747343995, - "remote_created_at": { - "object": true - }, - "signed_up_at": { - "object": true - }, - "updated_at": 1747343995, - "session_count": 0, - "social_profiles": { - "object": true - }, - "owner_id": { - "object": true - }, - "unsubscribed_from_emails": false, - "marked_email_as_spam": false, - "has_hard_bounced": false, - "tags": { - "object": true - }, - "segments": { - "object": true - }, - "custom_attributes": { - "object": true - }, - "referrer": { - "object": true - }, - "utm_campaign": { - "object": true - }, - "utm_content": { - "object": true - }, - "utm_medium": { - "object": true - }, - "utm_source": { - "object": true - }, - "utm_term": { - "object": true - }, - "do_not_track": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Intercom10": [ - { - "startTime": 1747343995203, - "executionIndex": 2, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 573, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "type": "user", - "id": "68265a7ba8bb3b69f82db784", - "user_id": "User1747343995205", - "anonymous": false, - "email": "", - "phone": { - "object": true - }, - "name": { - "object": true - }, - "pseudonym": { - "object": true - }, - "avatar": { - "object": true - }, - "app_id": "t5y9d4d1", - "companies": { - "object": true - }, - "location_data": { - "object": true - }, - "last_request_at": { - "object": true - }, - "created_at": 1747343995, - "remote_created_at": { - "object": true - }, - "signed_up_at": { - "object": true - }, - "updated_at": 1747343995, - "session_count": 0, - "social_profiles": { - "object": true - }, - "owner_id": { - "object": true - }, - "unsubscribed_from_emails": false, - "marked_email_as_spam": false, - "has_hard_bounced": false, - "tags": { - "object": true - }, - "segments": { - "object": true - }, - "custom_attributes": { - "object": true - }, - "referrer": { - "object": true - }, - "utm_campaign": { - "object": true - }, - "utm_content": { - "object": true - }, - "utm_medium": { - "object": true - }, - "utm_source": { - "object": true - }, - "utm_term": { - "object": true - }, - "do_not_track": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Intercom1": [ - { - "startTime": 1747343995776, - "executionIndex": 3, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 461, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "type": "company", - "company_id": "Company1747343995777", - "id": "68265a7cf5fc73b90d4859cd", - "app_id": "t5y9d4d1", - "name": "TestingCompany2025-05-15T21:19:55.778Z", - "created_at": 1747343996, - "updated_at": 1747343996, - "monthly_spend": 0, - "session_count": 0, - "user_count": 0, - "tags": { - "object": true - }, - "segments": { - "object": true - }, - "plan": { - "object": true - }, - "custom_attributes": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Intercom6": [ - { - "startTime": 1747343996237, - "executionIndex": 4, - "source": [ - { - "previousNode": "Intercom5" - } - ], - "hints": [], - "executionTime": 691, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "type": "contact", - "id": "68265a7bb7d1a40b6f941f79", - "user_id": "857da08e-5ee1-4418-ab8b-798a404c72c0", - "anonymous": true, - "email": "fake1747343994644@email.com", - "phone": { - "object": true - }, - "name": { - "object": true - }, - "pseudonym": "Cyan Locomotive", - "avatar": { - "object": true - }, - "app_id": "t5y9d4d1", - "companies": { - "object": true - }, - "location_data": { - "object": true - }, - "last_request_at": { - "object": true - }, - "created_at": 1747343995, - "remote_created_at": { - "object": true - }, - "signed_up_at": { - "object": true - }, - "updated_at": 1747343995, - "session_count": 0, - "social_profiles": { - "object": true - }, - "owner_id": { - "object": true - }, - "unsubscribed_from_emails": false, - "marked_email_as_spam": false, - "has_hard_bounced": false, - "tags": { - "object": true - }, - "segments": { - "object": true - }, - "custom_attributes": { - "object": true - }, - "referrer": { - "object": true - }, - "utm_campaign": { - "object": true - }, - "utm_content": { - "object": true - }, - "utm_medium": { - "object": true - }, - "utm_source": { - "object": true - }, - "utm_term": { - "object": true - }, - "do_not_track": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Intercom11": [ - { - "startTime": 1747343996928, - "executionIndex": 5, - "source": [ - { - "previousNode": "Intercom10" - } - ], - "hints": [], - "executionTime": 408, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "type": "user", - "id": "68265a7ba8bb3b69f82db784", - "user_id": "User1747343995205", - "anonymous": false, - "email": "", - "phone": { - "object": true - }, - "name": { - "object": true - }, - "pseudonym": { - "object": true - }, - "avatar": { - "object": true - }, - "app_id": "t5y9d4d1", - "companies": { - "object": true - }, - "location_data": { - "object": true - }, - "last_request_at": { - "object": true - }, - "created_at": 1747343995, - "remote_created_at": { - "object": true - }, - "signed_up_at": { - "object": true - }, - "updated_at": 1747343995, - "session_count": 0, - "social_profiles": { - "object": true - }, - "owner_id": { - "object": true - }, - "unsubscribed_from_emails": false, - "marked_email_as_spam": false, - "has_hard_bounced": false, - "tags": { - "object": true - }, - "segments": { - "object": true - }, - "custom_attributes": { - "object": true - }, - "referrer": { - "object": true - }, - "utm_campaign": { - "object": true - }, - "utm_content": { - "object": true - }, - "utm_medium": { - "object": true - }, - "utm_source": { - "object": true - }, - "utm_term": { - "object": true - }, - "do_not_track": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Intercom": [ - { - "startTime": 1747343997336, - "executionIndex": 6, - "source": [ - { - "previousNode": "Intercom1" - } - ], - "hints": [], - "executionTime": 414, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "type": "company", - "company_id": "Company1747343995777", - "id": "68265a7cf5fc73b90d4859cd", - "app_id": "t5y9d4d1", - "name": "TestingCompany2025-05-15T21:19:55.778Z", - "created_at": 1747343996, - "updated_at": 1747343996, - "monthly_spend": 0, - "session_count": 0, - "user_count": 0, - "tags": { - "object": true - }, - "segments": { - "object": true - }, - "plan": { - "object": true - }, - "custom_attributes": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Intercom7": [ - { - "startTime": 1747343997750, - "executionIndex": 7, - "source": [ - { - "previousNode": "Intercom6" - } - ], - "hints": [], - "executionTime": 494, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "type": "contact", - "id": "682640e516500e28bbeaed11", - "user_id": "3691afca-c0a7-46c7-9cbf-4f5ac3e1da9a", - "anonymous": true, - "email": "fake1747337445292@email.com", - "phone": { - "object": true - }, - "name": { - "object": true - }, - "pseudonym": "Turquoise Cactus", - "avatar": { - "object": true - }, - "app_id": "t5y9d4d1", - "companies": { - "object": true - }, - "location_data": { - "object": true - }, - "last_request_at": { - "object": true - }, - "created_at": 1747337445, - "remote_created_at": { - "object": true - }, - "signed_up_at": { - "object": true - }, - "updated_at": 1747337445, - "session_count": 0, - "social_profiles": { - "object": true - }, - "owner_id": { - "object": true - }, - "unsubscribed_from_emails": false, - "marked_email_as_spam": false, - "has_hard_bounced": false, - "tags": { - "object": true - }, - "segments": { - "object": true - }, - "custom_attributes": { - "object": true - }, - "referrer": { - "object": true - }, - "utm_campaign": { - "object": true - }, - "utm_content": { - "object": true - }, - "utm_medium": { - "object": true - }, - "utm_source": { - "object": true - }, - "utm_term": { - "object": true - }, - "do_not_track": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Intercom12": [ - { - "startTime": 1747343998244, - "executionIndex": 8, - "source": [ - { - "previousNode": "Intercom11" - } - ], - "hints": [], - "executionTime": 447, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "type": "user", - "id": "682640e6d3d8a6ae674aea64", - "user_id": "User1747337445888", - "anonymous": false, - "email": { - "object": true - }, - "phone": { - "object": true - }, - "name": { - "object": true - }, - "pseudonym": { - "object": true - }, - "avatar": { - "object": true - }, - "app_id": "t5y9d4d1", - "companies": { - "object": true - }, - "location_data": { - "object": true - }, - "last_request_at": { - "object": true - }, - "created_at": 1747337446, - "remote_created_at": { - "object": true - }, - "signed_up_at": { - "object": true - }, - "updated_at": 1747337446, - "session_count": 0, - "social_profiles": { - "object": true - }, - "owner_id": { - "object": true - }, - "unsubscribed_from_emails": false, - "marked_email_as_spam": false, - "has_hard_bounced": false, - "tags": { - "object": true - }, - "segments": { - "object": true - }, - "custom_attributes": { - "object": true - }, - "referrer": { - "object": true - }, - "utm_campaign": { - "object": true - }, - "utm_content": { - "object": true - }, - "utm_medium": { - "object": true - }, - "utm_source": { - "object": true - }, - "utm_term": { - "object": true - }, - "do_not_track": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Intercom2": [ - { - "startTime": 1747343998691, - "executionIndex": 9, - "source": [ - { - "previousNode": "Intercom" - } - ], - "hints": [], - "executionTime": 492, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "type": "company", - "company_id": "607ea26e5e1f73dc32c434bd-qualification-company", - "id": "607ea26e5e1f73dc32c434bc", - "app_id": "t5y9d4d1", - "name": "Acme", - "created_at": 1618911854, - "updated_at": 1618911854, - "monthly_spend": 0, - "session_count": 0, - "user_count": 1, - "tags": { - "object": true - }, - "segments": { - "object": true - }, - "plan": { - "object": true - }, - "custom_attributes": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Intercom8": [ - { - "startTime": 1747343999183, - "executionIndex": 10, - "source": [ - { - "previousNode": "Intercom7" - } - ], - "hints": [], - "executionTime": 478, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "type": "contact", - "id": "68265a7bb7d1a40b6f941f79", - "user_id": "857da08e-5ee1-4418-ab8b-798a404c72c0", - "anonymous": true, - "email": "fake1747343994644@email.com", - "phone": { - "object": true - }, - "name": "UpdatedLead", - "pseudonym": "Cyan Locomotive", - "avatar": { - "object": true - }, - "app_id": "t5y9d4d1", - "companies": { - "object": true - }, - "location_data": { - "object": true - }, - "last_request_at": { - "object": true - }, - "created_at": 1747343995, - "remote_created_at": { - "object": true - }, - "signed_up_at": { - "object": true - }, - "updated_at": 1747343999, - "session_count": 0, - "social_profiles": { - "object": true - }, - "owner_id": { - "object": true - }, - "unsubscribed_from_emails": false, - "marked_email_as_spam": false, - "has_hard_bounced": false, - "tags": { - "object": true - }, - "segments": { - "object": true - }, - "custom_attributes": { - "object": true - }, - "referrer": { - "object": true - }, - "utm_campaign": { - "object": true - }, - "utm_content": { - "object": true - }, - "utm_medium": { - "object": true - }, - "utm_source": { - "object": true - }, - "utm_term": { - "object": true - }, - "do_not_track": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Intercom13": [ - { - "startTime": 1747343999661, - "executionIndex": 11, - "source": [ - { - "previousNode": "Intercom12" - } - ], - "hints": [], - "executionTime": 438, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "type": "user", - "id": "68265a7ba8bb3b69f82db784", - "user_id": "User1747343995205", - "anonymous": false, - "email": "", - "phone": { - "object": true - }, - "name": "UpdatedUser", - "pseudonym": { - "object": true - }, - "avatar": { - "object": true - }, - "app_id": "t5y9d4d1", - "companies": { - "object": true - }, - "location_data": { - "object": true - }, - "last_request_at": { - "object": true - }, - "created_at": 1747343995, - "remote_created_at": { - "object": true - }, - "signed_up_at": { - "object": true - }, - "updated_at": 1747344000, - "session_count": 0, - "social_profiles": { - "object": true - }, - "owner_id": { - "object": true - }, - "unsubscribed_from_emails": false, - "marked_email_as_spam": false, - "has_hard_bounced": false, - "tags": { - "object": true - }, - "segments": { - "object": true - }, - "custom_attributes": { - "object": true - }, - "referrer": { - "object": true - }, - "utm_campaign": { - "object": true - }, - "utm_content": { - "object": true - }, - "utm_medium": { - "object": true - }, - "utm_source": { - "object": true - }, - "utm_term": { - "object": true - }, - "do_not_track": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Intercom3": [ - { - "startTime": 1747344000099, - "executionIndex": 12, - "source": [ - { - "previousNode": "Intercom2" - } - ], - "hints": [], - "executionTime": 398, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "type": "company", - "company_id": "Company1747343995777", - "id": "68265a7cf5fc73b90d4859cd", - "app_id": "t5y9d4d1", - "name": "UpdatedTestingCompany2025-05-15T21:19:55.778Z", - "created_at": 1747343996, - "updated_at": 1747344000, - "monthly_spend": 0, - "session_count": 0, - "user_count": 0, - "tags": { - "object": true - }, - "segments": { - "object": true - }, - "plan": { - "object": true - }, - "custom_attributes": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Intercom9": [ - { - "startTime": 1747344000497, - "executionIndex": 13, - "source": [ - { - "previousNode": "Intercom8" - } - ], - "hints": [], - "executionTime": 449, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "type": "contact", - "id": "68265a7bb7d1a40b6f941f79", - "user_id": "857da08e-5ee1-4418-ab8b-798a404c72c0", - "anonymous": true, - "email": "fake1747343994644@email.com", - "phone": { - "object": true - }, - "name": "UpdatedLead", - "pseudonym": "Cyan Locomotive", - "avatar": { - "object": true - }, - "app_id": "t5y9d4d1", - "companies": { - "object": true - }, - "location_data": { - "object": true - }, - "last_request_at": { - "object": true - }, - "created_at": 1747343995, - "remote_created_at": { - "object": true - }, - "signed_up_at": { - "object": true - }, - "updated_at": 1747344000, - "session_count": 0, - "social_profiles": { - "object": true - }, - "owner_id": { - "object": true - }, - "unsubscribed_from_emails": false, - "marked_email_as_spam": false, - "has_hard_bounced": false, - "tags": { - "object": true - }, - "segments": { - "object": true - }, - "custom_attributes": { - "object": true - }, - "referrer": { - "object": true - }, - "utm_campaign": { - "object": true - }, - "utm_content": { - "object": true - }, - "utm_medium": { - "object": true - }, - "utm_source": { - "object": true - }, - "utm_term": { - "object": true - }, - "do_not_track": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Intercom14": [ - { - "startTime": 1747344000946, - "executionIndex": 14, - "source": [ - { - "previousNode": "Intercom13" - } - ], - "hints": [], - "executionTime": 463, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "type": "user", - "id": "68265a7ba8bb3b69f82db784", - "user_id": "User1747343995205", - "anonymous": false, - "email": "", - "phone": { - "object": true - }, - "name": "UpdatedUser", - "pseudonym": { - "object": true - }, - "avatar": { - "object": true - }, - "app_id": "t5y9d4d1", - "companies": { - "object": true - }, - "location_data": { - "object": true - }, - "last_request_at": { - "object": true - }, - "created_at": 1747343995, - "remote_created_at": { - "object": true - }, - "signed_up_at": { - "object": true - }, - "updated_at": 1747344001, - "session_count": 0, - "social_profiles": { - "object": true - }, - "owner_id": { - "object": true - }, - "unsubscribed_from_emails": false, - "marked_email_as_spam": false, - "has_hard_bounced": false, - "tags": { - "object": true - }, - "segments": { - "object": true - }, - "custom_attributes": { - "object": true - }, - "referrer": { - "object": true - }, - "utm_campaign": { - "object": true - }, - "utm_content": { - "object": true - }, - "utm_medium": { - "object": true - }, - "utm_source": { - "object": true - }, - "utm_term": { - "object": true - }, - "do_not_track": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Intercom4": [ - { - "startTime": 1747344001409, - "executionIndex": 15, - "source": [ - { - "previousNode": "Intercom3" - } - ], - "hints": [], - "executionTime": 402, - "executionStatus": "success", - "data": { - "main": [ - [] - ] - } - } - ] - }, - "lastNodeExecuted": "Intercom4" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:54.641Z", - "stoppedAt": "2025-05-15T21:20:01.811Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/169-snapshot.json b/test-workflows/snapshots/169-snapshot.json deleted file mode 100644 index 3c1363a6663..00000000000 --- a/test-workflows/snapshots/169-snapshot.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1676891417098, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mocean": [ - { - "startTime": 1676891417099, - "executionTime": 1042, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": 0, - "receiver": "21624827732", - "msgid": "Nodeqa0220191018996444.0004", - "type": "sms" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mocean1": [ - { - "startTime": 1676891418141, - "executionTime": 0, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Mocean1" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-02-20T11:10:17.097Z", - "stoppedAt": "2023-02-20T11:10:18.141Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/17-snapshot.json b/test-workflows/snapshots/17-snapshot.json deleted file mode 100644 index 1b00090fc69..00000000000 --- a/test-workflows/snapshots/17-snapshot.json +++ /dev/null @@ -1,120 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343994645, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "OpenThesaurus": [ - { - "startTime": 1747343994645, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 185, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 3913, - "categories": [ - "json array" - ], - "terms": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": 11705, - "categories": [ - "json array" - ], - "terms": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": 8559, - "categories": [ - "json array" - ], - "terms": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": 15485, - "categories": [ - "json array" - ], - "terms": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "OpenThesaurus" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:54.645Z", - "stoppedAt": "2025-05-15T21:19:54.830Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/172-snapshot.json b/test-workflows/snapshots/172-snapshot.json deleted file mode 100644 index 4dd486832f7..00000000000 --- a/test-workflows/snapshots/172-snapshot.json +++ /dev/null @@ -1,187 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343994721, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "PayPal": [ - { - "startTime": 1747343994721, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 636, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "batch_header": { - "object": true - }, - "links": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "PayPal1": [ - { - "startTime": 1747343995357, - "executionIndex": 2, - "source": [ - { - "previousNode": "PayPal" - } - ], - "hints": [], - "executionTime": 534, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "payout_item_id": "HHW94VDFSQWZQ", - "transaction_status": "PENDING", - "payout_batch_id": "WNCGA2S4EGV54", - "payout_item": { - "object": true - }, - "links": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "PayPal2": [ - { - "startTime": 1747343995891, - "executionIndex": 3, - "source": [ - { - "previousNode": "PayPal1" - } - ], - "hints": [], - "executionTime": 1068, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "payout_item_id": "HHW94VDFSQWZQ", - "transaction_status": "PENDING", - "payout_batch_id": "WNCGA2S4EGV54", - "sender_batch_id": "1747343994721", - "payout_item": { - "object": true - }, - "links": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "PayPal3": [ - { - "startTime": 1747343996959, - "executionIndex": 4, - "source": [ - { - "previousNode": "PayPal2" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "payout_item_id": "HHW94VDFSQWZQ", - "transaction_status": "PENDING", - "payout_batch_id": "WNCGA2S4EGV54", - "sender_batch_id": "1747343994721", - "payout_item": { - "object": true - }, - "links": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "PayPal3" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:54.721Z", - "stoppedAt": "2025-05-15T21:19:56.959Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/174-snapshot.json b/test-workflows/snapshots/174-snapshot.json deleted file mode 100644 index aabe8542b64..00000000000 --- a/test-workflows/snapshots/174-snapshot.json +++ /dev/null @@ -1,305 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343994838, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set id & email": [ - { - "startTime": 1747343994838, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 6, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 989, - "email": "fake1747343994844@email.com" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Vero": [ - { - "startTime": 1747343994844, - "executionIndex": 2, - "source": [ - { - "previousNode": "Set id & email" - } - ], - "hints": [], - "executionTime": 423, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": 200, - "message": "Success." - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Vero1": [ - { - "startTime": 1747343995267, - "executionIndex": 3, - "source": [ - { - "previousNode": "Vero" - } - ], - "hints": [], - "executionTime": 506, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": 200, - "message": "Success." - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Vero2": [ - { - "startTime": 1747343995773, - "executionIndex": 4, - "source": [ - { - "previousNode": "Vero1" - } - ], - "hints": [], - "executionTime": 462, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": 200, - "message": "Success." - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Vero3": [ - { - "startTime": 1747343996235, - "executionIndex": 5, - "source": [ - { - "previousNode": "Vero2" - } - ], - "hints": [], - "executionTime": 696, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": 200, - "message": "Success." - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Vero4": [ - { - "startTime": 1747343996931, - "executionIndex": 6, - "source": [ - { - "previousNode": "Vero3" - } - ], - "hints": [], - "executionTime": 531, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": 200, - "message": "Success." - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Vero5": [ - { - "startTime": 1747343997462, - "executionIndex": 7, - "source": [ - { - "previousNode": "Vero4" - } - ], - "hints": [], - "executionTime": 379, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": 200, - "message": "Success." - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Vero7": [ - { - "startTime": 1747343997841, - "executionIndex": 8, - "source": [ - { - "previousNode": "Vero5" - } - ], - "hints": [], - "executionTime": 419, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": 200, - "message": "Success." - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Vero6": [ - { - "startTime": 1747343998260, - "executionIndex": 9, - "source": [ - { - "previousNode": "Vero7" - } - ], - "hints": [], - "executionTime": 439, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": 200, - "message": "Success." - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Vero6" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:54.838Z", - "stoppedAt": "2025-05-15T21:19:58.699Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/177-snapshot.json b/test-workflows/snapshots/177-snapshot.json deleted file mode 100644 index 5347c0c5cb0..00000000000 --- a/test-workflows/snapshots/177-snapshot.json +++ /dev/null @@ -1,1047 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "hints": [], - "startTime": 1726655392049, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "uProc1": [ - { - "hints": [], - "startTime": 1726655392049, - "executionTime": 210, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": true, - "message": { - "object": true - }, - "status": "completed", - "params": { - "object": true - }, - "normalized": false, - "criteria": "10032", - "time": 6, - "price": 0, - "real_price": 0.001, - "processor": "check-creditcard-checksum", - "total_rows": 1, - "balance": 50.4815 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "uProc2": [ - { - "hints": [], - "startTime": 1726655392259, - "executionTime": 135, - "source": [ - { - "previousNode": "uProc1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": true, - "message": { - "object": true - }, - "status": "completed", - "params": { - "object": true - }, - "normalized": false, - "criteria": "10032", - "time": 2, - "price": 0, - "real_price": 0.001, - "processor": "get-creditcard-type", - "total_rows": 1, - "balance": 50.4815 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "uProc3": [ - { - "hints": [], - "startTime": 1726655392394, - "executionTime": 145, - "source": [ - { - "previousNode": "uProc2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": false, - "message": { - "object": true - }, - "status": "completed", - "params": { - "object": true - }, - "normalized": false, - "criteria": "10032", - "time": 2, - "price": 0, - "real_price": 0.0015, - "processor": "check-bank-account-valid-es", - "total_rows": 1, - "balance": 50.4815 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "uProc4": [ - { - "hints": [], - "startTime": 1726655392539, - "executionTime": 172, - "source": [ - { - "previousNode": "uProc3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": true, - "message": { - "object": true - }, - "status": "completed", - "params": { - "object": true - }, - "normalized": false, - "criteria": "10032", - "time": 2, - "price": 0, - "real_price": 0.0015, - "processor": "check-bank-bic-valid", - "total_rows": 1, - "balance": 50.4815 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "uProc5": [ - { - "hints": [], - "startTime": 1726655392711, - "executionTime": 134, - "source": [ - { - "previousNode": "uProc4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": false, - "message": { - "object": true - }, - "status": "completed", - "params": { - "object": true - }, - "normalized": false, - "criteria": "10032", - "time": 2, - "price": 0, - "real_price": 0.003, - "processor": "get-bank-iban-by-account", - "total_rows": 1, - "balance": 50.4815 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "uProc6": [ - { - "hints": [], - "startTime": 1726655392845, - "executionTime": 181, - "source": [ - { - "previousNode": "uProc5" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": false, - "message": { - "object": true - }, - "status": "completed", - "params": { - "object": true - }, - "normalized": false, - "criteria": "10032", - "time": 2, - "price": 0, - "real_price": 0.003, - "processor": "get-bank-iban-lookup", - "total_rows": 1, - "balance": 50.4815 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "uProc7": [ - { - "hints": [], - "startTime": 1726655393026, - "executionTime": 5276, - "source": [ - { - "previousNode": "uProc6" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": false, - "message": { - "object": true - }, - "status": "completed", - "params": { - "object": true - }, - "normalized": false, - "criteria": "10032", - "time": 2, - "price": 0, - "real_price": 0.0015, - "processor": "check-bank-iban-valid", - "total_rows": 1, - "balance": 50.4815 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "uProc8": [ - { - "hints": [], - "startTime": 1726655398302, - "executionTime": 329, - "source": [ - { - "previousNode": "uProc7" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": true, - "message": { - "object": true - }, - "status": "completed", - "params": { - "object": true - }, - "normalized": false, - "criteria": "10040", - "time": 2, - "price": 0, - "real_price": 0.001, - "processor": "get-currency-by-country", - "total_rows": 1, - "balance": 50.4815 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "uProc9": [ - { - "hints": [], - "startTime": 1726655398631, - "executionTime": 753, - "source": [ - { - "previousNode": "uProc8" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": true, - "message": { - "object": true - }, - "status": "completed", - "params": { - "object": true - }, - "normalized": false, - "criteria": "10040", - "time": 2, - "price": 0, - "real_price": 0.001, - "processor": "get-currency-by-country-isocode", - "total_rows": 1, - "balance": 50.4815 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "uProc10": [ - { - "hints": [], - "startTime": 1726655399384, - "executionTime": 187, - "source": [ - { - "previousNode": "uProc9" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": false, - "message": { - "object": true - }, - "status": "completed", - "params": { - "object": true - }, - "normalized": false, - "criteria": "10040", - "time": 2, - "price": 0, - "real_price": 0, - "processor": "get-currency-by-ip", - "total_rows": 1, - "balance": 50.4815 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "uProc11": [ - { - "hints": [], - "startTime": 1726655399571, - "executionTime": 164, - "source": [ - { - "previousNode": "uProc10" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": false, - "message": { - "object": true - }, - "status": "completed", - "params": { - "object": true - }, - "normalized": false, - "criteria": "10040", - "time": 2, - "price": 0, - "real_price": 0, - "processor": "get-currency-by-isocode", - "total_rows": 1, - "balance": 50.4815 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "uProc12": [ - { - "hints": [], - "startTime": 1726655399735, - "executionTime": 197, - "source": [ - { - "previousNode": "uProc11" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": true, - "message": { - "object": true - }, - "status": "completed", - "params": { - "object": true - }, - "normalized": false, - "criteria": "10040", - "time": 8, - "price": 0.002, - "real_price": 0.002, - "processor": "get-currency-converted-between-isocode-date", - "total_rows": 1, - "balance": 50.4795 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "uProc13": [ - { - "hints": [], - "startTime": 1726655399932, - "executionTime": 205, - "source": [ - { - "previousNode": "uProc12" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": false, - "message": { - "object": true - }, - "params": { - "object": true - }, - "processor": "get-currency-list-by-country", - "total_rows": 1, - "balance": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "uProc14": [ - { - "hints": [], - "startTime": 1726655400137, - "executionTime": 5150, - "source": [ - { - "previousNode": "uProc13" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": false, - "message": [ - "json array" - ], - "status": "completed", - "params": { - "object": true - }, - "normalized": false, - "criteria": "10040", - "time": 2, - "price": 0, - "real_price": 0, - "processor": "get-currency-list-by-ip", - "total_rows": 0, - "balance": 50.4815 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "uProc15": [ - { - "hints": [], - "startTime": 1726655405287, - "executionTime": 183, - "source": [ - { - "previousNode": "uProc14" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": false, - "message": [ - "json array" - ], - "status": "completed", - "params": { - "object": true - }, - "normalized": false, - "criteria": "10040", - "time": 2, - "price": 0, - "real_price": 0, - "processor": "get-currency-list-by-isocode", - "total_rows": 0, - "balance": 50.4815 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "uProc16": [ - { - "hints": [], - "startTime": 1726655405470, - "executionTime": 152, - "source": [ - { - "previousNode": "uProc15" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": false, - "message": { - "object": true - }, - "status": "completed", - "params": { - "object": true - }, - "normalized": false, - "criteria": "10040", - "time": 2, - "price": 0, - "real_price": 0.001, - "processor": "check-currency-valid-iso", - "total_rows": 1, - "balance": 50.4815 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "uProc17": [ - { - "hints": [], - "startTime": 1726655405623, - "executionTime": 153, - "source": [ - { - "previousNode": "uProc16" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": true, - "message": { - "object": true - }, - "status": "completed", - "params": { - "object": true - }, - "normalized": false, - "criteria": "10040", - "time": 2, - "price": 0, - "real_price": 0.005, - "processor": "get-vat-by-address", - "total_rows": 1, - "balance": 50.4815 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "uProc18": [ - { - "hints": [], - "startTime": 1726655405776, - "executionTime": 5176, - "source": [ - { - "previousNode": "uProc17" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": true, - "message": { - "object": true - }, - "status": "completed", - "params": { - "object": true - }, - "normalized": false, - "criteria": "10040", - "time": 2, - "price": 0, - "real_price": 0.005, - "processor": "get-vat-by-coordinates", - "total_rows": 1, - "balance": 50.4815 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "uProc19": [ - { - "hints": [], - "startTime": 1726655410952, - "executionTime": 148, - "source": [ - { - "previousNode": "uProc18" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": false, - "message": { - "object": true - }, - "status": "completed", - "params": { - "object": true - }, - "normalized": false, - "criteria": "10040", - "time": 1, - "price": 0, - "real_price": 0, - "processor": "get-vat-by-ip", - "total_rows": 1, - "balance": 50.4815 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "uProc20": [ - { - "hints": [], - "startTime": 1726655411101, - "executionTime": 152, - "source": [ - { - "previousNode": "uProc19" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": true, - "message": { - "object": true - }, - "status": "completed", - "params": { - "object": true - }, - "normalized": false, - "criteria": "10040", - "time": 2, - "price": 0, - "real_price": 0.005, - "processor": "get-vat-by-isocode", - "total_rows": 1, - "balance": 50.4815 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "uProc21": [ - { - "hints": [], - "startTime": 1726655411253, - "executionTime": 148, - "source": [ - { - "previousNode": "uProc20" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": false, - "message": { - "object": true - }, - "status": "completed", - "params": { - "object": true - }, - "normalized": false, - "criteria": "10063", - "time": 2, - "price": 0, - "real_price": 0.005, - "processor": "get-vat-by-number", - "total_rows": 1, - "balance": 50.4815 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "uProc22": [ - { - "hints": [], - "startTime": 1726655411401, - "executionTime": 158, - "source": [ - { - "previousNode": "uProc21" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": true, - "message": { - "object": true - }, - "status": "completed", - "params": { - "object": true - }, - "normalized": false, - "criteria": "10040", - "time": 2, - "price": 0, - "real_price": 0.005, - "processor": "get-vat-by-phone", - "total_rows": 1, - "balance": 50.4815 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "uProc23": [ - { - "hints": [], - "startTime": 1726655411559, - "executionTime": 5173, - "source": [ - { - "previousNode": "uProc22" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": false, - "message": { - "object": true - }, - "status": "completed", - "params": { - "object": true - }, - "normalized": false, - "criteria": "10040", - "time": 2, - "price": 0, - "real_price": 0, - "processor": "get-vat-by-zipcode", - "total_rows": 1, - "balance": 50.4815 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "uProc24": [ - { - "hints": [], - "startTime": 1726655416732, - "executionTime": 144, - "source": [ - { - "previousNode": "uProc23" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": true, - "message": { - "object": true - }, - "status": "completed", - "params": { - "object": true - }, - "normalized": false, - "criteria": "10063", - "time": 2, - "price": 0, - "real_price": 0.0025, - "processor": "check-vat-exist", - "total_rows": 1, - "balance": 50.4815 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "uProc24" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2024-09-18T10:29:52.046Z", - "stoppedAt": "2024-09-18T10:30:16.876Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/182-snapshot.json b/test-workflows/snapshots/182-snapshot.json deleted file mode 100644 index 7d62da355ad..00000000000 --- a/test-workflows/snapshots/182-snapshot.json +++ /dev/null @@ -1,244 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343994910, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Webflow": [ - { - "startTime": 1747343994910, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 1513, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_cid": "608289f18593d40792d70d54", - "_id": "68265a7bcf2b25604fb8766e", - "_draft": true, - "_archived": false, - "name": "Item1747343994912", - "slug": "ItemSlug1747343994913", - "updated-on": "2025-05-15T21:19:55.285Z", - "updated-by": "Person_60828826c12bb73d4752eedb", - "created-on": "2025-05-15T21:19:55.285Z", - "created-by": "Person_60828826c12bb73d4752eedb", - "published-on": { - "object": true - }, - "published-by": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Webflow1": [ - { - "startTime": 1747343996423, - "executionIndex": 2, - "source": [ - { - "previousNode": "Webflow" - } - ], - "hints": [], - "executionTime": 677, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_cid": "608289f18593d40792d70d54", - "_id": "68265a7bcf2b25604fb8766e", - "_draft": true, - "_archived": false, - "name": "Item1747343994912", - "slug": "ItemSlug1747343994913", - "updated-on": "2025-05-15T21:19:55.285Z", - "updated-by": "Person_60828826c12bb73d4752eedb", - "created-on": "2025-05-15T21:19:55.285Z", - "created-by": "Person_60828826c12bb73d4752eedb", - "published-on": { - "object": true - }, - "published-by": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Webflow2": [ - { - "startTime": 1747343997100, - "executionIndex": 3, - "source": [ - { - "previousNode": "Webflow1" - } - ], - "hints": [], - "executionTime": 473, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_cid": "608289f18593d40792d70d54", - "_id": "68265a7bcf2b25604fb8766e", - "_draft": false, - "_archived": false, - "name": "UpdatedItem1747343994912", - "slug": "UpdatedItemSlug1747343994913", - "updated-on": "2025-05-15T21:19:57.521Z", - "updated-by": "Person_60828826c12bb73d4752eedb", - "created-on": "2025-05-15T21:19:55.285Z", - "created-by": "Person_60828826c12bb73d4752eedb", - "published-on": { - "object": true - }, - "published-by": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Webflow3": [ - { - "startTime": 1747343997573, - "executionIndex": 4, - "source": [ - { - "previousNode": "Webflow2" - } - ], - "hints": [], - "executionTime": 658, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "deleted": 1 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Webflow4": [ - { - "startTime": 1747343998231, - "executionIndex": 5, - "source": [ - { - "previousNode": "Webflow3" - } - ], - "hints": [], - "executionTime": 479, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_cid": "608289f18593d40792d70d54", - "_id": "6826407aa3de802cc025d6b8", - "_draft": true, - "_archived": false, - "name": "Item1747337338117", - "slug": "ItemSlug1747337338118", - "updated-on": "2025-05-15T19:28:58.462Z", - "updated-by": "Person_60828826c12bb73d4752eedb", - "created-on": "2025-05-15T19:28:58.462Z", - "created-by": "Person_60828826c12bb73d4752eedb", - "published-on": { - "object": true - }, - "published-by": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Webflow4" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:54.910Z", - "stoppedAt": "2025-05-15T21:19:58.710Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/184-snapshot.json b/test-workflows/snapshots/184-snapshot.json deleted file mode 100644 index 39c07541780..00000000000 --- a/test-workflows/snapshots/184-snapshot.json +++ /dev/null @@ -1,1341 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1705409098591, - "executionTime": 1, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce7": [ - { - "startTime": 1705409098592, - "executionTime": 421, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "5000900000ts7wRAAQ", - "success": true, - "errors": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce": [ - { - "startTime": 1705409099013, - "executionTime": 286, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "0010900002NKs26AAD", - "success": true, - "errors": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce8": [ - { - "startTime": 1705409099300, - "executionTime": 160, - "source": [ - { - "previousNode": "Salesforce7" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "attributes": { - "object": true - }, - "Id": "5000900000ts7wRAAQ", - "IsDeleted": false, - "MasterRecordId": { - "object": true - }, - "CaseNumber": "00001926", - "ContactId": { - "object": true - }, - "AccountId": { - "object": true - }, - "AssetId": { - "object": true - }, - "SourceId": { - "object": true - }, - "ParentId": { - "object": true - }, - "SuppliedName": { - "object": true - }, - "SuppliedEmail": { - "object": true - }, - "SuppliedPhone": { - "object": true - }, - "SuppliedCompany": { - "object": true - }, - "Type": "Other", - "Status": "New", - "Reason": "Installation", - "Origin": { - "object": true - }, - "Subject": "Subject1705409098603", - "Priority": "Medium", - "Description": { - "object": true - }, - "IsClosed": false, - "ClosedDate": { - "object": true - }, - "IsEscalated": false, - "OwnerId": "00509000005ntkGAAQ", - "CreatedDate": "2024-01-16T12:44:58.000+0000", - "CreatedById": "00509000005ntkGAAQ", - "LastModifiedDate": "2024-01-16T12:44:58.000+0000", - "LastModifiedById": "00509000005ntkGAAQ", - "SystemModstamp": "2024-01-16T12:44:58.000+0000", - "ContactPhone": { - "object": true - }, - "ContactMobile": { - "object": true - }, - "ContactEmail": { - "object": true - }, - "ContactFax": { - "object": true - }, - "Comments": { - "object": true - }, - "LastViewedDate": "2024-01-16T12:44:58.000+0000", - "LastReferencedDate": "2024-01-16T12:44:58.000+0000", - "EngineeringReqNumber__c": { - "object": true - }, - "SLAViolation__c": { - "object": true - }, - "Product__c": { - "object": true - }, - "PotentialLiability__c": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.5 second": [ - { - "startTime": 1705409099461, - "executionTime": 503, - "source": [ - { - "previousNode": "Salesforce" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "0010900002NKs26AAD", - "success": true, - "errors": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Set": [ - { - "startTime": 1705409099965, - "executionTime": 4, - "source": [ - { - "previousNode": "Salesforce8" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "attributes": { - "object": true - }, - "Id": "5000900000ts7wRAAQ", - "IsDeleted": false, - "MasterRecordId": { - "object": true - }, - "CaseNumber": "00001926", - "ContactId": { - "object": true - }, - "AccountId": { - "object": true - }, - "AssetId": { - "object": true - }, - "SourceId": { - "object": true - }, - "ParentId": { - "object": true - }, - "SuppliedName": { - "object": true - }, - "SuppliedEmail": { - "object": true - }, - "SuppliedPhone": { - "object": true - }, - "SuppliedCompany": { - "object": true - }, - "Type": "Other", - "Status": "New", - "Reason": "Installation", - "Origin": { - "object": true - }, - "Subject": "Subject1705409098603", - "Priority": "Medium", - "Description": { - "object": true - }, - "IsClosed": false, - "ClosedDate": { - "object": true - }, - "IsEscalated": false, - "OwnerId": "00509000005ntkGAAQ", - "CreatedDate": "2024-01-16T12:44:58.000+0000", - "CreatedById": "00509000005ntkGAAQ", - "LastModifiedDate": "2024-01-16T12:44:58.000+0000", - "LastModifiedById": "00509000005ntkGAAQ", - "SystemModstamp": "2024-01-16T12:44:58.000+0000", - "ContactPhone": { - "object": true - }, - "ContactMobile": { - "object": true - }, - "ContactEmail": { - "object": true - }, - "ContactFax": { - "object": true - }, - "Comments": { - "object": true - }, - "LastViewedDate": "2024-01-16T12:44:58.000+0000", - "LastReferencedDate": "2024-01-16T12:44:58.000+0000", - "EngineeringReqNumber__c": { - "object": true - }, - "SLAViolation__c": { - "object": true - }, - "Product__c": { - "object": true - }, - "PotentialLiability__c": { - "object": true - }, - "data": "Attachment example" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce1": [ - { - "startTime": 1705409099969, - "executionTime": 225, - "source": [ - { - "previousNode": "Sleep 0.5 second" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "attributes": { - "object": true - }, - "Id": "0010900002NKs26AAD", - "IsDeleted": false, - "MasterRecordId": { - "object": true - }, - "Name": "Account1705409099016", - "Type": { - "object": true - }, - "ParentId": { - "object": true - }, - "BillingStreet": { - "object": true - }, - "BillingCity": { - "object": true - }, - "BillingState": { - "object": true - }, - "BillingPostalCode": { - "object": true - }, - "BillingCountry": { - "object": true - }, - "BillingLatitude": { - "object": true - }, - "BillingLongitude": { - "object": true - }, - "BillingGeocodeAccuracy": { - "object": true - }, - "BillingAddress": { - "object": true - }, - "ShippingStreet": { - "object": true - }, - "ShippingCity": { - "object": true - }, - "ShippingState": { - "object": true - }, - "ShippingPostalCode": { - "object": true - }, - "ShippingCountry": { - "object": true - }, - "ShippingLatitude": { - "object": true - }, - "ShippingLongitude": { - "object": true - }, - "ShippingGeocodeAccuracy": { - "object": true - }, - "ShippingAddress": { - "object": true - }, - "Phone": { - "object": true - }, - "Fax": { - "object": true - }, - "AccountNumber": { - "object": true - }, - "Website": { - "object": true - }, - "PhotoUrl": "/services/images/photo/0010900002NKs26AAD", - "Sic": { - "object": true - }, - "Industry": { - "object": true - }, - "AnnualRevenue": { - "object": true - }, - "NumberOfEmployees": { - "object": true - }, - "Ownership": { - "object": true - }, - "TickerSymbol": { - "object": true - }, - "Description": { - "object": true - }, - "Rating": { - "object": true - }, - "Site": { - "object": true - }, - "OwnerId": "00509000005ntkGAAQ", - "CreatedDate": "2024-01-16T12:44:59.000+0000", - "CreatedById": "00509000005ntkGAAQ", - "LastModifiedDate": "2024-01-16T12:44:59.000+0000", - "LastModifiedById": "00509000005ntkGAAQ", - "SystemModstamp": "2024-01-16T12:44:59.000+0000", - "LastActivityDate": { - "object": true - }, - "LastViewedDate": "2024-01-16T12:44:59.000+0000", - "LastReferencedDate": "2024-01-16T12:44:59.000+0000", - "Jigsaw": { - "object": true - }, - "JigsawCompanyId": { - "object": true - }, - "CleanStatus": "Pending", - "AccountSource": { - "object": true - }, - "DunsNumber": { - "object": true - }, - "Tradestyle": { - "object": true - }, - "NaicsCode": { - "object": true - }, - "NaicsDesc": { - "object": true - }, - "YearStarted": { - "object": true - }, - "SicDesc": { - "object": true - }, - "DandbCompanyId": { - "object": true - }, - "OperatingHoursId": { - "object": true - }, - "CustomerPriority__c": { - "object": true - }, - "SLA__c": { - "object": true - }, - "Active__c": { - "object": true - }, - "NumberofLocations__c": { - "object": true - }, - "UpsellOpportunity__c": { - "object": true - }, - "SLASerialNumber__c": { - "object": true - }, - "SLAExpirationDate__c": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Move Binary Data": [ - { - "startTime": 1705409100194, - "executionTime": 1, - "source": [ - { - "previousNode": "Set" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - }, - "binary": { - "data": { - "mimeType": "application/json", - "fileType": "json", - "fileExtension": "json", - "data": "eyJhdHRyaWJ1dGVzIjp7InR5cGUiOiJDYXNlIiwidXJsIjoiL3NlcnZpY2VzL2RhdGEvdjU5LjAvc29iamVjdHMvQ2FzZS81MDAwOTAwMDAwdHM3d1JBQVEifSwiSWQiOiI1MDAwOTAwMDAwdHM3d1JBQVEiLCJJc0RlbGV0ZWQiOmZhbHNlLCJNYXN0ZXJSZWNvcmRJZCI6bnVsbCwiQ2FzZU51bWJlciI6IjAwMDAxOTI2IiwiQ29udGFjdElkIjpudWxsLCJBY2NvdW50SWQiOm51bGwsIkFzc2V0SWQiOm51bGwsIlNvdXJjZUlkIjpudWxsLCJQYXJlbnRJZCI6bnVsbCwiU3VwcGxpZWROYW1lIjpudWxsLCJTdXBwbGllZEVtYWlsIjpudWxsLCJTdXBwbGllZFBob25lIjpudWxsLCJTdXBwbGllZENvbXBhbnkiOm51bGwsIlR5cGUiOiJPdGhlciIsIlN0YXR1cyI6Ik5ldyIsIlJlYXNvbiI6Ikluc3RhbGxhdGlvbiIsIk9yaWdpbiI6bnVsbCwiU3ViamVjdCI6IlN1YmplY3QxNzA1NDA5MDk4NjAzIiwiUHJpb3JpdHkiOiJNZWRpdW0iLCJEZXNjcmlwdGlvbiI6bnVsbCwiSXNDbG9zZWQiOmZhbHNlLCJDbG9zZWREYXRlIjpudWxsLCJJc0VzY2FsYXRlZCI6ZmFsc2UsIk93bmVySWQiOiIwMDUwOTAwMDAwNW50a0dBQVEiLCJDcmVhdGVkRGF0ZSI6IjIwMjQtMDEtMTZUMTI6NDQ6NTguMDAwKzAwMDAiLCJDcmVhdGVkQnlJZCI6IjAwNTA5MDAwMDA1bnRrR0FBUSIsIkxhc3RNb2RpZmllZERhdGUiOiIyMDI0LTAxLTE2VDEyOjQ0OjU4LjAwMCswMDAwIiwiTGFzdE1vZGlmaWVkQnlJZCI6IjAwNTA5MDAwMDA1bnRrR0FBUSIsIlN5c3RlbU1vZHN0YW1wIjoiMjAyNC0wMS0xNlQxMjo0NDo1OC4wMDArMDAwMCIsIkNvbnRhY3RQaG9uZSI6bnVsbCwiQ29udGFjdE1vYmlsZSI6bnVsbCwiQ29udGFjdEVtYWlsIjpudWxsLCJDb250YWN0RmF4IjpudWxsLCJDb21tZW50cyI6bnVsbCwiTGFzdFZpZXdlZERhdGUiOiIyMDI0LTAxLTE2VDEyOjQ0OjU4LjAwMCswMDAwIiwiTGFzdFJlZmVyZW5jZWREYXRlIjoiMjAyNC0wMS0xNlQxMjo0NDo1OC4wMDArMDAwMCIsIkVuZ2luZWVyaW5nUmVxTnVtYmVyX19jIjpudWxsLCJTTEFWaW9sYXRpb25fX2MiOm51bGwsIlByb2R1Y3RfX2MiOm51bGwsIlBvdGVudGlhbExpYWJpbGl0eV9fYyI6bnVsbCwiZGF0YSI6IkF0dGFjaG1lbnQgZXhhbXBsZSJ9", - "fileSize": "1.12 kB" - } - } - } - ] - ] - } - } - ], - "Salesforce2": [ - { - "startTime": 1705409100195, - "executionTime": 186, - "source": [ - { - "previousNode": "Salesforce1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "002090000011nDgAAI", - "success": true, - "errors": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.5 second7": [ - { - "startTime": 1705409100381, - "executionTime": 504, - "source": [ - { - "previousNode": "Move Binary Data" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - }, - "binary": { - "data": { - "mimeType": "application/json", - "fileType": "json", - "fileExtension": "json", - "data": "eyJhdHRyaWJ1dGVzIjp7InR5cGUiOiJDYXNlIiwidXJsIjoiL3NlcnZpY2VzL2RhdGEvdjU5LjAvc29iamVjdHMvQ2FzZS81MDAwOTAwMDAwdHM3d1JBQVEifSwiSWQiOiI1MDAwOTAwMDAwdHM3d1JBQVEiLCJJc0RlbGV0ZWQiOmZhbHNlLCJNYXN0ZXJSZWNvcmRJZCI6bnVsbCwiQ2FzZU51bWJlciI6IjAwMDAxOTI2IiwiQ29udGFjdElkIjpudWxsLCJBY2NvdW50SWQiOm51bGwsIkFzc2V0SWQiOm51bGwsIlNvdXJjZUlkIjpudWxsLCJQYXJlbnRJZCI6bnVsbCwiU3VwcGxpZWROYW1lIjpudWxsLCJTdXBwbGllZEVtYWlsIjpudWxsLCJTdXBwbGllZFBob25lIjpudWxsLCJTdXBwbGllZENvbXBhbnkiOm51bGwsIlR5cGUiOiJPdGhlciIsIlN0YXR1cyI6Ik5ldyIsIlJlYXNvbiI6Ikluc3RhbGxhdGlvbiIsIk9yaWdpbiI6bnVsbCwiU3ViamVjdCI6IlN1YmplY3QxNzA1NDA5MDk4NjAzIiwiUHJpb3JpdHkiOiJNZWRpdW0iLCJEZXNjcmlwdGlvbiI6bnVsbCwiSXNDbG9zZWQiOmZhbHNlLCJDbG9zZWREYXRlIjpudWxsLCJJc0VzY2FsYXRlZCI6ZmFsc2UsIk93bmVySWQiOiIwMDUwOTAwMDAwNW50a0dBQVEiLCJDcmVhdGVkRGF0ZSI6IjIwMjQtMDEtMTZUMTI6NDQ6NTguMDAwKzAwMDAiLCJDcmVhdGVkQnlJZCI6IjAwNTA5MDAwMDA1bnRrR0FBUSIsIkxhc3RNb2RpZmllZERhdGUiOiIyMDI0LTAxLTE2VDEyOjQ0OjU4LjAwMCswMDAwIiwiTGFzdE1vZGlmaWVkQnlJZCI6IjAwNTA5MDAwMDA1bnRrR0FBUSIsIlN5c3RlbU1vZHN0YW1wIjoiMjAyNC0wMS0xNlQxMjo0NDo1OC4wMDArMDAwMCIsIkNvbnRhY3RQaG9uZSI6bnVsbCwiQ29udGFjdE1vYmlsZSI6bnVsbCwiQ29udGFjdEVtYWlsIjpudWxsLCJDb250YWN0RmF4IjpudWxsLCJDb21tZW50cyI6bnVsbCwiTGFzdFZpZXdlZERhdGUiOiIyMDI0LTAxLTE2VDEyOjQ0OjU4LjAwMCswMDAwIiwiTGFzdFJlZmVyZW5jZWREYXRlIjoiMjAyNC0wMS0xNlQxMjo0NDo1OC4wMDArMDAwMCIsIkVuZ2luZWVyaW5nUmVxTnVtYmVyX19jIjpudWxsLCJTTEFWaW9sYXRpb25fX2MiOm51bGwsIlByb2R1Y3RfX2MiOm51bGwsIlBvdGVudGlhbExpYWJpbGl0eV9fYyI6bnVsbCwiZGF0YSI6IkF0dGFjaG1lbnQgZXhhbXBsZSJ9", - "fileSize": "1.12 kB" - } - }, - "index": 0 - } - ] - ] - } - } - ], - "Sleep 0.5 second1": [ - { - "startTime": 1705409100886, - "executionTime": 506, - "source": [ - { - "previousNode": "Salesforce2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "002090000011nDgAAI", - "success": true, - "errors": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Salesforce14": [ - { - "startTime": 1705409101392, - "executionTime": 296, - "source": [ - { - "previousNode": "Sleep 0.5 second7" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "00P0900000MuBd0EAF", - "success": true, - "errors": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce3": [ - { - "startTime": 1705409101689, - "executionTime": 163, - "source": [ - { - "previousNode": "Sleep 0.5 second1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "attributes": { - "object": true - }, - "Id": "0010900002NKrwVAAT", - "Name": "Account1705408303842", - "Type": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce15": [ - { - "startTime": 1705409101852, - "executionTime": 166, - "source": [ - { - "previousNode": "Salesforce14" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "attributes": { - "object": true - }, - "Id": "00P0900000MuBd0EAF", - "IsDeleted": false, - "ParentId": "5000900000ts7wRAAQ", - "Name": "Attachment1705409101394", - "IsPrivate": false, - "ContentType": "application/json", - "BodyLength": 1116, - "Body": "/services/data/v59.0/sobjects/Attachment/00P0900000MuBd0EAF/Body", - "OwnerId": "00509000005ntkGAAQ", - "CreatedDate": "2024-01-16T12:45:01.000+0000", - "CreatedById": "00509000005ntkGAAQ", - "LastModifiedDate": "2024-01-16T12:45:01.000+0000", - "LastModifiedById": "00509000005ntkGAAQ", - "SystemModstamp": "2024-01-16T12:45:01.000+0000", - "Description": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce4": [ - { - "startTime": 1705409102019, - "executionTime": 166, - "source": [ - { - "previousNode": "Salesforce3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "objectDescribe": { - "object": true - }, - "recentItems": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.5 second6": [ - { - "startTime": 1705409102185, - "executionTime": 506, - "source": [ - { - "previousNode": "Salesforce15" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "attributes": { - "object": true - }, - "Id": "00P0900000MuBd0EAF", - "IsDeleted": false, - "ParentId": "5000900000ts7wRAAQ", - "Name": "Attachment1705409101394", - "IsPrivate": false, - "ContentType": "application/json", - "BodyLength": 1116, - "Body": "/services/data/v59.0/sobjects/Attachment/00P0900000MuBd0EAF/Body", - "OwnerId": "00509000005ntkGAAQ", - "CreatedDate": "2024-01-16T12:45:01.000+0000", - "CreatedById": "00509000005ntkGAAQ", - "LastModifiedDate": "2024-01-16T12:45:01.000+0000", - "LastModifiedById": "00509000005ntkGAAQ", - "SystemModstamp": "2024-01-16T12:45:01.000+0000", - "Description": { - "object": true - } - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Sleep 0.5 second2": [ - { - "startTime": 1705409102692, - "executionTime": 507, - "source": [ - { - "previousNode": "Salesforce4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "objectDescribe": { - "object": true - }, - "recentItems": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Salesforce16": [ - { - "startTime": 1705409103200, - "executionTime": 140, - "source": [ - { - "previousNode": "Sleep 0.5 second6" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "attributes": { - "object": true - }, - "Id": "00P0900000MuBd0EAF", - "Name": "Attachment1705409101394" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce5": [ - { - "startTime": 1705409103341, - "executionTime": 305, - "source": [ - { - "previousNode": "Sleep 0.5 second2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "errors": [ - "json array" - ], - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce17": [ - { - "startTime": 1705409103646, - "executionTime": 164, - "source": [ - { - "previousNode": "Salesforce16" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "objectDescribe": { - "object": true - }, - "recentItems": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce6": [ - { - "startTime": 1705409103811, - "executionTime": 444, - "source": [ - { - "previousNode": "Salesforce5" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "errors": [ - "json array" - ], - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.5 second5": [ - { - "startTime": 1705409104256, - "executionTime": 507, - "source": [ - { - "previousNode": "Salesforce17" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "objectDescribe": { - "object": true - }, - "recentItems": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Salesforce18": [ - { - "startTime": 1705409104763, - "executionTime": 187, - "source": [ - { - "previousNode": "Sleep 0.5 second5" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "errors": [ - "json array" - ], - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce19": [ - { - "startTime": 1705409104951, - "executionTime": 213, - "source": [ - { - "previousNode": "Salesforce18" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "errors": [ - "json array" - ], - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce9": [ - { - "startTime": 1705409105164, - "executionTime": 243, - "source": [ - { - "previousNode": "Salesforce19" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "00a09000004JUeBAAW", - "success": true, - "errors": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.5 second4": [ - { - "startTime": 1705409105408, - "executionTime": 507, - "source": [ - { - "previousNode": "Salesforce9" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "00a09000004JUeBAAW", - "success": true, - "errors": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Salesforce10": [ - { - "startTime": 1705409105916, - "executionTime": 147, - "source": [ - { - "previousNode": "Sleep 0.5 second4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "objectDescribe": { - "object": true - }, - "recentItems": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce11": [ - { - "startTime": 1705409106064, - "executionTime": 149, - "source": [ - { - "previousNode": "Salesforce10" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "attributes": { - "object": true - }, - "Id": "5000900000ts7wRAAQ", - "AccountId": { - "object": true - }, - "ContactId": { - "object": true - }, - "Priority": "Medium", - "Status": "New", - "Subject": "Subject1705409098603", - "Type": "Other" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.5 second3": [ - { - "startTime": 1705409106213, - "executionTime": 505, - "source": [ - { - "previousNode": "Salesforce11" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "attributes": { - "object": true - }, - "Id": "5000900000ts7wRAAQ", - "AccountId": { - "object": true - }, - "ContactId": { - "object": true - }, - "Priority": "Medium", - "Status": "New", - "Subject": "Subject1705409098603", - "Type": "Other" - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Salesforce12": [ - { - "startTime": 1705409106718, - "executionTime": 240, - "source": [ - { - "previousNode": "Sleep 0.5 second3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "errors": [ - "json array" - ], - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce13": [ - { - "startTime": 1705409106958, - "executionTime": 397, - "source": [ - { - "previousNode": "Salesforce12" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "errors": [ - "json array" - ], - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Salesforce13" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2024-01-16T12:44:58.575Z", - "stoppedAt": "2024-01-16T12:45:07.356Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/185-snapshot.json b/test-workflows/snapshots/185-snapshot.json deleted file mode 100644 index 8f228fe10f5..00000000000 --- a/test-workflows/snapshots/185-snapshot.json +++ /dev/null @@ -1,1588 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1705409098608, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce": [ - { - "startTime": 1705409098608, - "executionTime": 437, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "0030900002C8F6SAAV", - "success": true, - "errors": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce8": [ - { - "startTime": 1705409099045, - "executionTime": 172, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "a000900000jSn74AAC", - "success": true, - "errors": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce13": [ - { - "startTime": 1705409099218, - "executionTime": 178, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "label": "FixedFlow", - "name": "FixedFlow", - "type": "FLOW", - "url": "/services/data/v59.0/actions/custom/flow/FixedFlow" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce15": [ - { - "startTime": 1705409099396, - "executionTime": 280, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "00Q0900000Q92tNEAR", - "success": true, - "errors": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce1": [ - { - "startTime": 1705409099677, - "executionTime": 179, - "source": [ - { - "previousNode": "Salesforce" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "attributes": { - "object": true - }, - "Id": "0030900002C8F6SAAV", - "IsDeleted": false, - "MasterRecordId": { - "object": true - }, - "AccountId": { - "object": true - }, - "LastName": "Contact1705409098611", - "FirstName": { - "object": true - }, - "Salutation": { - "object": true - }, - "Name": "Contact1705409098611", - "OtherStreet": { - "object": true - }, - "OtherCity": { - "object": true - }, - "OtherState": { - "object": true - }, - "OtherPostalCode": { - "object": true - }, - "OtherCountry": { - "object": true - }, - "OtherLatitude": { - "object": true - }, - "OtherLongitude": { - "object": true - }, - "OtherGeocodeAccuracy": { - "object": true - }, - "OtherAddress": { - "object": true - }, - "MailingStreet": { - "object": true - }, - "MailingCity": { - "object": true - }, - "MailingState": { - "object": true - }, - "MailingPostalCode": { - "object": true - }, - "MailingCountry": { - "object": true - }, - "MailingLatitude": { - "object": true - }, - "MailingLongitude": { - "object": true - }, - "MailingGeocodeAccuracy": { - "object": true - }, - "MailingAddress": { - "object": true - }, - "Phone": { - "object": true - }, - "Fax": { - "object": true - }, - "MobilePhone": { - "object": true - }, - "HomePhone": { - "object": true - }, - "OtherPhone": { - "object": true - }, - "AssistantPhone": { - "object": true - }, - "ReportsToId": { - "object": true - }, - "Email": { - "object": true - }, - "Title": { - "object": true - }, - "Department": { - "object": true - }, - "AssistantName": { - "object": true - }, - "LeadSource": { - "object": true - }, - "Birthdate": { - "object": true - }, - "Description": { - "object": true - }, - "OwnerId": "00509000005ntkGAAQ", - "CreatedDate": "2024-01-16T12:44:59.000+0000", - "CreatedById": "00509000005ntkGAAQ", - "LastModifiedDate": "2024-01-16T12:44:59.000+0000", - "LastModifiedById": "00509000005ntkGAAQ", - "SystemModstamp": "2024-01-16T12:44:59.000+0000", - "LastActivityDate": { - "object": true - }, - "LastCURequestDate": { - "object": true - }, - "LastCUUpdateDate": { - "object": true - }, - "LastViewedDate": "2024-01-16T12:44:59.000+0000", - "LastReferencedDate": "2024-01-16T12:44:59.000+0000", - "EmailBouncedReason": { - "object": true - }, - "EmailBouncedDate": { - "object": true - }, - "IsEmailBounced": false, - "PhotoUrl": "/services/images/photo/0030900002C8F6SAAV", - "Jigsaw": { - "object": true - }, - "JigsawContactId": { - "object": true - }, - "CleanStatus": "Pending", - "IndividualId": { - "object": true - }, - "IsPriorityRecord": false, - "Level__c": { - "object": true - }, - "Languages__c": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.5 second7": [ - { - "startTime": 1705409099857, - "executionTime": 506, - "source": [ - { - "previousNode": "Salesforce8" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "a000900000jSn74AAC", - "success": true, - "errors": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Salesforce14": [ - { - "startTime": 1705409100366, - "executionTime": 0, - "source": [ - { - "previousNode": "Salesforce13" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "label": "FixedFlow", - "name": "FixedFlow", - "type": "FLOW", - "url": "/services/data/v59.0/actions/custom/flow/FixedFlow" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce16": [ - { - "startTime": 1705409100366, - "executionTime": 175, - "source": [ - { - "previousNode": "Salesforce15" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "attributes": { - "object": true - }, - "Id": "00Q0900000Q92tNEAR", - "IsDeleted": false, - "MasterRecordId": { - "object": true - }, - "LastName": "LastName1705409099400", - "FirstName": { - "object": true - }, - "Salutation": { - "object": true - }, - "Name": "LastName1705409099400", - "Title": { - "object": true - }, - "Company": "n8n", - "Street": { - "object": true - }, - "City": { - "object": true - }, - "State": { - "object": true - }, - "PostalCode": { - "object": true - }, - "Country": { - "object": true - }, - "Latitude": { - "object": true - }, - "Longitude": { - "object": true - }, - "GeocodeAccuracy": { - "object": true - }, - "Address": { - "object": true - }, - "Phone": { - "object": true - }, - "MobilePhone": { - "object": true - }, - "Fax": { - "object": true - }, - "Email": { - "object": true - }, - "Website": { - "object": true - }, - "PhotoUrl": "/services/images/photo/00Q0900000Q92tNEAR", - "Description": { - "object": true - }, - "LeadSource": { - "object": true - }, - "Status": "Open - Not Contacted", - "Industry": { - "object": true - }, - "Rating": { - "object": true - }, - "AnnualRevenue": { - "object": true - }, - "NumberOfEmployees": { - "object": true - }, - "OwnerId": "00509000005ntkGAAQ", - "IsConverted": false, - "ConvertedDate": { - "object": true - }, - "ConvertedAccountId": { - "object": true - }, - "ConvertedContactId": { - "object": true - }, - "ConvertedOpportunityId": { - "object": true - }, - "IsUnreadByOwner": true, - "CreatedDate": "2024-01-16T12:44:59.000+0000", - "CreatedById": "00509000005ntkGAAQ", - "LastModifiedDate": "2024-01-16T12:44:59.000+0000", - "LastModifiedById": "00509000005ntkGAAQ", - "SystemModstamp": "2024-01-16T12:44:59.000+0000", - "LastActivityDate": { - "object": true - }, - "LastViewedDate": "2024-01-16T12:44:59.000+0000", - "LastReferencedDate": "2024-01-16T12:44:59.000+0000", - "Jigsaw": { - "object": true - }, - "JigsawContactId": { - "object": true - }, - "CleanStatus": "Pending", - "CompanyDunsNumber": { - "object": true - }, - "DandbCompanyId": { - "object": true - }, - "EmailBouncedReason": { - "object": true - }, - "EmailBouncedDate": { - "object": true - }, - "IndividualId": { - "object": true - }, - "IsPriorityRecord": false, - "SICCode__c": { - "object": true - }, - "ProductInterest__c": { - "object": true - }, - "Primary__c": { - "object": true - }, - "CurrentGenerators__c": { - "object": true - }, - "NumberofLocations__c": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.5 second1": [ - { - "startTime": 1705409100542, - "executionTime": 505, - "source": [ - { - "previousNode": "Salesforce1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "attributes": { - "object": true - }, - "Id": "0030900002C8F6SAAV", - "IsDeleted": false, - "MasterRecordId": { - "object": true - }, - "AccountId": { - "object": true - }, - "LastName": "Contact1705409098611", - "FirstName": { - "object": true - }, - "Salutation": { - "object": true - }, - "Name": "Contact1705409098611", - "OtherStreet": { - "object": true - }, - "OtherCity": { - "object": true - }, - "OtherState": { - "object": true - }, - "OtherPostalCode": { - "object": true - }, - "OtherCountry": { - "object": true - }, - "OtherLatitude": { - "object": true - }, - "OtherLongitude": { - "object": true - }, - "OtherGeocodeAccuracy": { - "object": true - }, - "OtherAddress": { - "object": true - }, - "MailingStreet": { - "object": true - }, - "MailingCity": { - "object": true - }, - "MailingState": { - "object": true - }, - "MailingPostalCode": { - "object": true - }, - "MailingCountry": { - "object": true - }, - "MailingLatitude": { - "object": true - }, - "MailingLongitude": { - "object": true - }, - "MailingGeocodeAccuracy": { - "object": true - }, - "MailingAddress": { - "object": true - }, - "Phone": { - "object": true - }, - "Fax": { - "object": true - }, - "MobilePhone": { - "object": true - }, - "HomePhone": { - "object": true - }, - "OtherPhone": { - "object": true - }, - "AssistantPhone": { - "object": true - }, - "ReportsToId": { - "object": true - }, - "Email": { - "object": true - }, - "Title": { - "object": true - }, - "Department": { - "object": true - }, - "AssistantName": { - "object": true - }, - "LeadSource": { - "object": true - }, - "Birthdate": { - "object": true - }, - "Description": { - "object": true - }, - "OwnerId": "00509000005ntkGAAQ", - "CreatedDate": "2024-01-16T12:44:59.000+0000", - "CreatedById": "00509000005ntkGAAQ", - "LastModifiedDate": "2024-01-16T12:44:59.000+0000", - "LastModifiedById": "00509000005ntkGAAQ", - "SystemModstamp": "2024-01-16T12:44:59.000+0000", - "LastActivityDate": { - "object": true - }, - "LastCURequestDate": { - "object": true - }, - "LastCUUpdateDate": { - "object": true - }, - "LastViewedDate": "2024-01-16T12:44:59.000+0000", - "LastReferencedDate": "2024-01-16T12:44:59.000+0000", - "EmailBouncedReason": { - "object": true - }, - "EmailBouncedDate": { - "object": true - }, - "IsEmailBounced": false, - "PhotoUrl": "/services/images/photo/0030900002C8F6SAAV", - "Jigsaw": { - "object": true - }, - "JigsawContactId": { - "object": true - }, - "CleanStatus": "Pending", - "IndividualId": { - "object": true - }, - "IsPriorityRecord": false, - "Level__c": { - "object": true - }, - "Languages__c": { - "object": true - } - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Salesforce9": [ - { - "startTime": 1705409101048, - "executionTime": 237, - "source": [ - { - "previousNode": "Sleep 0.5 second7" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "attributes": { - "object": true - }, - "Id": "a000900000jSn74AAC", - "OwnerId": "00509000005ntkGAAQ", - "IsDeleted": false, - "Name": "TestCustomObjectFixed", - "CreatedDate": "2024-01-16T12:44:59.000+0000", - "CreatedById": "00509000005ntkGAAQ", - "LastModifiedDate": "2024-01-16T12:44:59.000+0000", - "LastModifiedById": "00509000005ntkGAAQ", - "SystemModstamp": "2024-01-16T12:44:59.000+0000" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.5 second": [ - { - "startTime": 1705409101285, - "executionTime": 507, - "source": [ - { - "previousNode": "Salesforce16" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "attributes": { - "object": true - }, - "Id": "00Q0900000Q92tNEAR", - "IsDeleted": false, - "MasterRecordId": { - "object": true - }, - "LastName": "LastName1705409099400", - "FirstName": { - "object": true - }, - "Salutation": { - "object": true - }, - "Name": "LastName1705409099400", - "Title": { - "object": true - }, - "Company": "n8n", - "Street": { - "object": true - }, - "City": { - "object": true - }, - "State": { - "object": true - }, - "PostalCode": { - "object": true - }, - "Country": { - "object": true - }, - "Latitude": { - "object": true - }, - "Longitude": { - "object": true - }, - "GeocodeAccuracy": { - "object": true - }, - "Address": { - "object": true - }, - "Phone": { - "object": true - }, - "MobilePhone": { - "object": true - }, - "Fax": { - "object": true - }, - "Email": { - "object": true - }, - "Website": { - "object": true - }, - "PhotoUrl": "/services/images/photo/00Q0900000Q92tNEAR", - "Description": { - "object": true - }, - "LeadSource": { - "object": true - }, - "Status": "Open - Not Contacted", - "Industry": { - "object": true - }, - "Rating": { - "object": true - }, - "AnnualRevenue": { - "object": true - }, - "NumberOfEmployees": { - "object": true - }, - "OwnerId": "00509000005ntkGAAQ", - "IsConverted": false, - "ConvertedDate": { - "object": true - }, - "ConvertedAccountId": { - "object": true - }, - "ConvertedContactId": { - "object": true - }, - "ConvertedOpportunityId": { - "object": true - }, - "IsUnreadByOwner": true, - "CreatedDate": "2024-01-16T12:44:59.000+0000", - "CreatedById": "00509000005ntkGAAQ", - "LastModifiedDate": "2024-01-16T12:44:59.000+0000", - "LastModifiedById": "00509000005ntkGAAQ", - "SystemModstamp": "2024-01-16T12:44:59.000+0000", - "LastActivityDate": { - "object": true - }, - "LastViewedDate": "2024-01-16T12:44:59.000+0000", - "LastReferencedDate": "2024-01-16T12:44:59.000+0000", - "Jigsaw": { - "object": true - }, - "JigsawContactId": { - "object": true - }, - "CleanStatus": "Pending", - "CompanyDunsNumber": { - "object": true - }, - "DandbCompanyId": { - "object": true - }, - "EmailBouncedReason": { - "object": true - }, - "EmailBouncedDate": { - "object": true - }, - "IndividualId": { - "object": true - }, - "IsPriorityRecord": false, - "SICCode__c": { - "object": true - }, - "ProductInterest__c": { - "object": true - }, - "Primary__c": { - "object": true - }, - "CurrentGenerators__c": { - "object": true - }, - "NumberofLocations__c": { - "object": true - } - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Salesforce2": [ - { - "startTime": 1705409101792, - "executionTime": 173, - "source": [ - { - "previousNode": "Sleep 0.5 second1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "002090000011nDlAAI", - "success": true, - "errors": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce10": [ - { - "startTime": 1705409101966, - "executionTime": 131, - "source": [ - { - "previousNode": "Salesforce9" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "attributes": { - "object": true - }, - "Id": "a0009000008QNMNAA4" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce17": [ - { - "startTime": 1705409102098, - "executionTime": 203, - "source": [ - { - "previousNode": "Sleep 0.5 second" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "002090000011nDvAAI", - "success": true, - "errors": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce3": [ - { - "startTime": 1705409102302, - "executionTime": 166, - "source": [ - { - "previousNode": "Salesforce2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "objectDescribe": { - "object": true - }, - "recentItems": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.5 second6": [ - { - "startTime": 1705409102468, - "executionTime": 506, - "source": [ - { - "previousNode": "Salesforce10" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "attributes": { - "object": true - }, - "Id": "a0009000008QNMNAA4" - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Salesforce18": [ - { - "startTime": 1705409102975, - "executionTime": 160, - "source": [ - { - "previousNode": "Salesforce17" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "objectDescribe": { - "object": true - }, - "recentItems": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.5 second3": [ - { - "startTime": 1705409103135, - "executionTime": 505, - "source": [ - { - "previousNode": "Salesforce3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "objectDescribe": { - "object": true - }, - "recentItems": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Salesforce11": [ - { - "startTime": 1705409103641, - "executionTime": 196, - "source": [ - { - "previousNode": "Sleep 0.5 second6" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "errors": [ - "json array" - ], - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.5 second2": [ - { - "startTime": 1705409103837, - "executionTime": 505, - "source": [ - { - "previousNode": "Salesforce18" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "objectDescribe": { - "object": true - }, - "recentItems": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Salesforce4": [ - { - "startTime": 1705409104343, - "executionTime": 145, - "source": [ - { - "previousNode": "Sleep 0.5 second3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "attributes": { - "object": true - }, - "Id": "0030900002C8EiUAAV", - "FirstName": { - "object": true - }, - "LastName": "Contact1705407559274", - "Email": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce12": [ - { - "startTime": 1705409104489, - "executionTime": 315, - "source": [ - { - "previousNode": "Salesforce11" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "errors": [ - "json array" - ], - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce19": [ - { - "startTime": 1705409104804, - "executionTime": 151, - "source": [ - { - "previousNode": "Sleep 0.5 second2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "attributes": { - "object": true - }, - "Id": "00Q09000006rtukEAA", - "Company": "n8n", - "FirstName": { - "object": true - }, - "LastName": "LastName1621428976317", - "Street": { - "object": true - }, - "PostalCode": { - "object": true - }, - "City": { - "object": true - }, - "Email": { - "object": true - }, - "Status": "Open - Not Contacted" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce5": [ - { - "startTime": 1705409104955, - "executionTime": 206, - "source": [ - { - "previousNode": "Salesforce4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "00v0900000ZyfD3AAJ", - "success": true, - "errors": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce20": [ - { - "startTime": 1705409105162, - "executionTime": 259, - "source": [ - { - "previousNode": "Salesforce19" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "00v0900000ZyfD8AAJ", - "success": true, - "errors": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.5 second5": [ - { - "startTime": 1705409105421, - "executionTime": 504, - "source": [ - { - "previousNode": "Salesforce5" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "00v0900000ZyfD3AAJ", - "success": true, - "errors": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Sleep 0.5 second4": [ - { - "startTime": 1705409105925, - "executionTime": 504, - "source": [ - { - "previousNode": "Salesforce20" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "00v0900000ZyfD8AAJ", - "success": true, - "errors": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Salesforce6": [ - { - "startTime": 1705409106431, - "executionTime": 257, - "source": [ - { - "previousNode": "Sleep 0.5 second5" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "errors": [ - "json array" - ], - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce21": [ - { - "startTime": 1705409106688, - "executionTime": 205, - "source": [ - { - "previousNode": "Sleep 0.5 second4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "errors": [ - "json array" - ], - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce7": [ - { - "startTime": 1705409106893, - "executionTime": 466, - "source": [ - { - "previousNode": "Salesforce6" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "errors": [ - "json array" - ], - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce22": [ - { - "startTime": 1705409107359, - "executionTime": 509, - "source": [ - { - "previousNode": "Salesforce21" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "errors": [ - "json array" - ], - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Salesforce22" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2024-01-16T12:44:58.604Z", - "stoppedAt": "2024-01-16T12:45:07.868Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/186-snapshot.json b/test-workflows/snapshots/186-snapshot.json deleted file mode 100644 index 555e2018ef1..00000000000 --- a/test-workflows/snapshots/186-snapshot.json +++ /dev/null @@ -1,919 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1705409098613, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce": [ - { - "startTime": 1705409098614, - "executionTime": 397, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "0060900000WRCqkAAH", - "success": true, - "errors": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce7": [ - { - "startTime": 1705409099012, - "executionTime": 152, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "attributes": { - "object": true - }, - "Id": "0010900002NKrwVAAT", - "Name": "Account1705408303842", - "BillingCity": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.5 second4": [ - { - "startTime": 1705409099164, - "executionTime": 517, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Sleep 0.5 second": [ - { - "startTime": 1705409099681, - "executionTime": 505, - "source": [ - { - "previousNode": "Salesforce" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "0060900000WRCqkAAH", - "success": true, - "errors": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Salesforce8": [ - { - "startTime": 1705409100187, - "executionTime": 217, - "source": [ - { - "previousNode": "Sleep 0.5 second4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "00T0900001bX5nSEAS", - "success": true, - "errors": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce1": [ - { - "startTime": 1705409100404, - "executionTime": 169, - "source": [ - { - "previousNode": "Sleep 0.5 second" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "attributes": { - "object": true - }, - "Id": "0060900000WRCqkAAH", - "IsDeleted": false, - "AccountId": { - "object": true - }, - "IsPrivate": false, - "Name": "Opp1705409098616", - "Description": { - "object": true - }, - "StageName": "Value Proposition", - "Amount": { - "object": true - }, - "Probability": 50, - "ExpectedRevenue": { - "object": true - }, - "TotalOpportunityQuantity": { - "object": true - }, - "CloseDate": "2021-03-31", - "Type": { - "object": true - }, - "NextStep": { - "object": true - }, - "LeadSource": { - "object": true - }, - "IsClosed": false, - "IsWon": false, - "ForecastCategory": "Pipeline", - "ForecastCategoryName": "Pipeline", - "CampaignId": { - "object": true - }, - "HasOpportunityLineItem": false, - "Pricebook2Id": { - "object": true - }, - "OwnerId": "00509000005ntkGAAQ", - "CreatedDate": "2024-01-16T12:44:58.000+0000", - "CreatedById": "00509000005ntkGAAQ", - "LastModifiedDate": "2024-01-16T12:44:58.000+0000", - "LastModifiedById": "00509000005ntkGAAQ", - "SystemModstamp": "2024-01-16T12:44:59.000+0000", - "LastActivityDate": { - "object": true - }, - "PushCount": 0, - "LastStageChangeDate": { - "object": true - }, - "FiscalQuarter": 1, - "FiscalYear": 2021, - "Fiscal": "2021 1", - "ContactId": { - "object": true - }, - "LastViewedDate": "2024-01-16T12:44:59.000+0000", - "LastReferencedDate": "2024-01-16T12:44:59.000+0000", - "HasOpenActivity": false, - "HasOverdueTask": false, - "LastAmountChangedHistoryId": { - "object": true - }, - "LastCloseDateChangedHistoryId": { - "object": true - }, - "DeliveryInstallationStatus__c": { - "object": true - }, - "TrackingNumber__c": { - "object": true - }, - "OrderNumber__c": { - "object": true - }, - "CurrentGenerators__c": { - "object": true - }, - "MainCompetitors__c": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce9": [ - { - "startTime": 1705409100574, - "executionTime": 166, - "source": [ - { - "previousNode": "Salesforce8" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "attributes": { - "object": true - }, - "Id": "00T0900001bX5nSEAS", - "WhoId": { - "object": true - }, - "WhatId": { - "object": true - }, - "Subject": { - "object": true - }, - "ActivityDate": { - "object": true - }, - "Status": "In Progress", - "Priority": "Normal", - "IsHighPriority": false, - "OwnerId": "00509000005ntkGAAQ", - "Description": { - "object": true - }, - "IsDeleted": false, - "AccountId": { - "object": true - }, - "IsClosed": false, - "CreatedDate": "2024-01-16T12:45:00.000+0000", - "CreatedById": "00509000005ntkGAAQ", - "LastModifiedDate": "2024-01-16T12:45:00.000+0000", - "LastModifiedById": "00509000005ntkGAAQ", - "SystemModstamp": "2024-01-16T12:45:00.000+0000", - "IsArchived": false, - "CallDurationInSeconds": { - "object": true - }, - "CallType": { - "object": true - }, - "CallDisposition": { - "object": true - }, - "CallObject": { - "object": true - }, - "ReminderDateTime": { - "object": true - }, - "IsReminderSet": false, - "RecurrenceActivityId": { - "object": true - }, - "IsRecurrence": false, - "RecurrenceStartDateOnly": { - "object": true - }, - "RecurrenceEndDateOnly": { - "object": true - }, - "RecurrenceTimeZoneSidKey": { - "object": true - }, - "RecurrenceType": { - "object": true - }, - "RecurrenceInterval": { - "object": true - }, - "RecurrenceDayOfWeekMask": { - "object": true - }, - "RecurrenceDayOfMonth": { - "object": true - }, - "RecurrenceInstance": { - "object": true - }, - "RecurrenceMonthOfYear": { - "object": true - }, - "RecurrenceRegeneratedType": { - "object": true - }, - "TaskSubtype": "Task", - "CompletedDateTime": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce2": [ - { - "startTime": 1705409100741, - "executionTime": 1618, - "source": [ - { - "previousNode": "Salesforce1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "002090000011nDqAAI", - "success": true, - "errors": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.5 second3": [ - { - "startTime": 1705409102359, - "executionTime": 505, - "source": [ - { - "previousNode": "Salesforce9" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "attributes": { - "object": true - }, - "Id": "00T0900001bX5nSEAS", - "WhoId": { - "object": true - }, - "WhatId": { - "object": true - }, - "Subject": { - "object": true - }, - "ActivityDate": { - "object": true - }, - "Status": "In Progress", - "Priority": "Normal", - "IsHighPriority": false, - "OwnerId": "00509000005ntkGAAQ", - "Description": { - "object": true - }, - "IsDeleted": false, - "AccountId": { - "object": true - }, - "IsClosed": false, - "CreatedDate": "2024-01-16T12:45:00.000+0000", - "CreatedById": "00509000005ntkGAAQ", - "LastModifiedDate": "2024-01-16T12:45:00.000+0000", - "LastModifiedById": "00509000005ntkGAAQ", - "SystemModstamp": "2024-01-16T12:45:00.000+0000", - "IsArchived": false, - "CallDurationInSeconds": { - "object": true - }, - "CallType": { - "object": true - }, - "CallDisposition": { - "object": true - }, - "CallObject": { - "object": true - }, - "ReminderDateTime": { - "object": true - }, - "IsReminderSet": false, - "RecurrenceActivityId": { - "object": true - }, - "IsRecurrence": false, - "RecurrenceStartDateOnly": { - "object": true - }, - "RecurrenceEndDateOnly": { - "object": true - }, - "RecurrenceTimeZoneSidKey": { - "object": true - }, - "RecurrenceType": { - "object": true - }, - "RecurrenceInterval": { - "object": true - }, - "RecurrenceDayOfWeekMask": { - "object": true - }, - "RecurrenceDayOfMonth": { - "object": true - }, - "RecurrenceInstance": { - "object": true - }, - "RecurrenceMonthOfYear": { - "object": true - }, - "RecurrenceRegeneratedType": { - "object": true - }, - "TaskSubtype": "Task", - "CompletedDateTime": { - "object": true - } - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Sleep 0.5 second1": [ - { - "startTime": 1705409102865, - "executionTime": 506, - "source": [ - { - "previousNode": "Salesforce2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "002090000011nDqAAI", - "success": true, - "errors": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Salesforce10": [ - { - "startTime": 1705409103371, - "executionTime": 135, - "source": [ - { - "previousNode": "Sleep 0.5 second3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "objectDescribe": { - "object": true - }, - "recentItems": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce3": [ - { - "startTime": 1705409103506, - "executionTime": 142, - "source": [ - { - "previousNode": "Sleep 0.5 second1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "objectDescribe": { - "object": true - }, - "recentItems": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce11": [ - { - "startTime": 1705409103648, - "executionTime": 164, - "source": [ - { - "previousNode": "Salesforce10" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "attributes": { - "object": true - }, - "Id": "00T0900000NzAPdEAN", - "Subject": { - "object": true - }, - "Status": "In Progress", - "Priority": "Normal" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce4": [ - { - "startTime": 1705409103813, - "executionTime": 153, - "source": [ - { - "previousNode": "Salesforce3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "attributes": { - "object": true - }, - "Id": "00609000006wdbhAAA", - "AccountId": { - "object": true - }, - "Amount": { - "object": true - }, - "Probability": 50, - "Type": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.5 second5": [ - { - "startTime": 1705409103966, - "executionTime": 507, - "source": [ - { - "previousNode": "Salesforce11" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "attributes": { - "object": true - }, - "Id": "00T0900000NzAPdEAN", - "Subject": { - "object": true - }, - "Status": "In Progress", - "Priority": "Normal" - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Sleep 0.5 second2": [ - { - "startTime": 1705409104474, - "executionTime": 506, - "source": [ - { - "previousNode": "Salesforce4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "attributes": { - "object": true - }, - "Id": "00609000006wdbhAAA", - "AccountId": { - "object": true - }, - "Amount": { - "object": true - }, - "Probability": 50, - "Type": { - "object": true - } - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Salesforce12": [ - { - "startTime": 1705409104981, - "executionTime": 193, - "source": [ - { - "previousNode": "Sleep 0.5 second5" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "errors": [ - "json array" - ], - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce5": [ - { - "startTime": 1705409105174, - "executionTime": 245, - "source": [ - { - "previousNode": "Sleep 0.5 second2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "errors": [ - "json array" - ], - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce13": [ - { - "startTime": 1705409105419, - "executionTime": 358, - "source": [ - { - "previousNode": "Salesforce12" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "errors": [ - "json array" - ], - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Salesforce6": [ - { - "startTime": 1705409105778, - "executionTime": 409, - "source": [ - { - "previousNode": "Salesforce5" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "errors": [ - "json array" - ], - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Salesforce6" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2024-01-16T12:44:58.611Z", - "stoppedAt": "2024-01-16T12:45:06.187Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/187-snapshot.json b/test-workflows/snapshots/187-snapshot.json deleted file mode 100644 index 18135b36d14..00000000000 --- a/test-workflows/snapshots/187-snapshot.json +++ /dev/null @@ -1,253 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1710331893392, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set": [ - { - "startTime": 1710331893392, - "executionTime": 2, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "random": 198, - "test": "Entry1710331893394" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Strapi": [ - { - "startTime": 1710331893394, - "executionTime": 444, - "source": [ - { - "previousNode": "Set" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 1285, - "test": "Entry1710331893394", - "random": 198, - "published_at": "2024-03-13T12:11:33.766Z", - "created_at": "2024-03-13T12:11:33.772Z", - "updated_at": "2024-03-13T12:11:33.772Z" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Strapi1": [ - { - "startTime": 1710331893838, - "executionTime": 389, - "source": [ - { - "previousNode": "Strapi" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 1285, - "test": "Entry1710331893394", - "random": 198, - "published_at": "2024-03-13T12:11:33.766Z", - "created_at": "2024-03-13T12:11:33.772Z", - "updated_at": "2024-03-13T12:11:33.772Z" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Strapi2": [ - { - "startTime": 1710331894228, - "executionTime": 377, - "source": [ - { - "previousNode": "Strapi1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 2, - "test": { - "object": true - }, - "random": 563, - "published_at": "2021-04-29T07:56:29.555Z", - "created_at": "2021-04-29T07:56:29.563Z", - "updated_at": "2021-04-29T07:56:29.563Z" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set1": [ - { - "startTime": 1710331894606, - "executionTime": 3, - "source": [ - { - "previousNode": "Strapi2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 1285, - "test": "UpdatedEntry1710331893394" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Strapi3": [ - { - "startTime": 1710331894610, - "executionTime": 379, - "source": [ - { - "previousNode": "Set1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 1285, - "test": "UpdatedEntry1710331893394", - "random": 198, - "published_at": "2024-03-13T12:11:33.766Z", - "created_at": "2024-03-13T12:11:33.772Z", - "updated_at": "2024-03-13T12:11:34.964Z" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Strapi4": [ - { - "startTime": 1710331894989, - "executionTime": 402, - "source": [ - { - "previousNode": "Strapi3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 1285, - "test": "UpdatedEntry1710331893394", - "random": 198, - "published_at": "2024-03-13T12:11:33.766Z", - "created_at": "2024-03-13T12:11:33.772Z", - "updated_at": "2024-03-13T12:11:34.964Z" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Strapi4" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2024-03-13T12:11:33.392Z", - "stoppedAt": "2024-03-13T12:11:35.392Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/190-snapshot.json b/test-workflows/snapshots/190-snapshot.json deleted file mode 100644 index 6f3c9523e48..00000000000 --- a/test-workflows/snapshots/190-snapshot.json +++ /dev/null @@ -1,1258 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1676891419278, - "executionTime": 1, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Discourse": [ - { - "startTime": 1676891419280, - "executionTime": 633, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 383, - "name": "Category1676891419295", - "color": "FF6D5A", - "text_color": "0000FF", - "slug": "category1676891419295", - "topic_count": 0, - "post_count": 0, - "position": 382, - "description": { - "object": true - }, - "description_text": { - "object": true - }, - "description_excerpt": { - "object": true - }, - "topic_url": "/t/about-the-category1676891419295-category/763", - "read_restricted": false, - "permission": { - "object": true - }, - "notification_level": 1, - "can_edit": true, - "topic_template": { - "object": true - }, - "has_children": { - "object": true - }, - "sort_order": { - "object": true - }, - "sort_ascending": { - "object": true - }, - "show_subcategory_list": false, - "num_featured_topics": 3, - "default_view": { - "object": true - }, - "subcategory_list_style": "rows_with_featured_topics", - "default_top_period": "all", - "default_list_filter": "all", - "minimum_required_tags": 0, - "navigate_to_first_post_after_read": false, - "custom_fields": { - "object": true - }, - "min_tags_from_required_group": 1, - "required_tag_group_name": { - "object": true - }, - "read_only_banner": { - "object": true - }, - "available_groups": [ - "json array" - ], - "auto_close_hours": { - "object": true - }, - "auto_close_based_on_last_post": false, - "group_permissions": [ - "json array" - ], - "email_in": { - "object": true - }, - "email_in_allow_strangers": false, - "mailinglist_mirror": false, - "all_topics_wiki": false, - "allow_unlimited_owner_edits_on_first_post": false, - "can_delete": true, - "allow_badges": true, - "topic_featured_link_allowed": true, - "search_priority": 0, - "default_slow_mode_seconds": { - "object": true - }, - "uploaded_logo": { - "object": true - }, - "uploaded_background": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Discourse3": [ - { - "startTime": 1676891419914, - "executionTime": 273, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 419, - "automatic": false, - "name": "Group1676891419914", - "user_count": 0, - "mentionable_level": 0, - "messageable_level": 0, - "visibility_level": 0, - "primary_group": false, - "title": { - "object": true - }, - "grant_trust_level": { - "object": true - }, - "incoming_email": { - "object": true - }, - "has_messages": false, - "flair_url": { - "object": true - }, - "flair_bg_color": { - "object": true - }, - "flair_color": { - "object": true - }, - "bio_raw": { - "object": true - }, - "bio_cooked": { - "object": true - }, - "bio_excerpt": { - "object": true - }, - "public_admission": false, - "public_exit": false, - "allow_membership_requests": false, - "full_name": { - "object": true - }, - "default_notification_level": 3, - "membership_request_template": { - "object": true - }, - "members_visibility_level": 0, - "can_see_members": true, - "can_admin_group": true, - "publish_read_state": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Discourse7": [ - { - "startTime": 1676891420188, - "executionTime": 1124, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 767, - "name": "UserName LastName", - "username": "nodeqa", - "avatar_template": "/letter_avatar_proxy/v4/letter/n/d78d45/{size}.png", - "created_at": "2023-02-20T11:10:20.863Z", - "cooked": "

Content Mon Feb 20 2023 12:10:20 GMT+0100 (Central European Standard Time)

", - "post_number": 1, - "post_type": 1, - "updated_at": "2023-02-20T11:10:20.863Z", - "reply_count": 0, - "reply_to_post_number": { - "object": true - }, - "quote_count": 0, - "incoming_link_count": 0, - "reads": 0, - "readers_count": 0, - "score": 0, - "yours": true, - "topic_id": 764, - "topic_slug": "post-1676891420193", - "display_username": "UserName LastName", - "primary_group_name": { - "object": true - }, - "flair_name": { - "object": true - }, - "flair_url": { - "object": true - }, - "flair_bg_color": { - "object": true - }, - "flair_color": { - "object": true - }, - "version": 1, - "can_edit": true, - "can_delete": false, - "can_recover": false, - "can_wiki": true, - "user_title": { - "object": true - }, - "bookmarked": false, - "raw": "Content Mon Feb 20 2023 12:10:20 GMT+0100 (Central European Standard Time)", - "actions_summary": [ - "json array" - ], - "moderator": false, - "admin": true, - "staff": true, - "user_id": 1, - "draft_sequence": 0, - "hidden": false, - "trust_level": 1, - "deleted_at": { - "object": true - }, - "user_deleted": false, - "edit_reason": { - "object": true - }, - "can_view_edit_history": true, - "wiki": false, - "reviewable_id": { - "object": true - }, - "reviewable_score_count": 0, - "reviewable_score_pending_count": 0 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set": [ - { - "startTime": 1676891421312, - "executionTime": 15, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "username": "Username934" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Discourse1": [ - { - "startTime": 1676891421327, - "executionTime": 426, - "source": [ - { - "previousNode": "Discourse" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 383, - "name": "UpdatedCategory1676891419295", - "color": "FF6D5A", - "text_color": "0000FF", - "slug": "category1676891419295", - "topic_count": 0, - "post_count": 0, - "position": 382, - "description": { - "object": true - }, - "description_text": { - "object": true - }, - "description_excerpt": { - "object": true - }, - "topic_url": "/t/about-the-updatedcategory1676891419295-category/763", - "read_restricted": false, - "permission": { - "object": true - }, - "notification_level": 1, - "can_edit": true, - "topic_template": { - "object": true - }, - "has_children": { - "object": true - }, - "sort_order": { - "object": true - }, - "sort_ascending": { - "object": true - }, - "show_subcategory_list": false, - "num_featured_topics": 3, - "default_view": { - "object": true - }, - "subcategory_list_style": "rows_with_featured_topics", - "default_top_period": "all", - "default_list_filter": "all", - "minimum_required_tags": 0, - "navigate_to_first_post_after_read": false, - "custom_fields": { - "object": true - }, - "min_tags_from_required_group": 1, - "required_tag_group_name": { - "object": true - }, - "read_only_banner": { - "object": true - }, - "available_groups": [ - "json array" - ], - "auto_close_hours": { - "object": true - }, - "auto_close_based_on_last_post": false, - "group_permissions": [ - "json array" - ], - "email_in": { - "object": true - }, - "email_in_allow_strangers": false, - "mailinglist_mirror": false, - "all_topics_wiki": false, - "allow_unlimited_owner_edits_on_first_post": false, - "can_delete": true, - "allow_badges": true, - "topic_featured_link_allowed": true, - "search_priority": 0, - "default_slow_mode_seconds": { - "object": true - }, - "uploaded_logo": { - "object": true - }, - "uploaded_background": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Discourse4": [ - { - "startTime": 1676891421755, - "executionTime": 254, - "source": [ - { - "previousNode": "Discourse3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": "OK" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Discourse14": [ - { - "startTime": 1676891422010, - "executionTime": 204, - "source": [ - { - "previousNode": "Discourse3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": "OK", - "usernames": [ - "json array" - ], - "emails": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Discourse8": [ - { - "startTime": 1676891422214, - "executionTime": 461, - "source": [ - { - "previousNode": "Discourse7" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 767, - "name": "UserName LastName", - "username": "nodeqa", - "avatar_template": "/letter_avatar_proxy/v4/letter/n/d78d45/{size}.png", - "created_at": "2023-02-20T11:10:20.863Z", - "cooked": "

updated

Content Mon Feb 20 2023 12:10:20 GMT+0100 (Central European Standard Time)

", - "post_number": 1, - "post_type": 1, - "updated_at": "2023-02-20T11:10:22.550Z", - "reply_count": 0, - "reply_to_post_number": { - "object": true - }, - "quote_count": 0, - "incoming_link_count": 0, - "reads": 1, - "readers_count": 0, - "score": 0, - "yours": true, - "topic_id": 764, - "topic_slug": "post-1676891420193", - "display_username": "UserName LastName", - "primary_group_name": { - "object": true - }, - "flair_name": { - "object": true - }, - "flair_url": { - "object": true - }, - "flair_bg_color": { - "object": true - }, - "flair_color": { - "object": true - }, - "version": 1, - "can_edit": true, - "can_delete": false, - "can_recover": false, - "can_wiki": true, - "user_title": { - "object": true - }, - "bookmarked": false, - "raw": "updated

Content Mon Feb 20 2023 12:10:20 GMT+0100 (Central European Standard Time)

", - "actions_summary": [ - "json array" - ], - "moderator": false, - "admin": true, - "staff": true, - "user_id": 1, - "draft_sequence": 1, - "hidden": false, - "trust_level": 1, - "deleted_at": { - "object": true - }, - "user_deleted": false, - "edit_reason": { - "object": true - }, - "can_view_edit_history": true, - "wiki": false, - "reviewable_id": { - "object": true - }, - "reviewable_score_count": 0, - "reviewable_score_pending_count": 0 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Discourse11": [ - { - "startTime": 1676891422676, - "executionTime": 238, - "source": [ - { - "previousNode": "Set" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": false, - "message": "Username must be unique" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Discourse2": [ - { - "startTime": 1676891422914, - "executionTime": 981, - "source": [ - { - "previousNode": "Discourse1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 1, - "name": "Uncategorized", - "color": "0088CC", - "text_color": "FFFFFF", - "slug": "uncategorized", - "topic_count": 377, - "post_count": 0, - "position": 0, - "description": "Topics that don't need a category, or don't fit into any other existing category.", - "description_text": "Topics that don't need a category, or don't fit into any other existing category.", - "description_excerpt": "Topics that don't need a category, or don't fit into any other existing category.", - "topic_url": { - "object": true - }, - "read_restricted": false, - "permission": 1, - "notification_level": 1, - "can_edit": true, - "topic_template": { - "object": true - }, - "has_children": false, - "sort_order": { - "object": true - }, - "sort_ascending": { - "object": true - }, - "show_subcategory_list": false, - "num_featured_topics": 3, - "default_view": { - "object": true - }, - "subcategory_list_style": "rows_with_featured_topics", - "default_top_period": "all", - "default_list_filter": "all", - "minimum_required_tags": 0, - "navigate_to_first_post_after_read": false, - "topics_day": 0, - "topics_week": 0, - "topics_month": 0, - "topics_year": 0, - "topics_all_time": 377, - "is_uncategorized": true, - "subcategory_ids": [ - "json array" - ], - "uploaded_logo": { - "object": true - }, - "uploaded_background": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Discourse5": [ - { - "startTime": 1676891423896, - "executionTime": 159, - "source": [ - { - "previousNode": "Discourse4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 419, - "automatic": false, - "name": "UpGroup1676891419914", - "user_count": 1, - "mentionable_level": 0, - "messageable_level": 0, - "visibility_level": 0, - "primary_group": false, - "title": { - "object": true - }, - "grant_trust_level": { - "object": true - }, - "incoming_email": { - "object": true - }, - "has_messages": false, - "flair_url": { - "object": true - }, - "flair_bg_color": { - "object": true - }, - "flair_color": { - "object": true - }, - "bio_raw": { - "object": true - }, - "bio_cooked": { - "object": true - }, - "bio_excerpt": { - "object": true - }, - "public_admission": false, - "public_exit": false, - "allow_membership_requests": false, - "full_name": { - "object": true - }, - "default_notification_level": 3, - "membership_request_template": { - "object": true - }, - "is_group_user": true, - "members_visibility_level": 0, - "can_see_members": true, - "can_admin_group": true, - "publish_read_state": false, - "is_group_owner_display": false, - "mentionable": true, - "messageable": true, - "automatic_membership_email_domains": { - "object": true - }, - "smtp_server": { - "object": true - }, - "smtp_port": { - "object": true - }, - "smtp_ssl": { - "object": true - }, - "smtp_enabled": false, - "smtp_updated_at": { - "object": true - }, - "smtp_updated_by": { - "object": true - }, - "imap_server": { - "object": true - }, - "imap_port": { - "object": true - }, - "imap_ssl": { - "object": true - }, - "imap_mailbox_name": "", - "imap_mailboxes": [ - "json array" - ], - "imap_enabled": false, - "imap_updated_at": { - "object": true - }, - "imap_updated_by": { - "object": true - }, - "email_username": { - "object": true - }, - "email_password": { - "object": true - }, - "imap_last_error": { - "object": true - }, - "imap_old_emails": { - "object": true - }, - "imap_new_emails": { - "object": true - }, - "message_count": 0, - "allow_unknown_sender_topic_replies": false, - "watching_category_ids": [ - "json array" - ], - "tracking_category_ids": [ - "json array" - ], - "watching_first_post_category_ids": [ - "json array" - ], - "regular_category_ids": [ - "json array" - ], - "muted_category_ids": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Discourse15": [ - { - "startTime": 1676891424055, - "executionTime": 155, - "source": [ - { - "previousNode": "Discourse14" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": "OK", - "usernames": [ - "json array" - ], - "skipped_usernames": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Discourse9": [ - { - "startTime": 1676891424211, - "executionTime": 180, - "source": [ - { - "previousNode": "Discourse8" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 767, - "name": "UserName LastName", - "username": "nodeqa", - "avatar_template": "/letter_avatar_proxy/v4/letter/n/d78d45/{size}.png", - "created_at": "2023-02-20T11:10:20.863Z", - "cooked": "

updated

Content Mon Feb 20 2023 12:10:20 GMT+0100 (Central European Standard Time)

", - "post_number": 1, - "post_type": 1, - "updated_at": "2023-02-20T11:10:22.550Z", - "reply_count": 0, - "reply_to_post_number": { - "object": true - }, - "quote_count": 0, - "incoming_link_count": 0, - "reads": 1, - "readers_count": 0, - "score": 0, - "yours": true, - "topic_id": 764, - "topic_slug": "post-1676891420193", - "display_username": "UserName LastName", - "primary_group_name": { - "object": true - }, - "flair_name": { - "object": true - }, - "flair_url": { - "object": true - }, - "flair_bg_color": { - "object": true - }, - "flair_color": { - "object": true - }, - "version": 1, - "can_edit": true, - "can_delete": false, - "can_recover": false, - "can_wiki": true, - "user_title": { - "object": true - }, - "bookmarked": false, - "raw": "updated

Content Mon Feb 20 2023 12:10:20 GMT+0100 (Central European Standard Time)

", - "actions_summary": [ - "json array" - ], - "moderator": false, - "admin": true, - "staff": true, - "user_id": 1, - "hidden": false, - "trust_level": 1, - "deleted_at": { - "object": true - }, - "user_deleted": false, - "edit_reason": { - "object": true - }, - "can_view_edit_history": true, - "wiki": false, - "reviewable_id": { - "object": true - }, - "reviewable_score_count": 0, - "reviewable_score_pending_count": 0 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Discourse12": [ - { - "startTime": 1676891424391, - "executionTime": 319, - "source": [ - { - "previousNode": "Discourse11" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "user_badges": [ - "json array" - ], - "user": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Discourse6": [ - { - "startTime": 1676891424710, - "executionTime": 198, - "source": [ - { - "previousNode": "Discourse5" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 1, - "automatic": true, - "name": "admins", - "display_name": "admins", - "user_count": 2, - "mentionable_level": 0, - "messageable_level": 0, - "visibility_level": 1, - "primary_group": false, - "title": { - "object": true - }, - "grant_trust_level": { - "object": true - }, - "incoming_email": { - "object": true - }, - "has_messages": false, - "flair_url": { - "object": true - }, - "flair_bg_color": { - "object": true - }, - "flair_color": { - "object": true - }, - "bio_raw": { - "object": true - }, - "bio_cooked": { - "object": true - }, - "bio_excerpt": { - "object": true - }, - "public_admission": false, - "public_exit": false, - "allow_membership_requests": false, - "full_name": { - "object": true - }, - "default_notification_level": 3, - "membership_request_template": { - "object": true - }, - "is_group_user": true, - "members_visibility_level": 0, - "can_see_members": true, - "can_admin_group": true, - "publish_read_state": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Discourse10": [ - { - "startTime": 1676891424909, - "executionTime": 2222, - "source": [ - { - "previousNode": "Discourse9" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 767, - "name": "UserName LastName", - "username": "nodeqa", - "avatar_template": "/letter_avatar_proxy/v4/letter/n/d78d45/{size}.png", - "created_at": "2023-02-20T11:10:20.863Z", - "cooked": "

updated

Content Mon Feb 20 2023 12:10:20 GMT+0100 (Central European Standard Time)

", - "post_number": 1, - "post_type": 1, - "updated_at": "2023-02-20T11:10:22.550Z", - "reply_count": 0, - "reply_to_post_number": { - "object": true - }, - "quote_count": 0, - "incoming_link_count": 0, - "reads": 1, - "readers_count": 0, - "score": 0, - "yours": true, - "topic_id": 764, - "topic_slug": "post-1676891420193", - "topic_title": "Post 1676891420193", - "topic_html_title": "Post 1676891420193", - "category_id": 1, - "display_username": "UserName LastName", - "primary_group_name": { - "object": true - }, - "flair_name": { - "object": true - }, - "flair_url": { - "object": true - }, - "flair_bg_color": { - "object": true - }, - "flair_color": { - "object": true - }, - "version": 1, - "can_edit": true, - "can_delete": false, - "can_recover": false, - "can_wiki": true, - "user_title": { - "object": true - }, - "bookmarked": false, - "raw": "updated

Content Mon Feb 20 2023 12:10:20 GMT+0100 (Central European Standard Time)

", - "actions_summary": [ - "json array" - ], - "moderator": false, - "admin": true, - "staff": true, - "user_id": 1, - "hidden": false, - "trust_level": 1, - "deleted_at": { - "object": true - }, - "user_deleted": false, - "edit_reason": { - "object": true - }, - "can_view_edit_history": true, - "wiki": false, - "reviewable_id": { - "object": true - }, - "reviewable_score_count": 0, - "reviewable_score_pending_count": 0 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Discourse13": [ - { - "startTime": 1676891427131, - "executionTime": 1526, - "source": [ - { - "previousNode": "Discourse12" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 239, - "username": "nodeqaadmin", - "name": "UserName LastName", - "avatar_template": "/letter_avatar_proxy/v4/letter/n/7c8e57/{size}.png", - "active": true, - "admin": true, - "moderator": false, - "last_seen_at": "2022-03-07T14:54:51.733Z", - "last_emailed_at": { - "object": true - }, - "created_at": "2022-03-07T12:59:28.671Z", - "last_seen_age": 30226535.62024173, - "last_emailed_age": { - "object": true - }, - "created_at_age": 30233458.68280304, - "trust_level": 0, - "manual_locked_trust_level": { - "object": true - }, - "flag_level": 0, - "title": { - "object": true - }, - "time_read": 0, - "staged": false, - "days_visited": 1, - "posts_read_count": 0, - "topics_entered": 0, - "post_count": 0 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Discourse13" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-02-20T11:10:19.276Z", - "stoppedAt": "2023-02-20T11:10:28.658Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/191-snapshot.json b/test-workflows/snapshots/191-snapshot.json deleted file mode 100644 index 4191adc2610..00000000000 --- a/test-workflows/snapshots/191-snapshot.json +++ /dev/null @@ -1,283 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1676891419759, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "MailerLite": [ - { - "startTime": 1676891419760, - "executionTime": 303, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 1493465993027103000, - "name": { - "object": true - }, - "email": "fake1676891419779@test.com", - "sent": 0, - "opened": 0, - "opened_rate": 0, - "clicked": 0, - "clicked_rate": 0, - "type": "active", - "country_id": { - "object": true - }, - "signup_ip": "", - "signup_timestamp": "", - "confirmation_ip": "", - "confirmation_timestamp": "", - "fields": [ - "json array" - ], - "webform_subscribe_date": { - "object": true - }, - "date_subscribe": { - "object": true - }, - "date_unsubscribe": { - "object": true - }, - "date_created": "2023-02-20 11:10:19", - "date_updated": "2023-02-20 11:10:20", - "user_agent": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "MailerLite1": [ - { - "startTime": 1676891420063, - "executionTime": 182, - "source": [ - { - "previousNode": "MailerLite" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 1493465993027103000, - "name": "", - "email": "fake1676891419779@test.com", - "sent": 0, - "opened": 0, - "opened_rate": 0, - "clicked": 0, - "clicked_rate": 0, - "type": "active", - "country_id": { - "object": true - }, - "signup_ip": "", - "signup_timestamp": "", - "confirmation_ip": "", - "confirmation_timestamp": "", - "fields": [ - "json array" - ], - "webform_subscribe_date": { - "object": true - }, - "date_subscribe": { - "object": true - }, - "date_unsubscribe": { - "object": true - }, - "date_created": "2023-02-20 11:10:19", - "date_updated": "2023-02-20 11:10:20", - "user_agent": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "MailerLite2": [ - { - "startTime": 1676891420246, - "executionTime": 219, - "source": [ - { - "previousNode": "MailerLite1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 1493465993027103000, - "name": "UpdatedName1676891420247", - "email": "fake1676891419779@test.com", - "sent": 0, - "opened": 0, - "opened_rate": 0, - "clicked": 0, - "clicked_rate": 0, - "type": "active", - "country_id": { - "object": true - }, - "signup_ip": "", - "signup_timestamp": "", - "confirmation_ip": "", - "confirmation_timestamp": "", - "fields": [ - "json array" - ], - "webform_subscribe_date": { - "object": true - }, - "date_subscribe": { - "object": true - }, - "date_unsubscribe": { - "object": true - }, - "date_created": "2023-02-20 11:10:19", - "date_updated": "2023-02-20 11:10:20", - "user_agent": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "MailerLite3": [ - { - "startTime": 1676891420466, - "executionTime": 160, - "source": [ - { - "previousNode": "MailerLite2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 968892253701516000, - "name": "", - "email": "nodeqa@n8n.io", - "sent": 0, - "opened": 0, - "opened_rate": 0, - "clicked": 0, - "clicked_rate": 0, - "type": "active", - "country_id": { - "object": true - }, - "signup_ip": { - "object": true - }, - "signup_timestamp": { - "object": true - }, - "confirmation_ip": { - "object": true - }, - "confirmation_timestamp": { - "object": true - }, - "fields": [ - "json array" - ], - "webform_subscribe_date": { - "object": true - }, - "date_subscribe": { - "object": true - }, - "date_unsubscribe": { - "object": true - }, - "date_created": "2021-02-26 16:35:57", - "date_updated": "2021-02-26 16:35:57", - "user_agent": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "MailerLite3" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-02-20T11:10:19.756Z", - "stoppedAt": "2023-02-20T11:10:20.627Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/192-snapshot.json b/test-workflows/snapshots/192-snapshot.json deleted file mode 100644 index 3956ef17251..00000000000 --- a/test-workflows/snapshots/192-snapshot.json +++ /dev/null @@ -1,729 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1676891419969, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mattermost": [ - { - "startTime": 1676891419970, - "executionTime": 146, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "67chhkzc1f8s8fc598jdc6z6nr", - "create_at": 1676891420092, - "update_at": 1676891420092, - "delete_at": 0, - "team_id": "y1p853gfspdrxre5oextbii7wh", - "type": "O", - "display_name": "TestChannel1676891419984", - "name": "testchannel1676891419984", - "header": "", - "purpose": "", - "last_post_at": 0, - "total_msg_count": 0, - "extra_update_at": 0, - "creator_id": "fo4frgcntiy6jfc63wor76kxpy", - "scheme_id": { - "object": true - }, - "props": { - "object": true - }, - "group_constrained": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mattermost13": [ - { - "startTime": 1676891420116, - "executionTime": 208, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "o9f9bza4nj8hbp7xjy1ef9h1ny", - "create_at": 1676891420220, - "update_at": 1676891420220, - "delete_at": 0, - "username": "username1676891420116", - "auth_data": "", - "auth_service": "email", - "email": "fake1676891420117@test.com", - "nickname": "", - "first_name": "", - "last_name": "", - "position": "", - "roles": "system_user", - "notify_props": { - "object": true - }, - "last_password_update": 1676891420220, - "locale": "en", - "timezone": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mattermost1": [ - { - "startTime": 1676891420324, - "executionTime": 102, - "source": [ - { - "previousNode": "Mattermost" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "channel_id": "67chhkzc1f8s8fc598jdc6z6nr", - "user_id": "4yp7tpa3sbgk9qrf38egttbioo", - "roles": "channel_user", - "last_viewed_at": 0, - "msg_count": 0, - "mention_count": 0, - "notify_props": { - "object": true - }, - "last_update_at": 1676891420440, - "scheme_guest": false, - "scheme_user": true, - "scheme_admin": false, - "explicit_roles": "" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mattermost14": [ - { - "startTime": 1676891420426, - "executionTime": 72, - "source": [ - { - "previousNode": "Mattermost13" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "o9f9bza4nj8hbp7xjy1ef9h1ny", - "create_at": 1676891420220, - "update_at": 1676891420220, - "delete_at": 0, - "username": "username1676891420116", - "auth_data": "", - "auth_service": "email", - "email": "fake1676891420117@test.com", - "nickname": "", - "first_name": "", - "last_name": "", - "position": "", - "roles": "system_user", - "locale": "en", - "timezone": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mattermost7": [ - { - "startTime": 1676891420499, - "executionTime": 110, - "source": [ - { - "previousNode": "Mattermost1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "fjpkzppmfjysmpnps1shmzxoxy", - "create_at": 1676891420598, - "update_at": 1676891420598, - "edit_at": 0, - "delete_at": 0, - "is_pinned": false, - "user_id": "fo4frgcntiy6jfc63wor76kxpy", - "channel_id": "67chhkzc1f8s8fc598jdc6z6nr", - "root_id": "", - "parent_id": "", - "original_id": "", - "message": "Message1676891420501", - "type": "", - "props": { - "object": true - }, - "hashtags": "", - "pending_post_id": "", - "reply_count": 0, - "metadata": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mattermost15": [ - { - "startTime": 1676891420610, - "executionTime": 71, - "source": [ - { - "previousNode": "Mattermost14" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "o9f9bza4nj8hbp7xjy1ef9h1ny", - "create_at": 1676891420220, - "update_at": 1676891420220, - "delete_at": 0, - "username": "username1676891420116", - "auth_data": "", - "auth_service": "email", - "email": "fake1676891420117@test.com", - "nickname": "", - "first_name": "", - "last_name": "", - "position": "", - "roles": "system_user", - "locale": "en", - "timezone": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mattermost8": [ - { - "startTime": 1676891420682, - "executionTime": 67, - "source": [ - { - "previousNode": "Mattermost7" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "q1oq5ibknjnx5j53ig9dppo88c", - "create_at": 1676891420775, - "update_at": 0, - "edit_at": 0, - "delete_at": 0, - "is_pinned": false, - "user_id": "fo4frgcntiy6jfc63wor76kxpy", - "channel_id": "67chhkzc1f8s8fc598jdc6z6nr", - "root_id": "", - "parent_id": "", - "original_id": "", - "message": "EpheMessage1676891420683", - "type": "system_ephemeral", - "props": { - "object": true - }, - "hashtags": "", - "pending_post_id": "", - "reply_count": 0, - "metadata": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mattermost16": [ - { - "startTime": 1676891420750, - "executionTime": 132, - "source": [ - { - "previousNode": "Mattermost15" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "hp6pnfry6tfr8nsjbsowcpunah", - "create_at": 1619769670089, - "update_at": 1619769670089, - "delete_at": 0, - "username": "channelexport", - "auth_data": "", - "auth_service": "", - "email": "channelexport@localhost", - "nickname": "", - "first_name": "Channel Export Bot", - "last_name": "", - "position": "", - "roles": "system_user", - "locale": "en", - "timezone": { - "object": true - }, - "is_bot": true, - "bot_description": "A bot account created by the channel export plugin." - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mattermost10": [ - { - "startTime": 1676891420883, - "executionTime": 82, - "source": [ - { - "previousNode": "Mattermost8" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "user_id": "fo4frgcntiy6jfc63wor76kxpy", - "post_id": "fjpkzppmfjysmpnps1shmzxoxy", - "emoji_name": "rocket", - "create_at": 1676891420884 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mattermost17": [ - { - "startTime": 1676891420966, - "executionTime": 87, - "source": [ - { - "previousNode": "Mattermost16" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": "OK" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mattermost11": [ - { - "startTime": 1676891421054, - "executionTime": 73, - "source": [ - { - "previousNode": "Mattermost10" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "user_id": "fo4frgcntiy6jfc63wor76kxpy", - "post_id": "fjpkzppmfjysmpnps1shmzxoxy", - "emoji_name": "rocket", - "create_at": 1676891420884 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mattermost18": [ - { - "startTime": 1676891421127, - "executionTime": 91, - "source": [ - { - "previousNode": "Mattermost17" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": "OK" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mattermost12": [ - { - "startTime": 1676891421219, - "executionTime": 81, - "source": [ - { - "previousNode": "Mattermost11" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": "OK" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mattermost9": [ - { - "startTime": 1676891421300, - "executionTime": 85, - "source": [ - { - "previousNode": "Mattermost12" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": "OK" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mattermost2": [ - { - "startTime": 1676891421385, - "executionTime": 154, - "source": [ - { - "previousNode": "Mattermost9" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "fo4frgcntiy6jfc63wor76kxpy", - "create_at": 1619770719466, - "update_at": 1624374690399, - "delete_at": 0, - "username": "nodeqa", - "auth_data": "", - "auth_service": "", - "email": "nodeqa@test.com", - "nickname": "", - "first_name": "", - "last_name": "", - "position": "", - "roles": "system_admin system_user", - "locale": "en", - "timezone": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mattermost3": [ - { - "startTime": 1676891421540, - "executionTime": 76, - "source": [ - { - "previousNode": "Mattermost2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "channel_id": "67chhkzc1f8s8fc598jdc6z6nr", - "member_count": 2, - "guest_count": 0, - "pinnedpost_count": 0 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mattermost4": [ - { - "startTime": 1676891421616, - "executionTime": 92, - "source": [ - { - "previousNode": "Mattermost3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": "OK" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mattermost5": [ - { - "startTime": 1676891421708, - "executionTime": 90, - "source": [ - { - "previousNode": "Mattermost4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "67chhkzc1f8s8fc598jdc6z6nr", - "create_at": 1676891420092, - "update_at": 1676891421730, - "delete_at": 0, - "team_id": "y1p853gfspdrxre5oextbii7wh", - "type": "O", - "display_name": "TestChannel1676891419984", - "name": "testchannel1676891419984", - "header": "", - "purpose": "", - "last_post_at": 1676891421719, - "total_msg_count": 2, - "extra_update_at": 0, - "creator_id": "fo4frgcntiy6jfc63wor76kxpy", - "scheme_id": { - "object": true - }, - "props": { - "object": true - }, - "group_constrained": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mattermost6": [ - { - "startTime": 1676891421799, - "executionTime": 103, - "source": [ - { - "previousNode": "Mattermost5" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": "OK" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Mattermost6" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-02-20T11:10:19.966Z", - "stoppedAt": "2023-02-20T11:10:21.902Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/194-snapshot.json b/test-workflows/snapshots/194-snapshot.json deleted file mode 100644 index 4254e6ee383..00000000000 --- a/test-workflows/snapshots/194-snapshot.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "hints": [], - "startTime": 1726655395077, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mailjet": [ - { - "hints": [], - "startTime": 1726655395077, - "executionTime": 146, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "Status": "success", - "CustomID": "", - "To": [ - "json array" - ], - "Cc": [ - "json array" - ], - "Bcc": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mailjet2": [ - { - "hints": [], - "startTime": 1726655395223, - "executionTime": 0, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mailjet1": [ - { - "hints": [], - "startTime": 1726655395223, - "executionTime": 275, - "source": [ - { - "previousNode": "Mailjet" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "Status": "success", - "CustomID": "", - "To": [ - "json array" - ], - "Cc": [ - "json array" - ], - "Bcc": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Mailjet1" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2024-09-18T10:29:55.077Z", - "stoppedAt": "2024-09-18T10:29:55.498Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/195-snapshot.json b/test-workflows/snapshots/195-snapshot.json deleted file mode 100644 index 194a8995b16..00000000000 --- a/test-workflows/snapshots/195-snapshot.json +++ /dev/null @@ -1,330 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343995018, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Kitemaker1": [ - { - "startTime": 1747343995018, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 262, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "0f42cd20b0617400", - "name": "n8n-qa", - "labels": [ - "json array" - ], - "statuses": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Kitemaker": [ - { - "startTime": 1747343995280, - "executionIndex": 2, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 255, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "0f42cd2088617400", - "name": "n8n-qa" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Kitemaker2": [ - { - "startTime": 1747343995535, - "executionIndex": 3, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 392, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "0f42ccbcb93d4000", - "username": "node8qa" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Kitemaker3": [ - { - "startTime": 1747343995927, - "executionIndex": 4, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 760, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "2ce7808ff95c8800", - "number": "2218", - "title": "WorkItem1747343995928", - "description": "", - "status": { - "object": true - }, - "members": [ - "json array" - ], - "watchers": [ - "json array" - ], - "labels": [ - "json array" - ], - "effort": { - "object": true - }, - "impact": { - "object": true - }, - "updatedAt": 1747343996386, - "createdAt": 1747343996386 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Kitemaker4": [ - { - "startTime": 1747343996687, - "executionIndex": 5, - "source": [ - { - "previousNode": "Kitemaker3" - } - ], - "hints": [], - "executionTime": 270, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "2ce7808ff95c8800", - "number": "2218", - "title": "WorkItem1747343995928", - "description": "", - "status": { - "object": true - }, - "sort": "s", - "members": [ - "json array" - ], - "watchers": [ - "json array" - ], - "labels": [ - "json array" - ], - "comments": [ - "json array" - ], - "effort": { - "object": true - }, - "impact": { - "object": true - }, - "updatedAt": 1747343996386, - "createdAt": 1747343996386 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Kitemaker5": [ - { - "startTime": 1747343996957, - "executionIndex": 6, - "source": [ - { - "previousNode": "Kitemaker4" - } - ], - "hints": [], - "executionTime": 306, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "0f42cd2103617400", - "title": "Use arrow keys to navigate work items", - "description": "# Things to explore\n\n- [ ] Press the little + sign to the top right to see different types of meta data you can add to work items\n- [ ] Learn some markdown\n - [ ] `#` On an empty line creates a headline (type ## and ### for sub headlines)\n - [ ] Type `**` or `__` before and after a section of text to make it **bold**\n - [ ] Type `*` or `_` before and after a section of text to make it _italic_\n - [ ] Type `Β΄` before and after a section of text to make it `a code block`\n - [ ] Type `*` followed by space on an empty line to make bullet points\n - [ ] Type `[]` followed by space on an empty line to make todo-lists\n - [ ] Type `1.` followed by space on an empty line to make numbered lists\n - [ ] Type `$$` before and after Tex expression $$\\frac{1}{100}$$\n- [ ] Check out our integrations\n- [ ] Make comments (they support everything the description field supports)\n- [ ] Invite your team\n- [ ] Learn hotkeys:\n - [ ] Hovering elements gives you hotkey tips. Hover this sections to see that `D` lets you edit the description\n - [ ] Other times the hotkey hints are in the UI. If you look at the right section of this screen, `R` adds a new comment\n - [ ] Pressing `?` gives you a searchable list of all hotkeys\n - [ ] In the Kitemaker command (open it by pressing `CTRL/CMD+k`) you will also be able to see the hotkeys for the commands\n - [ ] When you have long descriptions use `SPACE` and `SHIFT+SPACE` to scroll up and down\n\n", - "labels": [ - "json array" - ], - "comments": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Kitemaker6": [ - { - "startTime": 1747343997263, - "executionIndex": 7, - "source": [ - { - "previousNode": "Kitemaker5" - } - ], - "hints": [], - "executionTime": 482, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "2ce7808ff95c8800", - "number": "2218", - "title": "UpdatedWorkItem1747343995928", - "description": "", - "status": { - "object": true - }, - "members": [ - "json array" - ], - "watchers": [ - "json array" - ], - "labels": [ - "json array" - ], - "effort": { - "object": true - }, - "impact": { - "object": true - }, - "updatedAt": 1747343997664, - "createdAt": 1747343996386 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Kitemaker6" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:55.018Z", - "stoppedAt": "2025-05-15T21:19:57.745Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/197-snapshot.json b/test-workflows/snapshots/197-snapshot.json deleted file mode 100644 index a740b61e4d9..00000000000 --- a/test-workflows/snapshots/197-snapshot.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1710331895822, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "MQTT qos:1": [ - { - "startTime": 1710331895822, - "executionTime": 99, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "MQTT1 qos:0": [ - { - "startTime": 1710331895921, - "executionTime": 113, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Function": [ - { - "startTime": 1710331896034, - "executionTime": 3, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "message": "MQTT-item-message1710331896036" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "MQTT2 qos:2": [ - { - "startTime": 1710331896037, - "executionTime": 128, - "source": [ - { - "previousNode": "Function" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "message": "MQTT-item-message1710331896036" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "MQTT2 qos:2" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2024-03-13T12:11:35.822Z", - "stoppedAt": "2024-03-13T12:11:36.165Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/198-snapshot.json b/test-workflows/snapshots/198-snapshot.json deleted file mode 100644 index 7a9f2545d3d..00000000000 --- a/test-workflows/snapshots/198-snapshot.json +++ /dev/null @@ -1,301 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1678116858549, - "executionTime": 1, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set": [ - { - "startTime": 1678116858551, - "executionTime": 0, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "boolean": true, - "number": 3 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Cloud Firestore5": [ - { - "startTime": 1678116858552, - "executionTime": 728, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "FixedCollection" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Cloud Firestore": [ - { - "startTime": 1678116859281, - "executionTime": 207, - "source": [ - { - "previousNode": "Set" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_name": "projects/fixedtestproject/databases/(default)/documents/FixedCollection/YNjhZsY4raBDR2lfdZZ0", - "_id": "YNjhZsY4raBDR2lfdZZ0", - "_createTime": "2023-03-06T15:34:19.490782Z", - "_updateTime": "2023-03-06T15:34:19.490782Z", - "number": "3", - "boolean": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Cloud Firestore1": [ - { - "startTime": 1678116859488, - "executionTime": 190, - "source": [ - { - "previousNode": "Google Cloud Firestore" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_name": "projects/fixedtestproject/databases/(default)/documents/FixedCollection/YNjhZsY4raBDR2lfdZZ0", - "_id": "YNjhZsY4raBDR2lfdZZ0", - "_createTime": "2023-03-06T15:34:19.490782Z", - "_updateTime": "2023-03-06T15:34:19.490782Z", - "boolean": true, - "number": "3" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set1": [ - { - "startTime": 1678116859678, - "executionTime": 1, - "source": [ - { - "previousNode": "Google Cloud Firestore1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "boolean": true, - "number": 100 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Cloud Firestore2": [ - { - "startTime": 1678116859679, - "executionTime": 205, - "source": [ - { - "previousNode": "Set1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "updateTime": "2021-05-10T08:20:43.439586Z", - "status": { - "object": true - }, - "boolean": true, - "number": 100 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Cloud Firestore3": [ - { - "startTime": 1678116859884, - "executionTime": 216, - "source": [ - { - "previousNode": "Google Cloud Firestore2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_name": "projects/fixedtestproject/databases/(default)/documents/FixedCollection/5xovkMwha8R2fHwT9HiW", - "_id": "5xovkMwha8R2fHwT9HiW", - "_createTime": "2021-05-12T15:31:35.922541Z", - "_updateTime": "2021-05-12T15:31:35.922541Z", - "number": "3", - "boolean": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Cloud Firestore4": [ - { - "startTime": 1678116860100, - "executionTime": 258, - "source": [ - { - "previousNode": "Google Cloud Firestore3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_name": "projects/fixedtestproject/databases/(default)/documents/FixedCollection/undefined", - "_id": "undefined", - "_createTime": "2021-05-10T08:20:43.439586Z", - "_updateTime": "2021-05-10T08:20:43.439586Z", - "number": "100" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Cloud Firestore6": [ - { - "startTime": 1678116860359, - "executionTime": 246, - "source": [ - { - "previousNode": "Google Cloud Firestore4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Google Cloud Firestore6" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-03-06T15:34:18.548Z", - "stoppedAt": "2023-03-06T15:34:20.605Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/199-snapshot.json b/test-workflows/snapshots/199-snapshot.json deleted file mode 100644 index d7be507280b..00000000000 --- a/test-workflows/snapshots/199-snapshot.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1710331896175, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mailcheck": [ - { - "startTime": 1710331896175, - "executionTime": 15896, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "email": "jan@n8n.io", - "trustRate": 100, - "mxExists": true, - "smtpExists": true, - "isNotSmtpCatchAll": true, - "isNotDisposable": true, - "gravatar": { - "object": true - }, - "githubUsername": "" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Mailcheck" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2024-03-13T12:11:36.175Z", - "stoppedAt": "2024-03-13T12:11:52.071Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/20-snapshot.json b/test-workflows/snapshots/20-snapshot.json deleted file mode 100644 index 3666c642d59..00000000000 --- a/test-workflows/snapshots/20-snapshot.json +++ /dev/null @@ -1,578 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1676891385658, - "executionTime": 1, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Hubspot6": [ - { - "startTime": 1676891385659, - "executionTime": 463, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "portalId": 9435114, - "companyId": 14728009312, - "isDeleted": false, - "properties": { - "object": true - }, - "additionalDomains": [ - "json array" - ], - "stateChanges": [ - "json array" - ], - "mergeAudits": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Hubspot": [ - { - "startTime": 1676891386122, - "executionTime": 539, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "vid": 19501, - "canonical-vid": 19501, - "merged-vids": [ - "json array" - ], - "portal-id": 9435114, - "is-contact": true, - "properties": { - "object": true - }, - "form-submissions": [ - "json array" - ], - "list-memberships": [ - "json array" - ], - "identity-profiles": [ - "json array" - ], - "merge-audits": [ - "json array" - ], - "isNew": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Hubspot7": [ - { - "startTime": 1676891386661, - "executionTime": 483, - "source": [ - { - "previousNode": "Hubspot6" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "portalId": 9435114, - "companyId": 5386687576, - "isDeleted": false, - "properties": { - "object": true - }, - "additionalDomains": [ - "json array" - ], - "stateChanges": [ - "json array" - ], - "mergeAudits": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.5 second": [ - { - "startTime": 1676891387144, - "executionTime": 515, - "source": [ - { - "previousNode": "Hubspot" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "vid": 19501, - "canonical-vid": 19501, - "merged-vids": [ - "json array" - ], - "portal-id": 9435114, - "is-contact": true, - "properties": { - "object": true - }, - "form-submissions": [ - "json array" - ], - "list-memberships": [ - "json array" - ], - "identity-profiles": [ - "json array" - ], - "merge-audits": [ - "json array" - ], - "isNew": false - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Hubspot9": [ - { - "startTime": 1676891387659, - "executionTime": 200, - "source": [ - { - "previousNode": "Hubspot7" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "portalId": 9435114, - "companyId": 5441478717, - "isDeleted": false, - "properties": { - "object": true - }, - "additionalDomains": [ - "json array" - ], - "stateChanges": [ - "json array" - ], - "mergeAudits": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Hubspot2": [ - { - "startTime": 1676891387860, - "executionTime": 274, - "source": [ - { - "previousNode": "Sleep 0.5 second" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "vid": 19501, - "canonical-vid": 19501, - "merged-vids": [ - "json array" - ], - "portal-id": 9435114, - "is-contact": true, - "properties": { - "object": true - }, - "form-submissions": [ - "json array" - ], - "identity-profiles": [ - "json array" - ], - "merge-audits": [ - "json array" - ], - "addedAt": 1641349488565 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Hubspot8": [ - { - "startTime": 1676891388134, - "executionTime": 255, - "source": [ - { - "previousNode": "Hubspot9" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "portalId": 9435114, - "companyId": 12067739738, - "isDeleted": false, - "properties": { - "object": true - }, - "additionalDomains": [ - "json array" - ], - "stateChanges": [ - "json array" - ], - "mergeAudits": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.5 second1": [ - { - "startTime": 1676891388393, - "executionTime": 517, - "source": [ - { - "previousNode": "Hubspot2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "vid": 19501, - "canonical-vid": 19501, - "merged-vids": [ - "json array" - ], - "portal-id": 9435114, - "is-contact": true, - "properties": { - "object": true - }, - "form-submissions": [ - "json array" - ], - "identity-profiles": [ - "json array" - ], - "merge-audits": [ - "json array" - ], - "addedAt": 1641349488565 - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Hubspot10": [ - { - "startTime": 1676891388911, - "executionTime": 561, - "source": [ - { - "previousNode": "Hubspot8" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "portalId": 9435114, - "companyId": 14728009312, - "isDeleted": false, - "properties": { - "object": true - }, - "additionalDomains": [ - "json array" - ], - "stateChanges": [ - "json array" - ], - "mergeAudits": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Hubspot3": [ - { - "startTime": 1676891389472, - "executionTime": 263, - "source": [ - { - "previousNode": "Sleep 0.5 second1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "19901", - "properties": { - "object": true - }, - "createdAt": "2022-12-13T09:38:40.693Z", - "updatedAt": "2022-12-13T09:38:55.035Z", - "archived": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Hubspot11": [ - { - "startTime": 1676891389735, - "executionTime": 268, - "source": [ - { - "previousNode": "Hubspot10" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "portalId": 9435114, - "companyId": 14728009312, - "isDeleted": false, - "properties": { - "object": true - }, - "additionalDomains": [ - "json array" - ], - "stateChanges": [ - "json array" - ], - "mergeAudits": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Function": [ - { - "startTime": 1676891390006, - "executionTime": 1510, - "source": [ - { - "previousNode": "Hubspot3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "19901", - "properties": { - "object": true - }, - "createdAt": "2022-12-13T09:38:40.693Z", - "updatedAt": "2022-12-13T09:38:55.035Z", - "archived": false - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Hubspot12": [ - { - "startTime": 1676891391516, - "executionTime": 303, - "source": [ - { - "previousNode": "Hubspot11" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "companyId": 14728009312, - "deleted": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Hubspot1": [ - { - "startTime": 1676891391821, - "executionTime": 288, - "source": [ - { - "previousNode": "Function" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [] - ] - } - } - ] - }, - "lastNodeExecuted": "Hubspot1" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-02-20T11:09:45.654Z", - "stoppedAt": "2023-02-20T11:09:52.112Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/202-snapshot.json b/test-workflows/snapshots/202-snapshot.json deleted file mode 100644 index eb1ea91a804..00000000000 --- a/test-workflows/snapshots/202-snapshot.json +++ /dev/null @@ -1,260 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "hints": [], - "startTime": 1726655396881, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Beeminder": [ - { - "hints": [], - "startTime": 1726655396881, - "executionTime": 2507, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "timestamp": 1726655397, - "value": 1, - "comment": "", - "id": "66eaaba5f0168a005520990a", - "updated_at": 1726655397, - "requestid": { - "object": true - }, - "canonical": "18 1", - "fulltext": "2024-Sep-18 entered at 12:29 by n8nsandbox via api", - "urtext": { - "object": true - }, - "origin": "api", - "creator": "n8nsandbox", - "created_at": "2024-09-18T10:29:57.000Z", - "daystamp": "20240918", - "status": "created" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Beeminder1": [ - { - "hints": [], - "startTime": 1726655399388, - "executionTime": 652, - "source": [ - { - "previousNode": "Beeminder" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "timestamp": 1726655397, - "value": 1, - "comment": "", - "id": "66eaaba5f0168a005520990a", - "updated_at": 1726655397, - "requestid": { - "object": true - }, - "canonical": "18 1", - "fulltext": "2024-Sep-18 entered at 12:29 by n8nsandbox via api", - "urtext": { - "object": true - }, - "origin": "api", - "creator": "n8nsandbox", - "created_at": "2024-09-18T10:29:57.000Z", - "daystamp": "20240918" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Beeminder2": [ - { - "hints": [], - "startTime": 1726655400040, - "executionTime": 5736, - "source": [ - { - "previousNode": "Beeminder1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "timestamp": 1726655397, - "value": 10, - "comment": "", - "id": "66eaaba5f0168a005520990a", - "updated_at": 1726655405, - "requestid": { - "object": true - }, - "canonical": "18 10", - "fulltext": "2024-Sep-18 entered at 12:29 by n8nsandbox via api", - "urtext": { - "object": true - }, - "origin": "api", - "creator": "n8nsandbox", - "created_at": "2024-09-18T10:29:57.000Z", - "daystamp": "20240918" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Beeminder4": [ - { - "hints": [], - "startTime": 1726655405776, - "executionTime": 5760, - "source": [ - { - "previousNode": "Beeminder2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "timestamp": 1726655411, - "value": 3, - "comment": "", - "id": "66eaabb3f0168a0069209095", - "updated_at": 1726655411, - "requestid": { - "object": true - }, - "canonical": "18 3", - "fulltext": "2024-Sep-18 entered at 12:30 by n8nsandbox via api", - "urtext": { - "object": true - }, - "origin": "api", - "creator": "n8nsandbox", - "created_at": "2024-09-18T10:30:11.000Z", - "daystamp": "20240918", - "status": "created" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Beeminder3": [ - { - "hints": [], - "startTime": 1726655411536, - "executionTime": 5731, - "source": [ - { - "previousNode": "Beeminder4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "timestamp": 1726655411, - "value": 3, - "comment": "", - "id": "66eaabb3f0168a0069209095", - "updated_at": 1726655411, - "requestid": { - "object": true - }, - "canonical": "18 3", - "fulltext": "2024-Sep-18 entered at 12:30 by n8nsandbox via api", - "urtext": { - "object": true - }, - "origin": "api", - "creator": "n8nsandbox", - "created_at": "2024-09-18T10:30:11.000Z", - "daystamp": "20240918" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Beeminder3" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2024-09-18T10:29:56.881Z", - "stoppedAt": "2024-09-18T10:30:17.267Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/203-snapshot.json b/test-workflows/snapshots/203-snapshot.json deleted file mode 100644 index 79efb66a312..00000000000 --- a/test-workflows/snapshots/203-snapshot.json +++ /dev/null @@ -1,327 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343995157, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Paddle": [ - { - "startTime": 1747343995157, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 318, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 11452, - "name": "n8n test subscription", - "billing_type": "month", - "billing_period": 3, - "initial_price": { - "object": true - }, - "recurring_price": { - "object": true - }, - "trial_days": 14 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Paddle2": [ - { - "startTime": 1747343995475, - "executionIndex": 2, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 304, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 11451, - "name": "n8n test for Omar", - "description": "a great n8n test product", - "base_price": { - "object": true - }, - "sale_price": { - "object": true - }, - "currency": "USD", - "screenshots": [ - "json array" - ], - "icon": "https://sandbox-static.paddle.com/assets/images/checkout/default_product_icon.png" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Paddle3": [ - { - "startTime": 1747343995779, - "executionIndex": 3, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 227, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "subscription_id": 101066, - "plan_id": 11452, - "user_id": 3076, - "user_email": "name@example.com", - "marketing_consent": false, - "update_url": "https://sandbox-subscription-management.paddle.com/subscription/101066/hash/250b0346bbd6fb46bebbd6f9c989ffb7333d628b082fe54658658bacf5311bf3/update", - "cancel_url": "https://sandbox-subscription-management.paddle.com/subscription/101066/hash/250b0346bbd6fb46bebbd6f9c989ffb7333d628b082fe54658658bacf5311bf3/cancel", - "state": "paused", - "signup_date": "2021-05-14 08:52:59", - "last_payment": { - "object": true - }, - "linked_subscriptions": [ - "json array" - ], - "custom_data": { - "object": true - }, - "payment_information": { - "object": true - }, - "paused_at": "2022-04-08 00:02:35", - "paused_from": "2022-03-24 00:00:00", - "paused_reason": "delinquent" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Paddle4": [ - { - "startTime": 1747343996006, - "executionIndex": 4, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 212, - "executionStatus": "success", - "data": { - "main": [ - [] - ] - } - } - ], - "Paddle1": [ - { - "startTime": 1747343996218, - "executionIndex": 5, - "source": [ - { - "previousNode": "Paddle" - } - ], - "hints": [], - "executionTime": 480, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 11452, - "name": "n8n test subscription", - "billing_type": "month", - "billing_period": 3, - "initial_price": { - "object": true - }, - "recurring_price": { - "object": true - }, - "trial_days": 14 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Paddle5": [ - { - "startTime": 1747343996698, - "executionIndex": 6, - "source": [ - { - "previousNode": "Paddle2" - } - ], - "hints": [], - "executionTime": 226, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "coupon": "76879241" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Paddle6": [ - { - "startTime": 1747343996924, - "executionIndex": 7, - "source": [ - { - "previousNode": "Paddle5" - } - ], - "hints": [], - "executionTime": 216, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "updated": 1 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Paddle7": [ - { - "startTime": 1747343997140, - "executionIndex": 8, - "source": [ - { - "previousNode": "Paddle6" - } - ], - "hints": [], - "executionTime": 338, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "coupon": "722F58E2", - "description": { - "object": true - }, - "discount_type": "flat", - "discount_amount": "5.000000000", - "discount_currency": "USD", - "allowed_uses": 999999, - "times_used": 0, - "is_recurring": false, - "expires": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Paddle7" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:55.156Z", - "stoppedAt": "2025-05-15T21:19:57.478Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/205-snapshot.json b/test-workflows/snapshots/205-snapshot.json deleted file mode 100644 index e39028457c6..00000000000 --- a/test-workflows/snapshots/205-snapshot.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343995217, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Pushover": [ - { - "startTime": 1747343995217, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 558, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "info": "no active devices to send to", - "status": 1, - "request": "913c6bfe-1c3d-46c6-9d04-cabd7545d426" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Pushover" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:55.217Z", - "stoppedAt": "2025-05-15T21:19:55.775Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/208-snapshot.json b/test-workflows/snapshots/208-snapshot.json deleted file mode 100644 index 6d1e3e938ad..00000000000 --- a/test-workflows/snapshots/208-snapshot.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1676891424945, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "RocketChat": [ - { - "startTime": 1676891424946, - "executionTime": 155, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "ts": 1676891425122, - "channel": "general", - "message": { - "object": true - }, - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "RocketChat" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-02-20T11:10:24.943Z", - "stoppedAt": "2023-02-20T11:10:25.101Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/209-snapshot.json b/test-workflows/snapshots/209-snapshot.json deleted file mode 100644 index 6216e28ad37..00000000000 --- a/test-workflows/snapshots/209-snapshot.json +++ /dev/null @@ -1,246 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343995231, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set job name": [ - { - "startTime": 1747343995231, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "job_name": "nodemation_job_1747343995232" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AWS Transcribe": [ - { - "startTime": 1747343995232, - "executionIndex": 2, - "source": [ - { - "previousNode": "Set job name" - } - ], - "hints": [], - "executionTime": 539, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "CreationTime": 1747343995.631, - "LanguageCode": "en-US", - "Media": { - "object": true - }, - "Settings": { - "object": true - }, - "StartTime": 1747343995.653, - "TranscriptionJobName": "nodemation_job_1747343995232", - "TranscriptionJobStatus": "IN_PROGRESS" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AWS Transcribe1": [ - { - "startTime": 1747343995771, - "executionIndex": 3, - "source": [ - { - "previousNode": "AWS Transcribe" - } - ], - "hints": [], - "executionTime": 368, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "CreationTime": 1747343995.631, - "LanguageCode": "en-US", - "Media": { - "object": true - }, - "Settings": { - "object": true - }, - "StartTime": 1747343995.653, - "Transcript": { - "object": true - }, - "TranscriptionJobName": "nodemation_job_1747343995232", - "TranscriptionJobStatus": "IN_PROGRESS" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AWS Transcribe2": [ - { - "startTime": 1747343996139, - "executionIndex": 4, - "source": [ - { - "previousNode": "AWS Transcribe1" - } - ], - "hints": [], - "executionTime": 551, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "CreationTime": 1747343995.631, - "LanguageCode": "en-US", - "OutputLocationType": "SERVICE_BUCKET", - "StartTime": 1747343995.653, - "TranscriptionJobName": "nodemation_job_1747343995232", - "TranscriptionJobStatus": "IN_PROGRESS" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 30 seconds": [ - { - "startTime": 1747343996690, - "executionIndex": 5, - "source": [ - { - "previousNode": "AWS Transcribe2" - } - ], - "hints": [], - "executionTime": 30001, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "CreationTime": 1747343995.631, - "LanguageCode": "en-US", - "OutputLocationType": "SERVICE_BUCKET", - "StartTime": 1747343995.653, - "TranscriptionJobName": "nodemation_job_1747343995232", - "TranscriptionJobStatus": "IN_PROGRESS" - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "AWS Transcribe3": [ - { - "startTime": 1747344026691, - "executionIndex": 6, - "source": [ - { - "previousNode": "Sleep 30 seconds" - } - ], - "hints": [], - "executionTime": 440, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "AWS Transcribe3" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:55.231Z", - "stoppedAt": "2025-05-15T21:20:27.131Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/21-snapshot.json b/test-workflows/snapshots/21-snapshot.json deleted file mode 100644 index e7da28deee5..00000000000 --- a/test-workflows/snapshots/21-snapshot.json +++ /dev/null @@ -1,473 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1676891385716, - "executionTime": 1, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Hubspot8": [ - { - "startTime": 1676891385718, - "executionTime": 397, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "portalId": 9435114, - "objectType": "TICKET", - "objectId": 1446939454, - "properties": { - "object": true - }, - "isDeleted": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Hubspot": [ - { - "startTime": 1676891386116, - "executionTime": 307, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "portalId": 9435114, - "dealId": 12238637873, - "isDeleted": false, - "associations": { - "object": true - }, - "properties": { - "object": true - }, - "stateChanges": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Hubspot9": [ - { - "startTime": 1676891386423, - "executionTime": 363, - "source": [ - { - "previousNode": "Hubspot8" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "portalId": 9435114, - "objectType": "TICKET", - "objectId": 1446939454, - "properties": { - "object": true - }, - "version": 1, - "isDeleted": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Hubspot4": [ - { - "startTime": 1676891386786, - "executionTime": 233, - "source": [ - { - "previousNode": "Hubspot" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "portalId": 9435114, - "dealId": 12238637873, - "isDeleted": false, - "associations": { - "object": true - }, - "properties": { - "object": true - }, - "stateChanges": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Hubspot10": [ - { - "startTime": 1676891387019, - "executionTime": 250, - "source": [ - { - "previousNode": "Hubspot9" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "portalId": 9435114, - "objectType": "TICKET", - "objectId": 1428212240, - "properties": { - "object": true - }, - "isDeleted": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Hubspot1": [ - { - "startTime": 1676891387269, - "executionTime": 233, - "source": [ - { - "previousNode": "Hubspot4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "portalId": 9435114, - "dealId": 4167790328, - "isDeleted": false, - "associations": { - "object": true - }, - "properties": { - "object": true - }, - "stateChanges": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Hubspot11": [ - { - "startTime": 1676891387502, - "executionTime": 220, - "source": [ - { - "previousNode": "Hubspot10" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "portalId": 9435114, - "objectType": "TICKET", - "objectId": 1428212240, - "properties": { - "object": true - }, - "isDeleted": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Hubspot3": [ - { - "startTime": 1676891387722, - "executionTime": 243, - "source": [ - { - "previousNode": "Hubspot1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "12238377353", - "properties": { - "object": true - }, - "createdAt": "2023-02-20T10:54:32.477Z", - "updatedAt": "2023-02-20T10:54:33.440Z", - "archived": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Hubspot12": [ - { - "startTime": 1676891387965, - "executionTime": 373, - "source": [ - { - "previousNode": "Hubspot11" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Hubspot5": [ - { - "startTime": 1676891388338, - "executionTime": 271, - "source": [ - { - "previousNode": "Hubspot3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "portalId": 9435114, - "dealId": 12238377353, - "isDeleted": false, - "associations": { - "object": true - }, - "properties": { - "object": true - }, - "stateChanges": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Hubspot7": [ - { - "startTime": 1676891388623, - "executionTime": 263, - "source": [ - { - "previousNode": "Hubspot5" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "portalId": 9435114, - "dealId": 12238377353, - "isDeleted": false, - "associations": { - "object": true - }, - "properties": { - "object": true - }, - "stateChanges": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Hubspot2": [ - { - "startTime": 1676891388895, - "executionTime": 242, - "source": [ - { - "previousNode": "Hubspot7" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "portalId": 9435114, - "dealId": 12238377353, - "isDeleted": false, - "associations": { - "object": true - }, - "properties": { - "object": true - }, - "stateChanges": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Hubspot6": [ - { - "startTime": 1676891389141, - "executionTime": 300, - "source": [ - { - "previousNode": "Hubspot2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Hubspot6" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-02-20T11:09:45.712Z", - "stoppedAt": "2023-02-20T11:09:49.441Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/212-snapshot.json b/test-workflows/snapshots/212-snapshot.json deleted file mode 100644 index 0323fece44d..00000000000 --- a/test-workflows/snapshots/212-snapshot.json +++ /dev/null @@ -1,546 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343995426, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Delete existing dir": [ - { - "startTime": 1747343995426, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 13, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "exitCode": 0, - "stderr": "", - "stdout": "" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Git": [ - { - "startTime": 1747343995439, - "executionIndex": 2, - "source": [ - { - "previousNode": "Delete existing dir" - } - ], - "hints": [], - "executionTime": 515, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Git1": [ - { - "startTime": 1747343995954, - "executionIndex": 3, - "source": [ - { - "previousNode": "Git" - } - ], - "hints": [], - "executionTime": 13, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "_file": "/Library/Developer/CommandLineTools/usr/share/git-core/gitconfig" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Git2": [ - { - "startTime": 1747343995967, - "executionIndex": 4, - "source": [ - { - "previousNode": "Git1" - } - ], - "hints": [], - "executionTime": 170, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "success": true - }, - "pairedItem": { - "item": 1 - } - } - ] - ] - } - } - ], - "Git7": [ - { - "startTime": 1747343996137, - "executionIndex": 5, - "source": [ - { - "previousNode": "Git2" - } - ], - "hints": [], - "executionTime": 132, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "success": true - }, - "pairedItem": { - "item": 1 - } - } - ] - ] - } - } - ], - "Add file to dir": [ - { - "startTime": 1747343996269, - "executionIndex": 6, - "source": [ - { - "previousNode": "Git7" - } - ], - "hints": [], - "executionTime": 5, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "exitCode": 0, - "stderr": "", - "stdout": "" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Git3": [ - { - "startTime": 1747343996274, - "executionIndex": 7, - "source": [ - { - "previousNode": "Add file to dir" - } - ], - "hints": [], - "executionTime": 147, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Git4": [ - { - "startTime": 1747343996421, - "executionIndex": 8, - "source": [ - { - "previousNode": "Git3" - } - ], - "hints": [], - "executionTime": 273, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "not_added": [ - "json array" - ], - "conflicted": [ - "json array" - ], - "created": [ - "json array" - ], - "deleted": [ - "json array" - ], - "modified": [ - "json array" - ], - "renamed": [ - "json array" - ], - "files": [ - "json array" - ], - "staged": [ - "json array" - ], - "ahead": 0, - "behind": 0, - "current": "main", - "tracking": "origin/main", - "detached": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Git5": [ - { - "startTime": 1747343996694, - "executionIndex": 9, - "source": [ - { - "previousNode": "Git4" - } - ], - "hints": [], - "executionTime": 24, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Git6": [ - { - "startTime": 1747343996718, - "executionIndex": 10, - "source": [ - { - "previousNode": "Git5" - } - ], - "hints": [], - "executionTime": 13, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "hash": "103944f38dc823d0f4a9d0720c9bdbd18528cd21", - "date": "2025-05-15T22:19:56+01:00", - "message": "GitNode commit Thu, 15 May 2025 21:19:56 GMT", - "refs": "HEAD -> main", - "body": "", - "author_name": "nodemationqa", - "author_email": "nodeqa@n8n.io" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Git8": [ - { - "startTime": 1747343996731, - "executionIndex": 11, - "source": [ - { - "previousNode": "Git6" - } - ], - "hints": [], - "executionTime": 63, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Git9": [ - { - "startTime": 1747343996794, - "executionIndex": 12, - "source": [ - { - "previousNode": "Git8" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Git10": [ - { - "startTime": 1747343996794, - "executionIndex": 13, - "source": [ - { - "previousNode": "Git9" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Git11": [ - { - "startTime": 1747343996794, - "executionIndex": 14, - "source": [ - { - "previousNode": "Git10" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Git12": [ - { - "startTime": 1747343996794, - "executionIndex": 15, - "source": [ - { - "previousNode": "Git11" - } - ], - "hints": [], - "executionTime": 352, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Git13": [ - { - "startTime": 1747343997146, - "executionIndex": 16, - "source": [ - { - "previousNode": "Git12" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Git13" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:55.426Z", - "stoppedAt": "2025-05-15T21:19:57.146Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/216-snapshot.json b/test-workflows/snapshots/216-snapshot.json deleted file mode 100644 index 32b121b8c9a..00000000000 --- a/test-workflows/snapshots/216-snapshot.json +++ /dev/null @@ -1,169 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343995559, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Handle JSON data": [ - { - "startTime": 1747343995559, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 2, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "arr": [ - "json array" - ], - "str": "Testing Function Item node", - "num": 1337, - "obj": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Handle Binary data": [ - { - "startTime": 1747343995561, - "executionIndex": 2, - "source": [ - { - "previousNode": "Handle JSON data" - } - ], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "arr": [ - "json array" - ], - "str": "Testing Function Item node", - "num": 1337, - "obj": { - "object": true - }, - "binaryData": "NIL" - }, - "pairedItem": { - "item": 0 - }, - "binary": { - "data": { - "data": "SGVsbG8gZnJvbSBuOG4gRnVuY3Rpb24gaXRlbSB0ZXN0aW5nIHdvcmtmbG93", - "mimeType": "text", - "fileExtension": "text", - "fileName": "testfile" - } - } - } - ] - ] - } - } - ], - "Handle Static data": [ - { - "startTime": 1747343995562, - "executionIndex": 3, - "source": [ - { - "previousNode": "Handle Binary data" - } - ], - "hints": [], - "executionTime": 3, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "arr": [ - "json array" - ], - "str": "Testing Function Item node", - "num": 1337, - "obj": { - "object": true - }, - "binaryData": "NIL", - "globalStaticMessage": "Hello, Global Static Data", - "nodeStaticMessage": "Hello, Node Static Data" - }, - "pairedItem": { - "item": 0 - }, - "binary": { - "data": { - "data": "SGVsbG8gZnJvbSBuOG4gRnVuY3Rpb24gaXRlbSB0ZXN0aW5nIHdvcmtmbG93", - "mimeType": "text", - "fileExtension": "text", - "fileName": "testfile" - } - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Handle Static data" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:55.559Z", - "stoppedAt": "2025-05-15T21:19:55.565Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/223-snapshot.json b/test-workflows/snapshots/223-snapshot.json deleted file mode 100644 index 97f3eeadc9c..00000000000 --- a/test-workflows/snapshots/223-snapshot.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "hints": [], - "startTime": 1738078174417, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "LingvaNex": [ - { - "hints": [], - "startTime": 1738078174417, - "executionTime": 374, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "err": { - "object": true - }, - "result": "Automatisierung" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "LingvaNex" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-01-28T15:29:34.416Z", - "stoppedAt": "2025-01-28T15:29:34.791Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/229-snapshot.json b/test-workflows/snapshots/229-snapshot.json deleted file mode 100644 index 5f16fc811e5..00000000000 --- a/test-workflows/snapshots/229-snapshot.json +++ /dev/null @@ -1,664 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747343995588, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive11": [ - { - "startTime": 1747343995588, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 700, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "1QBrItvwcOaEONfCcfDHPpdK_BLTEtBNA", - "name": "testFolder" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive14": [ - { - "startTime": 1747343996288, - "executionIndex": 2, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 1739, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "drive#file", - "id": "1MMAfuJxKmbuzT_JWF98PjJCPxXnxykMW", - "name": "testFile", - "mimeType": "text/plain" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive3": [ - { - "startTime": 1747343998027, - "executionIndex": 3, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 1616, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "drive#file", - "id": "1KbJrxtMCxK4fFq8Cd0_-66dxnW5kSzDN", - "name": "testFile", - "mimeType": "text/plain" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive": [ - { - "startTime": 1747343999643, - "executionIndex": 4, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 536, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "1X-5udmSom0Xew6oE2g7Glrd9t7u6srsN", - "name": "testFolder" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive12": [ - { - "startTime": 1747344000179, - "executionIndex": 5, - "source": [ - { - "previousNode": "Google Drive11" - } - ], - "hints": [], - "executionTime": 601, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "drive#permission", - "id": "anyoneWithLink", - "type": "anyone", - "role": "reader", - "allowFileDiscovery": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive15": [ - { - "startTime": 1747344000780, - "executionIndex": 6, - "source": [ - { - "previousNode": "Google Drive14" - } - ], - "hints": [], - "executionTime": 686, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "drive#permission", - "id": "anyoneWithLink", - "type": "anyone", - "role": "reader", - "allowFileDiscovery": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive4": [ - { - "startTime": 1747344001466, - "executionIndex": 7, - "source": [ - { - "previousNode": "Google Drive3" - } - ], - "hints": [], - "executionTime": 543, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "drive#permission", - "id": "anyoneWithLink", - "type": "anyone", - "role": "reader", - "allowFileDiscovery": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive1": [ - { - "startTime": 1747344002009, - "executionIndex": 8, - "source": [ - { - "previousNode": "Google Drive" - } - ], - "hints": [], - "executionTime": 614, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "drive#permission", - "id": "anyoneWithLink", - "type": "anyone", - "role": "reader", - "allowFileDiscovery": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive13": [ - { - "startTime": 1747344002623, - "executionIndex": 9, - "source": [ - { - "previousNode": "Google Drive12" - } - ], - "hints": [], - "executionTime": 464, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "fileId": "1QBrItvwcOaEONfCcfDHPpdK_BLTEtBNA", - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive16": [ - { - "startTime": 1747344003087, - "executionIndex": 10, - "source": [ - { - "previousNode": "Google Drive15" - } - ], - "hints": [], - "executionTime": 428, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "1YNeDnFJOaq3mDazf8Ezm3V3K-aIKdmugke2m89Qf3dg", - "name": "oupa" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive5": [ - { - "startTime": 1747344003515, - "executionIndex": 11, - "source": [ - { - "previousNode": "Google Drive4" - } - ], - "hints": [], - "executionTime": 430, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "1YNeDnFJOaq3mDazf8Ezm3V3K-aIKdmugke2m89Qf3dg", - "name": "oupa" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive2": [ - { - "startTime": 1747344003945, - "executionIndex": 12, - "source": [ - { - "previousNode": "Google Drive1" - } - ], - "hints": [], - "executionTime": 450, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "fileId": "1X-5udmSom0Xew6oE2g7Glrd9t7u6srsN", - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive17": [ - { - "startTime": 1747344004395, - "executionIndex": 13, - "source": [ - { - "previousNode": "Google Drive16" - } - ], - "hints": [], - "executionTime": 933, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "1YNeDnFJOaq3mDazf8Ezm3V3K-aIKdmugke2m89Qf3dg", - "name": "oupa" - }, - "binary": { - "data": { - "mimeType": "text/plain", - "fileType": "text", - "fileExtension": "txt", - "data": "VGVzdCBGaWxlIENvbnRlbnQ=", - "fileName": "testFile", - "fileSize": "17 B" - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive6": [ - { - "startTime": 1747344005328, - "executionIndex": 14, - "source": [ - { - "previousNode": "Google Drive5" - } - ], - "hints": [], - "executionTime": 913, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "1YNeDnFJOaq3mDazf8Ezm3V3K-aIKdmugke2m89Qf3dg", - "name": "oupa" - }, - "binary": { - "data": { - "mimeType": "text/plain", - "fileType": "text", - "fileExtension": "txt", - "data": "VGVzdCBGaWxlIENvbnRlbnQ=", - "fileName": "testFile", - "fileSize": "17 B" - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive18": [ - { - "startTime": 1747344006241, - "executionIndex": 15, - "source": [ - { - "previousNode": "Google Drive17" - } - ], - "hints": [], - "executionTime": 881, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "drive#file", - "id": "1tJSggHaGcdtLmpE_ZVkm_aYBShbeh1d-", - "name": "testFile", - "mimeType": "text/plain" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive7": [ - { - "startTime": 1747344007122, - "executionIndex": 16, - "source": [ - { - "previousNode": "Google Drive6" - } - ], - "hints": [], - "executionTime": 746, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "drive#file", - "id": "1qkiRpLoY_9OrJmfq_ykRfFfy6xEXU1uW", - "name": "testFile", - "mimeType": "text/plain" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive19": [ - { - "startTime": 1747344007868, - "executionIndex": 17, - "source": [ - { - "previousNode": "Google Drive18" - } - ], - "hints": [], - "executionTime": 475, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "fileId": "1MMAfuJxKmbuzT_JWF98PjJCPxXnxykMW", - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive8": [ - { - "startTime": 1747344008344, - "executionIndex": 18, - "source": [ - { - "previousNode": "Google Drive7" - } - ], - "hints": [], - "executionTime": 485, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "fileId": "1KbJrxtMCxK4fFq8Cd0_-66dxnW5kSzDN", - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive10": [ - { - "startTime": 1747344008829, - "executionIndex": 19, - "source": [ - { - "previousNode": "Google Drive19" - } - ], - "hints": [], - "executionTime": 431, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "fileId": "1tJSggHaGcdtLmpE_ZVkm_aYBShbeh1d-", - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive9": [ - { - "startTime": 1747344009260, - "executionIndex": 20, - "source": [ - { - "previousNode": "Google Drive8" - } - ], - "hints": [], - "executionTime": 520, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "fileId": "1qkiRpLoY_9OrJmfq_ykRfFfy6xEXU1uW", - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Google Drive9" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:55.587Z", - "stoppedAt": "2025-05-15T21:20:09.780Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/230-snapshot.json b/test-workflows/snapshots/230-snapshot.json deleted file mode 100644 index 4dc0cd4cfc2..00000000000 --- a/test-workflows/snapshots/230-snapshot.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking \"Execute Workflow\"": [ - { - "startTime": 1747343995774, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "VirusTotal HTTP Request": [ - { - "startTime": 1747343995774, - "executionIndex": 1, - "source": [ - { - "previousNode": "When clicking \"Execute Workflow\"" - } - ], - "hints": [ - { - "message": "To split the contents of β€˜data’ into separate items for easier processing, add a β€˜Split Out’ node after this one", - "location": "outputPane" - } - ], - "executionTime": 383, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "VirusTotal HTTP Request" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:55.773Z", - "stoppedAt": "2025-05-15T21:19:56.157Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/231-snapshot.json b/test-workflows/snapshots/231-snapshot.json deleted file mode 100644 index cbebcd37535..00000000000 --- a/test-workflows/snapshots/231-snapshot.json +++ /dev/null @@ -1,164 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking \"Test workflow\"": [ - { - "startTime": 1747343995790, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Invalid Host header": [ - { - "startTime": 1747343995791, - "executionIndex": 1, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 64, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "error": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Internal SSL Error?": [ - { - "startTime": 1747343995855, - "executionIndex": 2, - "source": [ - { - "previousNode": "Invalid Host header" - } - ], - "hints": [], - "executionTime": 2, - "executionStatus": "success", - "data": { - "main": [ - [], - [ - { - "json": { - "error": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Success": [ - { - "startTime": 1747343995857, - "executionIndex": 3, - "source": [ - { - "previousNode": "Internal SSL Error?", - "previousNodeOutput": 1 - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "error": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Cross Domain Redirect": [ - { - "startTime": 1747343995857, - "executionIndex": 4, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 992, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": "\n\nPowerful Workflow Automation Software & Tools - n8n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\"Hero

Flexible AI workflow automation for technical teams

Build with the precision of code or the speed of drag-n-drop. Host with on-prem control or in-the-cloud convenience. n8n gives you more freedom to implement multi-step AI agents and integrate apps than any other tool.

Plug AI into your own data & over 500 integrations

The fast way to actually get AI working in your business

Build multi-step agents calling custom tools

Create agentic systems on a single screen. Integrate any LLM into your workflows as fast as you can drag-n-drop.

Explore AI

\"Teams
Update Detected Running Custom Unit Testing Update Rolled Back Automatically
IT Team Notified of New Ticket Custom Unit Testing Failed Update Installed
\"Local\"Fully

Self-host everything – including AI models

Protect your data by deploying on-prem.

  • Deploy with Docker

    \n
  • Access the entire source code on Github

    \n
  • Hosted version also available

    \n

Chat with your own data

Use Slack, Teams, SMS, voice, or our embedded chat interface to get accurate answers from your data, create tasks, and complete workflows.

Who held meetings with SpaceX last week?
On Wednesday, Joe updated the status to \"won\" in Salesforce after a Zoom call.
On Thursday, Sue provided on-site setup and closed the ServiceNow ticket.
Create a task in Asana...
\"Code

Code when you need it, UI when you don't

Other tools limit you to either a visual building experience, or code. With n8n, you get the best of both worlds.

  • Write JavaScript or Python - you can always fall back to code

    \n
  • Add libraries from npm or Python for even more power

    \n
  • Paste cURL requests into your workflow

    \n
  • Merge workflow branches, don’t just split them

    \n
\"Thunder\"

Run. Tweak. Repeat

The same short feedback loops that make you smile at your scripts.

  • Re-run single steps without re-running the whole workflow

    \n
  • Replay or mock data to avoid waiting for external systems

    \n
  • Debug fast, with logs in line with your code

    \n
  • Use 1700+ templates to jump-start your project

    \n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n See The Results

Case Studies

\"Delivery

How Delivery Hero saved 200 hours each month with a single ITOps workflow

\n

Read Case Study
\"The

How StepStone finishes 2 weeks’ work in only 2 hours with n8n workflows

\n

Read Case Study
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n Enterprise-ready

Secure. Reliable. Collaborative.

Remove inefficiencies across your org by rolling out automation as reliably as you deploy code. Run n8n air-gapped on your servers or on our secure cloud-based solution.

  • Security

    Fully on-prem option, SSO SAML, and LDAP, encrypted secret stores, version control, advanced RBAC permissions.

    \n
  • Performance

    Audit logs & log streaming to 3rd party, workflow history, custom variables, external storage.

    \n
  • Collaboration

    Git Control, isolated environments, multi-user workflows.

    \n

"The idea is that everybody in the organization can use n8n to manage data retrieval or data transformation."

\"Martino

Martino Bonfiglioli

Senior Product Manager

\n
See the case
\"Automation\"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n n8n embed

Automation for your customers

Wow your customers with access to 500+ app integrations to automate their own workflows. Your branding. Our white-labelled tech. \n

\n\n" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Cross Domain Redirect" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:55.790Z", - "stoppedAt": "2025-05-15T21:19:56.849Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/232-snapshot.json b/test-workflows/snapshots/232-snapshot.json deleted file mode 100644 index 43f064e4386..00000000000 --- a/test-workflows/snapshots/232-snapshot.json +++ /dev/null @@ -1,126 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking \"Test workflow\"": [ - { - "startTime": 1709625796309, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Cohere Model": [ - { - "startTime": 1709625796771, - "executionTime": 354, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "How much is 1+1? Only provide the numerical answer without any other text.\n" - ], - "options": { - "signal": {} - } - } - } - ] - ] - } - } - ], - "Cohere Instruct": [ - { - "startTime": 1709625796309, - "executionTime": 1133, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "text": "2" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Cohere Model", - "runIndex": 0 - } - ] - } - } - ] - }, - "lastNodeExecuted": "Cohere Instruct" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": { - "Cohere Instruct": [ - { - "subRun": [ - { - "node": "Cohere Model", - "runIndex": 0 - } - ] - } - ] - }, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2024-03-05T08:03:16.304Z", - "stoppedAt": "2024-03-05T08:03:17.443Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/233-snapshot.json b/test-workflows/snapshots/233-snapshot.json deleted file mode 100644 index 0ce9f1f6216..00000000000 --- a/test-workflows/snapshots/233-snapshot.json +++ /dev/null @@ -1,961 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking \"Test workflow\"": [ - { - "hints": [], - "startTime": 1738078178841, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Code": [ - { - "hints": [ - { - "message": "To make sure expressions after this node work, return the input items that produced each output item. More info", - "location": "outputPane" - } - ], - "startTime": 1738078178841, - "executionTime": 10, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "text": "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Default Data Loader1": [ - { - "startTime": 1738078178875, - "executionTime": 1144, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_document": [ - [ - { - "json": { - "response": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - }, - "inputOverride": { - "ai_document": [ - [ - { - "json": { - "text": "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Default Data Loader1", - "runIndex": 0 - } - ] - } - } - ], - "Token Splitter1": [ - { - "startTime": 1738078178877, - "executionTime": 1142, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_textSplitter": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_textSplitter": [ - [ - { - "json": { - "textSplitter": "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Token Splitter1", - "runIndex": 0 - } - ] - } - } - ], - "Embeddings OpenAI4": [ - { - "startTime": 1738078180072, - "executionTime": 2392, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_embedding": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_embedding": [ - [ - { - "json": { - "documents": [ - "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution", - " uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash", - " model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest", - "-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need", - " next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing", - " new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the", - " confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs", - " see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early", - " ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ", - " ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=", - "1008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4", - ", X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - ] - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Embeddings OpenAI4", - "runIndex": 0 - }, - { - "node": "Embeddings OpenAI4", - "runIndex": 1 - } - ] - } - }, - { - "startTime": 1738078183170, - "executionTime": 820, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_embedding": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_embedding": [ - [ - { - "json": { - "query": "test" - } - } - ] - ] - } - } - ], - "Qdrant Vector Store": [ - { - "hints": [], - "startTime": 1738078178851, - "executionTime": 6311, - "source": [ - { - "previousNode": "Code" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "metadata": { - "object": true - }, - "pageContent": "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": "-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": "1008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": ", X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Check Vector Store Populated1": [ - { - "hints": [], - "startTime": 1738078185162, - "executionTime": 10, - "source": [ - { - "previousNode": "Qdrant Vector Store" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output_length_matches": true, - "has_content": true, - "has_meta": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wait1": [ - { - "hints": [], - "startTime": 1738078185173, - "executionTime": 10001, - "source": [ - { - "previousNode": "Check Vector Store Populated1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output_length_matches": true, - "has_content": true, - "has_meta": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Embeddings OpenAI5": [ - { - "startTime": 1738078195902, - "executionTime": 471, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_embedding": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_embedding": [ - [ - { - "json": { - "query": "Security risks" - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Embeddings OpenAI5", - "runIndex": 0 - } - ] - } - } - ], - "Qdrant Vector Store1": [ - { - "hints": [], - "startTime": 1738078195175, - "executionTime": 1652, - "source": [ - { - "previousNode": "Wait1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "document": { - "object": true - }, - "score": 0.34772277 - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "document": { - "object": true - }, - "score": 0.34708342 - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "document": { - "object": true - }, - "score": 0.3299051 - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "document": { - "object": true - }, - "score": 0.31434047 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Check Vector Store Retrieval1": [ - { - "hints": [], - "startTime": 1738078196827, - "executionTime": 13, - "source": [ - { - "previousNode": "Qdrant Vector Store1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output_length_matches": true, - "has_content": true, - "has_meta": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Vector Store Retriever1": [ - { - "startTime": 1738078197496, - "executionTime": 874, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_retriever": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_retriever": [ - [ - { - "json": { - "query": "What is the size of a block header with no transactions? Respond only with number of bytes." - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Vector Store Retriever1", - "runIndex": 0 - } - ] - } - } - ], - "Qdrant Vector Store2": [ - { - "startTime": 1738078197496, - "executionTime": 874, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_vectorStore": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_vectorStore": [ - [ - { - "json": { - "query": "What is the size of a block header with no transactions? Respond only with number of bytes.", - "k": 4 - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Qdrant Vector Store2", - "runIndex": 0 - } - ] - } - } - ], - "Embeddings OpenAI3": [ - { - "startTime": 1738078197496, - "executionTime": 437, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_embedding": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_embedding": [ - [ - { - "json": { - "query": "What is the size of a block header with no transactions? Respond only with number of bytes." - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Embeddings OpenAI3", - "runIndex": 0 - } - ] - } - } - ], - "OpenAI Chat Model1": [ - { - "startTime": 1738078198377, - "executionTime": 499, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: Use the following pieces of context to answer the users question. \nIf you don't know the answer, just say that you don't know, don't try to make up an answer.\n----------------\n new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the\n\n next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing\n\n confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs\n\n-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need\nHuman: What is the size of a block header with no transactions? Respond only with number of bytes." - ], - "estimatedTokens": 2059, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-3.5-turbo-0125", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model1", - "runIndex": 0 - } - ] - } - } - ], - "Question and Answer Chain1": [ - { - "hints": [], - "startTime": 1738078196841, - "executionTime": 2036, - "source": [ - { - "previousNode": "Check Vector Store Retrieval1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "response": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Edit Fields1": [ - { - "hints": [], - "startTime": 1738078198877, - "executionTime": 6, - "source": [ - { - "previousNode": "Question and Answer Chain1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output_matches": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Delete Collection": [ - { - "hints": [], - "startTime": 1738078198883, - "executionTime": 490, - "source": [ - { - "previousNode": "Edit Fields1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": true, - "status": "ok", - "time": 0.011831243 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Delete Collection" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": { - "Token Splitter1": [ - { - "subRun": [ - { - "node": "Token Splitter1", - "runIndex": 0 - } - ] - } - ], - "Default Data Loader1": [ - { - "subRun": [ - { - "node": "Default Data Loader1", - "runIndex": 0 - } - ] - } - ], - "Embeddings OpenAI4": [ - { - "subRun": [ - { - "node": "Embeddings OpenAI4", - "runIndex": 0 - }, - { - "node": "Embeddings OpenAI4", - "runIndex": 1 - } - ] - } - ], - "Embeddings OpenAI5": [ - { - "subRun": [ - { - "node": "Embeddings OpenAI5", - "runIndex": 0 - } - ] - } - ], - "Embeddings OpenAI3": [ - { - "subRun": [ - { - "node": "Embeddings OpenAI3", - "runIndex": 0 - } - ] - } - ], - "Qdrant Vector Store2": [ - { - "subRun": [ - { - "node": "Qdrant Vector Store2", - "runIndex": 0 - } - ] - } - ], - "Vector Store Retriever1": [ - { - "subRun": [ - { - "node": "Vector Store Retriever1", - "runIndex": 0 - } - ] - } - ], - "OpenAI Chat Model1": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model1", - "runIndex": 0 - } - ] - } - ] - }, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-01-28T15:29:38.839Z", - "stoppedAt": "2025-01-28T15:29:59.373Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/234-snapshot.json b/test-workflows/snapshots/234-snapshot.json deleted file mode 100644 index 100f0daa6f9..00000000000 --- a/test-workflows/snapshots/234-snapshot.json +++ /dev/null @@ -1,146 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking \"Test workflow\"": [ - { - "startTime": 1747343996141, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Mistral Cloud Chat Model": [ - { - "startTime": 1747343996676, - "executionTime": 200, - "executionIndex": 2, - "executionStatus": "success", - "source": [ - { - "previousNode": "Mistral Cloud Chat", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "Human: How much is 1+1? Only provide the numerical answer without any other text.\n" - ], - "estimatedTokens": 20, - "options": { - "mistral_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "MISTRAL_API_KEY" - ] - }, - "model_name": "mistral-tiny", - "temperature": 0 - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Mistral Cloud Chat Model", - "runIndex": 0 - } - ] - } - } - ], - "Mistral Cloud Chat": [ - { - "startTime": 1747343996141, - "executionIndex": 1, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 735, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "text": "2" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Mistral Cloud Chat" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": { - "Mistral Cloud Chat Model": [ - { - "subRun": [ - { - "node": "Mistral Cloud Chat Model", - "runIndex": 0 - } - ] - } - ] - }, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:56.141Z", - "stoppedAt": "2025-05-15T21:19:56.876Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/235-snapshot.json b/test-workflows/snapshots/235-snapshot.json deleted file mode 100644 index a827dc15501..00000000000 --- a/test-workflows/snapshots/235-snapshot.json +++ /dev/null @@ -1,324 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking \"Test workflow\"": [ - { - "startTime": 1747343996197, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set Baseline": [ - { - "startTime": 1747343996197, - "executionIndex": 1, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "baseline_summary": "The dancing plague of 1518 in Strasbourg, Alsace involved between 50 and 400 people dancing uncontrollably for weeks. The cause is unknown, with theories including stress-induced mass hysteria and ergot poisoning. The outbreak ended when the dancers prayed for absolution at a shrine. There is controversy over the number of deaths, with some sources claiming up to fifteen deaths per day, but historical documents do not confirm any fatalities. Similar events have been reported throughout history, inspiring various works of pop culture." - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set Article": [ - { - "startTime": 1747343996197, - "executionIndex": 2, - "source": [ - { - "previousNode": "Set Baseline" - } - ], - "hints": [ - { - "message": "To make sure expressions after this node work, return the input items that produced each output item. More info", - "location": "outputPane" - } - ], - "executionTime": 3, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "text": "The dancing plague of 1518, or dance epidemic of 1518 (French: Γ‰pidΓ©mie dansante de 1518), was a case of dancing mania that occurred in Strasbourg, Alsace (modern-day France), in the Holy Roman Empire from July 1518 to September 1518. Somewhere between 50 and 400 people took to dancing for weeks. There are many theories behind the phenomenon, the most popular being stress-induced mass hysteria, suggested by John Waller. Other theories include ergot and religious explanations. There is controversy concerning the number of deaths.\n\nHistory\nEvents\nThe outbreak began in July 1518 when a woman called Frau Troffea began to dance fervently and uncontrollably in a street in Strasbourg. Troffea kept up the constant dancing for a week. Soon, three dozen others joined in. By August, the \"dancing plague\" had claimed 400 victims. Dancers were beginning to collapse. It is said some even died from a stroke or heart attack. No one knew what caused this reaction, which meant no one understood how to remedy it. By early September, the outbreak began to subside, when the dancers were sent to a mountain shrine to pray for absolution.\n\nHistorical documents, including \"physician notes, cathedral sermons, local and regional chronicles, and even notes issued by the Strasbourg city council\" are clear that the victims danced; it is not known why. Historical sources agree that there was an outbreak of dancing after a single woman started dancing, and the dancing did not seem to die down. It lasted for such a long time that it even attracted the attention of the authorities; until the council gave up authority to the physicians, who prescribed the afflicted to \"dance themselves free of it.\" There are claims that guild halls were refurbished to accommodate the dancing, as well as musicians and strong people to help keep those dealing with the dancing mania to stay upright. This backfired, and the council was forced to ban public dancing as people danced in fear it was a punishment from Saint Vitus; and to be \"free of sin\" many joined in on the dancing epidemic. The council went as far as to ban music, as well. Those who danced were then ordered to go to the shrine of Saint Vitus, wore red shoes that were sprinkled with holy water and had painted crosses on the tops and soles. They also had to hold small crosses in their hands; and incense and Latin incantations were part of this \"ritual.\" Apparently \"forgiven by Vitus,\" word was spread of a successful ritual and the Dancing Plague had ended.\n\nEvents similar to this are said to have occurred throughout the medieval age including 11th century in KΓΆlbigk, Saxony, where it was believed to be the result of divine judgment . In 15th century Apulia, Italy, a woman was bitten by a tarantula, the venom making her dance convulsively. The only way to cure the bite was to \"shimmy\" and to have the right sort of music available, which was an accepted remedy by scholars like Athanasius Kircher.\n\nContemporaneous explanations included demonic possession and overheated blood.\n\nVeracity of deaths\nControversy exists over whether people ultimately danced to their deaths. Some sources claim that for a period the plague killed around fifteen people per day, but the sources of the city of Strasbourg at the time of the events did not mention the number of deaths, or even if there were fatalities. There do not appear to be any sources related to the events that make note of any fatalities. Ned Pennant-Rea also claims that the final death toll is not known, but if the claims of fifteen people dying per day were true then the toll could be \"into the hundreds.\"\n\nThe main source for the claim is John Waller, who has written several journal articles on the subject and the book A Time to Dance, a Time to Die: The Extraordinary Story of the Dancing Plague of 1518. The sources cited by Waller that mention deaths were all from later accounts of the events. There is also uncertainty around the identity of the initial dancer (either an unnamed woman or \"Frau Troffea\") and the number of dancers involved (somewhere between 50 and 400). Of the six chronicle accounts, four support Lady Troffea as the first dancer.\n\nModern theories\nFood poisoning\nSome believe the dancing could have been brought on by food poisoning caused by the toxic and psychoactive chemical products of ergot fungi (ergotism), which grows commonly on grains (such as rye) used for baking bread. Ergotamine is the main psychoactive product of ergot fungi; it is structurally related to the drug lysergic acid diethylamide (LSD-25) and is the substance from which LSD-25 was originally synthesized. The same fungus has also been implicated in other major historical anomalies, including the Salem witch trials.\n\nIn The Lancet, John Waller argues that \"this theory does not seem tenable, since it is unlikely that those poisoned by ergot could have danced for days at a time. Nor would so many people have reacted to its psychotropic chemicals in the same way. The ergotism theory also fails to explain why almost every outbreak occurred somewhere along the Rhine and Moselle rivers, areas linked by water but with quite different climates and crops\".\n\nStress-induced mass hysteria\nThis could have been an example of fully developed cases of psychogenic movement disorder happening in mass hysteria or mass psychogenic illness, which involves many individuals suddenly exhibiting the same bizarre behavior. The behavior spreads rapidly and broadly in an epidemic pattern. This kind of comportment could have been caused by elevated levels of psychological stress, caused by the ruthless years (even by the rough standards of the early modern period) the people of Alsace were suffering.\n\nWaller speculates that the dancing was \"stress-induced psychosis\" on a mass level, since the region where the people danced was riddled with starvation and disease, and the inhabitants tended to be superstitious. Seven other cases of dancing plague were reported in the same region during the medieval era.\n\nThis psychogenic illness could have created a chorea (from the Greek khoreia meaning \"to dance\"), a situation comprising random and intricate unintentional movements that flit from body part to body part. Diverse choreas (St. Vitus' dance, St. John's dance, and tarantism) were labeled in the Middle Ages referring to the independent epidemics of \"dancing mania\" that happened in central Europe, particularly at the time of the plague.\n\nPop culture and media\nThe event inspired Jonathan Glazer's 2020 short film Strasbourg 1518.\n\nIt was also the inspiration behind the 2022 choral song \"Choreomania\" by Florence and the Machine. It was the third track on the album Dance Fever, which took its title from the song.\n\nThe book series \"A Collection of Utter Speculation\" released a title \"The Dancing Plague: A Collection of Utter Speculation\" in 2022. It is a fictional account about the events that happened in Strasbourg.\n\nThe 2023 novel, The Dance Tree, by Kiran Millwood Hargrave is a fictionalized version of the summer of 1518 in Strasbourg.\n\nThe event is featured as part of the first season of Watcher Entertainment's \"Puppet History\" in the episode \"The Dancing Plague\"." - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "OpenAI Chat Model": [ - { - "startTime": 1747343996676, - "executionTime": 1640, - "executionIndex": 4, - "executionStatus": "success", - "source": [ - { - "previousNode": "Summary - Simple - Map", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "Human: Write a concise summary of the following:\n\n\n\"The dancing plague of 1518, or dance epidemic of 1518 (French: Γ‰pidΓ©mie dansante de 1518), was a case of dancing mania that occurred in Strasbourg, Alsace (modern-day France), in the Holy Roman Empire from July 1518 to September 1518. Somewhere between 50 and 400 people took to dancing for weeks. There are many theories behind the phenomenon, the most popular being stress-induced mass hysteria, suggested by John Waller. Other theories include ergot and religious explanations. There is controversy concerning the number of deaths.\n\nHistory\nEvents\nThe outbreak began in July 1518 when a woman called Frau Troffea began to dance fervently and uncontrollably in a street in Strasbourg. Troffea kept up the constant dancing for a week. Soon, three dozen others joined in. By August, the \"dancing plague\" had claimed 400 victims. Dancers were beginning to collapse. It is said some even died from a stroke or heart attack. No one knew what caused this reaction, which meant no one understood how to remedy it. By early September, the outbreak began to subside, when the dancers were sent to a mountain shrine to pray for absolution.\n\nHistorical documents, including \"physician notes, cathedral sermons, local and regional chronicles, and even notes issued by the Strasbourg city council\" are clear that the victims danced; it is not known why. Historical sources agree that there was an outbreak of dancing after a single woman started dancing, and the dancing did not seem to die down. It lasted for such a long time that it even attracted the attention of the authorities; until the council gave up authority to the physicians, who prescribed the afflicted to \"dance themselves free of it.\" There are claims that guild halls were refurbished to accommodate the dancing, as well as musicians and strong people to help keep those dealing with the dancing mania to stay upright. This backfired, and the council was forced to ban public dancing as people danced in fear it was a punishment from Saint Vitus; and to be \"free of sin\" many joined in on the dancing epidemic. The council went as far as to ban music, as well. Those who danced were then ordered to go to the shrine of Saint Vitus, wore red shoes that were sprinkled with holy water and had painted crosses on the tops and soles. They also had to hold small crosses in their hands; and incense and Latin incantations were part of this \"ritual.\" Apparently \"forgiven by Vitus,\" word was spread of a successful ritual and the Dancing Plague had ended.\n\nEvents similar to this are said to have occurred throughout the medieval age including 11th century in KΓΆlbigk, Saxony, where it was believed to be the result of divine judgment . In 15th century Apulia, Italy, a woman was bitten by a tarantula, the venom making her dance convulsively. The only way to cure the bite was to \"shimmy\" and to have the right sort of music available, which was an accepted remedy by scholars like Athanasius Kircher.\n\nContemporaneous explanations included demonic possession and overheated blood.\n\nVeracity of deaths\nControversy exists over whether people ultimately danced to their deaths. Some sources claim that for a period the plague killed around fifteen people per day, but the sources of the city of Strasbourg at the time of the events did not mention the number of deaths, or even if there were fatalities. There do not appear to be any sources related to the events that make note of any fatalities. Ned Pennant-Rea also claims that the final death toll is not known, but if the claims of fifteen people dying per day were true then the toll could be \"into the hundreds.\"\n\nThe main source for the claim is John Waller, who has written several journal articles on the subject and the book A Time to Dance, a Time to Die: The Extraordinary Story of the Dancing Plague of 1518. The sources cited by Waller that mention deaths were all from later accounts of the events. There is also uncertainty around the identity of the initial dancer (either an unnamed woman or \"Frau Troffea\") and the number of dancers involved (somewhere between 50 and 400). Of the six chronicle accounts, four support Lady Troffea as the first dancer.\n\nModern theories\nFood poisoning\nSome believe the dancing could have been brought on by food poisoning caused by the toxic and psychoactive chemical products of ergot fungi (ergotism), which grows commonly on grains (such as rye) used for baking bread. Ergotamine is the main psychoactive product of ergot fungi; it is structurally related to the drug lysergic acid diethylamide (LSD-25) and is the substance from which LSD-25 was originally synthesized. The same fungus has also been implicated in other major historical anomalies, including the Salem witch trials.\n\nIn The Lancet, John Waller argues that \"this theory does not seem tenable, since it is unlikely that those poisoned by ergot could have danced for days at a time. Nor would so many people have reacted to its psychotropic chemicals in the same way. The ergotism theory also fails to explain why almost every outbreak occurred somewhere along the Rhine and Moselle rivers, areas linked by water but with quite different climates and crops\".\n\nStress-induced mass hysteria\nThis could have been an example of fully developed cases of psychogenic movement disorder happening in mass hysteria or mass psychogenic illness, which involves many individuals suddenly exhibiting the same bizarre behavior. The behavior spreads rapidly and broadly in an epidemic pattern. This kind of comportment could have been caused by elevated levels of psychological stress, caused by the ruthless years (even by the rough standards of the early modern period) the people of Alsace were suffering.\n\nWaller speculates that the dancing was \"stress-induced psychosis\" on a mass level, since the region where the people danced was riddled with starvation and disease, and the inhabitants tended to be superstitious. Seven other cases of dancing plague were reported in the same region during the medieval era.\n\nThis psychogenic illness could have created a chorea (from the Greek khoreia meaning \"to dance\"), a situation comprising random and intricate unintentional movements that flit from body part to body part. Diverse choreas (St. Vitus' dance, St. John's dance, and tarantism) were labeled in the Middle Ages referring to the independent epidemics of \"dancing mania\" that happened in central Europe, particularly at the time of the plague.\n\nPop culture and media\nThe event inspired Jonathan Glazer's 2020 short film Strasbourg 1518.\n\nIt was also the inspiration behind the 2022 choral song \"Choreomania\" by Florence and the Machine. It was the third track on the album Dance Fever, which took its title from the song.\n\nThe book series \"A Collection of Utter Speculation\" released a title \"The Dancing Plague: A Collection of Utter Speculation\" in 2022. It is a fictional account about the events that happened in Strasbourg.\n\nThe 2023 novel, The Dance Tree, by Kiran Millwood Hargrave is a fictionalized version of the summer of 1518 in Strasbourg.\n\nThe event is featured as part of the first season of Watcher Entertainment's \"Puppet History\" in the episode \"The Dancing Plague\".\"\n\n\nCONCISE SUMMARY:" - ], - "estimatedTokens": 1543, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-3.5-turbo-0125", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model", - "runIndex": 0 - } - ] - } - } - ], - "Summary - Simple - Map": [ - { - "startTime": 1747343996200, - "executionIndex": 3, - "source": [ - { - "previousNode": "Set Article" - } - ], - "hints": [], - "executionTime": 2116, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "response": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "OpenAI Chat Model1": [ - { - "startTime": 1747343998349, - "executionTime": 1896, - "executionIndex": 6, - "executionStatus": "success", - "source": [ - { - "previousNode": "Evaluate to Baseline", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "Human: You are assessing a submitted answer on a given task or input based on a set of criteria. Here is the data:\n[BEGIN DATA]\n***\n[Input]: Summarize Wikipedia article about the dancing plague of 1518\n***\n[Submission]: The dancing plague of 1518, also known as the dance epidemic, occurred in Strasbourg, Alsace, in the Holy Roman Empire from July to September 1518. Between 50 and 400 people danced uncontrollably for weeks, with theories suggesting stress-induced mass hysteria, ergot poisoning, or religious explanations. The outbreak began with one woman dancing and spread to others, leading to deaths and public concern. The event ended when the dancers were sent to a shrine to pray for absolution. Controversy exists over the number of deaths, with some sources claiming up to fifteen deaths per day. Modern theories include food poisoning from ergot fungi and stress-induced mass hysteria. The event has inspired various works of art and media, including films, songs, and novels.\n***\n[Criteria]: helpfulness: Is the submission helpful, insightful, and appropriate? If so, response Y. If not, respond N.\n***\n[Reference]: The dancing plague of 1518 in Strasbourg, Alsace involved between 50 and 400 people dancing uncontrollably for weeks. The cause is unknown, with theories including stress-induced mass hysteria and ergot poisoning. The outbreak ended when the dancers prayed for absolution at a shrine. There is controversy over the number of deaths, with some sources claiming up to fifteen deaths per day, but historical documents do not confirm any fatalities. Similar events have been reported throughout history, inspiring various works of pop culture.\n***\n[END DATA]\nDoes the submission meet the Criteria? First, write out in a step by step manner your reasoning about each criterion to be sure that your conclusion is correct. Avoid simply stating the correct answers at the outset. Then print only the single character \"Y\" or \"N\" (without quotes or punctuation) on its own line corresponding to the correct answer of whether the submission meets all criteria. At the end, repeat just the letter again by itself on a new line." - ], - "estimatedTokens": 444, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-3.5-turbo-0125", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model1", - "runIndex": 0 - } - ] - } - } - ], - "Evaluate to Baseline": [ - { - "startTime": 1747343998316, - "executionIndex": 5, - "source": [ - { - "previousNode": "Summary - Simple - Map" - } - ], - "hints": [], - "executionTime": 1930, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "reasoning": "Step 1: Is the submission helpful?- The submission provides a concise summary of the Wikipedia article about the dancing plague of 1518.- It includes key information such as the location, time period, number of people involved, possible causes, outcomes, and cultural impact.- The submission is informative and covers the main points of the topic.Step 2: Is the submission insightful?- The submission goes beyond just stating facts by mentioning theories about the cause of the dancing plague, controversies surrounding the event, and its cultural influence.- It provides additional context and analysis to enhance understanding of the topic.- The submission offers a well-rounded view of the dancing plague of 1518.Step 3: Is the submission appropriate?- The submission is appropriate for the given task of summarizing the Wikipedia article about the dancing plague of 1518.- It stays focused on the topic and does not include irrelevant information.- The submission is suitable for the intended audience and purpose.", - "value": "Y", - "score": 1 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Evaluate to Baseline" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": { - "OpenAI Chat Model": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model", - "runIndex": 0 - } - ] - } - ], - "OpenAI Chat Model1": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model1", - "runIndex": 0 - } - ] - } - ] - }, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:56.197Z", - "stoppedAt": "2025-05-15T21:20:00.246Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/236-snapshot.json b/test-workflows/snapshots/236-snapshot.json deleted file mode 100644 index 7a9851e9faa..00000000000 --- a/test-workflows/snapshots/236-snapshot.json +++ /dev/null @@ -1,630 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking \"Test workflow\"": [ - { - "startTime": 1747343996877, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set Baseline": [ - { - "startTime": 1747343996877, - "executionIndex": 1, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "baseline_summary": "The dancing plague of 1518 in Strasbourg, Alsace involved between 50 and 400 people dancing uncontrollably for weeks. The cause is unknown, with theories including stress-induced mass hysteria and ergot poisoning. The outbreak ended when the dancers prayed for absolution at a shrine. There is controversy over the number of deaths, with some sources claiming up to fifteen deaths per day, but historical documents do not confirm any fatalities. Similar events have been reported throughout history, inspiring various works of pop culture." - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set Article": [ - { - "startTime": 1747343996877, - "executionIndex": 2, - "source": [ - { - "previousNode": "Set Baseline" - } - ], - "hints": [ - { - "message": "To make sure expressions after this node work, return the input items that produced each output item. More info", - "location": "outputPane" - } - ], - "executionTime": 2, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "text": "The dancing plague of 1518, or dance epidemic of 1518 (French: Γ‰pidΓ©mie dansante de 1518), was a case of dancing mania that occurred in Strasbourg, Alsace (modern-day France), in the Holy Roman Empire from July 1518 to September 1518. Somewhere between 50 and 400 people took to dancing for weeks. There are many theories behind the phenomenon, the most popular being stress-induced mass hysteria, suggested by John Waller. Other theories include ergot and religious explanations. There is controversy concerning the number of deaths.\n\nHistory\nEvents\nThe outbreak began in July 1518 when a woman called Frau Troffea began to dance fervently and uncontrollably in a street in Strasbourg. Troffea kept up the constant dancing for a week. Soon, three dozen others joined in. By August, the \"dancing plague\" had claimed 400 victims. Dancers were beginning to collapse. It is said some even died from a stroke or heart attack. No one knew what caused this reaction, which meant no one understood how to remedy it. By early September, the outbreak began to subside, when the dancers were sent to a mountain shrine to pray for absolution.\n\nHistorical documents, including \"physician notes, cathedral sermons, local and regional chronicles, and even notes issued by the Strasbourg city council\" are clear that the victims danced; it is not known why. Historical sources agree that there was an outbreak of dancing after a single woman started dancing, and the dancing did not seem to die down. It lasted for such a long time that it even attracted the attention of the authorities; until the council gave up authority to the physicians, who prescribed the afflicted to \"dance themselves free of it.\" There are claims that guild halls were refurbished to accommodate the dancing, as well as musicians and strong people to help keep those dealing with the dancing mania to stay upright. This backfired, and the council was forced to ban public dancing as people danced in fear it was a punishment from Saint Vitus; and to be \"free of sin\" many joined in on the dancing epidemic. The council went as far as to ban music, as well. Those who danced were then ordered to go to the shrine of Saint Vitus, wore red shoes that were sprinkled with holy water and had painted crosses on the tops and soles. They also had to hold small crosses in their hands; and incense and Latin incantations were part of this \"ritual.\" Apparently \"forgiven by Vitus,\" word was spread of a successful ritual and the Dancing Plague had ended.\n\nEvents similar to this are said to have occurred throughout the medieval age including 11th century in KΓΆlbigk, Saxony, where it was believed to be the result of divine judgment . In 15th century Apulia, Italy, a woman was bitten by a tarantula, the venom making her dance convulsively. The only way to cure the bite was to \"shimmy\" and to have the right sort of music available, which was an accepted remedy by scholars like Athanasius Kircher.\n\nContemporaneous explanations included demonic possession and overheated blood.\n\nVeracity of deaths\nControversy exists over whether people ultimately danced to their deaths. Some sources claim that for a period the plague killed around fifteen people per day, but the sources of the city of Strasbourg at the time of the events did not mention the number of deaths, or even if there were fatalities. There do not appear to be any sources related to the events that make note of any fatalities. Ned Pennant-Rea also claims that the final death toll is not known, but if the claims of fifteen people dying per day were true then the toll could be \"into the hundreds.\"\n\nThe main source for the claim is John Waller, who has written several journal articles on the subject and the book A Time to Dance, a Time to Die: The Extraordinary Story of the Dancing Plague of 1518. The sources cited by Waller that mention deaths were all from later accounts of the events. There is also uncertainty around the identity of the initial dancer (either an unnamed woman or \"Frau Troffea\") and the number of dancers involved (somewhere between 50 and 400). Of the six chronicle accounts, four support Lady Troffea as the first dancer.\n\nModern theories\nFood poisoning\nSome believe the dancing could have been brought on by food poisoning caused by the toxic and psychoactive chemical products of ergot fungi (ergotism), which grows commonly on grains (such as rye) used for baking bread. Ergotamine is the main psychoactive product of ergot fungi; it is structurally related to the drug lysergic acid diethylamide (LSD-25) and is the substance from which LSD-25 was originally synthesized. The same fungus has also been implicated in other major historical anomalies, including the Salem witch trials.\n\nIn The Lancet, John Waller argues that \"this theory does not seem tenable, since it is unlikely that those poisoned by ergot could have danced for days at a time. Nor would so many people have reacted to its psychotropic chemicals in the same way. The ergotism theory also fails to explain why almost every outbreak occurred somewhere along the Rhine and Moselle rivers, areas linked by water but with quite different climates and crops\".\n\nStress-induced mass hysteria\nThis could have been an example of fully developed cases of psychogenic movement disorder happening in mass hysteria or mass psychogenic illness, which involves many individuals suddenly exhibiting the same bizarre behavior. The behavior spreads rapidly and broadly in an epidemic pattern. This kind of comportment could have been caused by elevated levels of psychological stress, caused by the ruthless years (even by the rough standards of the early modern period) the people of Alsace were suffering.\n\nWaller speculates that the dancing was \"stress-induced psychosis\" on a mass level, since the region where the people danced was riddled with starvation and disease, and the inhabitants tended to be superstitious. Seven other cases of dancing plague were reported in the same region during the medieval era.\n\nThis psychogenic illness could have created a chorea (from the Greek khoreia meaning \"to dance\"), a situation comprising random and intricate unintentional movements that flit from body part to body part. Diverse choreas (St. Vitus' dance, St. John's dance, and tarantism) were labeled in the Middle Ages referring to the independent epidemics of \"dancing mania\" that happened in central Europe, particularly at the time of the plague.\n\nPop culture and media\nThe event inspired Jonathan Glazer's 2020 short film Strasbourg 1518.\n\nIt was also the inspiration behind the 2022 choral song \"Choreomania\" by Florence and the Machine. It was the third track on the album Dance Fever, which took its title from the song.\n\nThe book series \"A Collection of Utter Speculation\" released a title \"The Dancing Plague: A Collection of Utter Speculation\" in 2022. It is a fictional account about the events that happened in Strasbourg.\n\nThe 2023 novel, The Dance Tree, by Kiran Millwood Hargrave is a fictionalized version of the summer of 1518 in Strasbourg.\n\nThe event is featured as part of the first season of Watcher Entertainment's \"Puppet History\" in the episode \"The Dancing Plague\"." - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Convert to File": [ - { - "startTime": 1747343996879, - "executionIndex": 3, - "source": [ - { - "previousNode": "Set Article" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "binary": { - "data": { - "mimeType": "application/json", - "fileType": "json", - "fileExtension": "json", - "data": "W3sidGV4dCI6IlRoZSBkYW5jaW5nIHBsYWd1ZSBvZiAxNTE4LCBvciBkYW5jZSBlcGlkZW1pYyBvZiAxNTE4IChGcmVuY2g6IMOJcGlkw6ltaWUgZGFuc2FudGUgZGUgMTUxOCksIHdhcyBhIGNhc2Ugb2YgZGFuY2luZyBtYW5pYSB0aGF0IG9jY3VycmVkIGluIFN0cmFzYm91cmcsIEFsc2FjZSAobW9kZXJuLWRheSBGcmFuY2UpLCBpbiB0aGUgSG9seSBSb21hbiBFbXBpcmUgZnJvbSBKdWx5IDE1MTggdG8gU2VwdGVtYmVyIDE1MTguIFNvbWV3aGVyZSBiZXR3ZWVuIDUwIGFuZCA0MDAgcGVvcGxlIHRvb2sgdG8gZGFuY2luZyBmb3Igd2Vla3MuIFRoZXJlIGFyZSBtYW55IHRoZW9yaWVzIGJlaGluZCB0aGUgcGhlbm9tZW5vbiwgdGhlIG1vc3QgcG9wdWxhciBiZWluZyBzdHJlc3MtaW5kdWNlZCBtYXNzIGh5c3RlcmlhLCBzdWdnZXN0ZWQgYnkgSm9obiBXYWxsZXIuIE90aGVyIHRoZW9yaWVzIGluY2x1ZGUgZXJnb3QgYW5kIHJlbGlnaW91cyBleHBsYW5hdGlvbnMuIFRoZXJlIGlzIGNvbnRyb3ZlcnN5IGNvbmNlcm5pbmcgdGhlIG51bWJlciBvZiBkZWF0aHMuXG5cbkhpc3RvcnlcbkV2ZW50c1xuVGhlIG91dGJyZWFrIGJlZ2FuIGluIEp1bHkgMTUxOCB3aGVuIGEgd29tYW4gY2FsbGVkIEZyYXUgVHJvZmZlYSBiZWdhbiB0byBkYW5jZSBmZXJ2ZW50bHkgYW5kIHVuY29udHJvbGxhYmx5IGluIGEgc3RyZWV0IGluIFN0cmFzYm91cmcuIFRyb2ZmZWEga2VwdCB1cCB0aGUgY29uc3RhbnQgZGFuY2luZyBmb3IgYSB3ZWVrLiBTb29uLCB0aHJlZSBkb3plbiBvdGhlcnMgam9pbmVkIGluLiBCeSBBdWd1c3QsIHRoZSBcImRhbmNpbmcgcGxhZ3VlXCIgaGFkIGNsYWltZWQgNDAwIHZpY3RpbXMuIERhbmNlcnMgd2VyZSBiZWdpbm5pbmcgdG8gY29sbGFwc2UuIEl0IGlzIHNhaWQgc29tZSBldmVuIGRpZWQgZnJvbSBhIHN0cm9rZSBvciBoZWFydCBhdHRhY2suIE5vIG9uZSBrbmV3IHdoYXQgY2F1c2VkIHRoaXMgcmVhY3Rpb24sIHdoaWNoIG1lYW50IG5vIG9uZSB1bmRlcnN0b29kIGhvdyB0byByZW1lZHkgaXQuIEJ5IGVhcmx5IFNlcHRlbWJlciwgdGhlIG91dGJyZWFrIGJlZ2FuIHRvIHN1YnNpZGUsIHdoZW4gdGhlIGRhbmNlcnMgd2VyZSBzZW50IHRvIGEgbW91bnRhaW4gc2hyaW5lIHRvIHByYXkgZm9yIGFic29sdXRpb24uXG5cbkhpc3RvcmljYWwgZG9jdW1lbnRzLCBpbmNsdWRpbmcgXCJwaHlzaWNpYW4gbm90ZXMsIGNhdGhlZHJhbCBzZXJtb25zLCBsb2NhbCBhbmQgcmVnaW9uYWwgY2hyb25pY2xlcywgYW5kIGV2ZW4gbm90ZXMgaXNzdWVkIGJ5IHRoZSBTdHJhc2JvdXJnIGNpdHkgY291bmNpbFwiIGFyZSBjbGVhciB0aGF0IHRoZSB2aWN0aW1zIGRhbmNlZDsgaXQgaXMgbm90IGtub3duIHdoeS4gSGlzdG9yaWNhbCBzb3VyY2VzIGFncmVlIHRoYXQgdGhlcmUgd2FzIGFuIG91dGJyZWFrIG9mIGRhbmNpbmcgYWZ0ZXIgYSBzaW5nbGUgd29tYW4gc3RhcnRlZCBkYW5jaW5nLCBhbmQgdGhlIGRhbmNpbmcgZGlkIG5vdCBzZWVtIHRvIGRpZSBkb3duLiBJdCBsYXN0ZWQgZm9yIHN1Y2ggYSBsb25nIHRpbWUgdGhhdCBpdCBldmVuIGF0dHJhY3RlZCB0aGUgYXR0ZW50aW9uIG9mIHRoZSBhdXRob3JpdGllczsgdW50aWwgdGhlIGNvdW5jaWwgZ2F2ZSB1cCBhdXRob3JpdHkgdG8gdGhlIHBoeXNpY2lhbnMsIHdobyBwcmVzY3JpYmVkIHRoZSBhZmZsaWN0ZWQgdG8gXCJkYW5jZSB0aGVtc2VsdmVzIGZyZWUgb2YgaXQuXCIgVGhlcmUgYXJlIGNsYWltcyB0aGF0IGd1aWxkIGhhbGxzIHdlcmUgcmVmdXJiaXNoZWQgdG8gYWNjb21tb2RhdGUgdGhlIGRhbmNpbmcsIGFzIHdlbGwgYXMgbXVzaWNpYW5zIGFuZCBzdHJvbmcgcGVvcGxlIHRvIGhlbHAga2VlcCB0aG9zZSBkZWFsaW5nIHdpdGggdGhlIGRhbmNpbmcgbWFuaWEgdG8gc3RheSB1cHJpZ2h0LiBUaGlzIGJhY2tmaXJlZCwgYW5kIHRoZSBjb3VuY2lsIHdhcyBmb3JjZWQgdG8gYmFuIHB1YmxpYyBkYW5jaW5nIGFzIHBlb3BsZSBkYW5jZWQgaW4gZmVhciBpdCB3YXMgYSBwdW5pc2htZW50IGZyb20gU2FpbnQgVml0dXM7IGFuZCB0byBiZSBcImZyZWUgb2Ygc2luXCIgbWFueSBqb2luZWQgaW4gb24gdGhlIGRhbmNpbmcgZXBpZGVtaWMuIFRoZSBjb3VuY2lsIHdlbnQgYXMgZmFyIGFzIHRvIGJhbiBtdXNpYywgYXMgd2VsbC4gVGhvc2Ugd2hvIGRhbmNlZCB3ZXJlIHRoZW4gb3JkZXJlZCB0byBnbyB0byB0aGUgc2hyaW5lIG9mIFNhaW50IFZpdHVzLCB3b3JlIHJlZCBzaG9lcyB0aGF0IHdlcmUgc3ByaW5rbGVkIHdpdGggaG9seSB3YXRlciBhbmQgaGFkIHBhaW50ZWQgY3Jvc3NlcyBvbiB0aGUgdG9wcyBhbmQgc29sZXMuIFRoZXkgYWxzbyBoYWQgdG8gaG9sZCBzbWFsbCBjcm9zc2VzIGluIHRoZWlyIGhhbmRzOyBhbmQgaW5jZW5zZSBhbmQgTGF0aW4gaW5jYW50YXRpb25zIHdlcmUgcGFydCBvZiB0aGlzIFwicml0dWFsLlwiIEFwcGFyZW50bHkgXCJmb3JnaXZlbiBieSBWaXR1cyxcIiB3b3JkIHdhcyBzcHJlYWQgb2YgYSBzdWNjZXNzZnVsIHJpdHVhbCBhbmQgdGhlIERhbmNpbmcgUGxhZ3VlIGhhZCBlbmRlZC5cblxuRXZlbnRzIHNpbWlsYXIgdG8gdGhpcyBhcmUgc2FpZCB0byBoYXZlIG9jY3VycmVkIHRocm91Z2hvdXQgdGhlIG1lZGlldmFsIGFnZSBpbmNsdWRpbmcgMTF0aCBjZW50dXJ5IGluIEvDtmxiaWdrLCBTYXhvbnksIHdoZXJlIGl0IHdhcyBiZWxpZXZlZCB0byBiZSB0aGUgcmVzdWx0IG9mIGRpdmluZSBqdWRnbWVudCAuIEluIDE1dGggY2VudHVyeSBBcHVsaWEsIEl0YWx5LCBhIHdvbWFuIHdhcyBiaXR0ZW4gYnkgYSB0YXJhbnR1bGEsIHRoZSB2ZW5vbSBtYWtpbmcgaGVyIGRhbmNlIGNvbnZ1bHNpdmVseS4gVGhlIG9ubHkgd2F5IHRvIGN1cmUgdGhlIGJpdGUgd2FzIHRvIFwic2hpbW15XCIgYW5kIHRvIGhhdmUgdGhlIHJpZ2h0IHNvcnQgb2YgbXVzaWMgYXZhaWxhYmxlLCB3aGljaCB3YXMgYW4gYWNjZXB0ZWQgcmVtZWR5IGJ5IHNjaG9sYXJzIGxpa2UgQXRoYW5hc2l1cyBLaXJjaGVyLlxuXG5Db250ZW1wb3JhbmVvdXMgZXhwbGFuYXRpb25zIGluY2x1ZGVkIGRlbW9uaWMgcG9zc2Vzc2lvbiBhbmQgb3ZlcmhlYXRlZCBibG9vZC5cblxuVmVyYWNpdHkgb2YgZGVhdGhzXG5Db250cm92ZXJzeSBleGlzdHMgb3ZlciB3aGV0aGVyIHBlb3BsZSB1bHRpbWF0ZWx5IGRhbmNlZCB0byB0aGVpciBkZWF0aHMuIFNvbWUgc291cmNlcyBjbGFpbSB0aGF0IGZvciBhIHBlcmlvZCB0aGUgcGxhZ3VlIGtpbGxlZCBhcm91bmQgZmlmdGVlbiBwZW9wbGUgcGVyIGRheSwgYnV0IHRoZSBzb3VyY2VzIG9mIHRoZSBjaXR5IG9mIFN0cmFzYm91cmcgYXQgdGhlIHRpbWUgb2YgdGhlIGV2ZW50cyBkaWQgbm90IG1lbnRpb24gdGhlIG51bWJlciBvZiBkZWF0aHMsIG9yIGV2ZW4gaWYgdGhlcmUgd2VyZSBmYXRhbGl0aWVzLiBUaGVyZSBkbyBub3QgYXBwZWFyIHRvIGJlIGFueSBzb3VyY2VzIHJlbGF0ZWQgdG8gdGhlIGV2ZW50cyB0aGF0IG1ha2Ugbm90ZSBvZiBhbnkgZmF0YWxpdGllcy4gTmVkIFBlbm5hbnQtUmVhIGFsc28gY2xhaW1zIHRoYXQgdGhlIGZpbmFsIGRlYXRoIHRvbGwgaXMgbm90IGtub3duLCBidXQgaWYgdGhlIGNsYWltcyBvZiBmaWZ0ZWVuIHBlb3BsZSBkeWluZyBwZXIgZGF5IHdlcmUgdHJ1ZSB0aGVuIHRoZSB0b2xsIGNvdWxkIGJlIFwiaW50byB0aGUgaHVuZHJlZHMuXCJcblxuVGhlIG1haW4gc291cmNlIGZvciB0aGUgY2xhaW0gaXMgSm9obiBXYWxsZXIsIHdobyBoYXMgd3JpdHRlbiBzZXZlcmFsIGpvdXJuYWwgYXJ0aWNsZXMgb24gdGhlIHN1YmplY3QgYW5kIHRoZSBib29rIEEgVGltZSB0byBEYW5jZSwgYSBUaW1lIHRvIERpZTogVGhlIEV4dHJhb3JkaW5hcnkgU3Rvcnkgb2YgdGhlIERhbmNpbmcgUGxhZ3VlIG9mIDE1MTguIFRoZSBzb3VyY2VzIGNpdGVkIGJ5IFdhbGxlciB0aGF0IG1lbnRpb24gZGVhdGhzIHdlcmUgYWxsIGZyb20gbGF0ZXIgYWNjb3VudHMgb2YgdGhlIGV2ZW50cy4gVGhlcmUgaXMgYWxzbyB1bmNlcnRhaW50eSBhcm91bmQgdGhlIGlkZW50aXR5IG9mIHRoZSBpbml0aWFsIGRhbmNlciAoZWl0aGVyIGFuIHVubmFtZWQgd29tYW4gb3IgXCJGcmF1IFRyb2ZmZWFcIikgYW5kIHRoZSBudW1iZXIgb2YgZGFuY2VycyBpbnZvbHZlZCAoc29tZXdoZXJlIGJldHdlZW4gNTAgYW5kIDQwMCkuIE9mIHRoZSBzaXggY2hyb25pY2xlIGFjY291bnRzLCBmb3VyIHN1cHBvcnQgTGFkeSBUcm9mZmVhIGFzIHRoZSBmaXJzdCBkYW5jZXIuXG5cbk1vZGVybiB0aGVvcmllc1xuRm9vZCBwb2lzb25pbmdcblNvbWUgYmVsaWV2ZSB0aGUgZGFuY2luZyBjb3VsZCBoYXZlIGJlZW4gYnJvdWdodCBvbiBieSBmb29kIHBvaXNvbmluZyBjYXVzZWQgYnkgdGhlIHRveGljIGFuZCBwc3ljaG9hY3RpdmUgY2hlbWljYWwgcHJvZHVjdHMgb2YgZXJnb3QgZnVuZ2kgKGVyZ290aXNtKSwgd2hpY2ggZ3Jvd3MgY29tbW9ubHkgb24gZ3JhaW5zIChzdWNoIGFzIHJ5ZSkgdXNlZCBmb3IgYmFraW5nIGJyZWFkLiBFcmdvdGFtaW5lIGlzIHRoZSBtYWluIHBzeWNob2FjdGl2ZSBwcm9kdWN0IG9mIGVyZ290IGZ1bmdpOyBpdCBpcyBzdHJ1Y3R1cmFsbHkgcmVsYXRlZCB0byB0aGUgZHJ1ZyBseXNlcmdpYyBhY2lkIGRpZXRoeWxhbWlkZSAoTFNELTI1KSBhbmQgaXMgdGhlIHN1YnN0YW5jZSBmcm9tIHdoaWNoIExTRC0yNSB3YXMgb3JpZ2luYWxseSBzeW50aGVzaXplZC4gVGhlIHNhbWUgZnVuZ3VzIGhhcyBhbHNvIGJlZW4gaW1wbGljYXRlZCBpbiBvdGhlciBtYWpvciBoaXN0b3JpY2FsIGFub21hbGllcywgaW5jbHVkaW5nIHRoZSBTYWxlbSB3aXRjaCB0cmlhbHMuXG5cbkluIFRoZSBMYW5jZXQsIEpvaG4gV2FsbGVyIGFyZ3VlcyB0aGF0IFwidGhpcyB0aGVvcnkgZG9lcyBub3Qgc2VlbSB0ZW5hYmxlLCBzaW5jZSBpdCBpcyB1bmxpa2VseSB0aGF0IHRob3NlIHBvaXNvbmVkIGJ5IGVyZ290IGNvdWxkIGhhdmUgZGFuY2VkIGZvciBkYXlzIGF0IGEgdGltZS4gTm9yIHdvdWxkIHNvIG1hbnkgcGVvcGxlIGhhdmUgcmVhY3RlZCB0byBpdHMgcHN5Y2hvdHJvcGljIGNoZW1pY2FscyBpbiB0aGUgc2FtZSB3YXkuIFRoZSBlcmdvdGlzbSB0aGVvcnkgYWxzbyBmYWlscyB0byBleHBsYWluIHdoeSBhbG1vc3QgZXZlcnkgb3V0YnJlYWsgb2NjdXJyZWQgc29tZXdoZXJlIGFsb25nIHRoZSBSaGluZSBhbmQgTW9zZWxsZSByaXZlcnMsIGFyZWFzIGxpbmtlZCBieSB3YXRlciBidXQgd2l0aCBxdWl0ZSBkaWZmZXJlbnQgY2xpbWF0ZXMgYW5kIGNyb3BzXCIuXG5cblN0cmVzcy1pbmR1Y2VkIG1hc3MgaHlzdGVyaWFcblRoaXMgY291bGQgaGF2ZSBiZWVuIGFuIGV4YW1wbGUgb2YgZnVsbHkgZGV2ZWxvcGVkIGNhc2VzIG9mIHBzeWNob2dlbmljIG1vdmVtZW50IGRpc29yZGVyIGhhcHBlbmluZyBpbiBtYXNzIGh5c3RlcmlhIG9yIG1hc3MgcHN5Y2hvZ2VuaWMgaWxsbmVzcywgd2hpY2ggaW52b2x2ZXMgbWFueSBpbmRpdmlkdWFscyBzdWRkZW5seSBleGhpYml0aW5nIHRoZSBzYW1lIGJpemFycmUgYmVoYXZpb3IuIFRoZSBiZWhhdmlvciBzcHJlYWRzIHJhcGlkbHkgYW5kIGJyb2FkbHkgaW4gYW4gZXBpZGVtaWMgcGF0dGVybi4gVGhpcyBraW5kIG9mIGNvbXBvcnRtZW50IGNvdWxkIGhhdmUgYmVlbiBjYXVzZWQgYnkgZWxldmF0ZWQgbGV2ZWxzIG9mIHBzeWNob2xvZ2ljYWwgc3RyZXNzLCBjYXVzZWQgYnkgdGhlIHJ1dGhsZXNzIHllYXJzIChldmVuIGJ5IHRoZSByb3VnaCBzdGFuZGFyZHMgb2YgdGhlIGVhcmx5IG1vZGVybiBwZXJpb2QpIHRoZSBwZW9wbGUgb2YgQWxzYWNlIHdlcmUgc3VmZmVyaW5nLlxuXG5XYWxsZXIgc3BlY3VsYXRlcyB0aGF0IHRoZSBkYW5jaW5nIHdhcyBcInN0cmVzcy1pbmR1Y2VkIHBzeWNob3Npc1wiIG9uIGEgbWFzcyBsZXZlbCwgc2luY2UgdGhlIHJlZ2lvbiB3aGVyZSB0aGUgcGVvcGxlIGRhbmNlZCB3YXMgcmlkZGxlZCB3aXRoIHN0YXJ2YXRpb24gYW5kIGRpc2Vhc2UsIGFuZCB0aGUgaW5oYWJpdGFudHMgdGVuZGVkIHRvIGJlIHN1cGVyc3RpdGlvdXMuIFNldmVuIG90aGVyIGNhc2VzIG9mIGRhbmNpbmcgcGxhZ3VlIHdlcmUgcmVwb3J0ZWQgaW4gdGhlIHNhbWUgcmVnaW9uIGR1cmluZyB0aGUgbWVkaWV2YWwgZXJhLlxuXG5UaGlzIHBzeWNob2dlbmljIGlsbG5lc3MgY291bGQgaGF2ZSBjcmVhdGVkIGEgY2hvcmVhIChmcm9tIHRoZSBHcmVlayBraG9yZWlhIG1lYW5pbmcgXCJ0byBkYW5jZVwiKSwgYSBzaXR1YXRpb24gY29tcHJpc2luZyByYW5kb20gYW5kIGludHJpY2F0ZSB1bmludGVudGlvbmFsIG1vdmVtZW50cyB0aGF0IGZsaXQgZnJvbSBib2R5IHBhcnQgdG8gYm9keSBwYXJ0LiBEaXZlcnNlIGNob3JlYXMgKFN0LiBWaXR1cycgZGFuY2UsIFN0LiBKb2huJ3MgZGFuY2UsIGFuZCB0YXJhbnRpc20pIHdlcmUgbGFiZWxlZCBpbiB0aGUgTWlkZGxlIEFnZXMgcmVmZXJyaW5nIHRvIHRoZSBpbmRlcGVuZGVudCBlcGlkZW1pY3Mgb2YgXCJkYW5jaW5nIG1hbmlhXCIgdGhhdCBoYXBwZW5lZCBpbiBjZW50cmFsIEV1cm9wZSwgcGFydGljdWxhcmx5IGF0IHRoZSB0aW1lIG9mIHRoZSBwbGFndWUuXG5cblBvcCBjdWx0dXJlIGFuZCBtZWRpYVxuVGhlIGV2ZW50IGluc3BpcmVkIEpvbmF0aGFuIEdsYXplcidzIDIwMjAgc2hvcnQgZmlsbSBTdHJhc2JvdXJnIDE1MTguXG5cbkl0IHdhcyBhbHNvIHRoZSBpbnNwaXJhdGlvbiBiZWhpbmQgdGhlIDIwMjIgY2hvcmFsIHNvbmcgXCJDaG9yZW9tYW5pYVwiIGJ5IEZsb3JlbmNlIGFuZCB0aGUgTWFjaGluZS4gSXQgd2FzIHRoZSB0aGlyZCB0cmFjayBvbiB0aGUgYWxidW0gRGFuY2UgRmV2ZXIsIHdoaWNoIHRvb2sgaXRzIHRpdGxlIGZyb20gdGhlIHNvbmcuXG5cblRoZSBib29rIHNlcmllcyBcIkEgQ29sbGVjdGlvbiBvZiBVdHRlciBTcGVjdWxhdGlvblwiIHJlbGVhc2VkIGEgdGl0bGUgXCJUaGUgRGFuY2luZyBQbGFndWU6IEEgQ29sbGVjdGlvbiBvZiBVdHRlciBTcGVjdWxhdGlvblwiIGluIDIwMjIuIEl0IGlzIGEgZmljdGlvbmFsIGFjY291bnQgYWJvdXQgdGhlIGV2ZW50cyB0aGF0IGhhcHBlbmVkIGluIFN0cmFzYm91cmcuXG5cblRoZSAyMDIzIG5vdmVsLCBUaGUgRGFuY2UgVHJlZSwgYnkgS2lyYW4gTWlsbHdvb2QgSGFyZ3JhdmUgaXMgYSBmaWN0aW9uYWxpemVkIHZlcnNpb24gb2YgdGhlIHN1bW1lciBvZiAxNTE4IGluIFN0cmFzYm91cmcuXG5cblRoZSBldmVudCBpcyBmZWF0dXJlZCBhcyBwYXJ0IG9mIHRoZSBmaXJzdCBzZWFzb24gb2YgV2F0Y2hlciBFbnRlcnRhaW5tZW50J3MgXCJQdXBwZXQgSGlzdG9yeVwiIGluIHRoZSBlcGlzb2RlIFwiVGhlIERhbmNpbmcgUGxhZ3VlXCIuIn1d", - "fileSize": "7.29 kB", - "fileName": "file.json" - } - }, - "pairedItem": [ - { - "item": 0 - } - ] - } - ] - ] - } - } - ], - "OpenAI Chat Model4": [ - { - "startTime": 1747343996893, - "executionTime": 1283, - "executionIndex": 5, - "executionStatus": "success", - "source": [ - { - "previousNode": "Summary - Simple - Map - Binary", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "Human: Write a concise summary of the following:\n\n\n\"The dancing plague of 1518, or dance epidemic of 1518 (French: Γ‰pidΓ©mie dansante de 1518), was a case of dancing mania that occurred in Strasbourg, Alsace (modern-day France), in the Holy Roman Empire from July 1518 to September 1518. Somewhere between 50 and 400 people took to dancing for weeks. There are many theories behind the phenomenon, the most popular being stress-induced mass hysteria, suggested by John Waller. Other theories include ergot and religious explanations. There is controversy concerning the number of deaths.\n\nHistory\nEvents\nThe outbreak began in July 1518 when a woman called Frau Troffea began to dance fervently and uncontrollably in a street in Strasbourg. Troffea kept up the constant dancing for a week. Soon, three dozen others joined in. By August, the \"dancing plague\" had claimed 400 victims. Dancers were beginning to collapse. It is said some even died from a stroke or heart attack. No one knew what caused this reaction, which meant no one understood how to remedy it. By early September, the outbreak began to subside, when the dancers were sent to a mountain shrine to pray for absolution.\n\nHistorical documents, including \"physician notes, cathedral sermons, local and regional chronicles, and even notes issued by the Strasbourg city council\" are clear that the victims danced; it is not known why. Historical sources agree that there was an outbreak of dancing after a single woman started dancing, and the dancing did not seem to die down. It lasted for such a long time that it even attracted the attention of the authorities; until the council gave up authority to the physicians, who prescribed the afflicted to \"dance themselves free of it.\" There are claims that guild halls were refurbished to accommodate the dancing, as well as musicians and strong people to help keep those dealing with the dancing mania to stay upright. This backfired, and the council was forced to ban public dancing as people danced in fear it was a punishment from Saint Vitus; and to be \"free of sin\" many joined in on the dancing epidemic. The council went as far as to ban music, as well. Those who danced were then ordered to go to the shrine of Saint Vitus, wore red shoes that were sprinkled with holy water and had painted crosses on the tops and soles. They also had to hold small crosses in their hands; and incense and Latin incantations were part of this \"ritual.\" Apparently \"forgiven by Vitus,\" word was spread of a successful ritual and the Dancing Plague had ended.\n\nEvents similar to this are said to have occurred throughout the medieval age including 11th century in KΓΆlbigk, Saxony, where it was believed to be the result of divine judgment . In 15th century Apulia, Italy, a woman was bitten by a tarantula, the venom making her dance convulsively. The only way to cure the bite was to \"shimmy\" and to have the right sort of music available, which was an accepted remedy by scholars like Athanasius Kircher.\n\nContemporaneous explanations included demonic possession and overheated blood.\n\nVeracity of deaths\nControversy exists over whether people ultimately danced to their deaths. Some sources claim that for a period the plague killed around fifteen people per day, but the sources of the city of Strasbourg at the time of the events did not mention the number of deaths, or even if there were fatalities. There do not appear to be any sources related to the events that make note of any fatalities. Ned Pennant-Rea also claims that the final death toll is not known, but if the claims of fifteen people dying per day were true then the toll could be \"into the hundreds.\"\"\n\n\nCONCISE SUMMARY:" - ], - "estimatedTokens": 787, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-3.5-turbo-0125", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model4", - "runIndex": 1 - }, - { - "node": "OpenAI Chat Model4", - "runIndex": 3 - }, - { - "node": "OpenAI Chat Model4", - "runIndex": 2 - }, - { - "node": "OpenAI Chat Model4", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model4", - "runIndex": 4 - } - ] - } - }, - { - "startTime": 1747343996893, - "executionTime": 939, - "executionIndex": 6, - "executionStatus": "success", - "source": [ - { - "previousNode": "Summary - Simple - Map - Binary", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "Human: Write a concise summary of the following:\n\n\n\"The main source for the claim is John Waller, who has written several journal articles on the subject and the book A Time to Dance, a Time to Die: The Extraordinary Story of the Dancing Plague of 1518. The sources cited by Waller that mention deaths were all from later accounts of the events. There is also uncertainty around the identity of the initial dancer (either an unnamed woman or \"Frau Troffea\") and the number of dancers involved (somewhere between 50 and 400). Of the six chronicle accounts, four support Lady Troffea as the first dancer.\n\nModern theories\nFood poisoning\nSome believe the dancing could have been brought on by food poisoning caused by the toxic and psychoactive chemical products of ergot fungi (ergotism), which grows commonly on grains (such as rye) used for baking bread. Ergotamine is the main psychoactive product of ergot fungi; it is structurally related to the drug lysergic acid diethylamide (LSD-25) and is the substance from which LSD-25 was originally synthesized. The same fungus has also been implicated in other major historical anomalies, including the Salem witch trials.\n\nIn The Lancet, John Waller argues that \"this theory does not seem tenable, since it is unlikely that those poisoned by ergot could have danced for days at a time. Nor would so many people have reacted to its psychotropic chemicals in the same way. The ergotism theory also fails to explain why almost every outbreak occurred somewhere along the Rhine and Moselle rivers, areas linked by water but with quite different climates and crops\".\n\nStress-induced mass hysteria\nThis could have been an example of fully developed cases of psychogenic movement disorder happening in mass hysteria or mass psychogenic illness, which involves many individuals suddenly exhibiting the same bizarre behavior. The behavior spreads rapidly and broadly in an epidemic pattern. This kind of comportment could have been caused by elevated levels of psychological stress, caused by the ruthless years (even by the rough standards of the early modern period) the people of Alsace were suffering.\n\nWaller speculates that the dancing was \"stress-induced psychosis\" on a mass level, since the region where the people danced was riddled with starvation and disease, and the inhabitants tended to be superstitious. Seven other cases of dancing plague were reported in the same region during the medieval era.\n\nThis psychogenic illness could have created a chorea (from the Greek khoreia meaning \"to dance\"), a situation comprising random and intricate unintentional movements that flit from body part to body part. Diverse choreas (St. Vitus' dance, St. John's dance, and tarantism) were labeled in the Middle Ages referring to the independent epidemics of \"dancing mania\" that happened in central Europe, particularly at the time of the plague.\n\nPop culture and media\nThe event inspired Jonathan Glazer's 2020 short film Strasbourg 1518.\n\nIt was also the inspiration behind the 2022 choral song \"Choreomania\" by Florence and the Machine. It was the third track on the album Dance Fever, which took its title from the song.\n\nThe book series \"A Collection of Utter Speculation\" released a title \"The Dancing Plague: A Collection of Utter Speculation\" in 2022. It is a fictional account about the events that happened in Strasbourg.\n\nThe 2023 novel, The Dance Tree, by Kiran Millwood Hargrave is a fictionalized version of the summer of 1518 in Strasbourg.\n\nThe event is featured as part of the first season of Watcher Entertainment's \"Puppet History\" in the episode \"The Dancing Plague\".\"\n\n\nCONCISE SUMMARY:" - ], - "estimatedTokens": 772, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-3.5-turbo-0125", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - } - }, - { - "startTime": 1747343996893, - "executionTime": 1253, - "executionIndex": 7, - "executionStatus": "success", - "source": [ - { - "previousNode": "Summary - Simple - Map - Binary", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "Human: Write a concise summary of the following:\n\n\n\"The dancing plague of 1518, or dance epidemic of 1518 (French: Γ‰pidΓ©mie dansante de 1518), was a case of dancing mania that occurred in Strasbourg, Alsace (modern-day France), in the Holy Roman Empire from July 1518 to September 1518. Somewhere between 50 and 400 people took to dancing for weeks. There are many theories behind the phenomenon, the most popular being stress-induced mass hysteria, suggested by John Waller. Other theories include ergot and religious explanations. There is controversy concerning the number of deaths.\n\nHistory\nEvents\nThe outbreak began in July 1518 when a woman called Frau Troffea began to dance fervently and uncontrollably in a street in Strasbourg. Troffea kept up the constant dancing for a week. Soon, three dozen others joined in. By August, the \"dancing plague\" had claimed 400 victims. Dancers were beginning to collapse. It is said some even died from a stroke or heart attack. No one knew what caused this reaction, which meant no one understood how to remedy it. By early September, the outbreak began to subside, when the dancers were sent to a mountain shrine to pray for absolution.\n\nHistorical documents, including \"physician notes, cathedral sermons, local and regional chronicles, and even notes issued by the Strasbourg city council\" are clear that the victims danced; it is not known why. Historical sources agree that there was an outbreak of dancing after a single woman started dancing, and the dancing did not seem to die down. It lasted for such a long time that it even attracted the attention of the authorities; until the council gave up authority to the physicians, who prescribed the afflicted to \"dance themselves free of it.\" There are claims that guild halls were refurbished to accommodate the dancing, as well as musicians and strong people to help keep those dealing with the dancing mania to stay upright. This backfired, and the council was forced to ban public dancing as people danced in fear it was a punishment from Saint Vitus; and to be \"free of sin\" many joined in on the dancing epidemic. The council went as far as to ban music, as well. Those who danced were then ordered to go to the shrine of Saint Vitus, wore red shoes that were sprinkled with holy water and had painted crosses on the tops and soles. They also had to hold small crosses in their hands; and incense and Latin incantations were part of this \"ritual.\" Apparently \"forgiven by Vitus,\" word was spread of a successful ritual and the Dancing Plague had ended.\n\nEvents similar to this are said to have occurred throughout the medieval age including 11th century in KΓΆlbigk, Saxony, where it was believed to be the result of divine judgment . In 15th century Apulia, Italy, a woman was bitten by a tarantula, the venom making her dance convulsively. The only way to cure the bite was to \"shimmy\" and to have the right sort of music available, which was an accepted remedy by scholars like Athanasius Kircher.\n\nContemporaneous explanations included demonic possession and overheated blood.\n\nVeracity of deaths\nControversy exists over whether people ultimately danced to their deaths. Some sources claim that for a period the plague killed around fifteen people per day, but the sources of the city of Strasbourg at the time of the events did not mention the number of deaths, or even if there were fatalities. There do not appear to be any sources related to the events that make note of any fatalities. Ned Pennant-Rea also claims that the final death toll is not known, but if the claims of fifteen people dying per day were true then the toll could be \"into the hundreds.\"\"\n\n\nCONCISE SUMMARY:" - ], - "estimatedTokens": 787, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-3.5-turbo-0125", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - } - }, - { - "startTime": 1747343996893, - "executionTime": 1061, - "executionIndex": 8, - "executionStatus": "success", - "source": [ - { - "previousNode": "Summary - Simple - Map - Binary", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "Human: Write a concise summary of the following:\n\n\n\"The main source for the claim is John Waller, who has written several journal articles on the subject and the book A Time to Dance, a Time to Die: The Extraordinary Story of the Dancing Plague of 1518. The sources cited by Waller that mention deaths were all from later accounts of the events. There is also uncertainty around the identity of the initial dancer (either an unnamed woman or \"Frau Troffea\") and the number of dancers involved (somewhere between 50 and 400). Of the six chronicle accounts, four support Lady Troffea as the first dancer.\n\nModern theories\nFood poisoning\nSome believe the dancing could have been brought on by food poisoning caused by the toxic and psychoactive chemical products of ergot fungi (ergotism), which grows commonly on grains (such as rye) used for baking bread. Ergotamine is the main psychoactive product of ergot fungi; it is structurally related to the drug lysergic acid diethylamide (LSD-25) and is the substance from which LSD-25 was originally synthesized. The same fungus has also been implicated in other major historical anomalies, including the Salem witch trials.\n\nIn The Lancet, John Waller argues that \"this theory does not seem tenable, since it is unlikely that those poisoned by ergot could have danced for days at a time. Nor would so many people have reacted to its psychotropic chemicals in the same way. The ergotism theory also fails to explain why almost every outbreak occurred somewhere along the Rhine and Moselle rivers, areas linked by water but with quite different climates and crops\".\n\nStress-induced mass hysteria\nThis could have been an example of fully developed cases of psychogenic movement disorder happening in mass hysteria or mass psychogenic illness, which involves many individuals suddenly exhibiting the same bizarre behavior. The behavior spreads rapidly and broadly in an epidemic pattern. This kind of comportment could have been caused by elevated levels of psychological stress, caused by the ruthless years (even by the rough standards of the early modern period) the people of Alsace were suffering.\n\nWaller speculates that the dancing was \"stress-induced psychosis\" on a mass level, since the region where the people danced was riddled with starvation and disease, and the inhabitants tended to be superstitious. Seven other cases of dancing plague were reported in the same region during the medieval era.\n\nThis psychogenic illness could have created a chorea (from the Greek khoreia meaning \"to dance\"), a situation comprising random and intricate unintentional movements that flit from body part to body part. Diverse choreas (St. Vitus' dance, St. John's dance, and tarantism) were labeled in the Middle Ages referring to the independent epidemics of \"dancing mania\" that happened in central Europe, particularly at the time of the plague.\n\nPop culture and media\nThe event inspired Jonathan Glazer's 2020 short film Strasbourg 1518.\n\nIt was also the inspiration behind the 2022 choral song \"Choreomania\" by Florence and the Machine. It was the third track on the album Dance Fever, which took its title from the song.\n\nThe book series \"A Collection of Utter Speculation\" released a title \"The Dancing Plague: A Collection of Utter Speculation\" in 2022. It is a fictional account about the events that happened in Strasbourg.\n\nThe 2023 novel, The Dance Tree, by Kiran Millwood Hargrave is a fictionalized version of the summer of 1518 in Strasbourg.\n\nThe event is featured as part of the first season of Watcher Entertainment's \"Puppet History\" in the episode \"The Dancing Plague\".\"\n\n\nCONCISE SUMMARY:" - ], - "estimatedTokens": 772, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-3.5-turbo-0125", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - } - }, - { - "startTime": 1747343998179, - "executionTime": 1337, - "executionIndex": 9, - "executionStatus": "success", - "source": [ - { - "previousNode": "Summary - Simple - Map - Binary", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "Human: Write a concise summary of the following:\n\n\n\"The dancing plague of 1518 occurred in Strasbourg, Alsace, where between 50 and 400 people danced uncontrollably for weeks. The cause is unknown, with theories ranging from stress-induced mass hysteria to religious explanations. The outbreak eventually subsided when the dancers were sent to a shrine to pray for absolution. There is controversy over the number of deaths, with some sources claiming up to fifteen deaths per day, but historical documents do not mention fatalities. Similar events have been reported throughout history, with explanations including demonic possession and overheated blood.\n\nThe Dancing Plague of 1518 in Strasbourg involved a large group of people dancing uncontrollably for days, with theories suggesting it was caused by food poisoning from ergot fungi or stress-induced mass hysteria. John Waller's research questions the ergotism theory and suggests the dancing was a result of stress-induced psychosis. The event has inspired various works of art and media, including films, songs, and novels.\n\nThe dancing plague of 1518 occurred in Strasbourg, Alsace, where between 50 and 400 people danced uncontrollably for weeks. The cause is unknown, with theories ranging from stress-induced mass hysteria to religious explanations. The outbreak eventually subsided when the dancers were sent to a shrine to pray for absolution. There is controversy over the number of deaths, with some sources claiming up to fifteen deaths per day, but historical documents do not mention fatalities. Similar events have been reported throughout history, with explanations including demonic possession and overheated blood.\n\nThe Dancing Plague of 1518 in Strasbourg involved a large group of people dancing uncontrollably for days, with theories suggesting it was caused by food poisoning from ergot fungi or stress-induced mass hysteria. John Waller's research questions the ergotism theory and suggests the dancing was a result of stress-induced psychosis. The event has inspired various works of art and media, including films, songs, and novels.\"\n\n\nCONCISE SUMMARY:" - ], - "estimatedTokens": 413, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-3.5-turbo-0125", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - } - } - ], - "Summary - Simple - Map - Binary": [ - { - "startTime": 1747343996879, - "executionIndex": 4, - "source": [ - { - "previousNode": "Convert to File" - } - ], - "hints": [], - "executionTime": 2638, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "response": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "OpenAI Chat Model5": [ - { - "startTime": 1747343999527, - "executionTime": 1467, - "executionIndex": 11, - "executionStatus": "success", - "source": [ - { - "previousNode": "Evaluate to Baseline", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "Human: You are assessing a submitted answer on a given task or input based on a set of criteria. Here is the data:\n[BEGIN DATA]\n***\n[Input]: Summarize Wikipedia article about the dancing plague of 1518\n***\n[Submission]: The dancing plague of 1518 in Strasbourg, Alsace involved between 50 and 400 people dancing uncontrollably for weeks, with theories ranging from stress-induced mass hysteria to religious explanations. The outbreak subsided when the dancers prayed for absolution at a shrine. There is controversy over the number of deaths, with some sources claiming up to fifteen deaths per day, but historical documents do not mention fatalities. Similar events have been reported throughout history, with explanations including demonic possession and overheated blood. John Waller's research questions the ergotism theory and suggests the dancing was a result of stress-induced psychosis. The event has inspired various works of art and media.\n***\n[Criteria]: helpfulness: Is the submission helpful, insightful, and appropriate? If so, response Y. If not, respond N.\n***\n[Reference]: The dancing plague of 1518 in Strasbourg, Alsace involved between 50 and 400 people dancing uncontrollably for weeks. The cause is unknown, with theories including stress-induced mass hysteria and ergot poisoning. The outbreak ended when the dancers prayed for absolution at a shrine. There is controversy over the number of deaths, with some sources claiming up to fifteen deaths per day, but historical documents do not confirm any fatalities. Similar events have been reported throughout history, inspiring various works of pop culture.\n***\n[END DATA]\nDoes the submission meet the Criteria? First, write out in a step by step manner your reasoning about each criterion to be sure that your conclusion is correct. Avoid simply stating the correct answers at the outset. Then print only the single character \"Y\" or \"N\" (without quotes or punctuation) on its own line corresponding to the correct answer of whether the submission meets all criteria. At the end, repeat just the letter again by itself on a new line." - ], - "estimatedTokens": 423, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-3.5-turbo-0125", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model5", - "runIndex": 0 - } - ] - } - } - ], - "Evaluate to Baseline": [ - { - "startTime": 1747343999517, - "executionIndex": 10, - "source": [ - { - "previousNode": "Summary - Simple - Map - Binary" - } - ], - "hints": [], - "executionTime": 1479, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "reasoning": "1. Is the submission helpful, insightful, and appropriate?- The submission provides a summary of the Wikipedia article about the dancing plague of 1518, including key details such as the location, number of people involved, possible causes, and outcomes.- The submission mentions various theories surrounding the dancing plague, historical context, and the impact of the event.- The submission is informative and covers the main points of the Wikipedia article accurately.- Overall, the submission is helpful, insightful, and appropriate.Therefore, the submission meets the criteria.", - "value": "Y", - "score": 1 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Evaluate to Baseline" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": { - "OpenAI Chat Model4": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model4", - "runIndex": 1 - }, - { - "node": "OpenAI Chat Model4", - "runIndex": 3 - }, - { - "node": "OpenAI Chat Model4", - "runIndex": 2 - }, - { - "node": "OpenAI Chat Model4", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model4", - "runIndex": 4 - } - ] - } - ], - "OpenAI Chat Model5": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model5", - "runIndex": 0 - } - ] - } - ] - }, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:56.877Z", - "stoppedAt": "2025-05-15T21:20:00.996Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/237-snapshot.json b/test-workflows/snapshots/237-snapshot.json deleted file mode 100644 index f8fa547afa3..00000000000 --- a/test-workflows/snapshots/237-snapshot.json +++ /dev/null @@ -1,150 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking \"Test workflow\"": [ - { - "startTime": 1747343996926, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Azure OpenAI Chat Model": [ - { - "startTime": 1747343996936, - "executionTime": 776, - "executionIndex": 2, - "executionStatus": "success", - "source": [ - { - "previousNode": "Azure OpenAI Chat", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "Human: How much is 1+1? Only provide the numerical answer without any other text.\n" - ], - "estimatedTokens": 20, - "options": { - "azure_endpoint": "https://n8n-ai-us.openai.azure.com/", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "model_kwargs": {}, - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "deployment_name": "gpt4" - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Azure OpenAI Chat Model", - "runIndex": 0 - } - ] - } - } - ], - "Azure OpenAI Chat": [ - { - "startTime": 1747343996926, - "executionIndex": 1, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 787, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "text": "2" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Azure OpenAI Chat" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": { - "Azure OpenAI Chat Model": [ - { - "subRun": [ - { - "node": "Azure OpenAI Chat Model", - "runIndex": 0 - } - ] - } - ] - }, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:56.926Z", - "stoppedAt": "2025-05-15T21:19:57.713Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/238-snapshot.json b/test-workflows/snapshots/238-snapshot.json deleted file mode 100644 index 84129d0e6b3..00000000000 --- a/test-workflows/snapshots/238-snapshot.json +++ /dev/null @@ -1,149 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking \"Test workflow\"": [ - { - "startTime": 1747343996969, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "OpenAI Model": [ - { - "startTime": 1747343996970, - "executionTime": 422, - "executionIndex": 2, - "executionStatus": "success", - "source": [ - { - "previousNode": "Open AI Instruct", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "How much is 1+1? Only provide the numerical answer without any other text.\n\n" - ], - "estimatedTokens": 18, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-3.5-turbo-instruct", - "temperature": 0, - "configuration": {}, - "timeout": 60000, - "max_retries": 2 - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Model", - "runIndex": 0 - } - ] - } - } - ], - "Open AI Instruct": [ - { - "startTime": 1747343996969, - "executionIndex": 1, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 423, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "text": "2" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Open AI Instruct" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": { - "OpenAI Model": [ - { - "subRun": [ - { - "node": "OpenAI Model", - "runIndex": 0 - } - ] - } - ] - }, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:56.969Z", - "stoppedAt": "2025-05-15T21:19:57.392Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/239-snapshot.json b/test-workflows/snapshots/239-snapshot.json deleted file mode 100644 index 1ccc5a68e72..00000000000 --- a/test-workflows/snapshots/239-snapshot.json +++ /dev/null @@ -1,583 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking \"Test workflow\"": [ - { - "startTime": 1747343997231, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "OpenAI Chat Model3": [ - { - "startTime": 1747343997245, - "executionTime": 2299, - "executionIndex": 2, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent3", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: Let's first understand the problem and devise a plan to solve the problem. Please output the plan starting with the header \"Plan:\" followed by a numbered list of steps. Please make the plan the minimum number of steps required to answer the query or complete the task accurately and precisely. You have a set of tools at your disposal to help you with this task: calculator: Useful for getting the result of a math expression. The input to this tool should be a valid mathematical expression that could be executed by a simple calculator. You must consider these tools when coming up with your plan. If the task is a question, the final step in the plan must be the following: \"Given the above steps taken, please respond to the original query.\" At the end of your plan, say \"\"\nHuman: What is the result of 30 + (10002200 / 100)? Only respond with a number." - ], - "estimatedTokens": 188, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4-turbo-preview", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model3", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model3", - "runIndex": 1 - }, - { - "node": "OpenAI Chat Model3", - "runIndex": 2 - }, - { - "node": "OpenAI Chat Model3", - "runIndex": 3 - }, - { - "node": "OpenAI Chat Model3", - "runIndex": 4 - }, - { - "node": "OpenAI Chat Model3", - "runIndex": 5 - } - ] - } - }, - { - "startTime": 1747343999545, - "executionTime": 2549, - "executionIndex": 3, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent3", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: Answer the following questions as best you can. You have access to the following tools:\n\ncalculator: Useful for getting the result of a math expression. The input to this tool should be a valid mathematical expression that could be executed by a simple calculator.\n\nThe way you use the tools is by specifying a json blob, denoted below by $JSON_BLOB\nSpecifically, this $JSON_BLOB should have a \"action\" key (with the name of the tool to use) and a \"action_input\" key (with the input to the tool going here). \nThe $JSON_BLOB should only contain a SINGLE action, do NOT return a list of multiple actions. Here is an example of a valid $JSON_BLOB:\n\n```\n{\n \"action\": \"calculator\",\n \"action_input\": \"1 + 2\"\n}\n```\n\nALWAYS use the following format:\n\nQuestion: the input question you must answer\nThought: you should always think about what to do\nAction: \n```\n$JSON_BLOB\n```\nObservation: the result of the action\n... (this Thought/Action/Observation can repeat N times)\nThought: I now know the final answer\nFinal Answer: the final answer to the original input question\n\nBegin! Reminder to always use the exact characters `Final Answer` when responding.\nHuman: Previous steps: []\n\nCurrent objective: Calculate the division part of the expression: 10002200 / 100.\n\n\n\nYou may extract and combine relevant data from your previous steps when responding to me." - ], - "estimatedTokens": 311, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4-turbo-preview", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - } - }, - { - "startTime": 1747344002096, - "executionTime": 1416, - "executionIndex": 5, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent3", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: Answer the following questions as best you can. You have access to the following tools:\n\ncalculator: Useful for getting the result of a math expression. The input to this tool should be a valid mathematical expression that could be executed by a simple calculator.\n\nThe way you use the tools is by specifying a json blob, denoted below by $JSON_BLOB\nSpecifically, this $JSON_BLOB should have a \"action\" key (with the name of the tool to use) and a \"action_input\" key (with the input to the tool going here). \nThe $JSON_BLOB should only contain a SINGLE action, do NOT return a list of multiple actions. Here is an example of a valid $JSON_BLOB:\n\n```\n{\n \"action\": \"calculator\",\n \"action_input\": \"1 + 2\"\n}\n```\n\nALWAYS use the following format:\n\nQuestion: the input question you must answer\nThought: you should always think about what to do\nAction: \n```\n$JSON_BLOB\n```\nObservation: the result of the action\n... (this Thought/Action/Observation can repeat N times)\nThought: I now know the final answer\nFinal Answer: the final answer to the original input question\n\nBegin! Reminder to always use the exact characters `Final Answer` when responding.\nHuman: Previous steps: []\n\nCurrent objective: Calculate the division part of the expression: 10002200 / 100.\n\nThis was your previous work (but I haven't seen any of it! I only see what you return as final answer):\nThought: To calculate the division part of the expression \\(10002200 / 100\\), I will use the calculator tool.\nAction: \n```\n{\n \"action\": \"calculator\",\n \"action_input\": \"10002200 / 100\"\n}\n```\n\nObservation: 100022\nThought:\n\nYou may extract and combine relevant data from your previous steps when responding to me." - ], - "estimatedTokens": 398, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4-turbo-preview", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - } - }, - { - "startTime": 1747344003513, - "executionTime": 2581, - "executionIndex": 6, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent3", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: Answer the following questions as best you can. You have access to the following tools:\n\ncalculator: Useful for getting the result of a math expression. The input to this tool should be a valid mathematical expression that could be executed by a simple calculator.\n\nThe way you use the tools is by specifying a json blob, denoted below by $JSON_BLOB\nSpecifically, this $JSON_BLOB should have a \"action\" key (with the name of the tool to use) and a \"action_input\" key (with the input to the tool going here). \nThe $JSON_BLOB should only contain a SINGLE action, do NOT return a list of multiple actions. Here is an example of a valid $JSON_BLOB:\n\n```\n{\n \"action\": \"calculator\",\n \"action_input\": \"1 + 2\"\n}\n```\n\nALWAYS use the following format:\n\nQuestion: the input question you must answer\nThought: you should always think about what to do\nAction: \n```\n$JSON_BLOB\n```\nObservation: the result of the action\n... (this Thought/Action/Observation can repeat N times)\nThought: I now know the final answer\nFinal Answer: the final answer to the original input question\n\nBegin! Reminder to always use the exact characters `Final Answer` when responding.\nHuman: Previous steps: [{\"action\":{\"text\":\"Calculate the division part of the expression: 10002200 / 100.\"},\"result\":{\"response\":\"The result of the division \\\\(10002200 / 100\\\\) is 100022.\"}}]\n\nCurrent objective: Add 30 to the result of step 1.\n\n\n\nYou may extract and combine relevant data from your previous steps when responding to me." - ], - "estimatedTokens": 353, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4-turbo-preview", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - } - }, - { - "startTime": 1747344006097, - "executionTime": 1567, - "executionIndex": 8, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent3", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: Answer the following questions as best you can. You have access to the following tools:\n\ncalculator: Useful for getting the result of a math expression. The input to this tool should be a valid mathematical expression that could be executed by a simple calculator.\n\nThe way you use the tools is by specifying a json blob, denoted below by $JSON_BLOB\nSpecifically, this $JSON_BLOB should have a \"action\" key (with the name of the tool to use) and a \"action_input\" key (with the input to the tool going here). \nThe $JSON_BLOB should only contain a SINGLE action, do NOT return a list of multiple actions. Here is an example of a valid $JSON_BLOB:\n\n```\n{\n \"action\": \"calculator\",\n \"action_input\": \"1 + 2\"\n}\n```\n\nALWAYS use the following format:\n\nQuestion: the input question you must answer\nThought: you should always think about what to do\nAction: \n```\n$JSON_BLOB\n```\nObservation: the result of the action\n... (this Thought/Action/Observation can repeat N times)\nThought: I now know the final answer\nFinal Answer: the final answer to the original input question\n\nBegin! Reminder to always use the exact characters `Final Answer` when responding.\nHuman: Previous steps: [{\"action\":{\"text\":\"Calculate the division part of the expression: 10002200 / 100.\"},\"result\":{\"response\":\"The result of the division \\\\(10002200 / 100\\\\) is 100022.\"}}]\n\nCurrent objective: Add 30 to the result of step 1.\n\nThis was your previous work (but I haven't seen any of it! I only see what you return as final answer):\nThought: To achieve the current objective, I need to add 30 to the result of step 1, which was 100022.\n\nAction: \n```\n{\n \"action\": \"calculator\",\n \"action_input\": \"100022 + 30\"\n}\n```\n\nObservation: 100052\nThought:\n\nYou may extract and combine relevant data from your previous steps when responding to me." - ], - "estimatedTokens": 441, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4-turbo-preview", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - } - }, - { - "startTime": 1747344007667, - "executionTime": 796, - "executionIndex": 9, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent3", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: Answer the following questions as best you can. You have access to the following tools:\n\ncalculator: Useful for getting the result of a math expression. The input to this tool should be a valid mathematical expression that could be executed by a simple calculator.\n\nThe way you use the tools is by specifying a json blob, denoted below by $JSON_BLOB\nSpecifically, this $JSON_BLOB should have a \"action\" key (with the name of the tool to use) and a \"action_input\" key (with the input to the tool going here). \nThe $JSON_BLOB should only contain a SINGLE action, do NOT return a list of multiple actions. Here is an example of a valid $JSON_BLOB:\n\n```\n{\n \"action\": \"calculator\",\n \"action_input\": \"1 + 2\"\n}\n```\n\nALWAYS use the following format:\n\nQuestion: the input question you must answer\nThought: you should always think about what to do\nAction: \n```\n$JSON_BLOB\n```\nObservation: the result of the action\n... (this Thought/Action/Observation can repeat N times)\nThought: I now know the final answer\nFinal Answer: the final answer to the original input question\n\nBegin! Reminder to always use the exact characters `Final Answer` when responding.\nHuman: Previous steps: [{\"action\":{\"text\":\"Calculate the division part of the expression: 10002200 / 100.\"},\"result\":{\"response\":\"The result of the division \\\\(10002200 / 100\\\\) is 100022.\"}},{\"action\":{\"text\":\"Add 30 to the result of step 1.\"},\"result\":{\"response\":\"The final result after adding 30 to 100022 is 100052.\"}}]\n\nCurrent objective: Output the final result as a number.\n\n The original question was: What is the result of 30 + (10002200 / 100)? Only respond with a number..\n\n\n\nYou may extract and combine relevant data from your previous steps when responding to me." - ], - "estimatedTokens": 416, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4-turbo-preview", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - } - } - ], - "Calculator3": [ - { - "startTime": 1747344002094, - "executionTime": 1, - "executionIndex": 4, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent3", - "previousNodeRun": 0 - } - ], - "data": { - "ai_tool": [ - [ - { - "json": { - "response": "100022" - } - } - ] - ] - }, - "inputOverride": { - "ai_tool": [ - [ - { - "json": { - "query": "10002200 / 100" - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Calculator3", - "runIndex": 0 - }, - { - "node": "Calculator3", - "runIndex": 1 - } - ] - } - }, - { - "startTime": 1747344006095, - "executionTime": 0, - "executionIndex": 7, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent3", - "previousNodeRun": 0 - } - ], - "data": { - "ai_tool": [ - [ - { - "json": { - "response": "100052" - } - } - ] - ] - }, - "inputOverride": { - "ai_tool": [ - [ - { - "json": { - "query": "100022 + 30" - } - } - ] - ] - } - } - ], - "AI Agent3": [ - { - "startTime": 1747343997232, - "executionIndex": 1, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 11232, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output": "100052" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "AI Agent3" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": { - "OpenAI Chat Model3": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model3", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model3", - "runIndex": 1 - }, - { - "node": "OpenAI Chat Model3", - "runIndex": 2 - }, - { - "node": "OpenAI Chat Model3", - "runIndex": 3 - }, - { - "node": "OpenAI Chat Model3", - "runIndex": 4 - }, - { - "node": "OpenAI Chat Model3", - "runIndex": 5 - } - ] - } - ], - "Calculator3": [ - { - "subRun": [ - { - "node": "Calculator3", - "runIndex": 0 - }, - { - "node": "Calculator3", - "runIndex": 1 - } - ] - } - ] - }, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:57.231Z", - "stoppedAt": "2025-05-15T21:20:08.464Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/240-snapshot.json b/test-workflows/snapshots/240-snapshot.json deleted file mode 100644 index 88ce472aacd..00000000000 --- a/test-workflows/snapshots/240-snapshot.json +++ /dev/null @@ -1,391 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking \"Test workflow\"": [ - { - "startTime": 1747343997401, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set Baseline": [ - { - "startTime": 1747343997401, - "executionIndex": 1, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "baseline_summary": "The dancing plague of 1518 in Strasbourg, Alsace involved between 50 and 400 people dancing uncontrollably for weeks. The cause is unknown, with theories including stress-induced mass hysteria and ergot poisoning. The outbreak ended when the dancers prayed for absolution at a shrine. There is controversy over the number of deaths, with some sources claiming up to fifteen deaths per day, but historical documents do not confirm any fatalities. Similar events have been reported throughout history, inspiring various works of pop culture." - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set Article": [ - { - "startTime": 1747343997401, - "executionIndex": 2, - "source": [ - { - "previousNode": "Set Baseline" - } - ], - "hints": [ - { - "message": "To make sure expressions after this node work, return the input items that produced each output item. More info", - "location": "outputPane" - } - ], - "executionTime": 3, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "text": "The dancing plague of 1518, or dance epidemic of 1518 (French: Γ‰pidΓ©mie dansante de 1518), was a case of dancing mania that occurred in Strasbourg, Alsace (modern-day France), in the Holy Roman Empire from July 1518 to September 1518. Somewhere between 50 and 400 people took to dancing for weeks. There are many theories behind the phenomenon, the most popular being stress-induced mass hysteria, suggested by John Waller. Other theories include ergot and religious explanations. There is controversy concerning the number of deaths.\n\nHistory\nEvents\nThe outbreak began in July 1518 when a woman called Frau Troffea began to dance fervently and uncontrollably in a street in Strasbourg. Troffea kept up the constant dancing for a week. Soon, three dozen others joined in. By August, the \"dancing plague\" had claimed 400 victims. Dancers were beginning to collapse. It is said some even died from a stroke or heart attack. No one knew what caused this reaction, which meant no one understood how to remedy it. By early September, the outbreak began to subside, when the dancers were sent to a mountain shrine to pray for absolution.\n\nHistorical documents, including \"physician notes, cathedral sermons, local and regional chronicles, and even notes issued by the Strasbourg city council\" are clear that the victims danced; it is not known why. Historical sources agree that there was an outbreak of dancing after a single woman started dancing, and the dancing did not seem to die down. It lasted for such a long time that it even attracted the attention of the authorities; until the council gave up authority to the physicians, who prescribed the afflicted to \"dance themselves free of it.\" There are claims that guild halls were refurbished to accommodate the dancing, as well as musicians and strong people to help keep those dealing with the dancing mania to stay upright. This backfired, and the council was forced to ban public dancing as people danced in fear it was a punishment from Saint Vitus; and to be \"free of sin\" many joined in on the dancing epidemic. The council went as far as to ban music, as well. Those who danced were then ordered to go to the shrine of Saint Vitus, wore red shoes that were sprinkled with holy water and had painted crosses on the tops and soles. They also had to hold small crosses in their hands; and incense and Latin incantations were part of this \"ritual.\" Apparently \"forgiven by Vitus,\" word was spread of a successful ritual and the Dancing Plague had ended.\n\nEvents similar to this are said to have occurred throughout the medieval age including 11th century in KΓΆlbigk, Saxony, where it was believed to be the result of divine judgment . In 15th century Apulia, Italy, a woman was bitten by a tarantula, the venom making her dance convulsively. The only way to cure the bite was to \"shimmy\" and to have the right sort of music available, which was an accepted remedy by scholars like Athanasius Kircher.\n\nContemporaneous explanations included demonic possession and overheated blood.\n\nVeracity of deaths\nControversy exists over whether people ultimately danced to their deaths. Some sources claim that for a period the plague killed around fifteen people per day, but the sources of the city of Strasbourg at the time of the events did not mention the number of deaths, or even if there were fatalities. There do not appear to be any sources related to the events that make note of any fatalities. Ned Pennant-Rea also claims that the final death toll is not known, but if the claims of fifteen people dying per day were true then the toll could be \"into the hundreds.\"\n\nThe main source for the claim is John Waller, who has written several journal articles on the subject and the book A Time to Dance, a Time to Die: The Extraordinary Story of the Dancing Plague of 1518. The sources cited by Waller that mention deaths were all from later accounts of the events. There is also uncertainty around the identity of the initial dancer (either an unnamed woman or \"Frau Troffea\") and the number of dancers involved (somewhere between 50 and 400). Of the six chronicle accounts, four support Lady Troffea as the first dancer.\n\nModern theories\nFood poisoning\nSome believe the dancing could have been brought on by food poisoning caused by the toxic and psychoactive chemical products of ergot fungi (ergotism), which grows commonly on grains (such as rye) used for baking bread. Ergotamine is the main psychoactive product of ergot fungi; it is structurally related to the drug lysergic acid diethylamide (LSD-25) and is the substance from which LSD-25 was originally synthesized. The same fungus has also been implicated in other major historical anomalies, including the Salem witch trials.\n\nIn The Lancet, John Waller argues that \"this theory does not seem tenable, since it is unlikely that those poisoned by ergot could have danced for days at a time. Nor would so many people have reacted to its psychotropic chemicals in the same way. The ergotism theory also fails to explain why almost every outbreak occurred somewhere along the Rhine and Moselle rivers, areas linked by water but with quite different climates and crops\".\n\nStress-induced mass hysteria\nThis could have been an example of fully developed cases of psychogenic movement disorder happening in mass hysteria or mass psychogenic illness, which involves many individuals suddenly exhibiting the same bizarre behavior. The behavior spreads rapidly and broadly in an epidemic pattern. This kind of comportment could have been caused by elevated levels of psychological stress, caused by the ruthless years (even by the rough standards of the early modern period) the people of Alsace were suffering.\n\nWaller speculates that the dancing was \"stress-induced psychosis\" on a mass level, since the region where the people danced was riddled with starvation and disease, and the inhabitants tended to be superstitious. Seven other cases of dancing plague were reported in the same region during the medieval era.\n\nThis psychogenic illness could have created a chorea (from the Greek khoreia meaning \"to dance\"), a situation comprising random and intricate unintentional movements that flit from body part to body part. Diverse choreas (St. Vitus' dance, St. John's dance, and tarantism) were labeled in the Middle Ages referring to the independent epidemics of \"dancing mania\" that happened in central Europe, particularly at the time of the plague.\n\nPop culture and media\nThe event inspired Jonathan Glazer's 2020 short film Strasbourg 1518.\n\nIt was also the inspiration behind the 2022 choral song \"Choreomania\" by Florence and the Machine. It was the third track on the album Dance Fever, which took its title from the song.\n\nThe book series \"A Collection of Utter Speculation\" released a title \"The Dancing Plague: A Collection of Utter Speculation\" in 2022. It is a fictional account about the events that happened in Strasbourg.\n\nThe 2023 novel, The Dance Tree, by Kiran Millwood Hargrave is a fictionalized version of the summer of 1518 in Strasbourg.\n\nThe event is featured as part of the first season of Watcher Entertainment's \"Puppet History\" in the episode \"The Dancing Plague\"." - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "OpenAI Chat Model2": [ - { - "startTime": 1747343997407, - "executionTime": 1366, - "executionIndex": 4, - "executionStatus": "success", - "source": [ - { - "previousNode": "Summary - Simple - Refine", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "Human: Write a concise summary of the following:\n\n\n\"The dancing plague of 1518, or dance epidemic of 1518 (French: Γ‰pidΓ©mie dansante de 1518), was a case of dancing mania that occurred in Strasbourg, Alsace (modern-day France), in the Holy Roman Empire from July 1518 to September 1518. Somewhere between 50 and 400 people took to dancing for weeks. There are many theories behind the phenomenon, the most popular being stress-induced mass hysteria, suggested by John Waller. Other theories include ergot and religious explanations. There is controversy concerning the number of deaths.\n\nHistory\nEvents\nThe outbreak began in July 1518 when a woman called Frau Troffea began to dance fervently and uncontrollably in a street in Strasbourg. Troffea kept up the constant dancing for a week. Soon, three dozen others joined in. By August, the \"dancing plague\" had claimed 400 victims. Dancers were beginning to collapse. It is said some even died from a stroke or heart attack. No one knew what caused this reaction, which meant no one understood how to remedy it. By early September, the outbreak began to subside, when the dancers were sent to a mountain shrine to pray for absolution.\n\nHistorical documents, including \"physician notes, cathedral sermons, local and regional chronicles, and even notes issued by the Strasbourg city council\" are clear that the victims danced; it is not known why. Historical sources agree that there was an outbreak of dancing after a single woman started dancing, and the dancing did not seem to die down. It lasted for such a long time that it even attracted the attention of the authorities; until the council gave up authority to the physicians, who prescribed the afflicted to \"dance themselves free of it.\" There are claims that guild halls were refurbished to accommodate the dancing, as well as musicians and strong people to help keep those dealing with the dancing mania to stay upright. This backfired, and the council was forced to ban public dancing as people danced in fear it was a punishment from Saint Vitus; and to be \"free of sin\" many joined in on the dancing epidemic. The council went as far as to ban music, as well. Those who danced were then ordered to go to the shrine of Saint Vitus, wore red shoes that were sprinkled with holy water and had painted crosses on the tops and soles. They also had to hold small crosses in their hands; and incense and Latin incantations were part of this \"ritual.\" Apparently \"forgiven by Vitus,\" word was spread of a successful ritual and the Dancing Plague had ended.\n\nEvents similar to this are said to have occurred throughout the medieval age including 11th century in KΓΆlbigk, Saxony, where it was believed to be the result of divine judgment . In 15th century Apulia, Italy, a woman was bitten by a tarantula, the venom making her dance convulsively. The only way to cure the bite was to \"shimmy\" and to have the right sort of music available, which was an accepted remedy by scholars like Athanasius Kircher.\n\nContemporaneous explanations included demonic possession and overheated blood.\n\nVeracity of deaths\nControversy exists over whether people ultimately danced to their deaths. Some sources claim that for a period the plague killed around fifteen people per day, but the sources of the city of Strasbourg at the time of the events did not mention the number of deaths, or even if there were fatalities. There do not appear to be any sources related to the events that make note of any fatalities. Ned Pennant-Rea also claims that the final death toll is not known, but if the claims of fifteen people dying per day were true then the toll could be \"into the hundreds.\"\"\n\n\nCONCISE SUMMARY:" - ], - "estimatedTokens": 787, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-3.5-turbo-0125", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model2", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model2", - "runIndex": 1 - } - ] - } - }, - { - "startTime": 1747343998775, - "executionTime": 1684, - "executionIndex": 5, - "executionStatus": "success", - "source": [ - { - "previousNode": "Summary - Simple - Refine", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "Human: Your job is to produce a final summary\nWe have provided an existing summary up to a certain point: \"The dancing plague of 1518 occurred in Strasbourg, Alsace, where between 50 and 400 people danced uncontrollably for weeks. The cause is believed to be stress-induced mass hysteria, with other theories including ergot poisoning and religious explanations. The outbreak began with one woman dancing and spread to others, leading to deaths from strokes or heart attacks. The epidemic ended when the dancers were sent to a shrine to pray for absolution. Similar events have been reported throughout history. There is controversy over the number of deaths, with some sources claiming up to fifteen deaths per day, but historical documents do not confirm this.\"\nWe have the opportunity to refine the existing summary\n(only if needed) with some more context below.\n------------\n\"The main source for the claim is John Waller, who has written several journal articles on the subject and the book A Time to Dance, a Time to Die: The Extraordinary Story of the Dancing Plague of 1518. The sources cited by Waller that mention deaths were all from later accounts of the events. There is also uncertainty around the identity of the initial dancer (either an unnamed woman or \"Frau Troffea\") and the number of dancers involved (somewhere between 50 and 400). Of the six chronicle accounts, four support Lady Troffea as the first dancer.\n\nModern theories\nFood poisoning\nSome believe the dancing could have been brought on by food poisoning caused by the toxic and psychoactive chemical products of ergot fungi (ergotism), which grows commonly on grains (such as rye) used for baking bread. Ergotamine is the main psychoactive product of ergot fungi; it is structurally related to the drug lysergic acid diethylamide (LSD-25) and is the substance from which LSD-25 was originally synthesized. The same fungus has also been implicated in other major historical anomalies, including the Salem witch trials.\n\nIn The Lancet, John Waller argues that \"this theory does not seem tenable, since it is unlikely that those poisoned by ergot could have danced for days at a time. Nor would so many people have reacted to its psychotropic chemicals in the same way. The ergotism theory also fails to explain why almost every outbreak occurred somewhere along the Rhine and Moselle rivers, areas linked by water but with quite different climates and crops\".\n\nStress-induced mass hysteria\nThis could have been an example of fully developed cases of psychogenic movement disorder happening in mass hysteria or mass psychogenic illness, which involves many individuals suddenly exhibiting the same bizarre behavior. The behavior spreads rapidly and broadly in an epidemic pattern. This kind of comportment could have been caused by elevated levels of psychological stress, caused by the ruthless years (even by the rough standards of the early modern period) the people of Alsace were suffering.\n\nWaller speculates that the dancing was \"stress-induced psychosis\" on a mass level, since the region where the people danced was riddled with starvation and disease, and the inhabitants tended to be superstitious. Seven other cases of dancing plague were reported in the same region during the medieval era.\n\nThis psychogenic illness could have created a chorea (from the Greek khoreia meaning \"to dance\"), a situation comprising random and intricate unintentional movements that flit from body part to body part. Diverse choreas (St. Vitus' dance, St. John's dance, and tarantism) were labeled in the Middle Ages referring to the independent epidemics of \"dancing mania\" that happened in central Europe, particularly at the time of the plague.\n\nPop culture and media\nThe event inspired Jonathan Glazer's 2020 short film Strasbourg 1518.\n\nIt was also the inspiration behind the 2022 choral song \"Choreomania\" by Florence and the Machine. It was the third track on the album Dance Fever, which took its title from the song.\n\nThe book series \"A Collection of Utter Speculation\" released a title \"The Dancing Plague: A Collection of Utter Speculation\" in 2022. It is a fictional account about the events that happened in Strasbourg.\n\nThe 2023 novel, The Dance Tree, by Kiran Millwood Hargrave is a fictionalized version of the summer of 1518 in Strasbourg.\n\nThe event is featured as part of the first season of Watcher Entertainment's \"Puppet History\" in the episode \"The Dancing Plague\".\"\n------------\n\nGiven the new context, refine the original summary\nIf the context isn't useful, return the original summary.\n\nREFINED SUMMARY:" - ], - "estimatedTokens": 957, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-3.5-turbo-0125", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - } - } - ], - "Summary - Simple - Refine": [ - { - "startTime": 1747343997404, - "executionIndex": 3, - "source": [ - { - "previousNode": "Set Article" - } - ], - "hints": [], - "executionTime": 3056, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "response": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "OpenAI Chat Model9": [ - { - "startTime": 1747344000467, - "executionTime": 1037, - "executionIndex": 7, - "executionStatus": "success", - "source": [ - { - "previousNode": "Evaluate to Baseline4", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "Human: You are assessing a submitted answer on a given task or input based on a set of criteria. Here is the data:\n[BEGIN DATA]\n***\n[Input]: Summarize Wikipedia article about the dancing plague of 1518\n***\n[Submission]: undefined\n***\n[Criteria]: helpfulness: Is the submission helpful, insightful, and appropriate? If so, response Y. If not, respond N.\n***\n[Reference]: The dancing plague of 1518 in Strasbourg, Alsace involved between 50 and 400 people dancing uncontrollably for weeks. The cause is unknown, with theories including stress-induced mass hysteria and ergot poisoning. The outbreak ended when the dancers prayed for absolution at a shrine. There is controversy over the number of deaths, with some sources claiming up to fifteen deaths per day, but historical documents do not confirm any fatalities. Similar events have been reported throughout history, inspiring various works of pop culture.\n***\n[END DATA]\nDoes the submission meet the Criteria? First, write out in a step by step manner your reasoning about each criterion to be sure that your conclusion is correct. Avoid simply stating the correct answers at the outset. Then print only the single character \"Y\" or \"N\" (without quotes or punctuation) on its own line corresponding to the correct answer of whether the submission meets all criteria. At the end, repeat just the letter again by itself on a new line." - ], - "estimatedTokens": 288, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-3.5-turbo-0125", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model9", - "runIndex": 0 - } - ] - } - } - ], - "Evaluate to Baseline4": [ - { - "startTime": 1747344000460, - "executionIndex": 6, - "source": [ - { - "previousNode": "Summary - Simple - Refine" - } - ], - "hints": [], - "executionTime": 1044, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "reasoning": "Step by step reasoning:1. Is the submission helpful, insightful, and appropriate?- The submission provides a concise summary of the Wikipedia article about the dancing plague of 1518, including key details such as the location, number of people involved, possible causes, and outcome.- The submission is informative and relevant to the input provided.- The submission does not contain any irrelevant or misleading information.- Overall, the submission meets the criteria of being helpful, insightful, and appropriate.Therefore, the submission meets the Criteria.", - "value": "Y", - "score": 1 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Evaluate to Baseline4" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": { - "OpenAI Chat Model2": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model2", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model2", - "runIndex": 1 - } - ] - } - ], - "OpenAI Chat Model9": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model9", - "runIndex": 0 - } - ] - } - ] - }, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:57.401Z", - "stoppedAt": "2025-05-15T21:20:01.504Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/241-snapshot.json b/test-workflows/snapshots/241-snapshot.json deleted file mode 100644 index 04721efeb8c..00000000000 --- a/test-workflows/snapshots/241-snapshot.json +++ /dev/null @@ -1,296 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking \"Test workflow\"": [ - { - "startTime": 1746522731818, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "OpenAI Chat Model": [ - { - "startTime": 1746522732523, - "executionTime": 920, - "executionIndex": 2, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are a helpful AI assistant.\nHuman: What is the result of 30 + (10002200 / 100)? Only respond with a number." - ], - "estimatedTokens": 33, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4o-mini", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model", - "runIndex": 1 - } - ] - } - }, - { - "startTime": 1746522733445, - "executionTime": 435, - "executionIndex": 4, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are a helpful AI assistant.\nHuman: What is the result of 30 + (10002200 / 100)? Only respond with a number.\nAI: \nFunction: calculator, 100052" - ], - "estimatedTokens": 43, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4o-mini", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - } - } - ], - "Calculator": [ - { - "startTime": 1746522733444, - "executionTime": 1, - "executionIndex": 3, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_tool": [ - [ - { - "json": { - "response": "100052" - } - } - ] - ] - }, - "inputOverride": { - "ai_tool": [ - [ - { - "json": { - "query": "30 + (10002200 / 100)" - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Calculator", - "runIndex": 0 - } - ] - } - } - ], - "AI Agent": [ - { - "startTime": 1746522731818, - "executionIndex": 1, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 2063, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output": "100052", - "intermediateSteps": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Edit Fields": [ - { - "startTime": 1746522733881, - "executionIndex": 5, - "source": [ - { - "previousNode": "AI Agent" - } - ], - "hints": [], - "executionTime": 6, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "calculator_called": true, - "has_correct_output": "true" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Edit Fields" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": { - "OpenAI Chat Model": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model", - "runIndex": 1 - } - ] - } - ], - "Calculator": [ - { - "subRun": [ - { - "node": "Calculator", - "runIndex": 0 - } - ] - } - ] - }, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-06T09:12:11.817Z", - "stoppedAt": "2025-05-06T09:12:13.887Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/242-snapshot.json b/test-workflows/snapshots/242-snapshot.json deleted file mode 100644 index c3ba41e57f0..00000000000 --- a/test-workflows/snapshots/242-snapshot.json +++ /dev/null @@ -1,212 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking \"Test workflow\"": [ - { - "startTime": 1747343997489, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "OpenAI Chat Model1": [ - { - "startTime": 1747343997494, - "executionTime": 808, - "executionIndex": 2, - "executionStatus": "success", - "source": [ - { - "previousNode": "Open AI Chat - Output Parsing", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "Human: What are the top 5 states of US by population?\nYou must format your output as a JSON value that adheres to a given \"JSON Schema\" instance.\n\n\"JSON Schema\" is a declarative language that allows you to annotate and validate JSON documents.\n\nFor example, the example \"JSON Schema\" instance {{\"properties\": {{\"foo\": {{\"description\": \"a list of test words\", \"type\": \"array\", \"items\": {{\"type\": \"string\"}}}}}}, \"required\": [\"foo\"]}}}}\nwould match an object with one required property, \"foo\". The \"type\" property specifies \"foo\" must be an \"array\", and the \"description\" property semantically describes it as \"a list of test words\". The items within \"foo\" must be strings.\nThus, the object {{\"foo\": [\"bar\", \"baz\"]}} is a well-formatted instance of this example \"JSON Schema\". The object {{\"properties\": {{\"foo\": [\"bar\", \"baz\"]}}}} is not well-formatted.\n\nYour output will be parsed and type-checked according to the provided schema instance, so make sure all fields in your output match the schema exactly and there are no trailing commas!\n\nHere is the JSON Schema instance your output must adhere to. Include the enclosing markdown codeblock:\n```json\n{\"type\":\"object\",\"properties\":{\"output\":{\"type\":\"object\",\"properties\":{\"state\":{\"type\":\"string\"},\"cities\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}}},\"additionalProperties\":false}},\"additionalProperties\":false,\"$schema\":\"http://json-schema.org/draft-07/schema#\"}\n```\n" - ], - "estimatedTokens": 336, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4o-mini", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model1", - "runIndex": 0 - } - ] - } - } - ], - "Structured Output Parser1": [ - { - "startTime": 1747343998303, - "executionTime": 2, - "executionIndex": 3, - "executionStatus": "success", - "source": [ - { - "previousNode": "Open AI Chat - Output Parsing", - "previousNodeRun": 0 - } - ], - "data": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "response": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "text": "```json\n{\"output\":{\"state\":\"California\",\"cities\":[\"Los Angeles\",\"San Francisco\",\"San Diego\",\"San Jose\",\"Sacramento\"]}}\n```" - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Structured Output Parser1", - "runIndex": 0 - } - ] - } - } - ], - "Open AI Chat - Output Parsing": [ - { - "startTime": 1747343997489, - "executionIndex": 1, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 817, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Open AI Chat - Output Parsing" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": { - "OpenAI Chat Model1": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model1", - "runIndex": 0 - } - ] - } - ], - "Structured Output Parser1": [ - { - "subRun": [ - { - "node": "Structured Output Parser1", - "runIndex": 0 - } - ] - } - ] - }, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:57.489Z", - "stoppedAt": "2025-05-15T21:19:58.306Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/243-snapshot.json b/test-workflows/snapshots/243-snapshot.json deleted file mode 100644 index ccd7966f2e3..00000000000 --- a/test-workflows/snapshots/243-snapshot.json +++ /dev/null @@ -1,305 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking \"Test workflow\"": [ - { - "startTime": 1747343997730, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "OpenAI Chat Model2": [ - { - "startTime": 1747343997733, - "executionTime": 1117, - "executionIndex": 2, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent2", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: Answer the following questions as best you can. You have access to the following tools:\n\ncalculator: Useful for getting the result of a math expression. The input to this tool should be a valid mathematical expression that could be executed by a simple calculator.\n\nThe way you use the tools is by specifying a json blob, denoted below by $JSON_BLOB\nSpecifically, this $JSON_BLOB should have a \"action\" key (with the name of the tool to use) and a \"action_input\" key (with the input to the tool going here). \nThe $JSON_BLOB should only contain a SINGLE action, do NOT return a list of multiple actions. Here is an example of a valid $JSON_BLOB:\n\n```\n{\n \"action\": \"calculator\",\n \"action_input\": \"1 + 2\"\n}\n```\n\nALWAYS use the following format:\n\nQuestion: the input question you must answer\nThought: you should always think about what to do\nAction: \n```\n$JSON_BLOB\n```\nObservation: the result of the action\n... (this Thought/Action/Observation can repeat N times)\nThought: I now know the final answer\nFinal Answer: the final answer to the original input question\n\nBegin! Reminder to always use the exact characters `Final Answer` when responding.\nHuman: What is the result of 30 + (10002200 / 100)? Only respond with a number.\n\n" - ], - "estimatedTokens": 294, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4o-mini", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model2", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model2", - "runIndex": 1 - } - ] - } - }, - { - "startTime": 1747343998855, - "executionTime": 811, - "executionIndex": 4, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent2", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: Answer the following questions as best you can. You have access to the following tools:\n\ncalculator: Useful for getting the result of a math expression. The input to this tool should be a valid mathematical expression that could be executed by a simple calculator.\n\nThe way you use the tools is by specifying a json blob, denoted below by $JSON_BLOB\nSpecifically, this $JSON_BLOB should have a \"action\" key (with the name of the tool to use) and a \"action_input\" key (with the input to the tool going here). \nThe $JSON_BLOB should only contain a SINGLE action, do NOT return a list of multiple actions. Here is an example of a valid $JSON_BLOB:\n\n```\n{\n \"action\": \"calculator\",\n \"action_input\": \"1 + 2\"\n}\n```\n\nALWAYS use the following format:\n\nQuestion: the input question you must answer\nThought: you should always think about what to do\nAction: \n```\n$JSON_BLOB\n```\nObservation: the result of the action\n... (this Thought/Action/Observation can repeat N times)\nThought: I now know the final answer\nFinal Answer: the final answer to the original input question\n\nBegin! Reminder to always use the exact characters `Final Answer` when responding.\nHuman: What is the result of 30 + (10002200 / 100)? Only respond with a number.\n\nThis was your previous work (but I haven't seen any of it! I only see what you return as final answer):\nQuestion: What is the result of 30 + (10002200 / 100)?\nThought: I need to calculate the division first and then add 30 to the result.\nAction: \n```\n{\n \"action\": \"calculator\",\n \"action_input\": \"30 + (10002200 / 100)\"\n}\n```\n\nObservation: 100052\nThought:" - ], - "estimatedTokens": 394, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4o-mini", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - } - } - ], - "Calculator2": [ - { - "startTime": 1747343998851, - "executionTime": 2, - "executionIndex": 3, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent2", - "previousNodeRun": 0 - } - ], - "data": { - "ai_tool": [ - [ - { - "json": { - "response": "100052" - } - } - ] - ] - }, - "inputOverride": { - "ai_tool": [ - [ - { - "json": { - "query": "30 + (10002200 / 100)" - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Calculator2", - "runIndex": 0 - } - ] - } - } - ], - "AI Agent2": [ - { - "startTime": 1747343997730, - "executionIndex": 1, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 1936, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output": "100052", - "intermediateSteps": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Edit Fields2": [ - { - "startTime": 1747343999666, - "executionIndex": 5, - "source": [ - { - "previousNode": "AI Agent2" - } - ], - "hints": [], - "executionTime": 3, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "calculator_called": true, - "has_correct_output": "true" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Edit Fields2" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": { - "OpenAI Chat Model2": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model2", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model2", - "runIndex": 1 - } - ] - } - ], - "Calculator2": [ - { - "subRun": [ - { - "node": "Calculator2", - "runIndex": 0 - } - ] - } - ] - }, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:57.730Z", - "stoppedAt": "2025-05-15T21:19:59.669Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/244-snapshot.json b/test-workflows/snapshots/244-snapshot.json deleted file mode 100644 index 5729dac27cb..00000000000 --- a/test-workflows/snapshots/244-snapshot.json +++ /dev/null @@ -1,431 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking \"Test workflow\"": [ - { - "startTime": 1747343997766, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "OpenAI Chat Model4": [ - { - "startTime": 1747343997768, - "executionTime": 2362, - "executionIndex": 2, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent4", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: Answer the following questions as best you can. You have access to the following tools:\n\nget_evens: Call this tool to get upcoming events for a specific city. Input should be a single string in format: \"$CITY, $COUNTRY\". So for example to get data about Prague, \"Prague, Czechia\".\nget_weather_data: Call this tool to get weather information for a specific city. Input should be a single string in format: \"$CITY, $COUNTRY\". So for example to get data about Prague, \"Prague, Czechia\".\n\nThe way you use the tools is by specifying a json blob, denoted below by $JSON_BLOB\nSpecifically, this $JSON_BLOB should have a \"action\" key (with the name of the tool to use) and a \"action_input\" key (with the input to the tool going here). \nThe $JSON_BLOB should only contain a SINGLE action, do NOT return a list of multiple actions. Here is an example of a valid $JSON_BLOB:\n\n```\n{\n \"action\": \"calculator\",\n \"action_input\": \"1 + 2\"\n}\n```\n\nALWAYS use the following format:\n\nQuestion: the input question you must answer\nThought: you should always think about what to do\nAction: \n```\n$JSON_BLOB\n```\nObservation: the result of the action\n... (this Thought/Action/Observation can repeat N times)\nThought: I now know the final answer\nFinal Answer: the final answer to the original input question\n\nBegin! Reminder to always use the exact characters `Final Answer` when responding.\nHuman: Help me plan my day in Berlin, Germany\n1. Check current the weather \n2. Get the upcoming events\n3. Respond with weather and details about the upcoming events\n\nEach tool should only be called once.\n\n" - ], - "estimatedTokens": 380, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4-turbo-preview", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model4", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model4", - "runIndex": 1 - }, - { - "node": "OpenAI Chat Model4", - "runIndex": 2 - } - ] - } - }, - { - "startTime": 1747344000150, - "executionTime": 4919, - "executionIndex": 4, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent4", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: Answer the following questions as best you can. You have access to the following tools:\n\nget_evens: Call this tool to get upcoming events for a specific city. Input should be a single string in format: \"$CITY, $COUNTRY\". So for example to get data about Prague, \"Prague, Czechia\".\nget_weather_data: Call this tool to get weather information for a specific city. Input should be a single string in format: \"$CITY, $COUNTRY\". So for example to get data about Prague, \"Prague, Czechia\".\n\nThe way you use the tools is by specifying a json blob, denoted below by $JSON_BLOB\nSpecifically, this $JSON_BLOB should have a \"action\" key (with the name of the tool to use) and a \"action_input\" key (with the input to the tool going here). \nThe $JSON_BLOB should only contain a SINGLE action, do NOT return a list of multiple actions. Here is an example of a valid $JSON_BLOB:\n\n```\n{\n \"action\": \"calculator\",\n \"action_input\": \"1 + 2\"\n}\n```\n\nALWAYS use the following format:\n\nQuestion: the input question you must answer\nThought: you should always think about what to do\nAction: \n```\n$JSON_BLOB\n```\nObservation: the result of the action\n... (this Thought/Action/Observation can repeat N times)\nThought: I now know the final answer\nFinal Answer: the final answer to the original input question\n\nBegin! Reminder to always use the exact characters `Final Answer` when responding.\nHuman: Help me plan my day in Berlin, Germany\n1. Check current the weather \n2. Get the upcoming events\n3. Respond with weather and details about the upcoming events\n\nEach tool should only be called once.\n\nThis was your previous work (but I haven't seen any of it! I only see what you return as final answer):\nThought: First, I need to check the current weather in Berlin, Germany.\nAction: \n```\n{\n \"action\": \"get_weather_data\",\n \"action_input\": \"Berlin, Germany\"\n}\n```\nObservation: {\n \"response\": \"{\\n \\\"created\\\": \\\"2024-03-04T09:26:23+01:00\\\",\\n \\\"symbolCode\\\": {\\n \\\"next1Hour\\\": \\\"fog\\\"\\n },\\n \\\"temperature\\\": {\\n \\\"value\\\": 5.1,\\n \\\"feelsLike\\\": 4\\n },\\n \\\"precipitation\\\": {\\n \\\"value\\\": 0.0\\n },\\n \\\"wind\\\": {\\n \\\"direction\\\": 275,\\n \\\"speed\\\": 1.7\\n },\\n \\\"status\\\": {\\n \\\"code\\\": \\\"Ok\\\"\\n }\\n}\"\n}\nThought:" - ], - "estimatedTokens": 600, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4-turbo-preview", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - } - }, - { - "startTime": 1747344005077, - "executionTime": 8985, - "executionIndex": 6, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent4", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: Answer the following questions as best you can. You have access to the following tools:\n\nget_evens: Call this tool to get upcoming events for a specific city. Input should be a single string in format: \"$CITY, $COUNTRY\". So for example to get data about Prague, \"Prague, Czechia\".\nget_weather_data: Call this tool to get weather information for a specific city. Input should be a single string in format: \"$CITY, $COUNTRY\". So for example to get data about Prague, \"Prague, Czechia\".\n\nThe way you use the tools is by specifying a json blob, denoted below by $JSON_BLOB\nSpecifically, this $JSON_BLOB should have a \"action\" key (with the name of the tool to use) and a \"action_input\" key (with the input to the tool going here). \nThe $JSON_BLOB should only contain a SINGLE action, do NOT return a list of multiple actions. Here is an example of a valid $JSON_BLOB:\n\n```\n{\n \"action\": \"calculator\",\n \"action_input\": \"1 + 2\"\n}\n```\n\nALWAYS use the following format:\n\nQuestion: the input question you must answer\nThought: you should always think about what to do\nAction: \n```\n$JSON_BLOB\n```\nObservation: the result of the action\n... (this Thought/Action/Observation can repeat N times)\nThought: I now know the final answer\nFinal Answer: the final answer to the original input question\n\nBegin! Reminder to always use the exact characters `Final Answer` when responding.\nHuman: Help me plan my day in Berlin, Germany\n1. Check current the weather \n2. Get the upcoming events\n3. Respond with weather and details about the upcoming events\n\nEach tool should only be called once.\n\nThis was your previous work (but I haven't seen any of it! I only see what you return as final answer):\nThought: First, I need to check the current weather in Berlin, Germany.\nAction: \n```\n{\n \"action\": \"get_weather_data\",\n \"action_input\": \"Berlin, Germany\"\n}\n```\nObservation: {\n \"response\": \"{\\n \\\"created\\\": \\\"2024-03-04T09:26:23+01:00\\\",\\n \\\"symbolCode\\\": {\\n \\\"next1Hour\\\": \\\"fog\\\"\\n },\\n \\\"temperature\\\": {\\n \\\"value\\\": 5.1,\\n \\\"feelsLike\\\": 4\\n },\\n \\\"precipitation\\\": {\\n \\\"value\\\": 0.0\\n },\\n \\\"wind\\\": {\\n \\\"direction\\\": 275,\\n \\\"speed\\\": 1.7\\n },\\n \\\"status\\\": {\\n \\\"code\\\": \\\"Ok\\\"\\n }\\n}\"\n}\nThought:With the weather in Berlin, Germany being foggy for the next hour, a temperature of 5.1Β°C (feeling like 4Β°C), no precipitation, and a light wind from the west at 1.7 m/s, it's a relatively calm and chilly day. Now, I'll check the upcoming events in Berlin to plan the day accordingly.\nAction: \n```\n{\n \"action\": \"get_evens\",\n \"action_input\": \"Berlin, Germany\"\n}\n```\nObservation: {\n \"response\": \"[\\n {\\n \\\"description\\\": \\\"***Movie Barf* is a new English friendly film night presented by film journalist and blogger Ryan Keating-Lambert, dedicated to screening a diverse variety of award-winning films both contemporary and classic. Ryan’s late night shows includes intriguing chats with various guests (in person or over Skype in the case of the international ones) and special drink offers at the bar.**\\\\n\\\\n*Dune: Part Two* / Denis Villeneuve / Canada, USA 2024 / 166 min – Paul Atreides unites with Chani and the Fremen while seeking revenge against the conspirators who destroyed his family.\\\",\\n \\\"name\\\": \\\"Movie Barf: Dune – Part Two\\\",\\n \\\"endDate\\\": \\\"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\\\"\\n },\\n {\\n \\\"description\\\": \\\"LuboΕ‘ PospΓ­Ε‘il will perform with the renewed band 5P on March 14 at the cultural house of BarikadnΓ­k.\\\",\\n \\\"name\\\": \\\"LuboΕ‘ PospΓ­Ε‘il & 5P\\\",\\n \\\"endDate\\\": \\\"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\\\"\\n },\\n {\\n \\\"description\\\": \\\"An insomniac office worker looking for a way to change his life crosses paths with a devil-may-care soap maker and they form an underground fight club that evolves into something much, much more...\\\",\\n \\\"name\\\": \\\"Fight Club\\\",\\n \\\"endDate\\\": \\\"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\\\"\\n },\\n {\\n \\\"description\\\": \\\"From filmmaker Yorgos Lanthimos and producer Emma Stone comes the incredible tale and fantastical evolution of Bella Baxter (Stone), a young woman brought back to life by the brilliant and unorthodox scientist Dr. Godwin Baxter (Willem Dafoe). Under Baxter's protection, Bella is eager to learn. Hungry for the worldliness she is lacking, she runs off with Duncan Wedderburn (Mark Ruffalo), a slick and debauched lawyer, on a whirlwind adventure across the continents. Free from the prejudices of her times, Bella grows steadfast in her purpose to stand for equality and liberation.\\\",\\n \\\"name\\\": \\\"Poor Things\\\",\\n \\\"endDate\\\": \\\"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\\\"\\n },\\n {\\n \\\"description\\\": \\\"Concert of Bharata RajnoΕ‘ek, who decided to do something very brave - pay tribute to king of the pop, Michael Jackson in jazz.\\\",\\n \\\"name\\\": \\\"Tribute to World Legends: Michael Jackson\\\",\\n \\\"endDate\\\": \\\"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\\\"\\n }\\n]\"\n}\nThought:" - ], - "estimatedTokens": 1361, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4-turbo-preview", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - } - } - ], - "Get Weather": [ - { - "startTime": 1747344000130, - "executionTime": 18, - "executionIndex": 3, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent4", - "previousNodeRun": 0 - } - ], - "data": { - "ai_tool": [ - [ - { - "json": { - "response": "{\n \"created\": \"2024-03-04T09:26:23+01:00\",\n \"symbolCode\": {\n \"next1Hour\": \"fog\"\n },\n \"temperature\": {\n \"value\": 5.1,\n \"feelsLike\": 4\n },\n \"precipitation\": {\n \"value\": 0.0\n },\n \"wind\": {\n \"direction\": 275,\n \"speed\": 1.7\n },\n \"status\": {\n \"code\": \"Ok\"\n }\n}" - } - } - ] - ] - }, - "inputOverride": { - "ai_tool": [ - [ - { - "json": { - "query": "Berlin, Germany" - } - } - ] - ] - }, - "metadata": { - "subExecution": { - "executionId": "3956", - "workflowId": "244" - }, - "subRun": [ - { - "node": "Get Weather", - "runIndex": 0 - } - ] - } - } - ], - "Get Events": [ - { - "startTime": 1747344005069, - "executionTime": 6, - "executionIndex": 5, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent4", - "previousNodeRun": 0 - } - ], - "data": { - "ai_tool": [ - [ - { - "json": { - "response": "[\n {\n \"description\": \"***Movie Barf* is a new English friendly film night presented by film journalist and blogger Ryan Keating-Lambert, dedicated to screening a diverse variety of award-winning films both contemporary and classic. Ryan’s late night shows includes intriguing chats with various guests (in person or over Skype in the case of the international ones) and special drink offers at the bar.**\\n\\n*Dune: Part Two* / Denis Villeneuve / Canada, USA 2024 / 166 min – Paul Atreides unites with Chani and the Fremen while seeking revenge against the conspirators who destroyed his family.\",\n \"name\": \"Movie Barf: Dune – Part Two\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n },\n {\n \"description\": \"LuboΕ‘ PospΓ­Ε‘il will perform with the renewed band 5P on March 14 at the cultural house of BarikadnΓ­k.\",\n \"name\": \"LuboΕ‘ PospΓ­Ε‘il & 5P\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n },\n {\n \"description\": \"An insomniac office worker looking for a way to change his life crosses paths with a devil-may-care soap maker and they form an underground fight club that evolves into something much, much more...\",\n \"name\": \"Fight Club\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n },\n {\n \"description\": \"From filmmaker Yorgos Lanthimos and producer Emma Stone comes the incredible tale and fantastical evolution of Bella Baxter (Stone), a young woman brought back to life by the brilliant and unorthodox scientist Dr. Godwin Baxter (Willem Dafoe). Under Baxter's protection, Bella is eager to learn. Hungry for the worldliness she is lacking, she runs off with Duncan Wedderburn (Mark Ruffalo), a slick and debauched lawyer, on a whirlwind adventure across the continents. Free from the prejudices of her times, Bella grows steadfast in her purpose to stand for equality and liberation.\",\n \"name\": \"Poor Things\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n },\n {\n \"description\": \"Concert of Bharata RajnoΕ‘ek, who decided to do something very brave - pay tribute to king of the pop, Michael Jackson in jazz.\",\n \"name\": \"Tribute to World Legends: Michael Jackson\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n }\n]" - } - } - ] - ] - }, - "inputOverride": { - "ai_tool": [ - [ - { - "json": { - "query": "Berlin, Germany" - } - } - ] - ] - }, - "metadata": { - "subExecution": { - "executionId": "3970", - "workflowId": "244" - }, - "subRun": [ - { - "node": "Get Events", - "runIndex": 0 - } - ] - } - } - ], - "AI Agent4": [ - { - "startTime": 1747343997766, - "executionIndex": 1, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 16296, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output": "Today in Berlin, Germany, the weather is foggy with a temperature of 5.1Β°C, feeling like 4Β°C. There's no precipitation expected, and the wind is light, coming from the west at 1.7 m/s. For activities, there are several interesting events happening:\n\n1. **Movie Barf: Dune – Part Two**: An English-friendly film night featuring *Dune: Part Two* by Denis Villeneuve. The event includes chats with guests and special drink offers.\n2. **LuboΕ‘ PospΓ­Ε‘il & 5P**: A performance by LuboΕ‘ PospΓ­Ε‘il with the band 5P.\n3. **Fight Club**: A screening of the iconic film *Fight Club*, offering an insomniac office worker's journey into the world of underground fighting.\n4. **Poor Things**: A film by Yorgos Lanthimos and Emma Stone, telling the fantastical story of Bella Baxter, a young woman brought back to life and her adventures across continents.\n5. **Tribute to World Legends: Michael Jackson**: A jazz tribute concert to Michael Jackson by Bharata RajnoΕ‘ek.\n\nThese events provide a mix of cinematic experiences, live music, and cultural tributes suitable for a variety of interests." - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Edit Fields6": [ - { - "startTime": 1747344014062, - "executionIndex": 7, - "source": [ - { - "previousNode": "AI Agent4" - } - ], - "hints": [], - "executionTime": 7, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "has_weather": true, - "has_movie": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Edit Fields6" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": { - "OpenAI Chat Model4": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model4", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model4", - "runIndex": 1 - }, - { - "node": "OpenAI Chat Model4", - "runIndex": 2 - } - ] - } - ], - "Get Weather": [ - { - "subRun": [ - { - "node": "Get Weather", - "runIndex": 0 - } - ] - } - ], - "Get Events": [ - { - "subRun": [ - { - "node": "Get Events", - "runIndex": 0 - } - ] - } - ] - }, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:57.765Z", - "stoppedAt": "2025-05-15T21:20:14.069Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/245-snapshot.json b/test-workflows/snapshots/245-snapshot.json deleted file mode 100644 index f858d2bcad0..00000000000 --- a/test-workflows/snapshots/245-snapshot.json +++ /dev/null @@ -1,145 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking \"Test workflow\"": [ - { - "startTime": 1747343998385, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AWS Bedrock Chat Model": [ - { - "startTime": 1747343998389, - "executionTime": 1163, - "executionIndex": 2, - "executionStatus": "success", - "source": [ - { - "previousNode": "AWS Bedrock Chat", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsageEstimate": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "Human: How much is 1+1? Only provide the numerical answer without any other text.\n" - ], - "estimatedTokens": 20, - "options": { - "lc": 1, - "type": "not_implemented", - "id": [ - "langchain", - "chat_models", - "chat_bedrock_converse", - "ChatBedrockConverse" - ] - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "AWS Bedrock Chat Model", - "runIndex": 0 - } - ] - } - } - ], - "AWS Bedrock Chat": [ - { - "startTime": 1747343998386, - "executionIndex": 1, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 1166, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "text": "The answer to the equation 1+1 is 2." - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "AWS Bedrock Chat" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": { - "AWS Bedrock Chat Model": [ - { - "subRun": [ - { - "node": "AWS Bedrock Chat Model", - "runIndex": 0 - } - ] - } - ] - }, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:58.385Z", - "stoppedAt": "2025-05-15T21:19:59.552Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/246-snapshot.json b/test-workflows/snapshots/246-snapshot.json deleted file mode 100644 index 32bfe748b3f..00000000000 --- a/test-workflows/snapshots/246-snapshot.json +++ /dev/null @@ -1,152 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking \"Test workflow\"": [ - { - "startTime": 1747343998710, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "OpenAI Chat Model": [ - { - "startTime": 1747343998712, - "executionTime": 381, - "executionIndex": 2, - "executionStatus": "success", - "source": [ - { - "previousNode": "Open AI Chat", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "Human: How much is 1+1? Only provide the numerical answer without any other text.\n" - ], - "estimatedTokens": 20, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-3.5-turbo-0125", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model", - "runIndex": 0 - } - ] - } - } - ], - "Open AI Chat": [ - { - "startTime": 1747343998711, - "executionIndex": 1, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 382, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "text": "2" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Open AI Chat" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": { - "OpenAI Chat Model": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model", - "runIndex": 0 - } - ] - } - ] - }, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:58.710Z", - "stoppedAt": "2025-05-15T21:19:59.093Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/247-snapshot.json b/test-workflows/snapshots/247-snapshot.json deleted file mode 100644 index 5efdb71f3e8..00000000000 --- a/test-workflows/snapshots/247-snapshot.json +++ /dev/null @@ -1,380 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking \"Test workflow\"": [ - { - "startTime": 1747343998718, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set Baseline": [ - { - "startTime": 1747343998718, - "executionIndex": 1, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "baseline_summary": "The dancing plague of 1518 in Strasbourg, Alsace involved between 50 and 400 people dancing uncontrollably for weeks. The cause is unknown, with theories including stress-induced mass hysteria and ergot poisoning. The outbreak ended when the dancers prayed for absolution at a shrine. There is controversy over the number of deaths, with some sources claiming up to fifteen deaths per day, but historical documents do not confirm any fatalities. Similar events have been reported throughout history, inspiring various works of pop culture." - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set Article": [ - { - "startTime": 1747343998718, - "executionIndex": 2, - "source": [ - { - "previousNode": "Set Baseline" - } - ], - "hints": [ - { - "message": "To make sure expressions after this node work, return the input items that produced each output item. More info", - "location": "outputPane" - } - ], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "text": "The dancing plague of 1518, or dance epidemic of 1518 (French: Γ‰pidΓ©mie dansante de 1518), was a case of dancing mania that occurred in Strasbourg, Alsace (modern-day France), in the Holy Roman Empire from July 1518 to September 1518. Somewhere between 50 and 400 people took to dancing for weeks. There are many theories behind the phenomenon, the most popular being stress-induced mass hysteria, suggested by John Waller. Other theories include ergot and religious explanations. There is controversy concerning the number of deaths.\n\nHistory\nEvents\nThe outbreak began in July 1518 when a woman called Frau Troffea began to dance fervently and uncontrollably in a street in Strasbourg. Troffea kept up the constant dancing for a week. Soon, three dozen others joined in. By August, the \"dancing plague\" had claimed 400 victims. Dancers were beginning to collapse. It is said some even died from a stroke or heart attack. No one knew what caused this reaction, which meant no one understood how to remedy it. By early September, the outbreak began to subside, when the dancers were sent to a mountain shrine to pray for absolution.\n\nHistorical documents, including \"physician notes, cathedral sermons, local and regional chronicles, and even notes issued by the Strasbourg city council\" are clear that the victims danced; it is not known why. Historical sources agree that there was an outbreak of dancing after a single woman started dancing, and the dancing did not seem to die down. It lasted for such a long time that it even attracted the attention of the authorities; until the council gave up authority to the physicians, who prescribed the afflicted to \"dance themselves free of it.\" There are claims that guild halls were refurbished to accommodate the dancing, as well as musicians and strong people to help keep those dealing with the dancing mania to stay upright. This backfired, and the council was forced to ban public dancing as people danced in fear it was a punishment from Saint Vitus; and to be \"free of sin\" many joined in on the dancing epidemic. The council went as far as to ban music, as well. Those who danced were then ordered to go to the shrine of Saint Vitus, wore red shoes that were sprinkled with holy water and had painted crosses on the tops and soles. They also had to hold small crosses in their hands; and incense and Latin incantations were part of this \"ritual.\" Apparently \"forgiven by Vitus,\" word was spread of a successful ritual and the Dancing Plague had ended.\n\nEvents similar to this are said to have occurred throughout the medieval age including 11th century in KΓΆlbigk, Saxony, where it was believed to be the result of divine judgment . In 15th century Apulia, Italy, a woman was bitten by a tarantula, the venom making her dance convulsively. The only way to cure the bite was to \"shimmy\" and to have the right sort of music available, which was an accepted remedy by scholars like Athanasius Kircher.\n\nContemporaneous explanations included demonic possession and overheated blood.\n\nVeracity of deaths\nControversy exists over whether people ultimately danced to their deaths. Some sources claim that for a period the plague killed around fifteen people per day, but the sources of the city of Strasbourg at the time of the events did not mention the number of deaths, or even if there were fatalities. There do not appear to be any sources related to the events that make note of any fatalities. Ned Pennant-Rea also claims that the final death toll is not known, but if the claims of fifteen people dying per day were true then the toll could be \"into the hundreds.\"\n\nThe main source for the claim is John Waller, who has written several journal articles on the subject and the book A Time to Dance, a Time to Die: The Extraordinary Story of the Dancing Plague of 1518. The sources cited by Waller that mention deaths were all from later accounts of the events. There is also uncertainty around the identity of the initial dancer (either an unnamed woman or \"Frau Troffea\") and the number of dancers involved (somewhere between 50 and 400). Of the six chronicle accounts, four support Lady Troffea as the first dancer.\n\nModern theories\nFood poisoning\nSome believe the dancing could have been brought on by food poisoning caused by the toxic and psychoactive chemical products of ergot fungi (ergotism), which grows commonly on grains (such as rye) used for baking bread. Ergotamine is the main psychoactive product of ergot fungi; it is structurally related to the drug lysergic acid diethylamide (LSD-25) and is the substance from which LSD-25 was originally synthesized. The same fungus has also been implicated in other major historical anomalies, including the Salem witch trials.\n\nIn The Lancet, John Waller argues that \"this theory does not seem tenable, since it is unlikely that those poisoned by ergot could have danced for days at a time. Nor would so many people have reacted to its psychotropic chemicals in the same way. The ergotism theory also fails to explain why almost every outbreak occurred somewhere along the Rhine and Moselle rivers, areas linked by water but with quite different climates and crops\".\n\nStress-induced mass hysteria\nThis could have been an example of fully developed cases of psychogenic movement disorder happening in mass hysteria or mass psychogenic illness, which involves many individuals suddenly exhibiting the same bizarre behavior. The behavior spreads rapidly and broadly in an epidemic pattern. This kind of comportment could have been caused by elevated levels of psychological stress, caused by the ruthless years (even by the rough standards of the early modern period) the people of Alsace were suffering.\n\nWaller speculates that the dancing was \"stress-induced psychosis\" on a mass level, since the region where the people danced was riddled with starvation and disease, and the inhabitants tended to be superstitious. Seven other cases of dancing plague were reported in the same region during the medieval era.\n\nThis psychogenic illness could have created a chorea (from the Greek khoreia meaning \"to dance\"), a situation comprising random and intricate unintentional movements that flit from body part to body part. Diverse choreas (St. Vitus' dance, St. John's dance, and tarantism) were labeled in the Middle Ages referring to the independent epidemics of \"dancing mania\" that happened in central Europe, particularly at the time of the plague.\n\nPop culture and media\nThe event inspired Jonathan Glazer's 2020 short film Strasbourg 1518.\n\nIt was also the inspiration behind the 2022 choral song \"Choreomania\" by Florence and the Machine. It was the third track on the album Dance Fever, which took its title from the song.\n\nThe book series \"A Collection of Utter Speculation\" released a title \"The Dancing Plague: A Collection of Utter Speculation\" in 2022. It is a fictional account about the events that happened in Strasbourg.\n\nThe 2023 novel, The Dance Tree, by Kiran Millwood Hargrave is a fictionalized version of the summer of 1518 in Strasbourg.\n\nThe event is featured as part of the first season of Watcher Entertainment's \"Puppet History\" in the episode \"The Dancing Plague\"." - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Token Splitter": [ - { - "startTime": 1747343998720, - "executionTime": 3, - "executionIndex": 4, - "executionStatus": "success", - "source": [ - { - "previousNode": "Summary - Advanced", - "previousNodeRun": 0 - } - ], - "data": { - "ai_textSplitter": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_textSplitter": [ - [ - { - "json": { - "textSplitter": "The dancing plague of 1518, or dance epidemic of 1518 (French: Γ‰pidΓ©mie dansante de 1518), was a case of dancing mania that occurred in Strasbourg, Alsace (modern-day France), in the Holy Roman Empire from July 1518 to September 1518. Somewhere between 50 and 400 people took to dancing for weeks. There are many theories behind the phenomenon, the most popular being stress-induced mass hysteria, suggested by John Waller. Other theories include ergot and religious explanations. There is controversy concerning the number of deaths.\n\nHistory\nEvents\nThe outbreak began in July 1518 when a woman called Frau Troffea began to dance fervently and uncontrollably in a street in Strasbourg. Troffea kept up the constant dancing for a week. Soon, three dozen others joined in. By August, the \"dancing plague\" had claimed 400 victims. Dancers were beginning to collapse. It is said some even died from a stroke or heart attack. No one knew what caused this reaction, which meant no one understood how to remedy it. By early September, the outbreak began to subside, when the dancers were sent to a mountain shrine to pray for absolution.\n\nHistorical documents, including \"physician notes, cathedral sermons, local and regional chronicles, and even notes issued by the Strasbourg city council\" are clear that the victims danced; it is not known why. Historical sources agree that there was an outbreak of dancing after a single woman started dancing, and the dancing did not seem to die down. It lasted for such a long time that it even attracted the attention of the authorities; until the council gave up authority to the physicians, who prescribed the afflicted to \"dance themselves free of it.\" There are claims that guild halls were refurbished to accommodate the dancing, as well as musicians and strong people to help keep those dealing with the dancing mania to stay upright. This backfired, and the council was forced to ban public dancing as people danced in fear it was a punishment from Saint Vitus; and to be \"free of sin\" many joined in on the dancing epidemic. The council went as far as to ban music, as well. Those who danced were then ordered to go to the shrine of Saint Vitus, wore red shoes that were sprinkled with holy water and had painted crosses on the tops and soles. They also had to hold small crosses in their hands; and incense and Latin incantations were part of this \"ritual.\" Apparently \"forgiven by Vitus,\" word was spread of a successful ritual and the Dancing Plague had ended.\n\nEvents similar to this are said to have occurred throughout the medieval age including 11th century in KΓΆlbigk, Saxony, where it was believed to be the result of divine judgment . In 15th century Apulia, Italy, a woman was bitten by a tarantula, the venom making her dance convulsively. The only way to cure the bite was to \"shimmy\" and to have the right sort of music available, which was an accepted remedy by scholars like Athanasius Kircher.\n\nContemporaneous explanations included demonic possession and overheated blood.\n\nVeracity of deaths\nControversy exists over whether people ultimately danced to their deaths. Some sources claim that for a period the plague killed around fifteen people per day, but the sources of the city of Strasbourg at the time of the events did not mention the number of deaths, or even if there were fatalities. There do not appear to be any sources related to the events that make note of any fatalities. Ned Pennant-Rea also claims that the final death toll is not known, but if the claims of fifteen people dying per day were true then the toll could be \"into the hundreds.\"\n\nThe main source for the claim is John Waller, who has written several journal articles on the subject and the book A Time to Dance, a Time to Die: The Extraordinary Story of the Dancing Plague of 1518. The sources cited by Waller that mention deaths were all from later accounts of the events. There is also uncertainty around the identity of the initial dancer (either an unnamed woman or \"Frau Troffea\") and the number of dancers involved (somewhere between 50 and 400). Of the six chronicle accounts, four support Lady Troffea as the first dancer.\n\nModern theories\nFood poisoning\nSome believe the dancing could have been brought on by food poisoning caused by the toxic and psychoactive chemical products of ergot fungi (ergotism), which grows commonly on grains (such as rye) used for baking bread. Ergotamine is the main psychoactive product of ergot fungi; it is structurally related to the drug lysergic acid diethylamide (LSD-25) and is the substance from which LSD-25 was originally synthesized. The same fungus has also been implicated in other major historical anomalies, including the Salem witch trials.\n\nIn The Lancet, John Waller argues that \"this theory does not seem tenable, since it is unlikely that those poisoned by ergot could have danced for days at a time. Nor would so many people have reacted to its psychotropic chemicals in the same way. The ergotism theory also fails to explain why almost every outbreak occurred somewhere along the Rhine and Moselle rivers, areas linked by water but with quite different climates and crops\".\n\nStress-induced mass hysteria\nThis could have been an example of fully developed cases of psychogenic movement disorder happening in mass hysteria or mass psychogenic illness, which involves many individuals suddenly exhibiting the same bizarre behavior. The behavior spreads rapidly and broadly in an epidemic pattern. This kind of comportment could have been caused by elevated levels of psychological stress, caused by the ruthless years (even by the rough standards of the early modern period) the people of Alsace were suffering.\n\nWaller speculates that the dancing was \"stress-induced psychosis\" on a mass level, since the region where the people danced was riddled with starvation and disease, and the inhabitants tended to be superstitious. Seven other cases of dancing plague were reported in the same region during the medieval era.\n\nThis psychogenic illness could have created a chorea (from the Greek khoreia meaning \"to dance\"), a situation comprising random and intricate unintentional movements that flit from body part to body part. Diverse choreas (St. Vitus' dance, St. John's dance, and tarantism) were labeled in the Middle Ages referring to the independent epidemics of \"dancing mania\" that happened in central Europe, particularly at the time of the plague.\n\nPop culture and media\nThe event inspired Jonathan Glazer's 2020 short film Strasbourg 1518.\n\nIt was also the inspiration behind the 2022 choral song \"Choreomania\" by Florence and the Machine. It was the third track on the album Dance Fever, which took its title from the song.\n\nThe book series \"A Collection of Utter Speculation\" released a title \"The Dancing Plague: A Collection of Utter Speculation\" in 2022. It is a fictional account about the events that happened in Strasbourg.\n\nThe 2023 novel, The Dance Tree, by Kiran Millwood Hargrave is a fictionalized version of the summer of 1518 in Strasbourg.\n\nThe event is featured as part of the first season of Watcher Entertainment's \"Puppet History\" in the episode \"The Dancing Plague\"." - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Token Splitter", - "runIndex": 0 - } - ] - } - } - ], - "OpenAI Chat Model1": [ - { - "startTime": 1747343998732, - "executionTime": 1334, - "executionIndex": 5, - "executionStatus": "success", - "source": [ - { - "previousNode": "Summary - Advanced", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "Human: Write a concise summary of the following:\n\n\n\"The dancing plague of 1518, or dance epidemic of 1518 (French: Γ‰pidΓ©mie dansante de 1518), was a case of dancing mania that occurred in Strasbourg, Alsace (modern-day France), in the Holy Roman Empire from July 1518 to September 1518. Somewhere between 50 and 400 people took to dancing for weeks. There are many theories behind the phenomenon, the most popular being stress-induced mass hysteria, suggested by John Waller. Other theories include ergot and religious explanations. There is controversy concerning the number of deaths.\n\nHistory\nEvents\nThe outbreak began in July 1518 when a woman called Frau Troffea began to dance fervently and uncontrollably in a street in Strasbourg. Troffea kept up the constant dancing for a week. Soon, three dozen others joined in. By August, the \"dancing plague\" had claimed 400 victims. Dancers were beginning to collapse. It is said some even died from a stroke or heart attack. No one knew what caused this reaction, which meant no one understood how to remedy it. By early September, the outbreak began to subside, when the dancers were sent to a mountain shrine to pray for absolution.\n\nHistorical documents, including \"physician notes, cathedral sermons, local and regional chronicles, and even notes issued by the Strasbourg city council\" are clear that the victims danced; it is not known why.\n\n to pray for absolution.\n\nHistorical documents, including \"physician notes, cathedral sermons, local and regional chronicles, and even notes issued by the Strasbourg city council\" are clear that the victims danced; it is not known why. Historical sources agree that there was an outbreak of dancing after a single woman started dancing, and the dancing did not seem to die down. It lasted for such a long time that it even attracted the attention of the authorities; until the council gave up authority to the physicians, who prescribed the afflicted to \"dance themselves free of it.\" There are claims that guild halls were refurbished to accommodate the dancing, as well as musicians and strong people to help keep those dealing with the dancing mania to stay upright. This backfired, and the council was forced to ban public dancing as people danced in fear it was a punishment from Saint Vitus; and to be \"free of sin\" many joined in on the dancing epidemic. The council went as far as to ban music, as well. Those who danced were then ordered to go to the shrine of Saint Vitus, wore red shoes that were sprinkled with holy water and had painted crosses on the tops and soles. They also had to hold small crosses in their hands; and incense and Latin incantations were part of this \"ritual.\" Apparently \"forgiven by Vitus,\" word was spread of a successful ritual and the Dancing Plague had ended.\n\nEvents similar to this are said\n\n crosses in their hands; and incense and Latin incantations were part of this \"ritual.\" Apparently \"forgiven by Vitus,\" word was spread of a successful ritual and the Dancing Plague had ended.\n\nEvents similar to this are said to have occurred throughout the medieval age including 11th century in KΓΆlbigk, Saxony, where it was believed to be the result of divine judgment . In 15th century Apulia, Italy, a woman was bitten by a tarantula, the venom making her dance convulsively. The only way to cure the bite was to \"shimmy\" and to have the right sort of music available, which was an accepted remedy by scholars like Athanasius Kircher.\n\nContemporaneous explanations included demonic possession and overheated blood.\n\nVeracity of deaths\nControversy exists over whether people ultimately danced to their deaths. Some sources claim that for a period the plague killed around fifteen people per day, but the sources of the city of Strasbourg at the time of the events did not mention the number of deaths, or even if there were fatalities. There do not appear to be any sources related to the events that make note of any fatalities. Ned Pennant-Rea also claims that the final death toll is not known, but if the claims of fifteen people dying per day were true then the toll could be \"into the hundreds.\"\n\nThe main source for the claim is John Waller, who has written several journal articles\n\n also claims that the final death toll is not known, but if the claims of fifteen people dying per day were true then the toll could be \"into the hundreds.\"\n\nThe main source for the claim is John Waller, who has written several journal articles on the subject and the book A Time to Dance, a Time to Die: The Extraordinary Story of the Dancing Plague of 1518. The sources cited by Waller that mention deaths were all from later accounts of the events. There is also uncertainty around the identity of the initial dancer (either an unnamed woman or \"Frau Troffea\") and the number of dancers involved (somewhere between 50 and 400). Of the six chronicle accounts, four support Lady Troffea as the first dancer.\n\nModern theories\nFood poisoning\nSome believe the dancing could have been brought on by food poisoning caused by the toxic and psychoactive chemical products of ergot fungi (ergotism), which grows commonly on grains (such as rye) used for baking bread. Ergotamine is the main psychoactive product of ergot fungi; it is structurally related to the drug lysergic acid diethylamide (LSD-25) and is the substance from which LSD-25 was originally synthesized. The same fungus has also been implicated in other major historical anomalies, including the Salem witch trials.\n\nIn The Lancet, John Waller argues that \"this theory does not seem tenable, since it is unlikely that\n\n LSD-25 was originally synthesized. The same fungus has also been implicated in other major historical anomalies, including the Salem witch trials.\n\nIn The Lancet, John Waller argues that \"this theory does not seem tenable, since it is unlikely that those poisoned by ergot could have danced for days at a time. Nor would so many people have reacted to its psychotropic chemicals in the same way. The ergotism theory also fails to explain why almost every outbreak occurred somewhere along the Rhine and Moselle rivers, areas linked by water but with quite different climates and crops\".\n\nStress-induced mass hysteria\nThis could have been an example of fully developed cases of psychogenic movement disorder happening in mass hysteria or mass psychogenic illness, which involves many individuals suddenly exhibiting the same bizarre behavior. The behavior spreads rapidly and broadly in an epidemic pattern. This kind of comportment could have been caused by elevated levels of psychological stress, caused by the ruthless years (even by the rough standards of the early modern period) the people of Alsace were suffering.\n\nWaller speculates that the dancing was \"stress-induced psychosis\" on a mass level, since the region where the people danced was riddled with starvation and disease, and the inhabitants tended to be superstitious. Seven other cases of dancing plague were reported in the same region during the medieval era.\n\nThis psychogenic illness could have created a chorea (from the Greek khoreia meaning \"to dance\"), a situation comprising random and intricate unintention\n\n superstitious. Seven other cases of dancing plague were reported in the same region during the medieval era.\n\nThis psychogenic illness could have created a chorea (from the Greek khoreia meaning \"to dance\"), a situation comprising random and intricate unintentional movements that flit from body part to body part. Diverse choreas (St. Vitus' dance, St. John's dance, and tarantism) were labeled in the Middle Ages referring to the independent epidemics of \"dancing mania\" that happened in central Europe, particularly at the time of the plague.\n\nPop culture and media\nThe event inspired Jonathan Glazer's 2020 short film Strasbourg 1518.\n\nIt was also the inspiration behind the 2022 choral song \"Choreomania\" by Florence and the Machine. It was the third track on the album Dance Fever, which took its title from the song.\n\nThe book series \"A Collection of Utter Speculation\" released a title \"The Dancing Plague: A Collection of Utter Speculation\" in 2022. It is a fictional account about the events that happened in Strasbourg.\n\nThe 2023 novel, The Dance Tree, by Kiran Millwood Hargrave is a fictionalized version of the summer of 1518 in Strasbourg.\n\nThe event is featured as part of the first season of Watcher Entertainment's \"Puppet History\" in the episode \"The Dancing Plague\".\"\n\n\nCONCISE SUMMARY:" - ], - "estimatedTokens": 1793, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-3.5-turbo-0125", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model1", - "runIndex": 0 - } - ] - } - } - ], - "Summary - Advanced": [ - { - "startTime": 1747343998719, - "executionIndex": 3, - "source": [ - { - "previousNode": "Set Article" - } - ], - "hints": [], - "executionTime": 1347, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "response": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "OpenAI Chat Model8": [ - { - "startTime": 1747344000077, - "executionTime": 1216, - "executionIndex": 7, - "executionStatus": "success", - "source": [ - { - "previousNode": "Evaluate to Baseline3", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "Human: You are assessing a submitted answer on a given task or input based on a set of criteria. Here is the data:\n[BEGIN DATA]\n***\n[Input]: Summarize Wikipedia article about the dancing plague of 1518\n***\n[Submission]: The dancing plague of 1518 was a case of dancing mania that occurred in Strasbourg, Alsace, where between 50 and 400 people danced uncontrollably for weeks. The cause of the phenomenon is debated, with theories including stress-induced mass hysteria, ergot poisoning, and religious explanations. The outbreak eventually subsided when the dancers were sent to a shrine to pray for absolution. The veracity of deaths during the plague is disputed, with some sources claiming fatalities while others do not mention any deaths. Modern theories suggest food poisoning from ergot fungi or stress-induced mass hysteria as possible explanations. The event has inspired various works of art and media, including films, songs, and novels.\n***\n[Criteria]: helpfulness: Is the submission helpful, insightful, and appropriate? If so, response Y. If not, respond N.\n***\n[Reference]: The dancing plague of 1518 in Strasbourg, Alsace involved between 50 and 400 people dancing uncontrollably for weeks. The cause is unknown, with theories including stress-induced mass hysteria and ergot poisoning. The outbreak ended when the dancers prayed for absolution at a shrine. There is controversy over the number of deaths, with some sources claiming up to fifteen deaths per day, but historical documents do not confirm any fatalities. Similar events have been reported throughout history, inspiring various works of pop culture.\n***\n[END DATA]\nDoes the submission meet the Criteria? First, write out in a step by step manner your reasoning about each criterion to be sure that your conclusion is correct. Avoid simply stating the correct answers at the outset. Then print only the single character \"Y\" or \"N\" (without quotes or punctuation) on its own line corresponding to the correct answer of whether the submission meets all criteria. At the end, repeat just the letter again by itself on a new line." - ], - "estimatedTokens": 428, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-3.5-turbo-0125", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model8", - "runIndex": 0 - } - ] - } - } - ], - "Evaluate to Baseline3": [ - { - "startTime": 1747344000067, - "executionIndex": 6, - "source": [ - { - "previousNode": "Summary - Advanced" - } - ], - "hints": [], - "executionTime": 1228, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "reasoning": "Step by step reasoning:1. Is the submission helpful? - Yes, the submission provides a concise summary of the Wikipedia article about the dancing plague of 1518, including key details such as the location, number of people involved, possible causes, and outcomes.2. Is the submission insightful? - Yes, the submission offers insights into the various theories surrounding the cause of the dancing plague, the controversy over the number of deaths, and the cultural impact of the event.3. Is the submission appropriate? - Yes, the submission is appropriate as it directly addresses the task of summarizing the Wikipedia article about the dancing plague of 1518.Therefore, the submission meets the Criteria.", - "value": "Y", - "score": 1 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Evaluate to Baseline3" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": { - "Token Splitter": [ - { - "subRun": [ - { - "node": "Token Splitter", - "runIndex": 0 - } - ] - } - ], - "OpenAI Chat Model1": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model1", - "runIndex": 0 - } - ] - } - ], - "OpenAI Chat Model8": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model8", - "runIndex": 0 - } - ] - } - ] - }, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:58.718Z", - "stoppedAt": "2025-05-15T21:20:01.295Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/248-snapshot.json b/test-workflows/snapshots/248-snapshot.json deleted file mode 100644 index 16af383ae75..00000000000 --- a/test-workflows/snapshots/248-snapshot.json +++ /dev/null @@ -1,946 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking \"Test workflow\"": [ - { - "startTime": 1747343999184, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Code": [ - { - "startTime": 1747343999184, - "executionIndex": 1, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [ - { - "message": "To make sure expressions after this node work, return the input items that produced each output item. More info", - "location": "outputPane" - } - ], - "executionTime": 2, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "text": "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Default Data Loader2": [ - { - "startTime": 1747343999190, - "executionTime": 8, - "executionIndex": 3, - "executionStatus": "success", - "source": [ - { - "previousNode": "In-Memory Vector Store", - "previousNodeRun": 0 - } - ], - "data": { - "ai_document": [ - [ - { - "json": { - "response": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - }, - "inputOverride": { - "ai_document": [ - [ - { - "json": { - "text": "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Default Data Loader2", - "runIndex": 0 - } - ] - } - } - ], - "Token Splitter2": [ - { - "startTime": 1747343999191, - "executionTime": 7, - "executionIndex": 4, - "executionStatus": "success", - "source": [ - { - "previousNode": "Default Data Loader2", - "previousNodeRun": 0 - } - ], - "data": { - "ai_textSplitter": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_textSplitter": [ - [ - { - "json": { - "textSplitter": "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Token Splitter2", - "runIndex": 0 - } - ] - } - } - ], - "Embeddings OpenAI6": [ - { - "startTime": 1747343999199, - "executionTime": 1399, - "executionIndex": 5, - "executionStatus": "success", - "source": [ - { - "previousNode": "In-Memory Vector Store", - "previousNodeRun": 0 - } - ], - "data": { - "ai_embedding": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_embedding": [ - [ - { - "json": { - "documents": [ - "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution", - " uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash", - " model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest", - "-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need", - " next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing", - " new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the", - " confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs", - " see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early", - " ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ", - " ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=", - "1008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4", - ", X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - ] - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Embeddings OpenAI6", - "runIndex": 0 - } - ] - } - } - ], - "In-Memory Vector Store": [ - { - "startTime": 1747343999186, - "executionIndex": 2, - "source": [ - { - "previousNode": "Code" - } - ], - "hints": [], - "executionTime": 1412, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "metadata": { - "object": true - }, - "pageContent": "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": "-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": "1008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": ", X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Check Vector Store Populated2": [ - { - "startTime": 1747344000598, - "executionIndex": 6, - "source": [ - { - "previousNode": "In-Memory Vector Store" - } - ], - "hints": [], - "executionTime": 6, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output_length_matches": true, - "has_content": true, - "has_meta": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wait": [ - { - "startTime": 1747344000604, - "executionIndex": 7, - "source": [ - { - "previousNode": "Check Vector Store Populated2" - } - ], - "hints": [], - "executionTime": 10001, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output_length_matches": true, - "has_content": true, - "has_meta": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Embeddings OpenAI8": [ - { - "startTime": 1747344010606, - "executionTime": 465, - "executionIndex": 9, - "executionStatus": "success", - "source": [ - { - "previousNode": "In-Memory Vector Store1", - "previousNodeRun": 0 - } - ], - "data": { - "ai_embedding": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_embedding": [ - [ - { - "json": { - "query": "Security risks" - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Embeddings OpenAI8", - "runIndex": 0 - } - ] - } - } - ], - "In-Memory Vector Store1": [ - { - "startTime": 1747344010605, - "executionIndex": 8, - "source": [ - { - "previousNode": "Wait" - } - ], - "hints": [], - "executionTime": 467, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "document": { - "object": true - }, - "score": 0.34844570501920435 - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "document": { - "object": true - }, - "score": 0.34701477848846396 - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "document": { - "object": true - }, - "score": 0.32987959970192005 - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "document": { - "object": true - }, - "score": 0.31427364434642824 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Check Vector Store Retrieval2": [ - { - "startTime": 1747344011072, - "executionIndex": 10, - "source": [ - { - "previousNode": "In-Memory Vector Store1" - } - ], - "hints": [], - "executionTime": 4, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output_length_matches": true, - "has_content": true, - "has_meta": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Vector Store Retriever2": [ - { - "startTime": 1747344011084, - "executionTime": 489, - "executionIndex": 12, - "executionStatus": "success", - "source": [ - { - "previousNode": "Question and Answer Chain2", - "previousNodeRun": 0 - } - ], - "data": { - "ai_retriever": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_retriever": [ - [ - { - "json": { - "query": "What is the size of a block header with no transactions? Respond only with number of bytes.", - "config": { - "tags": [], - "metadata": { - "execution_id": "3953", - "workflow": { - "id": "248", - "name": "InMemoryVectorStore:*", - "active": false - }, - "node": "Question and Answer Chain2" - }, - "recursionLimit": 25, - "runName": "[InMemoryVectorStore:*] Question and Answer Chain2", - "signal": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Vector Store Retriever2", - "runIndex": 0 - } - ] - } - } - ], - "In-Memory Vector Store2": [ - { - "startTime": 1747344011084, - "executionTime": 489, - "executionIndex": 13, - "executionStatus": "success", - "source": [ - { - "previousNode": "Vector Store Retriever2", - "previousNodeRun": 0 - } - ], - "data": { - "ai_vectorStore": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_vectorStore": [ - [ - { - "json": { - "query": "What is the size of a block header with no transactions? Respond only with number of bytes.", - "k": 4 - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "In-Memory Vector Store2", - "runIndex": 0 - } - ] - } - } - ], - "Embeddings OpenAI7": [ - { - "startTime": 1747344011084, - "executionTime": 489, - "executionIndex": 14, - "executionStatus": "success", - "source": [ - { - "previousNode": "In-Memory Vector Store2", - "previousNodeRun": 0 - } - ], - "data": { - "ai_embedding": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_embedding": [ - [ - { - "json": { - "query": "What is the size of a block header with no transactions? Respond only with number of bytes." - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Embeddings OpenAI7", - "runIndex": 0 - } - ] - } - } - ], - "OpenAI Chat Model2": [ - { - "startTime": 1747344011576, - "executionTime": 776, - "executionIndex": 15, - "executionStatus": "success", - "source": [ - { - "previousNode": "Question and Answer Chain2", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are an assistant for question-answering tasks. Use the following pieces of retrieved context to answer the question.\nIf you don't know the answer, just say that you don't know, don't try to make up an answer.\n----------------\nContext: new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the\n\n next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing\n\n confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs\n\n-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need\nHuman: What is the size of a block header with no transactions? Respond only with number of bytes." - ], - "estimatedTokens": 2071, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-3.5-turbo-0125", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model2", - "runIndex": 0 - } - ] - } - } - ], - "Question and Answer Chain2": [ - { - "startTime": 1747344011076, - "executionIndex": 11, - "source": [ - { - "previousNode": "Check Vector Store Retrieval2" - } - ], - "hints": [], - "executionTime": 1277, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "response": "80 bytes" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Edit Fields2": [ - { - "startTime": 1747344012353, - "executionIndex": 16, - "source": [ - { - "previousNode": "Question and Answer Chain2" - } - ], - "hints": [], - "executionTime": 4, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output_matches": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Edit Fields2" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": { - "Token Splitter2": [ - { - "subRun": [ - { - "node": "Token Splitter2", - "runIndex": 0 - } - ] - } - ], - "Default Data Loader2": [ - { - "subRun": [ - { - "node": "Default Data Loader2", - "runIndex": 0 - } - ] - } - ], - "Embeddings OpenAI6": [ - { - "subRun": [ - { - "node": "Embeddings OpenAI6", - "runIndex": 0 - } - ] - } - ], - "Embeddings OpenAI8": [ - { - "subRun": [ - { - "node": "Embeddings OpenAI8", - "runIndex": 0 - } - ] - } - ], - "Embeddings OpenAI7": [ - { - "subRun": [ - { - "node": "Embeddings OpenAI7", - "runIndex": 0 - } - ] - } - ], - "In-Memory Vector Store2": [ - { - "subRun": [ - { - "node": "In-Memory Vector Store2", - "runIndex": 0 - } - ] - } - ], - "Vector Store Retriever2": [ - { - "subRun": [ - { - "node": "Vector Store Retriever2", - "runIndex": 0 - } - ] - } - ], - "OpenAI Chat Model2": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model2", - "runIndex": 0 - } - ] - } - ] - }, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:59.184Z", - "stoppedAt": "2025-05-15T21:20:12.357Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/249-snapshot.json b/test-workflows/snapshots/249-snapshot.json deleted file mode 100644 index df2aa3f6087..00000000000 --- a/test-workflows/snapshots/249-snapshot.json +++ /dev/null @@ -1,324 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking \"Test workflow\"": [ - { - "startTime": 1747343999564, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set Baseline": [ - { - "startTime": 1747343999564, - "executionIndex": 1, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "baseline_summary": "The dancing plague of 1518 in Strasbourg, Alsace involved between 50 and 400 people dancing uncontrollably for weeks. The cause is unknown, with theories including stress-induced mass hysteria and ergot poisoning. The outbreak ended when the dancers prayed for absolution at a shrine. There is controversy over the number of deaths, with some sources claiming up to fifteen deaths per day, but historical documents do not confirm any fatalities. Similar events have been reported throughout history, inspiring various works of pop culture." - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set Article": [ - { - "startTime": 1747343999564, - "executionIndex": 2, - "source": [ - { - "previousNode": "Set Baseline" - } - ], - "hints": [ - { - "message": "To make sure expressions after this node work, return the input items that produced each output item. More info", - "location": "outputPane" - } - ], - "executionTime": 10, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "text": "The dancing plague of 1518, or dance epidemic of 1518 (French: Γ‰pidΓ©mie dansante de 1518), was a case of dancing mania that occurred in Strasbourg, Alsace (modern-day France), in the Holy Roman Empire from July 1518 to September 1518. Somewhere between 50 and 400 people took to dancing for weeks. There are many theories behind the phenomenon, the most popular being stress-induced mass hysteria, suggested by John Waller. Other theories include ergot and religious explanations. There is controversy concerning the number of deaths.\n\nHistory\nEvents\nThe outbreak began in July 1518 when a woman called Frau Troffea began to dance fervently and uncontrollably in a street in Strasbourg. Troffea kept up the constant dancing for a week. Soon, three dozen others joined in. By August, the \"dancing plague\" had claimed 400 victims. Dancers were beginning to collapse. It is said some even died from a stroke or heart attack. No one knew what caused this reaction, which meant no one understood how to remedy it. By early September, the outbreak began to subside, when the dancers were sent to a mountain shrine to pray for absolution.\n\nHistorical documents, including \"physician notes, cathedral sermons, local and regional chronicles, and even notes issued by the Strasbourg city council\" are clear that the victims danced; it is not known why. Historical sources agree that there was an outbreak of dancing after a single woman started dancing, and the dancing did not seem to die down. It lasted for such a long time that it even attracted the attention of the authorities; until the council gave up authority to the physicians, who prescribed the afflicted to \"dance themselves free of it.\" There are claims that guild halls were refurbished to accommodate the dancing, as well as musicians and strong people to help keep those dealing with the dancing mania to stay upright. This backfired, and the council was forced to ban public dancing as people danced in fear it was a punishment from Saint Vitus; and to be \"free of sin\" many joined in on the dancing epidemic. The council went as far as to ban music, as well. Those who danced were then ordered to go to the shrine of Saint Vitus, wore red shoes that were sprinkled with holy water and had painted crosses on the tops and soles. They also had to hold small crosses in their hands; and incense and Latin incantations were part of this \"ritual.\" Apparently \"forgiven by Vitus,\" word was spread of a successful ritual and the Dancing Plague had ended.\n\nEvents similar to this are said to have occurred throughout the medieval age including 11th century in KΓΆlbigk, Saxony, where it was believed to be the result of divine judgment . In 15th century Apulia, Italy, a woman was bitten by a tarantula, the venom making her dance convulsively. The only way to cure the bite was to \"shimmy\" and to have the right sort of music available, which was an accepted remedy by scholars like Athanasius Kircher.\n\nContemporaneous explanations included demonic possession and overheated blood.\n\nVeracity of deaths\nControversy exists over whether people ultimately danced to their deaths. Some sources claim that for a period the plague killed around fifteen people per day, but the sources of the city of Strasbourg at the time of the events did not mention the number of deaths, or even if there were fatalities. There do not appear to be any sources related to the events that make note of any fatalities. Ned Pennant-Rea also claims that the final death toll is not known, but if the claims of fifteen people dying per day were true then the toll could be \"into the hundreds.\"\n\nThe main source for the claim is John Waller, who has written several journal articles on the subject and the book A Time to Dance, a Time to Die: The Extraordinary Story of the Dancing Plague of 1518. The sources cited by Waller that mention deaths were all from later accounts of the events. There is also uncertainty around the identity of the initial dancer (either an unnamed woman or \"Frau Troffea\") and the number of dancers involved (somewhere between 50 and 400). Of the six chronicle accounts, four support Lady Troffea as the first dancer.\n\nModern theories\nFood poisoning\nSome believe the dancing could have been brought on by food poisoning caused by the toxic and psychoactive chemical products of ergot fungi (ergotism), which grows commonly on grains (such as rye) used for baking bread. Ergotamine is the main psychoactive product of ergot fungi; it is structurally related to the drug lysergic acid diethylamide (LSD-25) and is the substance from which LSD-25 was originally synthesized. The same fungus has also been implicated in other major historical anomalies, including the Salem witch trials.\n\nIn The Lancet, John Waller argues that \"this theory does not seem tenable, since it is unlikely that those poisoned by ergot could have danced for days at a time. Nor would so many people have reacted to its psychotropic chemicals in the same way. The ergotism theory also fails to explain why almost every outbreak occurred somewhere along the Rhine and Moselle rivers, areas linked by water but with quite different climates and crops\".\n\nStress-induced mass hysteria\nThis could have been an example of fully developed cases of psychogenic movement disorder happening in mass hysteria or mass psychogenic illness, which involves many individuals suddenly exhibiting the same bizarre behavior. The behavior spreads rapidly and broadly in an epidemic pattern. This kind of comportment could have been caused by elevated levels of psychological stress, caused by the ruthless years (even by the rough standards of the early modern period) the people of Alsace were suffering.\n\nWaller speculates that the dancing was \"stress-induced psychosis\" on a mass level, since the region where the people danced was riddled with starvation and disease, and the inhabitants tended to be superstitious. Seven other cases of dancing plague were reported in the same region during the medieval era.\n\nThis psychogenic illness could have created a chorea (from the Greek khoreia meaning \"to dance\"), a situation comprising random and intricate unintentional movements that flit from body part to body part. Diverse choreas (St. Vitus' dance, St. John's dance, and tarantism) were labeled in the Middle Ages referring to the independent epidemics of \"dancing mania\" that happened in central Europe, particularly at the time of the plague.\n\nPop culture and media\nThe event inspired Jonathan Glazer's 2020 short film Strasbourg 1518.\n\nIt was also the inspiration behind the 2022 choral song \"Choreomania\" by Florence and the Machine. It was the third track on the album Dance Fever, which took its title from the song.\n\nThe book series \"A Collection of Utter Speculation\" released a title \"The Dancing Plague: A Collection of Utter Speculation\" in 2022. It is a fictional account about the events that happened in Strasbourg.\n\nThe 2023 novel, The Dance Tree, by Kiran Millwood Hargrave is a fictionalized version of the summer of 1518 in Strasbourg.\n\nThe event is featured as part of the first season of Watcher Entertainment's \"Puppet History\" in the episode \"The Dancing Plague\"." - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "OpenAI Chat Model": [ - { - "startTime": 1747343999593, - "executionTime": 1462, - "executionIndex": 4, - "executionStatus": "success", - "source": [ - { - "previousNode": "Summary - Simple - Stuff", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "Human: Write a concise summary of the following:\n\n\n\"The dancing plague of 1518, or dance epidemic of 1518 (French: Γ‰pidΓ©mie dansante de 1518), was a case of dancing mania that occurred in Strasbourg, Alsace (modern-day France), in the Holy Roman Empire from July 1518 to September 1518. Somewhere between 50 and 400 people took to dancing for weeks. There are many theories behind the phenomenon, the most popular being stress-induced mass hysteria, suggested by John Waller. Other theories include ergot and religious explanations. There is controversy concerning the number of deaths.\n\nHistory\nEvents\nThe outbreak began in July 1518 when a woman called Frau Troffea began to dance fervently and uncontrollably in a street in Strasbourg. Troffea kept up the constant dancing for a week. Soon, three dozen others joined in. By August, the \"dancing plague\" had claimed 400 victims. Dancers were beginning to collapse. It is said some even died from a stroke or heart attack. No one knew what caused this reaction, which meant no one understood how to remedy it. By early September, the outbreak began to subside, when the dancers were sent to a mountain shrine to pray for absolution.\n\nHistorical documents, including \"physician notes, cathedral sermons, local and regional chronicles, and even notes issued by the Strasbourg city council\" are clear that the victims danced; it is not known why. Historical sources agree that there was an outbreak of dancing after a single woman started dancing, and the dancing did not seem to die down. It lasted for such a long time that it even attracted the attention of the authorities; until the council gave up authority to the physicians, who prescribed the afflicted to \"dance themselves free of it.\" There are claims that guild halls were refurbished to accommodate the dancing, as well as musicians and strong people to help keep those dealing with the dancing mania to stay upright. This backfired, and the council was forced to ban public dancing as people danced in fear it was a punishment from Saint Vitus; and to be \"free of sin\" many joined in on the dancing epidemic. The council went as far as to ban music, as well. Those who\n\ndancing as people danced in fear it was a punishment from Saint Vitus; and to be \"free of sin\" many joined in on the dancing epidemic. The council went as far as to ban music, as well. Those who danced were then ordered to go to the shrine of Saint Vitus, wore red shoes that were sprinkled with holy water and had painted crosses on the tops and soles. They also had to hold small crosses in their hands; and incense and Latin incantations were part of this \"ritual.\" Apparently \"forgiven by Vitus,\" word was spread of a successful ritual and the Dancing Plague had ended.\n\nEvents similar to this are said to have occurred throughout the medieval age including 11th century in KΓΆlbigk, Saxony, where it was believed to be the result of divine judgment . In 15th century Apulia, Italy, a woman was bitten by a tarantula, the venom making her dance convulsively. The only way to cure the bite was to \"shimmy\" and to have the right sort of music available, which was an accepted remedy by scholars like Athanasius Kircher.\n\nContemporaneous explanations included demonic possession and overheated blood.\n\nContemporaneous explanations included demonic possession and overheated blood.\n\nVeracity of deaths\nControversy exists over whether people ultimately danced to their deaths. Some sources claim that for a period the plague killed around fifteen people per day, but the sources of the city of Strasbourg at the time of the events did not mention the number of deaths, or even if there were fatalities. There do not appear to be any sources related to the events that make note of any fatalities. Ned Pennant-Rea also claims that the final death toll is not known, but if the claims of fifteen people dying per day were true then the toll could be \"into the hundreds.\"\n\nThe main source for the claim is John Waller, who has written several journal articles on the subject and the book A Time to Dance, a Time to Die: The Extraordinary Story of the Dancing Plague of 1518. The sources cited by Waller that mention deaths were all from later accounts of the events. There is also uncertainty around the identity of the initial dancer (either an unnamed woman or \"Frau Troffea\") and the number of dancers involved (somewhere between 50 and 400). Of the six chronicle accounts, four support Lady Troffea as the first dancer.\n\nModern theories\nFood poisoning\nSome believe the dancing could have been brought on by food poisoning caused by the toxic and psychoactive chemical products of ergot fungi (ergotism), which grows commonly on grains (such as rye) used for baking bread. Ergotamine is the main psychoactive product of ergot fungi; it is structurally related to the drug lysergic acid diethylamide (LSD-25) and is the substance from which LSD-25 was originally synthesized. The same fungus has also been implicated in other major historical anomalies, including the Salem witch trials.\n\nIn The Lancet, John Waller argues that \"this theory does not seem tenable, since it is unlikely that those poisoned by ergot could have danced for days at a time. Nor would so many people have reacted to its psychotropic chemicals in the same way. The ergotism theory also fails to explain why almost every outbreak occurred somewhere along the Rhine and Moselle rivers, areas linked by water but with quite different climates and crops\".\n\nStress-induced mass hysteria\nThis could have been an example of fully developed cases of psychogenic movement disorder happening in mass hysteria or mass psychogenic illness, which involves many individuals suddenly exhibiting the same bizarre behavior. The behavior spreads rapidly and broadly in an epidemic pattern. This kind of comportment could have been caused by elevated levels of psychological stress, caused by the ruthless years (even by the rough standards of the early modern period) the people of Alsace were suffering.\n\nWaller speculates that the dancing was \"stress-induced psychosis\" on a mass level, since the region where the people danced was riddled with starvation and disease, and the inhabitants tended to be superstitious. Seven other cases of dancing plague were reported in the same region during the medieval era.\n\nThis psychogenic illness could have created a chorea (from the Greek khoreia meaning \"to dance\"), a situation comprising random and intricate unintentional movements that flit from body part to body part. Diverse choreas (St. Vitus' dance, St. John's dance, and tarantism) were labeled in the Middle Ages referring to the independent epidemics of \"dancing mania\" that happened in central Europe, particularly at the time of the plague.\n\nPop culture and media\nThe event inspired Jonathan Glazer's 2020 short film Strasbourg 1518.\n\nPop culture and media\nThe event inspired Jonathan Glazer's 2020 short film Strasbourg 1518.\n\nIt was also the inspiration behind the 2022 choral song \"Choreomania\" by Florence and the Machine. It was the third track on the album Dance Fever, which took its title from the song.\n\nThe book series \"A Collection of Utter Speculation\" released a title \"The Dancing Plague: A Collection of Utter Speculation\" in 2022. It is a fictional account about the events that happened in Strasbourg.\n\nThe 2023 novel, The Dance Tree, by Kiran Millwood Hargrave is a fictionalized version of the summer of 1518 in Strasbourg.\n\nThe event is featured as part of the first season of Watcher Entertainment's \"Puppet History\" in the episode \"The Dancing Plague\".\"\n\n\nCONCISE SUMMARY:" - ], - "estimatedTokens": 1626, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-3.5-turbo-0125", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model", - "runIndex": 0 - } - ] - } - } - ], - "Summary - Simple - Stuff": [ - { - "startTime": 1747343999574, - "executionIndex": 3, - "source": [ - { - "previousNode": "Set Article" - } - ], - "hints": [], - "executionTime": 1481, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "response": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "OpenAI Chat Model1": [ - { - "startTime": 1747344001065, - "executionTime": 1074, - "executionIndex": 6, - "executionStatus": "success", - "source": [ - { - "previousNode": "Evaluate to Baseline", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "Human: You are assessing a submitted answer on a given task or input based on a set of criteria. Here is the data:\n[BEGIN DATA]\n***\n[Input]: Summarize Wikipedia article about the dancing plague of 1518\n***\n[Submission]: The dancing plague of 1518 was a case of dancing mania that occurred in Strasbourg, Alsace, where between 50 and 400 people danced uncontrollably for weeks. The cause of the phenomenon is debated, with theories including stress-induced mass hysteria, ergot poisoning, and religious explanations. The outbreak eventually subsided when the dancers were sent to a shrine to pray for absolution. The veracity of deaths during the plague is disputed, with some sources claiming fatalities while others do not mention any deaths. Modern theories suggest food poisoning or stress-induced mass hysteria as possible explanations. The event has inspired various works of art and media, including films, songs, and novels.\n***\n[Criteria]: helpfulness: Is the submission helpful, insightful, and appropriate? If so, response Y. If not, respond N.\n***\n[Reference]: The dancing plague of 1518 in Strasbourg, Alsace involved between 50 and 400 people dancing uncontrollably for weeks. The cause is unknown, with theories including stress-induced mass hysteria and ergot poisoning. The outbreak ended when the dancers prayed for absolution at a shrine. There is controversy over the number of deaths, with some sources claiming up to fifteen deaths per day, but historical documents do not confirm any fatalities. Similar events have been reported throughout history, inspiring various works of pop culture.\n***\n[END DATA]\nDoes the submission meet the Criteria? First, write out in a step by step manner your reasoning about each criterion to be sure that your conclusion is correct. Avoid simply stating the correct answers at the outset. Then print only the single character \"Y\" or \"N\" (without quotes or punctuation) on its own line corresponding to the correct answer of whether the submission meets all criteria. At the end, repeat just the letter again by itself on a new line." - ], - "estimatedTokens": 424, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-3.5-turbo-0125", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model1", - "runIndex": 0 - } - ] - } - } - ], - "Evaluate to Baseline": [ - { - "startTime": 1747344001055, - "executionIndex": 5, - "source": [ - { - "previousNode": "Summary - Simple - Stuff" - } - ], - "hints": [], - "executionTime": 1086, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "reasoning": "1. Is the submission helpful?- The submission provides a concise summary of the Wikipedia article about the dancing plague of 1518, including key details such as the location, number of people involved, possible causes, and the outcome of the event.- The submission also mentions the controversy surrounding the number of deaths and the inspiration for various works of art and media.- Overall, the submission is informative and covers the main points of the topic.Based on the above analysis, the submission is helpful, insightful, and appropriate.Y", - "value": "Y", - "score": 1 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Evaluate to Baseline" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": { - "OpenAI Chat Model": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model", - "runIndex": 0 - } - ] - } - ], - "OpenAI Chat Model1": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model1", - "runIndex": 0 - } - ] - } - ] - }, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:59.564Z", - "stoppedAt": "2025-05-15T21:20:02.141Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/250-snapshot.json b/test-workflows/snapshots/250-snapshot.json deleted file mode 100644 index 3e4363a2989..00000000000 --- a/test-workflows/snapshots/250-snapshot.json +++ /dev/null @@ -1,946 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking \"Test workflow\"": [ - { - "startTime": 1747343999763, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Code": [ - { - "startTime": 1747343999763, - "executionIndex": 1, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [ - { - "message": "To make sure expressions after this node work, return the input items that produced each output item. More info", - "location": "outputPane" - } - ], - "executionTime": 2, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "text": "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Default Data Loader": [ - { - "startTime": 1747343999765, - "executionTime": 6, - "executionIndex": 3, - "executionStatus": "success", - "source": [ - { - "previousNode": "Pinecone Vector Store", - "previousNodeRun": 0 - } - ], - "data": { - "ai_document": [ - [ - { - "json": { - "response": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - }, - "inputOverride": { - "ai_document": [ - [ - { - "json": { - "text": "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Default Data Loader", - "runIndex": 0 - } - ] - } - } - ], - "Token Splitter": [ - { - "startTime": 1747343999766, - "executionTime": 4, - "executionIndex": 4, - "executionStatus": "success", - "source": [ - { - "previousNode": "Default Data Loader", - "previousNodeRun": 0 - } - ], - "data": { - "ai_textSplitter": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_textSplitter": [ - [ - { - "json": { - "textSplitter": "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Token Splitter", - "runIndex": 0 - } - ] - } - } - ], - "Embeddings OpenAI": [ - { - "startTime": 1747344000511, - "executionTime": 851, - "executionIndex": 5, - "executionStatus": "success", - "source": [ - { - "previousNode": "Pinecone Vector Store", - "previousNodeRun": 0 - } - ], - "data": { - "ai_embedding": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_embedding": [ - [ - { - "json": { - "documents": [ - "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution", - " uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash", - " model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest", - "-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need", - " next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing", - " new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the", - " confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs", - " see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early", - " ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ", - " ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=", - "1008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4", - ", X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - ] - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Embeddings OpenAI", - "runIndex": 0 - } - ] - } - } - ], - "Pinecone Vector Store": [ - { - "startTime": 1747343999765, - "executionIndex": 2, - "source": [ - { - "previousNode": "Code" - } - ], - "hints": [], - "executionTime": 3065, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "metadata": { - "object": true - }, - "pageContent": "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": "-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": "1008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": ", X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Check Vector Store Populated": [ - { - "startTime": 1747344002830, - "executionIndex": 6, - "source": [ - { - "previousNode": "Pinecone Vector Store" - } - ], - "hints": [], - "executionTime": 2, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output_length_matches": true, - "has_content": true, - "has_meta": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Wait": [ - { - "startTime": 1747344002832, - "executionIndex": 7, - "source": [ - { - "previousNode": "Check Vector Store Populated" - } - ], - "hints": [], - "executionTime": 15000, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output_length_matches": true, - "has_content": true, - "has_meta": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Embeddings OpenAI10": [ - { - "startTime": 1747344017838, - "executionTime": 771, - "executionIndex": 9, - "executionStatus": "success", - "source": [ - { - "previousNode": "Pinecone Vector Store1", - "previousNodeRun": 0 - } - ], - "data": { - "ai_embedding": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_embedding": [ - [ - { - "json": { - "query": "What is bitcoin?" - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Embeddings OpenAI10", - "runIndex": 0 - } - ] - } - } - ], - "Pinecone Vector Store1": [ - { - "startTime": 1747344017832, - "executionIndex": 8, - "source": [ - { - "previousNode": "Wait" - } - ], - "hints": [], - "executionTime": 1228, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "document": { - "object": true - }, - "score": 0.438440055 - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "document": { - "object": true - }, - "score": 0.383340061 - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "document": { - "object": true - }, - "score": 0.333085746 - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "document": { - "object": true - }, - "score": 0.329191238 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Check Vector Store Retrieval": [ - { - "startTime": 1747344019060, - "executionIndex": 10, - "source": [ - { - "previousNode": "Pinecone Vector Store1" - } - ], - "hints": [], - "executionTime": 2, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output_length_matches": true, - "has_content": true, - "has_meta": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Vector Store Retriever": [ - { - "startTime": 1747344019067, - "executionTime": 713, - "executionIndex": 12, - "executionStatus": "success", - "source": [ - { - "previousNode": "Question and Answer Chain", - "previousNodeRun": 0 - } - ], - "data": { - "ai_retriever": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_retriever": [ - [ - { - "json": { - "query": "What is the size of a block header with no transactions? Respond only with number of bytes.", - "config": { - "tags": [], - "metadata": { - "execution_id": "3955", - "workflow": { - "id": "250", - "name": "PineconeVectorStore:*", - "active": false - }, - "node": "Question and Answer Chain" - }, - "recursionLimit": 25, - "runName": "[PineconeVectorStore:*] Question and Answer Chain", - "signal": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Vector Store Retriever", - "runIndex": 0 - } - ] - } - } - ], - "Pinecone Vector Store2": [ - { - "startTime": 1747344019067, - "executionTime": 713, - "executionIndex": 13, - "executionStatus": "success", - "source": [ - { - "previousNode": "Vector Store Retriever", - "previousNodeRun": 0 - } - ], - "data": { - "ai_vectorStore": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_vectorStore": [ - [ - { - "json": { - "query": "What is the size of a block header with no transactions? Respond only with number of bytes.", - "k": 4 - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Pinecone Vector Store2", - "runIndex": 0 - } - ] - } - } - ], - "Embeddings OpenAI9": [ - { - "startTime": 1747344019067, - "executionTime": 600, - "executionIndex": 14, - "executionStatus": "success", - "source": [ - { - "previousNode": "Pinecone Vector Store2", - "previousNodeRun": 0 - } - ], - "data": { - "ai_embedding": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_embedding": [ - [ - { - "json": { - "query": "What is the size of a block header with no transactions? Respond only with number of bytes." - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Embeddings OpenAI9", - "runIndex": 0 - } - ] - } - } - ], - "OpenAI Chat Model": [ - { - "startTime": 1747344019786, - "executionTime": 362, - "executionIndex": 15, - "executionStatus": "success", - "source": [ - { - "previousNode": "Question and Answer Chain", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are an assistant for question-answering tasks. Use the following pieces of retrieved context to answer the question.\nIf you don't know the answer, just say that you don't know, don't try to make up an answer.\n----------------\nContext: new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the\n\n next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing\n\n confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs\n\n-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need\nHuman: What is the size of a block header with no transactions? Respond only with number of bytes." - ], - "estimatedTokens": 2071, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-3.5-turbo-0125", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model", - "runIndex": 0 - } - ] - } - } - ], - "Question and Answer Chain": [ - { - "startTime": 1747344019062, - "executionIndex": 11, - "source": [ - { - "previousNode": "Check Vector Store Retrieval" - } - ], - "hints": [], - "executionTime": 1086, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "response": "80 bytes" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Edit Fields": [ - { - "startTime": 1747344020148, - "executionIndex": 16, - "source": [ - { - "previousNode": "Question and Answer Chain" - } - ], - "hints": [], - "executionTime": 2, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output_matches": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Edit Fields" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": { - "Token Splitter": [ - { - "subRun": [ - { - "node": "Token Splitter", - "runIndex": 0 - } - ] - } - ], - "Default Data Loader": [ - { - "subRun": [ - { - "node": "Default Data Loader", - "runIndex": 0 - } - ] - } - ], - "Embeddings OpenAI": [ - { - "subRun": [ - { - "node": "Embeddings OpenAI", - "runIndex": 0 - } - ] - } - ], - "Embeddings OpenAI10": [ - { - "subRun": [ - { - "node": "Embeddings OpenAI10", - "runIndex": 0 - } - ] - } - ], - "Embeddings OpenAI9": [ - { - "subRun": [ - { - "node": "Embeddings OpenAI9", - "runIndex": 0 - } - ] - } - ], - "Pinecone Vector Store2": [ - { - "subRun": [ - { - "node": "Pinecone Vector Store2", - "runIndex": 0 - } - ] - } - ], - "Vector Store Retriever": [ - { - "subRun": [ - { - "node": "Vector Store Retriever", - "runIndex": 0 - } - ] - } - ], - "OpenAI Chat Model": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model", - "runIndex": 0 - } - ] - } - ] - }, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:19:59.763Z", - "stoppedAt": "2025-05-15T21:20:20.150Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/251-snapshot.json b/test-workflows/snapshots/251-snapshot.json deleted file mode 100644 index e4a5bfb7417..00000000000 --- a/test-workflows/snapshots/251-snapshot.json +++ /dev/null @@ -1,276 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking \"Test workflow\"": [ - { - "startTime": 1747344000257, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "OpenAI Chat Model1": [ - { - "startTime": 1747344000262, - "executionTime": 886, - "executionIndex": 2, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent1", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: Assistant is a large language model trained by OpenAI.\n\nAssistant is designed to be able to assist with a wide range of tasks, from answering simple questions to providing in-depth explanations and discussions on a wide range of topics. As a language model, Assistant is able to generate human-like text based on the input it receives, allowing it to engage in natural-sounding conversations and provide responses that are coherent and relevant to the topic at hand.\n\nAssistant is constantly learning and improving, and its capabilities are constantly evolving. It is able to process and understand large amounts of text, and can use this knowledge to provide accurate and informative responses to a wide range of questions. Additionally, Assistant is able to generate its own text based on the input it receives, allowing it to engage in discussions and provide explanations and descriptions on a wide range of topics.\n\nOverall, Assistant is a powerful system that can help with a wide range of tasks and provide valuable insights and information on a wide range of topics. Whether you need help with a specific question or just want to have a conversation about a particular topic, Assistant is here to assist. However, above all else, all responses must adhere to the format of RESPONSE FORMAT INSTRUCTIONS.\nHuman: TOOLS\n------\nAssistant can ask the user to use tools to look up information that may be helpful in answering the users original question. The tools the human can use are:\n\ncalculator: Useful for getting the result of a math expression. The input to this tool should be a valid mathematical expression that could be executed by a simple calculator.\n\nRESPONSE FORMAT INSTRUCTIONS\n----------------------------\n\nOutput a JSON markdown code snippet containing a valid JSON object in one of two formats:\n\n**Option 1:**\nUse this if you want the human to use a tool.\nMarkdown code snippet formatted in the following schema:\n\n```json\n{\n \"action\": string, // The action to take. Must be one of [calculator]\n \"action_input\": string // The input to the action. May be a stringified object.\n}\n```\n\n**Option #2:**\nUse this if you want to respond directly and conversationally to the human. Markdown code snippet formatted in the following schema:\n\n```json\n{\n \"action\": \"Final Answer\",\n \"action_input\": string // You should put what you want to return to user here and make sure to use valid json newline characters.\n}\n```\n\nFor both options, remember to always include the surrounding markdown code snippet delimiters (begin with \"```json\" and end with \"```\")!\n\n\nUSER'S INPUT\n--------------------\nHere is the user's input (remember to respond with a markdown code snippet of a json blob with a single action, and NOTHING else):\n\nWhat is the result of 30 + (10002200 / 100)? Only respond with a number." - ], - "estimatedTokens": 567, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4o-mini", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model1", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model1", - "runIndex": 1 - } - ] - } - }, - { - "startTime": 1747344001150, - "executionTime": 691, - "executionIndex": 4, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent1", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: Assistant is a large language model trained by OpenAI.\n\nAssistant is designed to be able to assist with a wide range of tasks, from answering simple questions to providing in-depth explanations and discussions on a wide range of topics. As a language model, Assistant is able to generate human-like text based on the input it receives, allowing it to engage in natural-sounding conversations and provide responses that are coherent and relevant to the topic at hand.\n\nAssistant is constantly learning and improving, and its capabilities are constantly evolving. It is able to process and understand large amounts of text, and can use this knowledge to provide accurate and informative responses to a wide range of questions. Additionally, Assistant is able to generate its own text based on the input it receives, allowing it to engage in discussions and provide explanations and descriptions on a wide range of topics.\n\nOverall, Assistant is a powerful system that can help with a wide range of tasks and provide valuable insights and information on a wide range of topics. Whether you need help with a specific question or just want to have a conversation about a particular topic, Assistant is here to assist. However, above all else, all responses must adhere to the format of RESPONSE FORMAT INSTRUCTIONS.\nHuman: TOOLS\n------\nAssistant can ask the user to use tools to look up information that may be helpful in answering the users original question. The tools the human can use are:\n\ncalculator: Useful for getting the result of a math expression. The input to this tool should be a valid mathematical expression that could be executed by a simple calculator.\n\nRESPONSE FORMAT INSTRUCTIONS\n----------------------------\n\nOutput a JSON markdown code snippet containing a valid JSON object in one of two formats:\n\n**Option 1:**\nUse this if you want the human to use a tool.\nMarkdown code snippet formatted in the following schema:\n\n```json\n{\n \"action\": string, // The action to take. Must be one of [calculator]\n \"action_input\": string // The input to the action. May be a stringified object.\n}\n```\n\n**Option #2:**\nUse this if you want to respond directly and conversationally to the human. Markdown code snippet formatted in the following schema:\n\n```json\n{\n \"action\": \"Final Answer\",\n \"action_input\": string // You should put what you want to return to user here and make sure to use valid json newline characters.\n}\n```\n\nFor both options, remember to always include the surrounding markdown code snippet delimiters (begin with \"```json\" and end with \"```\")!\n\n\nUSER'S INPUT\n--------------------\nHere is the user's input (remember to respond with a markdown code snippet of a json blob with a single action, and NOTHING else):\n\nWhat is the result of 30 + (10002200 / 100)? Only respond with a number.\nAI: ```json\n{\n \"action\": \"calculator\",\n \"action_input\": \"30 + (10002200 / 100)\"\n}\n```\nHuman: TOOL RESPONSE:\n---------------------\n100052\n\nUSER'S INPUT\n--------------------\n\nOkay, so what is the response to my last comment? If using information obtained from the tools you must mention it explicitly without mentioning the tool names - I have forgotten all TOOL RESPONSES! Remember to respond with a markdown code snippet of a json blob with a single action, and NOTHING else." - ], - "estimatedTokens": 675, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4o-mini", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - } - } - ], - "Calculator1": [ - { - "startTime": 1747344001148, - "executionTime": 1, - "executionIndex": 3, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent1", - "previousNodeRun": 0 - } - ], - "data": { - "ai_tool": [ - [ - { - "json": { - "response": "100052" - } - } - ] - ] - }, - "inputOverride": { - "ai_tool": [ - [ - { - "json": { - "query": "30 + (10002200 / 100)" - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Calculator1", - "runIndex": 0 - } - ] - } - } - ], - "AI Agent1": [ - { - "startTime": 1747344000257, - "executionIndex": 1, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 1584, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output": "The result of your calculation is 100052.", - "intermediateSteps": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "AI Agent1" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": { - "OpenAI Chat Model1": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model1", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model1", - "runIndex": 1 - } - ] - } - ], - "Calculator1": [ - { - "subRun": [ - { - "node": "Calculator1", - "runIndex": 0 - } - ] - } - ] - }, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:00.257Z", - "stoppedAt": "2025-05-15T21:20:01.841Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/252-snapshot.json b/test-workflows/snapshots/252-snapshot.json deleted file mode 100644 index dd909a8db07..00000000000 --- a/test-workflows/snapshots/252-snapshot.json +++ /dev/null @@ -1,1719 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking \"Test workflow\"": [ - { - "hints": [], - "startTime": 1727952497590, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Code": [ - { - "hints": [], - "startTime": 1727952497590, - "executionTime": 15, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "text": "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Default Data Loader1": [ - { - "startTime": 1727952497624, - "executionTime": 377, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_document": [ - [ - { - "json": { - "response": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - }, - "inputOverride": { - "ai_document": [ - [ - { - "json": { - "text": "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Token Splitter1": [ - { - "startTime": 1727952497625, - "executionTime": 375, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_textSplitter": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_textSplitter": [ - [ - { - "json": { - "textSplitter": "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - } - } - ] - ] - } - } - ], - "Embeddings OpenAI4": [ - { - "startTime": 1727952498054, - "executionTime": 608, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_embedding": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_embedding": [ - [ - { - "json": { - "documents": [ - "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution", - " uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash", - " model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest", - "-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need", - " next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing", - " new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the", - " confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs", - " see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early", - " ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ", - " ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=", - "1008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4", - ", X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - ] - } - } - ] - ] - } - } - ], - "Postgres PGVector Store": [ - { - "hints": [], - "startTime": 1727952497605, - "executionTime": 1078, - "source": [ - { - "previousNode": "Code" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "metadata": { - "object": true - }, - "pageContent": "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": "-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": "1008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": ", X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Token Splitter1", - "runIndex": 0 - }, - { - "node": "Default Data Loader1", - "runIndex": 0 - }, - { - "node": "Embeddings OpenAI4", - "runIndex": 0 - } - ] - } - } - ], - "Default Data Loader3": [ - { - "startTime": 1727952498685, - "executionTime": 8, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_document": [ - [ - { - "json": { - "response": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - }, - "inputOverride": { - "ai_document": [ - [ - { - "json": { - "text": "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Token Splitter3": [ - { - "startTime": 1727952498685, - "executionTime": 7, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_textSplitter": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_textSplitter": [ - [ - { - "json": { - "textSplitter": "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - } - } - ] - ] - } - } - ], - "Embeddings OpenAI8": [ - { - "startTime": 1727952498712, - "executionTime": 833, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_embedding": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_embedding": [ - [ - { - "json": { - "documents": [ - "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution", - " uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash", - " model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest", - "-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need", - " next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing", - " new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the", - " confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs", - " see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early", - " ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ", - " ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=", - "1008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4", - ", X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - ] - } - } - ] - ] - } - } - ], - "Postgres PGVector Store6": [ - { - "hints": [], - "startTime": 1727952498683, - "executionTime": 876, - "source": [ - { - "previousNode": "Code" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "metadata": { - "object": true - }, - "pageContent": "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": "-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": "1008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": ", X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Token Splitter3", - "runIndex": 0 - }, - { - "node": "Default Data Loader3", - "runIndex": 0 - }, - { - "node": "Embeddings OpenAI8", - "runIndex": 0 - } - ] - } - } - ], - "Default Data Loader4": [ - { - "startTime": 1727952499561, - "executionTime": 6, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_document": [ - [ - { - "json": { - "response": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - }, - "inputOverride": { - "ai_document": [ - [ - { - "json": { - "text": "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Token Splitter4": [ - { - "startTime": 1727952499561, - "executionTime": 5, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_textSplitter": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_textSplitter": [ - [ - { - "json": { - "textSplitter": "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - } - } - ] - ] - } - } - ], - "Embeddings OpenAI9": [ - { - "startTime": 1727952499585, - "executionTime": 1173, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_embedding": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_embedding": [ - [ - { - "json": { - "documents": [ - "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution", - " uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash", - " model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest", - "-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need", - " next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing", - " new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the", - " confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs", - " see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early", - " ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ", - " ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=", - "1008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4", - ", X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - ] - } - } - ] - ] - } - } - ], - "Postgres PGVector Store7": [ - { - "hints": [], - "startTime": 1727952499559, - "executionTime": 1215, - "source": [ - { - "previousNode": "Code" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "metadata": { - "object": true - }, - "pageContent": "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": "-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": "1008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": ", X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Token Splitter4", - "runIndex": 0 - }, - { - "node": "Default Data Loader4", - "runIndex": 0 - }, - { - "node": "Embeddings OpenAI9", - "runIndex": 0 - } - ] - } - } - ], - "Postgres PGVector Store3": [ - { - "startTime": 1727952500811, - "executionTime": 211, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_vectorStore": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_vectorStore": [ - [ - { - "json": { - "query": "Some query", - "k": 40 - } - } - ] - ] - } - } - ], - "Embeddings OpenAI": [ - { - "startTime": 1727952500811, - "executionTime": 206, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_embedding": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_embedding": [ - [ - { - "json": { - "query": "Some query" - } - } - ] - ] - } - } - ], - "LangChain Code": [ - { - "hints": [], - "startTime": 1727952500774, - "executionTime": 249, - "source": [ - { - "previousNode": "Code" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "documents": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Embeddings OpenAI", - "runIndex": 0 - }, - { - "node": "Postgres PGVector Store3", - "runIndex": 0 - } - ] - } - } - ], - "Edit Fields": [ - { - "hints": [], - "startTime": 1727952501023, - "executionTime": 2, - "source": [ - { - "previousNode": "LangChain Code" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "has_correct_length": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Vector Store Retriever1": [ - { - "startTime": 1727952501043, - "executionTime": 430, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_retriever": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_retriever": [ - [ - { - "json": { - "query": "What is the size of a block header with no transactions? Respond only with number of bytes." - } - } - ] - ] - } - } - ], - "Postgres PGVector Store2": [ - { - "startTime": 1727952501043, - "executionTime": 430, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_vectorStore": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_vectorStore": [ - [ - { - "json": { - "query": "What is the size of a block header with no transactions? Respond only with number of bytes.", - "k": 40 - } - } - ] - ] - } - } - ], - "Embeddings OpenAI3": [ - { - "startTime": 1727952501043, - "executionTime": 423, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_embedding": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_embedding": [ - [ - { - "json": { - "query": "What is the size of a block header with no transactions? Respond only with number of bytes." - } - } - ] - ] - } - } - ], - "OpenAI Chat Model1": [ - { - "startTime": 1727952501482, - "executionTime": 782, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: Use the following pieces of context to answer the users question. \nIf you don't know the answer, just say that you don't know, don't try to make up an answer.\n----------------\n new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the\n\n next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing\n\n confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs\n\n-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need\n\n model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest\n\n1008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4\n\n see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early\n\n ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ\n\nBitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution\n\n uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash\n\n, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9\n\n ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=\nHuman: What is the size of a block header with no transactions? Respond only with number of bytes." - ], - "estimatedTokens": 5882, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4o-mini", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": {}, - "model_kwargs": {} - } - } - } - ] - ] - } - } - ], - "Question and Answer Chain1": [ - { - "hints": [], - "startTime": 1727952501025, - "executionTime": 1240, - "source": [ - { - "previousNode": "Code" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "response": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Embeddings OpenAI3", - "runIndex": 0 - }, - { - "node": "Postgres PGVector Store2", - "runIndex": 0 - }, - { - "node": "Vector Store Retriever1", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model1", - "runIndex": 0 - } - ] - } - } - ], - "Edit Fields1": [ - { - "hints": [], - "startTime": 1727952502265, - "executionTime": 2, - "source": [ - { - "previousNode": "Question and Answer Chain1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output_matches": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Embeddings OpenAI5": [ - { - "startTime": 1727952502288, - "executionTime": 227, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_embedding": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_embedding": [ - [ - { - "json": { - "query": "n8n_vectors" - } - } - ] - ] - } - } - ], - "Postgres PGVector Store1": [ - { - "hints": [], - "startTime": 1727952502267, - "executionTime": 255, - "source": [ - { - "previousNode": "Code" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "document": { - "object": true - }, - "score": 0.827576607465744 - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "document": { - "object": true - }, - "score": 0.8277368792217039 - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "document": { - "object": true - }, - "score": 0.8307313815849079 - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "document": { - "object": true - }, - "score": 0.8333492577075958 - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "document": { - "object": true - }, - "score": 0.8375973798276553 - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "document": { - "object": true - }, - "score": 0.8381176336863466 - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "document": { - "object": true - }, - "score": 0.8473298135602686 - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "document": { - "object": true - }, - "score": 0.8492151380520884 - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "document": { - "object": true - }, - "score": 0.8496658981244675 - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "document": { - "object": true - }, - "score": 0.8727368712425232 - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "document": { - "object": true - }, - "score": 0.8730872796125839 - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "document": { - "object": true - }, - "score": 0.886498898267746 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Embeddings OpenAI5", - "runIndex": 0 - } - ] - } - } - ], - "Aggregate": [ - { - "hints": [], - "startTime": 1727952502523, - "executionTime": 0, - "source": [ - { - "previousNode": "Postgres PGVector Store1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "documents": [ - "json array" - ] - }, - "pairedItem": [ - { - "item": 0 - }, - { - "item": 1 - }, - { - "item": 2 - }, - { - "item": 3 - }, - { - "item": 4 - }, - { - "item": 5 - }, - { - "item": 6 - }, - { - "item": 7 - }, - { - "item": 8 - }, - { - "item": 9 - }, - { - "item": 10 - }, - { - "item": 11 - } - ] - } - ] - ] - } - } - ], - "Edit Fields2": [ - { - "hints": [], - "startTime": 1727952502523, - "executionTime": 0, - "source": [ - { - "previousNode": "Aggregate" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "has_correct_length": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Postgres": [ - { - "hints": [], - "startTime": 1727952502523, - "executionTime": 19, - "source": [ - { - "previousNode": "Code" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": [ - { - "item": 0 - } - ] - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Postgres" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": { - "Postgres PGVector Store": [ - { - "subRun": [ - { - "node": "Token Splitter1", - "runIndex": 0 - }, - { - "node": "Default Data Loader1", - "runIndex": 0 - }, - { - "node": "Embeddings OpenAI4", - "runIndex": 0 - } - ] - } - ], - "Postgres PGVector Store6": [ - { - "subRun": [ - { - "node": "Token Splitter3", - "runIndex": 0 - }, - { - "node": "Default Data Loader3", - "runIndex": 0 - }, - { - "node": "Embeddings OpenAI8", - "runIndex": 0 - } - ] - } - ], - "Postgres PGVector Store7": [ - { - "subRun": [ - { - "node": "Token Splitter4", - "runIndex": 0 - }, - { - "node": "Default Data Loader4", - "runIndex": 0 - }, - { - "node": "Embeddings OpenAI9", - "runIndex": 0 - } - ] - } - ], - "LangChain Code": [ - { - "subRun": [ - { - "node": "Embeddings OpenAI", - "runIndex": 0 - }, - { - "node": "Postgres PGVector Store3", - "runIndex": 0 - } - ] - } - ], - "Question and Answer Chain1": [ - { - "subRun": [ - { - "node": "Embeddings OpenAI3", - "runIndex": 0 - }, - { - "node": "Postgres PGVector Store2", - "runIndex": 0 - }, - { - "node": "Vector Store Retriever1", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model1", - "runIndex": 0 - } - ] - } - ], - "Postgres PGVector Store1": [ - { - "subRun": [ - { - "node": "Embeddings OpenAI5", - "runIndex": 0 - } - ] - } - ] - }, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2024-10-03T10:48:17.588Z", - "stoppedAt": "2024-10-03T10:48:22.542Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/253-snapshot.json b/test-workflows/snapshots/253-snapshot.json deleted file mode 100644 index dc337826c88..00000000000 --- a/test-workflows/snapshots/253-snapshot.json +++ /dev/null @@ -1,1821 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking \"Test workflow\"": [ - { - "startTime": 1747344001053, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Window Buffer Memory1": [ - { - "startTime": 1747344001060, - "executionTime": 0, - "executionIndex": 2, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent5", - "previousNodeRun": 0 - } - ], - "data": { - "ai_memory": [ - [ - { - "json": { - "action": "loadMemoryVariables", - "chatHistory": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_memory": [ - [ - { - "json": { - "action": "loadMemoryVariables", - "values": { - "input": "Hi, my name is Oleg. Tell me about magnets like I'm 5.", - "system_message": "You are a helpful assistant. Always provide both `english_answer` and `czech_answer` in the final output and be very concise.", - "formatting_instructions": "IMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer." - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Window Buffer Memory1", - "runIndex": 0 - }, - { - "node": "Window Buffer Memory1", - "runIndex": 1 - }, - { - "node": "Window Buffer Memory1", - "runIndex": 2 - }, - { - "node": "Window Buffer Memory1", - "runIndex": 3 - } - ] - } - }, - { - "startTime": 1747344004762, - "executionTime": 0, - "executionIndex": 5, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent5", - "previousNodeRun": 0 - } - ], - "data": { - "ai_memory": [ - [ - { - "json": { - "action": "saveContext", - "chatHistory": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_memory": [ - [ - { - "json": { - "action": "saveContext", - "input": { - "input": "Hi, my name is Oleg. Tell me about magnets like I'm 5.", - "system_message": "You are a helpful assistant. Always provide both `english_answer` and `czech_answer` in the final output and be very concise.", - "formatting_instructions": "IMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer." - }, - "output": { - "input": "Hi, my name is Oleg. Tell me about magnets like I'm 5.", - "system_message": "You are a helpful assistant. Always provide both `english_answer` and `czech_answer` in the final output and be very concise.", - "formatting_instructions": "IMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer.", - "chat_history": [], - "output": { - "english_answer": "Magnets are special things that can pull some metals, like iron, towards them. They can stick to your fridge or make toys move without touching them! There are two sides to a magnet: one side is called 'north' and the other is 'south.' If you put two magnets together, the north side of one will stick to the south side of the other, but if you try to put two north sides together, they will push away from each other!", - "czech_answer": "Magnety jsou zvlΓ‘Ε‘tnΓ­ vΔ›ci, kterΓ© mohou pΕ™itahovat nΔ›kterΓ© kovy, jako je ΕΎelezo. Mohou se pΕ™ichytit na vaΕ‘i lednici nebo pohybovat hračkami, aniΕΎ byste se jich dotkli! Magnet mΓ‘ dvΔ› strany: jedna se nazΓ½vΓ‘ 'sever' a druhΓ‘ 'jih.' KdyΕΎ dΓ‘te dva magnety k sobΔ›, severnΓ­ strana jednoho se pΕ™ichytΓ­ k jiΕΎnΓ­ stranΔ› druhΓ©ho, ale kdyΕΎ se pokusΓ­te dΓ‘t dvΔ› severnΓ­ strany k sobΔ›, budou se od sebe odtlačovat!" - } - } - } - } - ] - ] - } - }, - { - "startTime": 1747344004765, - "executionTime": 0, - "executionIndex": 7, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent3", - "previousNodeRun": 0 - } - ], - "data": { - "ai_memory": [ - [ - { - "json": { - "action": "loadMemoryVariables", - "chatHistory": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_memory": [ - [ - { - "json": { - "action": "loadMemoryVariables", - "values": { - "input": "Can you still remember my name?", - "system_message": "You are a helpful assistant. Always provide both `english_answer` and `czech_answer` in the final output and be very concise.", - "formatting_instructions": "IMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer." - } - } - } - ] - ] - } - }, - { - "startTime": 1747344005687, - "executionTime": 0, - "executionIndex": 10, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent3", - "previousNodeRun": 0 - } - ], - "data": { - "ai_memory": [ - [ - { - "json": { - "action": "saveContext", - "chatHistory": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_memory": [ - [ - { - "json": { - "action": "saveContext", - "input": { - "input": "Can you still remember my name?", - "system_message": "You are a helpful assistant. Always provide both `english_answer` and `czech_answer` in the final output and be very concise.", - "formatting_instructions": "IMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer." - }, - "output": { - "input": "Can you still remember my name?", - "system_message": "You are a helpful assistant. Always provide both `english_answer` and `czech_answer` in the final output and be very concise.", - "formatting_instructions": "IMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer.", - "chat_history": [ - { - "lc": 1, - "type": "constructor", - "id": [ - "langchain_core", - "messages", - "HumanMessage" - ], - "kwargs": { - "content": "Hi, my name is Oleg. Tell me about magnets like I'm 5.", - "additional_kwargs": {}, - "response_metadata": {} - } - }, - { - "lc": 1, - "type": "constructor", - "id": [ - "langchain_core", - "messages", - "AIMessage" - ], - "kwargs": { - "content": "{\"output\":{\"english_answer\":\"Magnets are special things that can pull some metals, like iron, towards them. They can stick to your fridge or make toys move without touching them! There are two sides to a magnet: one side is called 'north' and the other is 'south.' If you put two magnets together, the north side of one will stick to the south side of the other, but if you try to put two north sides together, they will push away from each other!\",\"czech_answer\":\"Magnety jsou zvlΓ‘Ε‘tnΓ­ vΔ›ci, kterΓ© mohou pΕ™itahovat nΔ›kterΓ© kovy, jako je ΕΎelezo. Mohou se pΕ™ichytit na vaΕ‘i lednici nebo pohybovat hračkami, aniΕΎ byste se jich dotkli! Magnet mΓ‘ dvΔ› strany: jedna se nazΓ½vΓ‘ 'sever' a druhΓ‘ 'jih.' KdyΕΎ dΓ‘te dva magnety k sobΔ›, severnΓ­ strana jednoho se pΕ™ichytΓ­ k jiΕΎnΓ­ stranΔ› druhΓ©ho, ale kdyΕΎ se pokusΓ­te dΓ‘t dvΔ› severnΓ­ strany k sobΔ›, budou se od sebe odtlačovat!\"}}", - "tool_calls": [], - "invalid_tool_calls": [], - "additional_kwargs": {}, - "response_metadata": {} - } - } - ], - "output": { - "english_answer": "Yes, your name is Oleg!", - "czech_answer": "Ano, vaΕ‘e jmΓ©no je Oleg!" - } - } - } - } - ] - ] - } - } - ], - "OpenAI Chat Model3": [ - { - "startTime": 1747344001063, - "executionTime": 3698, - "executionIndex": 3, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent5", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are a helpful assistant. Always provide both `english_answer` and `czech_answer` in the final output and be very concise.\n\nIMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer.\nHuman: Hi, my name is Oleg. Tell me about magnets like I'm 5." - ], - "estimatedTokens": 122, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4o-mini", - "temperature": 0.1, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model3", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model3", - "runIndex": 1 - } - ] - } - }, - { - "startTime": 1747344004773, - "executionTime": 913, - "executionIndex": 8, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent3", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are a helpful assistant. Always provide both `english_answer` and `czech_answer` in the final output and be very concise.\n\nIMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer.\nHuman: Hi, my name is Oleg. Tell me about magnets like I'm 5.\nAI: {\"output\":{\"english_answer\":\"Magnets are special things that can pull some metals, like iron, towards them. They can stick to your fridge or make toys move without touching them! There are two sides to a magnet: one side is called 'north' and the other is 'south.' If you put two magnets together, the north side of one will stick to the south side of the other, but if you try to put two north sides together, they will push away from each other!\",\"czech_answer\":\"Magnety jsou zvlΓ‘Ε‘tnΓ­ vΔ›ci, kterΓ© mohou pΕ™itahovat nΔ›kterΓ© kovy, jako je ΕΎelezo. Mohou se pΕ™ichytit na vaΕ‘i lednici nebo pohybovat hračkami, aniΕΎ byste se jich dotkli! Magnet mΓ‘ dvΔ› strany: jedna se nazΓ½vΓ‘ 'sever' a druhΓ‘ 'jih.' KdyΕΎ dΓ‘te dva magnety k sobΔ›, severnΓ­ strana jednoho se pΕ™ichytΓ­ k jiΕΎnΓ­ stranΔ› druhΓ©ho, ale kdyΕΎ se pokusΓ­te dΓ‘t dvΔ› severnΓ­ strany k sobΔ›, budou se od sebe odtlačovat!\"}}\nHuman: Can you still remember my name?" - ], - "estimatedTokens": 373, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4o-mini", - "temperature": 0.1, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - } - } - ], - "Structured Output Parser1": [ - { - "startTime": 1747344004761, - "executionTime": 0, - "executionIndex": 4, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent5", - "previousNodeRun": 0 - } - ], - "data": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "response": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "text": "{\"output\":{\"english_answer\":\"Magnets are special things that can pull some metals, like iron, towards them. They can stick to your fridge or make toys move without touching them! There are two sides to a magnet: one side is called 'north' and the other is 'south.' If you put two magnets together, the north side of one will stick to the south side of the other, but if you try to put two north sides together, they will push away from each other!\",\"czech_answer\":\"Magnety jsou zvlΓ‘Ε‘tnΓ­ vΔ›ci, kterΓ© mohou pΕ™itahovat nΔ›kterΓ© kovy, jako je ΕΎelezo. Mohou se pΕ™ichytit na vaΕ‘i lednici nebo pohybovat hračkami, aniΕΎ byste se jich dotkli! Magnet mΓ‘ dvΔ› strany: jedna se nazΓ½vΓ‘ 'sever' a druhΓ‘ 'jih.' KdyΕΎ dΓ‘te dva magnety k sobΔ›, severnΓ­ strana jednoho se pΕ™ichytΓ­ k jiΕΎnΓ­ stranΔ› druhΓ©ho, ale kdyΕΎ se pokusΓ­te dΓ‘t dvΔ› severnΓ­ strany k sobΔ›, budou se od sebe odtlačovat!\"}}" - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Structured Output Parser1", - "runIndex": 0 - }, - { - "node": "Structured Output Parser1", - "runIndex": 1 - } - ] - } - }, - { - "startTime": 1747344005686, - "executionTime": 0, - "executionIndex": 9, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent3", - "previousNodeRun": 0 - } - ], - "data": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "response": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "text": "{\"output\":{\"english_answer\":\"Yes, your name is Oleg!\",\"czech_answer\":\"Ano, vaΕ‘e jmΓ©no je Oleg!\"}}" - } - } - ] - ] - } - } - ], - "AI Agent5": [ - { - "startTime": 1747344001053, - "executionIndex": 1, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 3709, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AI Agent3": [ - { - "startTime": 1747344004762, - "executionIndex": 6, - "source": [ - { - "previousNode": "AI Agent5" - } - ], - "hints": [], - "executionTime": 925, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Edit Fields1": [ - { - "startTime": 1747344005687, - "executionIndex": 11, - "source": [ - { - "previousNode": "AI Agent3" - } - ], - "hints": [], - "executionTime": 3, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "contain_both_answers": true, - "recalled_name": "true" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "OpenAI Chat Model2": [ - { - "startTime": 1747344005694, - "executionTime": 558, - "executionIndex": 13, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent2", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are a helpful assistant\nHuman: Fetch example website" - ], - "estimatedTokens": 13, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4o-mini", - "temperature": 0.3, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model2", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model2", - "runIndex": 1 - } - ] - } - }, - { - "startTime": 1747344006735, - "executionTime": 6742, - "executionIndex": 15, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent2", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are a helpful assistant\nHuman: Fetch example website\nAI: \nTool: \n\n\n Example Domain\n\n \n \n \n \n\n\n\n
\n

Example Domain

\n

This domain is for use in illustrative examples in documents. You may use this\n domain in literature without prior coordination or asking for permission.

\n

More information...

\n
\n\n\n" - ], - "estimatedTokens": 378, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4o-mini", - "temperature": 0.3, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - } - } - ], - "HTTP Request": [ - { - "startTime": 1747344006253, - "executionTime": 481, - "executionIndex": 14, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent2", - "previousNodeRun": 0 - } - ], - "data": { - "ai_tool": [ - [ - { - "json": { - "response": "\n\n\n Example Domain\n\n \n \n \n \n\n\n\n
\n

Example Domain

\n

This domain is for use in illustrative examples in documents. You may use this\n domain in literature without prior coordination or asking for permission.

\n

More information...

\n
\n\n\n" - } - } - ] - ] - }, - "inputOverride": { - "ai_tool": [ - [ - { - "json": { - "query": {} - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "HTTP Request", - "runIndex": 0 - } - ] - } - } - ], - "AI Agent2": [ - { - "startTime": 1747344005690, - "executionIndex": 12, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 7788, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output": "Here is the content of the example website:\n\n```html\n\n\n\n Example Domain\n\n \n \n \n \n\n\n\n
\n

Example Domain

\n

This domain is for use in illustrative examples in documents. You may use this\n domain in literature without prior coordination or asking for permission.

\n

More information...

\n
\n\n\n```\n\n### Summary of the Content:\n- **Title**: Example Domain\n- **Description**: This domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.\n- **Link**: [More information...](https://www.iana.org/domains/example) \n\nThe page has a simple layout with a heading, a paragraph, and a link.", - "intermediateSteps": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Edit Fields9": [ - { - "startTime": 1747344013478, - "executionIndex": 16, - "source": [ - { - "previousNode": "AI Agent2" - } - ], - "hints": [], - "executionTime": 4, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "empty_args": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "OpenAI Chat Model1": [ - { - "startTime": 1747344013488, - "executionTime": 791, - "executionIndex": 18, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent1", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are a helpful assistant\nHuman: Convert this JSON array to a single string: ['This', 'Is', 'An', 'Array!']." - ], - "estimatedTokens": 32, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4o-mini", - "temperature": 0.3, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model1", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model1", - "runIndex": 1 - } - ] - } - }, - { - "startTime": 1747344014286, - "executionTime": 710, - "executionIndex": 20, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent1", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are a helpful assistant\nHuman: Convert this JSON array to a single string: ['This', 'Is', 'An', 'Array!'].\nAI: \nTool: This, Is, An, Array!" - ], - "estimatedTokens": 46, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4o-mini", - "temperature": 0.3, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - } - } - ], - "Code Tool": [ - { - "startTime": 1747344014280, - "executionTime": 4, - "executionIndex": 19, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent1", - "previousNodeRun": 0 - } - ], - "data": { - "ai_tool": [ - [ - { - "json": { - "response": "This, Is, An, Array!" - } - } - ] - ] - }, - "inputOverride": { - "ai_tool": [ - [ - { - "json": { - "query": { - "strings_array": [ - "This", - "Is", - "An", - "Array!" - ] - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Code Tool", - "runIndex": 0 - } - ] - } - } - ], - "AI Agent1": [ - { - "startTime": 1747344013482, - "executionIndex": 17, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 1515, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output": "The JSON array has been converted to a single string: \"This, Is, An, Array!\"", - "intermediateSteps": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Edit Fields8": [ - { - "startTime": 1747344014997, - "executionIndex": 21, - "source": [ - { - "previousNode": "AI Agent1" - } - ], - "hints": [], - "executionTime": 8, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "passed_array_parameter": { - "object": true - }, - "has_correct_length": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "OpenAI Chat Model": [ - { - "startTime": 1747344015011, - "executionTime": 612, - "executionIndex": 23, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are a helpful assistant\n\nIMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer.\nHuman: Tell me about M.C. Escher" - ], - "estimatedTokens": 91, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4o-mini", - "temperature": 0.1, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model", - "runIndex": 1 - } - ] - } - }, - { - "startTime": 1747344015633, - "executionTime": 1154, - "executionIndex": 25, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are a helpful assistant\n\nIMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer.\nHuman: Tell me about M.C. Escher\nAI: \nTool: {\n \"response\": \"Maurits Cornelis Escher (Dutch pronunciation: [ˈmʌurΙͺts kΙ”rˈneːlΙͺs ΛˆΙ›Ι•Ι™r]; 17 June 1898 – 27 March 1972) was a Dutch graphic artist who made woodcuts, lithographs, and mezzotints, many of which were inspired by mathematics. Despite wide popular interest, for most of his life Escher was neglected in the art world, even in his native Netherlands. He was 70 before a retrospective exhibition was held. In the late twentieth century, he became more widely appreciated, and in the twenty-first century he has been celebrated in exhibitions around the world.\\n\\nHis work features mathematical objects and operations including impossible objects, explorations of infinity, reflection, symmetry, perspective, truncated and stellated polyhedra, hyperbolic geometry, and tessellations. Although Escher believed he had no mathematical ability, he interacted with the mathematicians George PΓ³lya, Roger Penrose, and Donald Coxeter, and the crystallographer Friedrich Haag, and conducted his own research into tessellation.\\n\\nEarly in his career, he drew inspiration from nature, making studies of insects, landscapes, and plants such as lichens, all of which he used as details in his artworks. He traveled in Italy and Spain, sketching buildings, townscapes, architecture and the tilings of the Alhambra and the Mezquita of Cordoba, and became steadily more interested in their mathematical structure.\\n\\nEscher's art became well known among scientists and mathematicians, and in popular culture, especially after it was featured by Martin Gardner in his April 1966 Mathematical Games column in Scientific American. Apart from being used in a variety of technical papers, his work has appeared on the covers of many books and albums. He was one of the major inspirations for Douglas Hofstadter's Pulitzer Prize-winning 1979 book GΓΆdel, Escher, Bach.\\n\\nExhibitions\\n\\nPoster advertising the first major exhibition of Escher's work in Britain (Dulwich Picture Gallery, 14 October 2015 – 17 January 2016). The image, which shows Escher and his interest in geometric distortion and multiple levels of distance from reality, is based on his Hand with Reflecting Sphere, 1935.[62][22]\\nDespite wide popular interest, Escher was for a long time somewhat neglected in the art world; even in his native Netherlands, he was 70 before a retrospective exhibition was held.[43][k] In the twenty-first century, major exhibitions have been held in cities around the world.[63][64][65] An exhibition of his work in Rio de Janeiro attracted more than 573,000 visitors in 2011;[63] its daily visitor count of 9,677 made it the most visited museum exhibition of the year, anywhere in the world.[66] No major exhibition of Escher's work was held in Britain until 2015, when the Scottish National Gallery of Modern Art ran one in Edinburgh from June to September 2015,[64] moving in October 2015 to the Dulwich Picture Gallery, London. The exhibition poster is based on Hand with Reflecting Sphere, 1935, which shows Escher in his house reflected in a handheld sphere, thus illustrating the artist, his interest in levels of reality in art (e.g., is the hand in the foreground more real than the reflected one?), perspective, and spherical geometry.[22][62][67] The exhibition moved to Italy in 2015–2016, attracting over 500,000 visitors in Rome and Bologna,[65] and then Milan.[68][69][70]\"\n}" - ], - "estimatedTokens": 867, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4o-mini", - "temperature": 0.1, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - } - } - ], - "Search Wiki": [ - { - "startTime": 1747344015624, - "executionTime": 7, - "executionIndex": 24, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent", - "previousNodeRun": 0 - } - ], - "data": { - "ai_tool": [ - [ - { - "json": { - "response": "Maurits Cornelis Escher (Dutch pronunciation: [ˈmʌurΙͺts kΙ”rˈneːlΙͺs ΛˆΙ›Ι•Ι™r]; 17 June 1898 – 27 March 1972) was a Dutch graphic artist who made woodcuts, lithographs, and mezzotints, many of which were inspired by mathematics. Despite wide popular interest, for most of his life Escher was neglected in the art world, even in his native Netherlands. He was 70 before a retrospective exhibition was held. In the late twentieth century, he became more widely appreciated, and in the twenty-first century he has been celebrated in exhibitions around the world.\n\nHis work features mathematical objects and operations including impossible objects, explorations of infinity, reflection, symmetry, perspective, truncated and stellated polyhedra, hyperbolic geometry, and tessellations. Although Escher believed he had no mathematical ability, he interacted with the mathematicians George PΓ³lya, Roger Penrose, and Donald Coxeter, and the crystallographer Friedrich Haag, and conducted his own research into tessellation.\n\nEarly in his career, he drew inspiration from nature, making studies of insects, landscapes, and plants such as lichens, all of which he used as details in his artworks. He traveled in Italy and Spain, sketching buildings, townscapes, architecture and the tilings of the Alhambra and the Mezquita of Cordoba, and became steadily more interested in their mathematical structure.\n\nEscher's art became well known among scientists and mathematicians, and in popular culture, especially after it was featured by Martin Gardner in his April 1966 Mathematical Games column in Scientific American. Apart from being used in a variety of technical papers, his work has appeared on the covers of many books and albums. He was one of the major inspirations for Douglas Hofstadter's Pulitzer Prize-winning 1979 book GΓΆdel, Escher, Bach.\n\nExhibitions\n\nPoster advertising the first major exhibition of Escher's work in Britain (Dulwich Picture Gallery, 14 October 2015 – 17 January 2016). The image, which shows Escher and his interest in geometric distortion and multiple levels of distance from reality, is based on his Hand with Reflecting Sphere, 1935.[62][22]\nDespite wide popular interest, Escher was for a long time somewhat neglected in the art world; even in his native Netherlands, he was 70 before a retrospective exhibition was held.[43][k] In the twenty-first century, major exhibitions have been held in cities around the world.[63][64][65] An exhibition of his work in Rio de Janeiro attracted more than 573,000 visitors in 2011;[63] its daily visitor count of 9,677 made it the most visited museum exhibition of the year, anywhere in the world.[66] No major exhibition of Escher's work was held in Britain until 2015, when the Scottish National Gallery of Modern Art ran one in Edinburgh from June to September 2015,[64] moving in October 2015 to the Dulwich Picture Gallery, London. The exhibition poster is based on Hand with Reflecting Sphere, 1935, which shows Escher in his house reflected in a handheld sphere, thus illustrating the artist, his interest in levels of reality in art (e.g., is the hand in the foreground more real than the reflected one?), perspective, and spherical geometry.[22][62][67] The exhibition moved to Italy in 2015–2016, attracting over 500,000 visitors in Rome and Bologna,[65] and then Milan.[68][69][70]" - } - } - ] - ] - }, - "inputOverride": { - "ai_tool": [ - [ - { - "json": { - "query": "M.C. Escher" - } - } - ] - ] - }, - "metadata": { - "subExecution": { - "executionId": "3991", - "workflowId": "253" - }, - "subRun": [ - { - "node": "Search Wiki", - "runIndex": 0 - } - ] - } - } - ], - "Structured Output Parser": [ - { - "startTime": 1747344016787, - "executionTime": 1, - "executionIndex": 26, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent", - "previousNodeRun": 0 - } - ], - "data": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "response": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "text": "{\"output\":{\"name\":\"Maurits Cornelis Escher\",\"birthDate\":\"1898-06-17\",\"deathDate\":\"1972-03-27\",\"nationality\":\"Dutch\",\"profession\":\"Graphic Artist\",\"notableWorks\":[\"Relativity\",\"Waterfall\",\"Ascending and Descending\",\"Drawing Hands\",\"Metamorphosis II\"]}}" - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Structured Output Parser", - "runIndex": 0 - } - ] - } - } - ], - "AI Agent": [ - { - "startTime": 1747344015005, - "executionIndex": 22, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 1784, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Edit Fields7": [ - { - "startTime": 1747344016789, - "executionIndex": 27, - "source": [ - { - "previousNode": "AI Agent" - } - ], - "hints": [], - "executionTime": 8, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "has_birth_date": true, - "has_death_date": "true", - "has_name": "true", - "has_works": "false" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "OpenAI Chat Model4": [ - { - "startTime": 1747344016801, - "executionTime": 1075, - "executionIndex": 29, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent4", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are a helpful assistant\nHuman: Help me plan my day in Berlin, Germany. Check current the weather and get the upcoming events and respond with weather and details about the upcoming events.\n\nEach tool should only be called only once." - ], - "estimatedTokens": 50, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4o-mini", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model4", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model4", - "runIndex": 1 - } - ] - } - }, - { - "startTime": 1747344017902, - "executionTime": 5549, - "executionIndex": 32, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent4", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are a helpful assistant\nHuman: Help me plan my day in Berlin, Germany. Check current the weather and get the upcoming events and respond with weather and details about the upcoming events.\n\nEach tool should only be called only once.\nAI: \nTool: {\n \"response\": \"{\\n \\\"created\\\": \\\"2024-03-04T09:26:23+01:00\\\",\\n \\\"symbolCode\\\": {\\n \\\"next1Hour\\\": \\\"fog\\\"\\n },\\n \\\"temperature\\\": {\\n \\\"value\\\": 5.1,\\n \\\"feelsLike\\\": 4\\n },\\n \\\"precipitation\\\": {\\n \\\"value\\\": 0.0\\n },\\n \\\"wind\\\": {\\n \\\"direction\\\": 275,\\n \\\"speed\\\": 1.7\\n },\\n \\\"status\\\": {\\n \\\"code\\\": \\\"Ok\\\"\\n }\\n}\"\n}\nTool: {\n \"response\": \"[\\n {\\n \\\"description\\\": \\\"***Movie Barf* is a new English friendly film night presented by film journalist and blogger Ryan Keating-Lambert, dedicated to screening a diverse variety of award-winning films both contemporary and classic. Ryan’s late night shows includes intriguing chats with various guests (in person or over Skype in the case of the international ones) and special drink offers at the bar.**\\\\n\\\\n*Dune: Part Two* / Denis Villeneuve / Canada, USA 2024 / 166 min – Paul Atreides unites with Chani and the Fremen while seeking revenge against the conspirators who destroyed his family.\\\",\\n \\\"name\\\": \\\"Movie Barf: Dune – Part Two\\\",\\n \\\"endDate\\\": \\\"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\\\"\\n },\\n {\\n \\\"description\\\": \\\"LuboΕ‘ PospΓ­Ε‘il will perform with the renewed band 5P on March 14 at the cultural house of BarikadnΓ­k.\\\",\\n \\\"name\\\": \\\"LuboΕ‘ PospΓ­Ε‘il & 5P\\\",\\n \\\"endDate\\\": \\\"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\\\"\\n },\\n {\\n \\\"description\\\": \\\"An insomniac office worker looking for a way to change his life crosses paths with a devil-may-care soap maker and they form an underground fight club that evolves into something much, much more...\\\",\\n \\\"name\\\": \\\"Fight Club\\\",\\n \\\"endDate\\\": \\\"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\\\"\\n },\\n {\\n \\\"description\\\": \\\"From filmmaker Yorgos Lanthimos and producer Emma Stone comes the incredible tale and fantastical evolution of Bella Baxter (Stone), a young woman brought back to life by the brilliant and unorthodox scientist Dr. Godwin Baxter (Willem Dafoe). Under Baxter's protection, Bella is eager to learn. Hungry for the worldliness she is lacking, she runs off with Duncan Wedderburn (Mark Ruffalo), a slick and debauched lawyer, on a whirlwind adventure across the continents. Free from the prejudices of her times, Bella grows steadfast in her purpose to stand for equality and liberation.\\\",\\n \\\"name\\\": \\\"Poor Things\\\",\\n \\\"endDate\\\": \\\"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\\\"\\n },\\n {\\n \\\"description\\\": \\\"Concert of Bharata RajnoΕ‘ek, who decided to do something very brave - pay tribute to king of the pop, Michael Jackson in jazz.\\\",\\n \\\"name\\\": \\\"Tribute to World Legends: Michael Jackson\\\",\\n \\\"endDate\\\": \\\"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\\\"\\n }\\n]\"\n}" - ], - "estimatedTokens": 862, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4o-mini", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - } - } - ], - "Get Weather": [ - { - "startTime": 1747344017877, - "executionTime": 22, - "executionIndex": 30, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent4", - "previousNodeRun": 0 - } - ], - "data": { - "ai_tool": [ - [ - { - "json": { - "response": "{\n \"created\": \"2024-03-04T09:26:23+01:00\",\n \"symbolCode\": {\n \"next1Hour\": \"fog\"\n },\n \"temperature\": {\n \"value\": 5.1,\n \"feelsLike\": 4\n },\n \"precipitation\": {\n \"value\": 0.0\n },\n \"wind\": {\n \"direction\": 275,\n \"speed\": 1.7\n },\n \"status\": {\n \"code\": \"Ok\"\n }\n}" - } - } - ] - ] - }, - "inputOverride": { - "ai_tool": [ - [ - { - "json": { - "query": "Berlin, Germany" - } - } - ] - ] - }, - "metadata": { - "subExecution": { - "executionId": "3992", - "workflowId": "253" - }, - "subRun": [ - { - "node": "Get Weather", - "runIndex": 0 - } - ] - } - } - ], - "Get Events": [ - { - "startTime": 1747344017878, - "executionTime": 21, - "executionIndex": 31, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent4", - "previousNodeRun": 0 - } - ], - "data": { - "ai_tool": [ - [ - { - "json": { - "response": "[\n {\n \"description\": \"***Movie Barf* is a new English friendly film night presented by film journalist and blogger Ryan Keating-Lambert, dedicated to screening a diverse variety of award-winning films both contemporary and classic. Ryan’s late night shows includes intriguing chats with various guests (in person or over Skype in the case of the international ones) and special drink offers at the bar.**\\n\\n*Dune: Part Two* / Denis Villeneuve / Canada, USA 2024 / 166 min – Paul Atreides unites with Chani and the Fremen while seeking revenge against the conspirators who destroyed his family.\",\n \"name\": \"Movie Barf: Dune – Part Two\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n },\n {\n \"description\": \"LuboΕ‘ PospΓ­Ε‘il will perform with the renewed band 5P on March 14 at the cultural house of BarikadnΓ­k.\",\n \"name\": \"LuboΕ‘ PospΓ­Ε‘il & 5P\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n },\n {\n \"description\": \"An insomniac office worker looking for a way to change his life crosses paths with a devil-may-care soap maker and they form an underground fight club that evolves into something much, much more...\",\n \"name\": \"Fight Club\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n },\n {\n \"description\": \"From filmmaker Yorgos Lanthimos and producer Emma Stone comes the incredible tale and fantastical evolution of Bella Baxter (Stone), a young woman brought back to life by the brilliant and unorthodox scientist Dr. Godwin Baxter (Willem Dafoe). Under Baxter's protection, Bella is eager to learn. Hungry for the worldliness she is lacking, she runs off with Duncan Wedderburn (Mark Ruffalo), a slick and debauched lawyer, on a whirlwind adventure across the continents. Free from the prejudices of her times, Bella grows steadfast in her purpose to stand for equality and liberation.\",\n \"name\": \"Poor Things\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n },\n {\n \"description\": \"Concert of Bharata RajnoΕ‘ek, who decided to do something very brave - pay tribute to king of the pop, Michael Jackson in jazz.\",\n \"name\": \"Tribute to World Legends: Michael Jackson\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n }\n]" - } - } - ] - ] - }, - "inputOverride": { - "ai_tool": [ - [ - { - "json": { - "query": "Berlin, Germany" - } - } - ] - ] - }, - "metadata": { - "subExecution": { - "executionId": "3993", - "workflowId": "253" - }, - "subRun": [ - { - "node": "Get Events", - "runIndex": 0 - } - ] - } - } - ], - "AI Agent4": [ - { - "startTime": 1747344016797, - "executionIndex": 28, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 6656, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output": "### Weather in Berlin, Germany\n- **Current Temperature**: 5.1Β°C (Feels like 4Β°C)\n- **Weather Condition**: Fog\n- **Wind**: 1.7 m/s from the west (275Β°)\n- **Precipitation**: None expected\n\n### Upcoming Events in Berlin\n1. **Movie Barf: Dune – Part Two**\n - **Description**: A new English-friendly film night featuring *Dune: Part Two*, where Paul Atreides seeks revenge against the conspirators who destroyed his family. Includes intriguing chats with guests and special drink offers.\n - **End Date**: March 4, 2024, 23:59\n\n2. **LuboΕ‘ PospΓ­Ε‘il & 5P**\n - **Description**: Performance by LuboΕ‘ PospΓ­Ε‘il with the band 5P at the cultural house of BarikadnΓ­kΕ―.\n - **End Date**: March 4, 2024, 23:59\n\n3. **Fight Club**\n - **Description**: A film screening about an insomniac office worker who forms an underground fight club that evolves into something much more.\n - **End Date**: March 4, 2024, 23:59\n\n4. **Poor Things**\n - **Description**: A film about Bella Baxter, a young woman brought back to life by an unorthodox scientist, who embarks on a whirlwind adventure seeking equality and liberation.\n - **End Date**: March 4, 2024, 23:59\n\n5. **Tribute to World Legends: Michael Jackson**\n - **Description**: A concert paying tribute to the King of Pop, Michael Jackson, in a jazz style by Bharata RajnoΕ‘ek.\n - **End Date**: March 4, 2024, 23:59\n\n### Summary\nYou can enjoy a cozy day in Berlin with foggy weather, perfect for indoor activities. Consider attending one of the film screenings or the Michael Jackson tribute concert for a fun evening!" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Edit Fields6": [ - { - "startTime": 1747344023453, - "executionIndex": 33, - "source": [ - { - "previousNode": "AI Agent4" - } - ], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "has_weather": true, - "has_movie": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Edit Fields6" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": { - "Window Buffer Memory1": [ - { - "subRun": [ - { - "node": "Window Buffer Memory1", - "runIndex": 0 - }, - { - "node": "Window Buffer Memory1", - "runIndex": 1 - }, - { - "node": "Window Buffer Memory1", - "runIndex": 2 - }, - { - "node": "Window Buffer Memory1", - "runIndex": 3 - } - ] - } - ], - "OpenAI Chat Model3": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model3", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model3", - "runIndex": 1 - } - ] - } - ], - "Structured Output Parser1": [ - { - "subRun": [ - { - "node": "Structured Output Parser1", - "runIndex": 0 - }, - { - "node": "Structured Output Parser1", - "runIndex": 1 - } - ] - } - ], - "OpenAI Chat Model2": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model2", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model2", - "runIndex": 1 - } - ] - } - ], - "HTTP Request": [ - { - "subRun": [ - { - "node": "HTTP Request", - "runIndex": 0 - } - ] - } - ], - "OpenAI Chat Model1": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model1", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model1", - "runIndex": 1 - } - ] - } - ], - "Code Tool": [ - { - "subRun": [ - { - "node": "Code Tool", - "runIndex": 0 - } - ] - } - ], - "OpenAI Chat Model": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model", - "runIndex": 1 - } - ] - } - ], - "Search Wiki": [ - { - "subRun": [ - { - "node": "Search Wiki", - "runIndex": 0 - } - ] - } - ], - "Structured Output Parser": [ - { - "subRun": [ - { - "node": "Structured Output Parser", - "runIndex": 0 - } - ] - } - ], - "OpenAI Chat Model4": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model4", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model4", - "runIndex": 1 - } - ] - } - ], - "Get Weather": [ - { - "subRun": [ - { - "node": "Get Weather", - "runIndex": 0 - } - ] - } - ], - "Get Events": [ - { - "subRun": [ - { - "node": "Get Events", - "runIndex": 0 - } - ] - } - ] - }, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:01.053Z", - "stoppedAt": "2025-05-15T21:20:23.454Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/254-snapshot.json b/test-workflows/snapshots/254-snapshot.json deleted file mode 100644 index 2113c3a2e45..00000000000 --- a/test-workflows/snapshots/254-snapshot.json +++ /dev/null @@ -1,1763 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking \"Test workflow\"": [ - { - "startTime": 1746522733442, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Window Buffer Memory1": [ - { - "startTime": 1746522733448, - "executionTime": 0, - "executionIndex": 2, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_memory": [ - [ - { - "json": { - "action": "loadMemoryVariables", - "chatHistory": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_memory": [ - [ - { - "json": { - "action": "loadMemoryVariables", - "values": { - "input": "Hi, my name is Oleg. Tell me about magnets like I'm 5.", - "system_message": "You are a helpful assistant. Always provide both `english_answer` and `czech_answer` in the final output and be very concise.", - "formatting_instructions": "IMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer." - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Window Buffer Memory1", - "runIndex": 0 - }, - { - "node": "Window Buffer Memory1", - "runIndex": 1 - }, - { - "node": "Window Buffer Memory1", - "runIndex": 2 - }, - { - "node": "Window Buffer Memory1", - "runIndex": 3 - } - ] - } - }, - { - "startTime": 1746522736491, - "executionTime": 0, - "executionIndex": 5, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_memory": [ - [ - { - "json": { - "action": "saveContext", - "chatHistory": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_memory": [ - [ - { - "json": { - "action": "saveContext", - "input": { - "input": "Hi, my name is Oleg. Tell me about magnets like I'm 5.", - "system_message": "You are a helpful assistant. Always provide both `english_answer` and `czech_answer` in the final output and be very concise.", - "formatting_instructions": "IMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer." - }, - "output": { - "input": "Hi, my name is Oleg. Tell me about magnets like I'm 5.", - "system_message": "You are a helpful assistant. Always provide both `english_answer` and `czech_answer` in the final output and be very concise.", - "formatting_instructions": "IMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer.", - "chat_history": [], - "output": { - "english_answer": "Magnets are special things that can pull other things towards them. They have a special power inside that makes them able to attract certain objects, like metal. You can play with magnets and see how they stick to things! Some magnets are really strong and can even pick up heavy objects. Magnets are used in lots of things we use every day, like your refrigerator or your toys. Isn't that cool?", - "czech_answer": "Magnety jsou speciΓ‘lnΓ­ vΔ›ci, kterΓ© mohou pΕ™itahovat jinΓ© vΔ›ci k sobΔ›. MajΓ­ v sobΔ› zvlΓ‘Ε‘tnΓ­ sΓ­lu, kterΓ‘ jim umožňuje pΕ™itahovat určitΓ© pΕ™edmΔ›ty, jako je kov. MΕ―ΕΎeΕ‘ si s magnety hrΓ‘t a vidΔ›t, jak se k vΔ›cem lepΓ­! NΔ›kterΓ© magnety jsou opravdu silnΓ© a mohou zvedat i tΔ›ΕΎkΓ© pΕ™edmΔ›ty. Magnety se pouΕΎΓ­vajΓ­ v mnoha vΔ›cech, kterΓ© pouΕΎΓ­vΓ‘me kaΕΎdΓ½ den, jako je tvΓ‘ lednice nebo tvΓ© hračky. NenΓ­ to skvΔ›lΓ©?" - } - } - } - } - ] - ] - } - }, - { - "startTime": 1746522736493, - "executionTime": 0, - "executionIndex": 7, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_memory": [ - [ - { - "json": { - "action": "loadMemoryVariables", - "chatHistory": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_memory": [ - [ - { - "json": { - "action": "loadMemoryVariables", - "values": { - "input": "Can you still remember my name?", - "system_message": "You are a helpful assistant. Always provide both `english_answer` and `czech_answer` in the final output and be very concise.", - "formatting_instructions": "IMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer." - } - } - } - ] - ] - } - }, - { - "startTime": 1746522737598, - "executionTime": 0, - "executionIndex": 10, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_memory": [ - [ - { - "json": { - "action": "saveContext", - "chatHistory": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_memory": [ - [ - { - "json": { - "action": "saveContext", - "input": { - "input": "Can you still remember my name?", - "system_message": "You are a helpful assistant. Always provide both `english_answer` and `czech_answer` in the final output and be very concise.", - "formatting_instructions": "IMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer." - }, - "output": { - "input": "Can you still remember my name?", - "system_message": "You are a helpful assistant. Always provide both `english_answer` and `czech_answer` in the final output and be very concise.", - "formatting_instructions": "IMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer.", - "chat_history": [ - { - "lc": 1, - "type": "constructor", - "id": [ - "langchain_core", - "messages", - "HumanMessage" - ], - "kwargs": { - "content": "Hi, my name is Oleg. Tell me about magnets like I'm 5.", - "additional_kwargs": {}, - "response_metadata": {} - } - }, - { - "lc": 1, - "type": "constructor", - "id": [ - "langchain_core", - "messages", - "AIMessage" - ], - "kwargs": { - "content": "{\"output\":{\"english_answer\":\"Magnets are special things that can pull other things towards them. They have a special power inside that makes them able to attract certain objects, like metal. You can play with magnets and see how they stick to things! Some magnets are really strong and can even pick up heavy objects. Magnets are used in lots of things we use every day, like your refrigerator or your toys. Isn't that cool?\",\"czech_answer\":\"Magnety jsou speciΓ‘lnΓ­ vΔ›ci, kterΓ© mohou pΕ™itahovat jinΓ© vΔ›ci k sobΔ›. MajΓ­ v sobΔ› zvlΓ‘Ε‘tnΓ­ sΓ­lu, kterΓ‘ jim umožňuje pΕ™itahovat určitΓ© pΕ™edmΔ›ty, jako je kov. MΕ―ΕΎeΕ‘ si s magnety hrΓ‘t a vidΔ›t, jak se k vΔ›cem lepΓ­! NΔ›kterΓ© magnety jsou opravdu silnΓ© a mohou zvedat i tΔ›ΕΎkΓ© pΕ™edmΔ›ty. Magnety se pouΕΎΓ­vajΓ­ v mnoha vΔ›cech, kterΓ© pouΕΎΓ­vΓ‘me kaΕΎdΓ½ den, jako je tvΓ‘ lednice nebo tvΓ© hračky. NenΓ­ to skvΔ›lΓ©?\"}}", - "tool_calls": [], - "invalid_tool_calls": [], - "additional_kwargs": {}, - "response_metadata": {} - } - } - ], - "output": { - "english_answer": "Yes, your name is Oleg.", - "czech_answer": "Ano, tvΓ© jmΓ©no je Oleg." - } - } - } - } - ] - ] - } - } - ], - "Anthropic Chat Model5": [ - { - "startTime": 1746522733451, - "executionTime": 3010, - "executionIndex": 3, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsageEstimate": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are a helpful assistant. Always provide both `english_answer` and `czech_answer` in the final output and be very concise.\n\nIMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer.\nHuman: Hi, my name is Oleg. Tell me about magnets like I'm 5." - ], - "estimatedTokens": 122, - "options": { - "anthropic_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "ANTHROPIC_API_KEY" - ] - }, - "model": "claude-3-haiku-20240307", - "anthropic_api_url": "https://api.anthropic.com", - "max_tokens": 2048, - "temperature": 0.1, - "top_k": -1, - "top_p": -1, - "invocation_kwargs": {}, - "api_key": { - "lc": 1, - "type": "secret", - "id": [ - "ANTHROPIC_API_KEY" - ] - } - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Anthropic Chat Model5", - "runIndex": 0 - }, - { - "node": "Anthropic Chat Model5", - "runIndex": 1 - } - ] - } - }, - { - "startTime": 1746522736497, - "executionTime": 1100, - "executionIndex": 8, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsageEstimate": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are a helpful assistant. Always provide both `english_answer` and `czech_answer` in the final output and be very concise.\n\nIMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer.\nHuman: Hi, my name is Oleg. Tell me about magnets like I'm 5.\nAI: {\"output\":{\"english_answer\":\"Magnets are special things that can pull other things towards them. They have a special power inside that makes them able to attract certain objects, like metal. You can play with magnets and see how they stick to things! Some magnets are really strong and can even pick up heavy objects. Magnets are used in lots of things we use every day, like your refrigerator or your toys. Isn't that cool?\",\"czech_answer\":\"Magnety jsou speciΓ‘lnΓ­ vΔ›ci, kterΓ© mohou pΕ™itahovat jinΓ© vΔ›ci k sobΔ›. MajΓ­ v sobΔ› zvlΓ‘Ε‘tnΓ­ sΓ­lu, kterΓ‘ jim umožňuje pΕ™itahovat určitΓ© pΕ™edmΔ›ty, jako je kov. MΕ―ΕΎeΕ‘ si s magnety hrΓ‘t a vidΔ›t, jak se k vΔ›cem lepΓ­! NΔ›kterΓ© magnety jsou opravdu silnΓ© a mohou zvedat i tΔ›ΕΎkΓ© pΕ™edmΔ›ty. Magnety se pouΕΎΓ­vajΓ­ v mnoha vΔ›cech, kterΓ© pouΕΎΓ­vΓ‘me kaΕΎdΓ½ den, jako je tvΓ‘ lednice nebo tvΓ© hračky. NenΓ­ to skvΔ›lΓ©?\"}}\nHuman: Can you still remember my name?" - ], - "estimatedTokens": 358, - "options": { - "anthropic_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "ANTHROPIC_API_KEY" - ] - }, - "model": "claude-3-haiku-20240307", - "anthropic_api_url": "https://api.anthropic.com", - "max_tokens": 2048, - "temperature": 0.1, - "top_k": -1, - "top_p": -1, - "invocation_kwargs": {}, - "api_key": { - "lc": 1, - "type": "secret", - "id": [ - "ANTHROPIC_API_KEY" - ] - } - } - } - } - ] - ] - } - } - ], - "Structured Output Parser1": [ - { - "startTime": 1746522736462, - "executionTime": 1, - "executionIndex": 4, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "response": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "text": "{\"output\":{\"english_answer\":\"Magnets are special things that can pull other things towards them. They have a special power inside that makes them able to attract certain objects, like metal. You can play with magnets and see how they stick to things! Some magnets are really strong and can even pick up heavy objects. Magnets are used in lots of things we use every day, like your refrigerator or your toys. Isn't that cool?\",\"czech_answer\":\"Magnety jsou speciΓ‘lnΓ­ vΔ›ci, kterΓ© mohou pΕ™itahovat jinΓ© vΔ›ci k sobΔ›. MajΓ­ v sobΔ› zvlΓ‘Ε‘tnΓ­ sΓ­lu, kterΓ‘ jim umožňuje pΕ™itahovat určitΓ© pΕ™edmΔ›ty, jako je kov. MΕ―ΕΎeΕ‘ si s magnety hrΓ‘t a vidΔ›t, jak se k vΔ›cem lepΓ­! NΔ›kterΓ© magnety jsou opravdu silnΓ© a mohou zvedat i tΔ›ΕΎkΓ© pΕ™edmΔ›ty. Magnety se pouΕΎΓ­vajΓ­ v mnoha vΔ›cech, kterΓ© pouΕΎΓ­vΓ‘me kaΕΎdΓ½ den, jako je tvΓ‘ lednice nebo tvΓ© hračky. NenΓ­ to skvΔ›lΓ©?\"}}" - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Structured Output Parser1", - "runIndex": 0 - }, - { - "node": "Structured Output Parser1", - "runIndex": 1 - } - ] - } - }, - { - "startTime": 1746522737598, - "executionTime": 0, - "executionIndex": 9, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "response": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "text": "{\"output\":{\"english_answer\":\"Yes, your name is Oleg.\",\"czech_answer\":\"Ano, tvΓ© jmΓ©no je Oleg.\"}}" - } - } - ] - ] - } - } - ], - "AI Agent5": [ - { - "startTime": 1746522733442, - "executionIndex": 1, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 3049, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AI Agent3": [ - { - "startTime": 1746522736491, - "executionIndex": 6, - "source": [ - { - "previousNode": "AI Agent5" - } - ], - "hints": [], - "executionTime": 1107, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Edit Fields2": [ - { - "startTime": 1746522737599, - "executionIndex": 11, - "source": [ - { - "previousNode": "AI Agent3" - } - ], - "hints": [], - "executionTime": 2, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "contain_both_answers": true, - "recalled_name": "true" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Anthropic Chat Model4": [ - { - "startTime": 1746522737608, - "executionTime": 737, - "executionIndex": 13, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsageEstimate": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are a helpful assistant\nHuman: Fetch example website" - ], - "estimatedTokens": 13, - "options": { - "anthropic_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "ANTHROPIC_API_KEY" - ] - }, - "model": "claude-3-haiku-20240307", - "anthropic_api_url": "https://api.anthropic.com", - "max_tokens": 2048, - "temperature": 0.1, - "top_k": -1, - "top_p": -1, - "invocation_kwargs": {}, - "api_key": { - "lc": 1, - "type": "secret", - "id": [ - "ANTHROPIC_API_KEY" - ] - } - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Anthropic Chat Model4", - "runIndex": 0 - }, - { - "node": "Anthropic Chat Model4", - "runIndex": 1 - } - ] - } - }, - { - "startTime": 1746522738869, - "executionTime": 1196, - "executionIndex": 15, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsageEstimate": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are a helpful assistant\nHuman: Fetch example website\nAI: [\n {\n \"index\": 0,\n \"type\": \"tool_use\",\n \"id\": \"toolu_016WJuPW6LgQaghP1ZUE1ocR\",\n \"name\": \"HTTP_Request\",\n \"input\": {}\n }\n]\nTool: \n\n\n Example Domain\n\n \n \n \n \n\n\n\n
\n

Example Domain

\n

This domain is for use in illustrative examples in documents. You may use this\n domain in literature without prior coordination or asking for permission.

\n

More information...

\n
\n\n\n" - ], - "estimatedTokens": 435, - "options": { - "anthropic_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "ANTHROPIC_API_KEY" - ] - }, - "model": "claude-3-haiku-20240307", - "anthropic_api_url": "https://api.anthropic.com", - "max_tokens": 2048, - "temperature": 0.1, - "top_k": -1, - "top_p": -1, - "invocation_kwargs": {}, - "api_key": { - "lc": 1, - "type": "secret", - "id": [ - "ANTHROPIC_API_KEY" - ] - } - } - } - } - ] - ] - } - } - ], - "HTTP Request": [ - { - "startTime": 1746522738349, - "executionTime": 511, - "executionIndex": 14, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_tool": [ - [ - { - "json": { - "response": "\n\n\n Example Domain\n\n \n \n \n \n\n\n\n
\n

Example Domain

\n

This domain is for use in illustrative examples in documents. You may use this\n domain in literature without prior coordination or asking for permission.

\n

More information...

\n
\n\n\n" - } - } - ] - ] - }, - "inputOverride": { - "ai_tool": [ - [ - { - "json": { - "query": {} - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "HTTP Request", - "runIndex": 0 - } - ] - } - } - ], - "AI Agent2": [ - { - "startTime": 1746522737601, - "executionIndex": 12, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 2470, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output": "The HTTP_Request tool fetched the content of the example website, which is a simple HTML page with some basic information about the example domain.", - "intermediateSteps": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Edit Fields9": [ - { - "startTime": 1746522740071, - "executionIndex": 16, - "source": [ - { - "previousNode": "AI Agent2" - } - ], - "hints": [], - "executionTime": 3, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "empty_args": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Anthropic Chat Model3": [ - { - "startTime": 1746522740079, - "executionTime": 857, - "executionIndex": 18, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsageEstimate": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are a helpful assistant\nHuman: Convert this JSON array to a single string: ['This', 'Is', 'An', 'Array!']." - ], - "estimatedTokens": 32, - "options": { - "anthropic_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "ANTHROPIC_API_KEY" - ] - }, - "model": "claude-3-haiku-20240307", - "anthropic_api_url": "https://api.anthropic.com", - "max_tokens": 2048, - "temperature": 0.1, - "top_k": -1, - "top_p": -1, - "invocation_kwargs": {}, - "api_key": { - "lc": 1, - "type": "secret", - "id": [ - "ANTHROPIC_API_KEY" - ] - } - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Anthropic Chat Model3", - "runIndex": 0 - }, - { - "node": "Anthropic Chat Model3", - "runIndex": 1 - } - ] - } - }, - { - "startTime": 1746522740950, - "executionTime": 611, - "executionIndex": 20, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsageEstimate": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are a helpful assistant\nHuman: Convert this JSON array to a single string: ['This', 'Is', 'An', 'Array!'].\nAI: [\n {\n \"index\": 0,\n \"type\": \"tool_use\",\n \"id\": \"toolu_01Tayi7StUPcjbUZgxFhmTpn\",\n \"name\": \"array_merge\",\n \"input\": \"{\\\"strings_array\\\": [\\\"This\\\",\\\"Is\\\",\\\"An\\\",\\\"Array!\\\"]}\"\n }\n]\nTool: This, Is, An, Array!" - ], - "estimatedTokens": 117, - "options": { - "anthropic_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "ANTHROPIC_API_KEY" - ] - }, - "model": "claude-3-haiku-20240307", - "anthropic_api_url": "https://api.anthropic.com", - "max_tokens": 2048, - "temperature": 0.1, - "top_k": -1, - "top_p": -1, - "invocation_kwargs": {}, - "api_key": { - "lc": 1, - "type": "secret", - "id": [ - "ANTHROPIC_API_KEY" - ] - } - } - } - } - ] - ] - } - } - ], - "Code Tool": [ - { - "startTime": 1746522740940, - "executionTime": 5, - "executionIndex": 19, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_tool": [ - [ - { - "json": { - "response": "This, Is, An, Array!" - } - } - ] - ] - }, - "inputOverride": { - "ai_tool": [ - [ - { - "json": { - "query": { - "strings_array": [ - "This", - "Is", - "An", - "Array!" - ] - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Code Tool", - "runIndex": 0 - } - ] - } - } - ], - "AI Agent1": [ - { - "startTime": 1746522740074, - "executionIndex": 17, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 1492, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output": "The JSON array ['This', 'Is', 'An', 'Array!'] has been merged into a single string \"This, Is, An, Array!\".", - "intermediateSteps": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Edit Fields8": [ - { - "startTime": 1746522741566, - "executionIndex": 21, - "source": [ - { - "previousNode": "AI Agent1" - } - ], - "hints": [], - "executionTime": 7, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "passed_array_parameter": { - "object": true - }, - "has_correct_length": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Anthropic Chat Model": [ - { - "startTime": 1746522741582, - "executionTime": 1746, - "executionIndex": 23, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsageEstimate": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are a helpful assistant\n\nIMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer.\nHuman: Tell me about M.C. Escher" - ], - "estimatedTokens": 91, - "options": { - "anthropic_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "ANTHROPIC_API_KEY" - ] - }, - "model": "claude-3-haiku-20240307", - "anthropic_api_url": "https://api.anthropic.com", - "max_tokens": 2048, - "temperature": 0.1, - "top_k": -1, - "top_p": -1, - "invocation_kwargs": {}, - "api_key": { - "lc": 1, - "type": "secret", - "id": [ - "ANTHROPIC_API_KEY" - ] - } - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Anthropic Chat Model", - "runIndex": 0 - } - ] - } - } - ], - "Structured Output Parser": [ - { - "startTime": 1746522743329, - "executionTime": 1, - "executionIndex": 24, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "response": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "text": "{\"output\":{\"name\":\"Maurits Cornelis Escher\",\"birthDate\":\"1898-06-17\",\"deathDate\":\"1972-03-27\",\"nationality\":\"Dutch\",\"profession\":\"Graphic artist\",\"notableWorks\":[\"Relativity\",\"Ascending and Descending\",\"Waterfall\",\"MΓΆbius Strip II\"]}}" - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Structured Output Parser", - "runIndex": 0 - } - ] - } - } - ], - "AI Agent": [ - { - "startTime": 1746522741573, - "executionIndex": 22, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 1758, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Edit Fields7": [ - { - "startTime": 1746522743331, - "executionIndex": 25, - "source": [ - { - "previousNode": "AI Agent" - } - ], - "hints": [], - "executionTime": 7, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "has_birth_date": true, - "has_death_date": "true", - "has_name": "true", - "has_works": "true" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Anthropic Chat Model2": [ - { - "startTime": 1746522743344, - "executionTime": 1095, - "executionIndex": 27, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsageEstimate": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are a helpful assistant\nHuman: Help me plan my day in Berlin, Germany. Check current the weather and get the upcoming events and respond with weather and details about the upcoming events.\n\nEach tool should only be called only once." - ], - "estimatedTokens": 50, - "options": { - "anthropic_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "ANTHROPIC_API_KEY" - ] - }, - "model": "claude-3-haiku-20240307", - "anthropic_api_url": "https://api.anthropic.com", - "max_tokens": 2048, - "temperature": 0.1, - "top_k": -1, - "top_p": -1, - "invocation_kwargs": {}, - "api_key": { - "lc": 1, - "type": "secret", - "id": [ - "ANTHROPIC_API_KEY" - ] - } - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Anthropic Chat Model2", - "runIndex": 0 - }, - { - "node": "Anthropic Chat Model2", - "runIndex": 1 - }, - { - "node": "Anthropic Chat Model2", - "runIndex": 2 - } - ] - } - }, - { - "startTime": 1746522744458, - "executionTime": 1125, - "executionIndex": 29, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsageEstimate": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are a helpful assistant\nHuman: Help me plan my day in Berlin, Germany. Check current the weather and get the upcoming events and respond with weather and details about the upcoming events.\n\nEach tool should only be called only once.\nAI: [\n {\n \"index\": 0,\n \"type\": \"text\",\n \"text\": \"Okay, let's plan your day in Berlin, Germany. First, let's check the weather:\"\n },\n {\n \"index\": 1,\n \"type\": \"tool_use\",\n \"id\": \"toolu_01Nk7Qi4rM581m5L3FwCnEmw\",\n \"name\": \"get_weather_data\",\n \"input\": \"{\\\"input\\\": \\\"Berlin, Germany\\\"}\"\n }\n]\nTool: {\n \"response\": \"{\\n \\\"created\\\": \\\"2024-03-04T09:26:23+01:00\\\",\\n \\\"symbolCode\\\": {\\n \\\"next1Hour\\\": \\\"fog\\\"\\n },\\n \\\"temperature\\\": {\\n \\\"value\\\": 5.1,\\n \\\"feelsLike\\\": 4\\n },\\n \\\"precipitation\\\": {\\n \\\"value\\\": 0.0\\n },\\n \\\"wind\\\": {\\n \\\"direction\\\": 275,\\n \\\"speed\\\": 1.7\\n },\\n \\\"status\\\": {\\n \\\"code\\\": \\\"Ok\\\"\\n }\\n}\"\n}" - ], - "estimatedTokens": 311, - "options": { - "anthropic_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "ANTHROPIC_API_KEY" - ] - }, - "model": "claude-3-haiku-20240307", - "anthropic_api_url": "https://api.anthropic.com", - "max_tokens": 2048, - "temperature": 0.1, - "top_k": -1, - "top_p": -1, - "invocation_kwargs": {}, - "api_key": { - "lc": 1, - "type": "secret", - "id": [ - "ANTHROPIC_API_KEY" - ] - } - } - } - } - ] - ] - } - }, - { - "startTime": 1746522745610, - "executionTime": 1637, - "executionIndex": 31, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsageEstimate": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are a helpful assistant\nHuman: Help me plan my day in Berlin, Germany. Check current the weather and get the upcoming events and respond with weather and details about the upcoming events.\n\nEach tool should only be called only once.\nAI: [\n {\n \"index\": 0,\n \"type\": \"text\",\n \"text\": \"Okay, let's plan your day in Berlin, Germany. First, let's check the weather:\"\n },\n {\n \"index\": 1,\n \"type\": \"tool_use\",\n \"id\": \"toolu_01Nk7Qi4rM581m5L3FwCnEmw\",\n \"name\": \"get_weather_data\",\n \"input\": \"{\\\"input\\\": \\\"Berlin, Germany\\\"}\"\n }\n]\nTool: {\n \"response\": \"{\\n \\\"created\\\": \\\"2024-03-04T09:26:23+01:00\\\",\\n \\\"symbolCode\\\": {\\n \\\"next1Hour\\\": \\\"fog\\\"\\n },\\n \\\"temperature\\\": {\\n \\\"value\\\": 5.1,\\n \\\"feelsLike\\\": 4\\n },\\n \\\"precipitation\\\": {\\n \\\"value\\\": 0.0\\n },\\n \\\"wind\\\": {\\n \\\"direction\\\": 275,\\n \\\"speed\\\": 1.7\\n },\\n \\\"status\\\": {\\n \\\"code\\\": \\\"Ok\\\"\\n }\\n}\"\n}\nAI: [\n {\n \"index\": 0,\n \"type\": \"text\",\n \"text\": \"The weather in Berlin today is foggy with a temperature of 5.1Β°C and a feels-like temperature of 4Β°C. There is minimal precipitation and light winds.\\n\\nNow let's check for upcoming events in Berlin:\"\n },\n {\n \"index\": 1,\n \"type\": \"tool_use\",\n \"id\": \"toolu_01GtTEjaabpzmERMyV2DpWBb\",\n \"name\": \"get_evens\",\n \"input\": \"{\\\"input\\\": \\\"Berlin, Germany\\\"}\"\n }\n]\nTool: {\n \"response\": \"[\\n {\\n \\\"description\\\": \\\"***Movie Barf* is a new English friendly film night presented by film journalist and blogger Ryan Keating-Lambert, dedicated to screening a diverse variety of award-winning films both contemporary and classic. Ryan’s late night shows includes intriguing chats with various guests (in person or over Skype in the case of the international ones) and special drink offers at the bar.**\\\\n\\\\n*Dune: Part Two* / Denis Villeneuve / Canada, USA 2024 / 166 min – Paul Atreides unites with Chani and the Fremen while seeking revenge against the conspirators who destroyed his family.\\\",\\n \\\"name\\\": \\\"Movie Barf: Dune – Part Two\\\",\\n \\\"endDate\\\": \\\"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\\\"\\n },\\n {\\n \\\"description\\\": \\\"LuboΕ‘ PospΓ­Ε‘il will perform with the renewed band 5P on March 14 at the cultural house of BarikadnΓ­k.\\\",\\n \\\"name\\\": \\\"LuboΕ‘ PospΓ­Ε‘il & 5P\\\",\\n \\\"endDate\\\": \\\"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\\\"\\n },\\n {\\n \\\"description\\\": \\\"An insomniac office worker looking for a way to change his life crosses paths with a devil-may-care soap maker and they form an underground fight club that evolves into something much, much more...\\\",\\n \\\"name\\\": \\\"Fight Club\\\",\\n \\\"endDate\\\": \\\"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\\\"\\n },\\n {\\n \\\"description\\\": \\\"From filmmaker Yorgos Lanthimos and producer Emma Stone comes the incredible tale and fantastical evolution of Bella Baxter (Stone), a young woman brought back to life by the brilliant and unorthodox scientist Dr. Godwin Baxter (Willem Dafoe). Under Baxter's protection, Bella is eager to learn. Hungry for the worldliness she is lacking, she runs off with Duncan Wedderburn (Mark Ruffalo), a slick and debauched lawyer, on a whirlwind adventure across the continents. Free from the prejudices of her times, Bella grows steadfast in her purpose to stand for equality and liberation.\\\",\\n \\\"name\\\": \\\"Poor Things\\\",\\n \\\"endDate\\\": \\\"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\\\"\\n },\\n {\\n \\\"description\\\": \\\"Concert of Bharata RajnoΕ‘ek, who decided to do something very brave - pay tribute to king of the pop, Michael Jackson in jazz.\\\",\\n \\\"name\\\": \\\"Tribute to World Legends: Michael Jackson\\\",\\n \\\"endDate\\\": \\\"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\\\"\\n }\\n]\"\n}" - ], - "estimatedTokens": 1107, - "options": { - "anthropic_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "ANTHROPIC_API_KEY" - ] - }, - "model": "claude-3-haiku-20240307", - "anthropic_api_url": "https://api.anthropic.com", - "max_tokens": 2048, - "temperature": 0.1, - "top_k": -1, - "top_p": -1, - "invocation_kwargs": {}, - "api_key": { - "lc": 1, - "type": "secret", - "id": [ - "ANTHROPIC_API_KEY" - ] - } - } - } - } - ] - ] - } - } - ], - "Get Weather": [ - { - "startTime": 1746522744442, - "executionTime": 12, - "executionIndex": 28, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_tool": [ - [ - { - "json": { - "response": "{\n \"created\": \"2024-03-04T09:26:23+01:00\",\n \"symbolCode\": {\n \"next1Hour\": \"fog\"\n },\n \"temperature\": {\n \"value\": 5.1,\n \"feelsLike\": 4\n },\n \"precipitation\": {\n \"value\": 0.0\n },\n \"wind\": {\n \"direction\": 275,\n \"speed\": 1.7\n },\n \"status\": {\n \"code\": \"Ok\"\n }\n}" - } - } - ] - ] - }, - "inputOverride": { - "ai_tool": [ - [ - { - "json": { - "query": "Berlin, Germany" - } - } - ] - ] - }, - "metadata": { - "subExecution": { - "executionId": "225", - "workflowId": "254" - }, - "subRun": [ - { - "node": "Get Weather", - "runIndex": 0 - } - ] - } - } - ], - "Get Events": [ - { - "startTime": 1746522745587, - "executionTime": 17, - "executionIndex": 30, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_tool": [ - [ - { - "json": { - "response": "[\n {\n \"description\": \"***Movie Barf* is a new English friendly film night presented by film journalist and blogger Ryan Keating-Lambert, dedicated to screening a diverse variety of award-winning films both contemporary and classic. Ryan’s late night shows includes intriguing chats with various guests (in person or over Skype in the case of the international ones) and special drink offers at the bar.**\\n\\n*Dune: Part Two* / Denis Villeneuve / Canada, USA 2024 / 166 min – Paul Atreides unites with Chani and the Fremen while seeking revenge against the conspirators who destroyed his family.\",\n \"name\": \"Movie Barf: Dune – Part Two\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n },\n {\n \"description\": \"LuboΕ‘ PospΓ­Ε‘il will perform with the renewed band 5P on March 14 at the cultural house of BarikadnΓ­k.\",\n \"name\": \"LuboΕ‘ PospΓ­Ε‘il & 5P\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n },\n {\n \"description\": \"An insomniac office worker looking for a way to change his life crosses paths with a devil-may-care soap maker and they form an underground fight club that evolves into something much, much more...\",\n \"name\": \"Fight Club\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n },\n {\n \"description\": \"From filmmaker Yorgos Lanthimos and producer Emma Stone comes the incredible tale and fantastical evolution of Bella Baxter (Stone), a young woman brought back to life by the brilliant and unorthodox scientist Dr. Godwin Baxter (Willem Dafoe). Under Baxter's protection, Bella is eager to learn. Hungry for the worldliness she is lacking, she runs off with Duncan Wedderburn (Mark Ruffalo), a slick and debauched lawyer, on a whirlwind adventure across the continents. Free from the prejudices of her times, Bella grows steadfast in her purpose to stand for equality and liberation.\",\n \"name\": \"Poor Things\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n },\n {\n \"description\": \"Concert of Bharata RajnoΕ‘ek, who decided to do something very brave - pay tribute to king of the pop, Michael Jackson in jazz.\",\n \"name\": \"Tribute to World Legends: Michael Jackson\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n }\n]" - } - } - ] - ] - }, - "inputOverride": { - "ai_tool": [ - [ - { - "json": { - "query": "Berlin, Germany" - } - } - ] - ] - }, - "metadata": { - "subExecution": { - "executionId": "226", - "workflowId": "254" - }, - "subRun": [ - { - "node": "Get Events", - "runIndex": 0 - } - ] - } - } - ], - "AI Agent4": [ - { - "startTime": 1746522743338, - "executionIndex": 26, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 3913, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output": "The key upcoming events in Berlin include:\n\n1. \"Movie Barf: Dune - Part Two\" - A film screening and discussion event on March 4th.\n2. \"LuboΕ‘ PospΓ­Ε‘il & 5P\" - A concert by the band LuboΕ‘ PospΓ­Ε‘il & 5P on March 14th.\n3. \"Fight Club\" - A screening of the classic film Fight Club.\n4. \"Poor Things\" - A screening of the new film Poor Things.\n5. \"Tribute to World Legends: Michael Jackson\" - A jazz concert paying tribute to Michael Jackson.\n\nLet me know if you need any other information to plan your day in Berlin!", - "intermediateSteps": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Edit Fields6": [ - { - "startTime": 1746522747251, - "executionIndex": 32, - "source": [ - { - "previousNode": "AI Agent4" - } - ], - "hints": [], - "executionTime": 5, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "has_weather": false, - "has_movie": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Edit Fields6" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": { - "Window Buffer Memory1": [ - { - "subRun": [ - { - "node": "Window Buffer Memory1", - "runIndex": 0 - }, - { - "node": "Window Buffer Memory1", - "runIndex": 1 - }, - { - "node": "Window Buffer Memory1", - "runIndex": 2 - }, - { - "node": "Window Buffer Memory1", - "runIndex": 3 - } - ] - } - ], - "Anthropic Chat Model5": [ - { - "subRun": [ - { - "node": "Anthropic Chat Model5", - "runIndex": 0 - }, - { - "node": "Anthropic Chat Model5", - "runIndex": 1 - } - ] - } - ], - "Structured Output Parser1": [ - { - "subRun": [ - { - "node": "Structured Output Parser1", - "runIndex": 0 - }, - { - "node": "Structured Output Parser1", - "runIndex": 1 - } - ] - } - ], - "Anthropic Chat Model4": [ - { - "subRun": [ - { - "node": "Anthropic Chat Model4", - "runIndex": 0 - }, - { - "node": "Anthropic Chat Model4", - "runIndex": 1 - } - ] - } - ], - "HTTP Request": [ - { - "subRun": [ - { - "node": "HTTP Request", - "runIndex": 0 - } - ] - } - ], - "Anthropic Chat Model3": [ - { - "subRun": [ - { - "node": "Anthropic Chat Model3", - "runIndex": 0 - }, - { - "node": "Anthropic Chat Model3", - "runIndex": 1 - } - ] - } - ], - "Code Tool": [ - { - "subRun": [ - { - "node": "Code Tool", - "runIndex": 0 - } - ] - } - ], - "Anthropic Chat Model": [ - { - "subRun": [ - { - "node": "Anthropic Chat Model", - "runIndex": 0 - } - ] - } - ], - "Structured Output Parser": [ - { - "subRun": [ - { - "node": "Structured Output Parser", - "runIndex": 0 - } - ] - } - ], - "Anthropic Chat Model2": [ - { - "subRun": [ - { - "node": "Anthropic Chat Model2", - "runIndex": 0 - }, - { - "node": "Anthropic Chat Model2", - "runIndex": 1 - }, - { - "node": "Anthropic Chat Model2", - "runIndex": 2 - } - ] - } - ], - "Get Weather": [ - { - "subRun": [ - { - "node": "Get Weather", - "runIndex": 0 - } - ] - } - ], - "Get Events": [ - { - "subRun": [ - { - "node": "Get Events", - "runIndex": 0 - } - ] - } - ] - }, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-06T09:12:13.441Z", - "stoppedAt": "2025-05-06T09:12:27.256Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/255-snapshot.json b/test-workflows/snapshots/255-snapshot.json deleted file mode 100644 index 15de13e3d96..00000000000 --- a/test-workflows/snapshots/255-snapshot.json +++ /dev/null @@ -1,179 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking β€˜Test workflow’": [ - { - "startTime": 1747344001310, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "OpenAI Chat Model": [ - { - "startTime": 1747344001313, - "executionTime": 150, - "executionIndex": 2, - "executionStatus": "error", - "source": [ - { - "previousNode": "Basic LLM Chain", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "json array" - ], - "estimatedTokens": 3, - "options": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "json array" - ], - "estimatedTokens": 3, - "options": { - "object": true - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model", - "runIndex": 0 - } - ] - }, - "error": { - "message": "The resource you are requesting could not be found", - "timestamp": 1747344001463, - "name": "NodeApiError", - "description": "The model `gpt-4o-mini123` does not exist or you do not have access to it.", - "context": {}, - "cause": { - "status": 404, - "headers": { - "alt-svc": "h3=\":443\"; ma=86400", - "cf-cache-status": "DYNAMIC", - "cf-ray": "9405ad488cd1b881-DUB", - "connection": "keep-alive", - "content-encoding": "gzip", - "content-type": "application/json; charset=utf-8", - "date": "Thu, 15 May 2025 21:20:01 GMT", - "server": "cloudflare", - "set-cookie": "__cf_bm=RxKUPES9cEyDoWlsYmoTb0R_2MnzrTE6J0Dkvn77yFE-1747344001-1.0.1.1-DWgxWjJDJ6mlrytbHI5D5mdX6cG1oppGccnhiiOpAE_S96pwCZY4NuEnJJwGWrH9o9fF9P09A8EwDRwUg0IN8KxyV1CK0GxHHFZi_KkJJkU; path=/; expires=Thu, 15-May-25 21:50:01 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None, _cfuvid=TfxIIk5sfQ6RMO1kRjn1mpAlnxEg7ILyvvyDNqXvpDY-1747344001498-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "transfer-encoding": "chunked", - "vary": "Origin", - "x-content-type-options": "nosniff", - "x-request-id": "req_26d1b9de0d7db778c7849a3a6dd99db1" - }, - "request_id": "req_26d1b9de0d7db778c7849a3a6dd99db1", - "error": { - "message": "The model `gpt-4o-mini123` does not exist or you do not have access to it.", - "type": "invalid_request_error", - "param": null, - "code": "model_not_found" - }, - "code": "model_not_found", - "param": null, - "type": "invalid_request_error", - "lc_error_code": "MODEL_NOT_FOUND", - "attemptNumber": 1, - "retriesLeft": 2 - } - } - } - ], - "Basic LLM Chain": [ - { - "startTime": 1747344001310, - "executionIndex": 1, - "source": [ - { - "previousNode": "When clicking β€˜Test workflow’" - } - ], - "hints": [], - "executionTime": 154, - "executionStatus": "success", - "data": { - "main": [ - [], - [ - { - "json": { - "error": "The resource you are requesting could not be found" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Basic LLM Chain" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": { - "OpenAI Chat Model": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model", - "runIndex": 0 - } - ] - } - ] - }, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:01.310Z", - "stoppedAt": "2025-05-15T21:20:01.464Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/256-snapshot.json b/test-workflows/snapshots/256-snapshot.json deleted file mode 100644 index 349a9ae7a5e..00000000000 --- a/test-workflows/snapshots/256-snapshot.json +++ /dev/null @@ -1,535 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking β€˜Test workflow’": [ - { - "startTime": 1747344001481, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "OpenAI Chat Model": [ - { - "startTime": 1747344001486, - "executionTime": 660, - "executionIndex": 2, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are a helpful assistant\nHuman: What happened yesterday?" - ], - "estimatedTokens": 14, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4o-mini", - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model", - "runIndex": 1 - } - ] - } - }, - { - "startTime": 1747344002730, - "executionTime": 667, - "executionIndex": 7, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are a helpful assistant\nHuman: What happened yesterday?\nAI: \nTool: " - ], - "estimatedTokens": 20, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4o-mini", - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - } - } - ], - "Vector Store Tool": [ - { - "startTime": 1747344002162, - "executionTime": 567, - "executionIndex": 3, - "executionStatus": "error", - "source": [ - { - "previousNode": "AI Agent", - "previousNodeRun": 0 - } - ], - "data": { - "ai_tool": [ - [ - { - "json": { - "query": "What happened on October 23, 2023?" - } - } - ] - ] - }, - "inputOverride": { - "ai_tool": [ - [ - { - "json": { - "query": "What happened on October 23, 2023?" - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Vector Store Tool", - "runIndex": 0 - } - ] - }, - "error": { - "message": "The resource you are requesting could not be found", - "timestamp": 1747344002729, - "name": "NodeOperationError", - "description": "The resource you are requesting could not be found", - "context": {}, - "cause": { - "message": "The resource you are requesting could not be found", - "timestamp": 1747344002729, - "name": "NodeApiError", - "description": "The model `gpt-4o-mini123` does not exist or you do not have access to it.", - "context": {}, - "cause": { - "status": 404, - "headers": { - "alt-svc": "h3=\":443\"; ma=86400", - "cf-cache-status": "DYNAMIC", - "cf-ray": "9405ad506891b881-DUB", - "connection": "keep-alive", - "content-encoding": "gzip", - "content-type": "application/json; charset=utf-8", - "date": "Thu, 15 May 2025 21:20:02 GMT", - "server": "cloudflare", - "set-cookie": "__cf_bm=_3t8lA2EICfoAVnY8jS2pZ8vSSfa8N26DkIApllAMH8-1747344002-1.0.1.1-FLg_gCTgMgTTRm3_JoXq9N_TPKW6rr7xWPcCoC_Pa6DtV4BDsZhreK9e7Csam5QfoKEZPRGyDdeLdO7Qow6ZW9hI3ticwUSjDNTQqgwhNKU; path=/; expires=Thu, 15-May-25 21:50:02 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None, _cfuvid=974ecBFWT36IeNWLLAlnKDyMYU2zpqoQnqHSdftSXQE-1747344002766-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "transfer-encoding": "chunked", - "vary": "Origin", - "x-content-type-options": "nosniff", - "x-request-id": "req_f04a3a26fad606a682c63896539732e7" - }, - "request_id": "req_f04a3a26fad606a682c63896539732e7", - "error": { - "message": "The model `gpt-4o-mini123` does not exist or you do not have access to it.", - "type": "invalid_request_error", - "param": null, - "code": "model_not_found" - }, - "code": "model_not_found", - "param": null, - "type": "invalid_request_error", - "lc_error_code": "MODEL_NOT_FOUND", - "attemptNumber": 1, - "retriesLeft": 2 - } - } - } - } - ], - "In-Memory Vector Store": [ - { - "startTime": 1747344002162, - "executionTime": 406, - "executionIndex": 4, - "executionStatus": "success", - "source": [ - { - "previousNode": "Vector Store Tool", - "previousNodeRun": 0 - } - ], - "data": { - "ai_vectorStore": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_vectorStore": [ - [ - { - "json": { - "query": "What happened on October 23, 2023?", - "k": 4 - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "In-Memory Vector Store", - "runIndex": 0 - } - ] - } - } - ], - "Embeddings OpenAI": [ - { - "startTime": 1747344002162, - "executionTime": 406, - "executionIndex": 5, - "executionStatus": "success", - "source": [ - { - "previousNode": "In-Memory Vector Store", - "previousNodeRun": 0 - } - ], - "data": { - "ai_embedding": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_embedding": [ - [ - { - "json": { - "query": "What happened on October 23, 2023?" - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Embeddings OpenAI", - "runIndex": 0 - } - ] - } - } - ], - "OpenAI Chat Model1": [ - { - "startTime": 1747344002569, - "executionTime": 160, - "executionIndex": 6, - "executionStatus": "error", - "source": [ - { - "previousNode": "Vector Store Tool", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "json array" - ], - "estimatedTokens": 52, - "options": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "json array" - ], - "estimatedTokens": 52, - "options": { - "object": true - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model1", - "runIndex": 0 - } - ] - }, - "error": { - "message": "The resource you are requesting could not be found", - "timestamp": 1747344002729, - "name": "NodeApiError", - "description": "The model `gpt-4o-mini123` does not exist or you do not have access to it.", - "context": {}, - "cause": { - "status": 404, - "headers": { - "alt-svc": "h3=\":443\"; ma=86400", - "cf-cache-status": "DYNAMIC", - "cf-ray": "9405ad506891b881-DUB", - "connection": "keep-alive", - "content-encoding": "gzip", - "content-type": "application/json; charset=utf-8", - "date": "Thu, 15 May 2025 21:20:02 GMT", - "server": "cloudflare", - "set-cookie": "__cf_bm=_3t8lA2EICfoAVnY8jS2pZ8vSSfa8N26DkIApllAMH8-1747344002-1.0.1.1-FLg_gCTgMgTTRm3_JoXq9N_TPKW6rr7xWPcCoC_Pa6DtV4BDsZhreK9e7Csam5QfoKEZPRGyDdeLdO7Qow6ZW9hI3ticwUSjDNTQqgwhNKU; path=/; expires=Thu, 15-May-25 21:50:02 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None, _cfuvid=974ecBFWT36IeNWLLAlnKDyMYU2zpqoQnqHSdftSXQE-1747344002766-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "transfer-encoding": "chunked", - "vary": "Origin", - "x-content-type-options": "nosniff", - "x-request-id": "req_f04a3a26fad606a682c63896539732e7" - }, - "request_id": "req_f04a3a26fad606a682c63896539732e7", - "error": { - "message": "The model `gpt-4o-mini123` does not exist or you do not have access to it.", - "type": "invalid_request_error", - "param": null, - "code": "model_not_found" - }, - "code": "model_not_found", - "param": null, - "type": "invalid_request_error", - "lc_error_code": "MODEL_NOT_FOUND", - "attemptNumber": 1, - "retriesLeft": 2 - } - } - } - ], - "AI Agent": [ - { - "startTime": 1747344001481, - "executionIndex": 1, - "source": [ - { - "previousNode": "When clicking β€˜Test workflow’" - } - ], - "hints": [], - "executionTime": 1919, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output": "I'm unable to retrieve the information about what happened yesterday. Would you like to ask about a specific event or topic?" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "AI Agent" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": { - "OpenAI Chat Model": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model", - "runIndex": 1 - } - ] - } - ], - "Embeddings OpenAI": [ - { - "subRun": [ - { - "node": "Embeddings OpenAI", - "runIndex": 0 - } - ] - } - ], - "In-Memory Vector Store": [ - { - "subRun": [ - { - "node": "In-Memory Vector Store", - "runIndex": 0 - } - ] - } - ], - "OpenAI Chat Model1": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model1", - "runIndex": 0 - } - ] - } - ], - "Vector Store Tool": [ - { - "subRun": [ - { - "node": "Vector Store Tool", - "runIndex": 0 - } - ] - } - ] - }, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:01.481Z", - "stoppedAt": "2025-05-15T21:20:03.400Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/257-snapshot.json b/test-workflows/snapshots/257-snapshot.json deleted file mode 100644 index 7e35c56a1f4..00000000000 --- a/test-workflows/snapshots/257-snapshot.json +++ /dev/null @@ -1,734 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking \"Test workflow\"": [ - { - "startTime": 1747344001514, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Simple Memory": [ - { - "startTime": 1747344001519, - "executionTime": 0, - "executionIndex": 2, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent", - "previousNodeRun": 0 - } - ], - "data": { - "ai_memory": [ - [ - { - "json": { - "action": "loadMemoryVariables", - "chatHistory": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_memory": [ - [ - { - "json": { - "action": "loadMemoryVariables", - "values": { - "input": "What time is my check-in?", - "system_message": "You are a helpful assistant", - "formatting_instructions": "IMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer." - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Simple Memory", - "runIndex": 0 - }, - { - "node": "Simple Memory", - "runIndex": 1 - }, - { - "node": "Simple Memory", - "runIndex": 2 - }, - { - "node": "Simple Memory", - "runIndex": 3 - } - ] - } - }, - { - "startTime": 1747344006541, - "executionTime": 0, - "executionIndex": 6, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent", - "previousNodeRun": 0 - } - ], - "data": { - "ai_memory": [ - [ - { - "json": { - "action": "saveContext", - "chatHistory": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_memory": [ - [ - { - "json": { - "action": "saveContext", - "input": { - "input": "What time is my check-in?", - "system_message": "You are a helpful assistant", - "formatting_instructions": "IMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer." - }, - "output": { - "input": "What time is my check-in?", - "system_message": "You are a helpful assistant", - "formatting_instructions": "IMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer.", - "chat_history": [], - "output": { - "resolution": "I don't have access to your reservation or booking information. To help you find your check-in time, could you please provide more details about what type of check-in you're referring to (hotel, flight, appointment, etc.) and any booking reference or confirmation number you might have? With that information, I can better assist you or direct you to the appropriate resource.", - "reasoning": "The user is asking about a check-in time, which could refer to a hotel reservation, flight, appointment, or similar scheduled event. However, I don't have access to any specific reservation systems or the user's personal calendar information. Without additional context about what type of check-in they're referring to and specific booking details, I cannot provide the requested information." - } - } - } - } - ] - ] - } - }, - { - "startTime": 1747344006544, - "executionTime": 0, - "executionIndex": 8, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent1", - "previousNodeRun": 0 - } - ], - "data": { - "ai_memory": [ - [ - { - "json": { - "action": "loadMemoryVariables", - "chatHistory": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_memory": [ - [ - { - "json": { - "action": "loadMemoryVariables", - "values": { - "input": "What time is my check-in?", - "system_message": "You are a helpful assistant", - "formatting_instructions": "IMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer." - } - } - } - ] - ] - } - }, - { - "startTime": 1747344010996, - "executionTime": 0, - "executionIndex": 12, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent1", - "previousNodeRun": 0 - } - ], - "data": { - "ai_memory": [ - [ - { - "json": { - "action": "saveContext", - "chatHistory": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_memory": [ - [ - { - "json": { - "action": "saveContext", - "input": { - "input": "What time is my check-in?", - "system_message": "You are a helpful assistant", - "formatting_instructions": "IMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer." - }, - "output": { - "input": "What time is my check-in?", - "system_message": "You are a helpful assistant", - "formatting_instructions": "IMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer.", - "chat_history": [ - { - "lc": 1, - "type": "constructor", - "id": [ - "langchain_core", - "messages", - "HumanMessage" - ], - "kwargs": { - "content": "What time is my check-in?", - "additional_kwargs": {}, - "response_metadata": {} - } - }, - { - "lc": 1, - "type": "constructor", - "id": [ - "langchain_core", - "messages", - "AIMessage" - ], - "kwargs": { - "content": "{\"output\":{\"resolution\":\"I don't have access to your reservation or booking information. To help you find your check-in time, could you please provide more details about what type of check-in you're referring to (hotel, flight, appointment, etc.) and any booking reference or confirmation number you might have? With that information, I can better assist you or direct you to the appropriate resource.\",\"reasoning\":\"The user is asking about a check-in time, which could refer to a hotel reservation, flight, appointment, or similar scheduled event. However, I don't have access to any specific reservation systems or the user's personal calendar information. Without additional context about what type of check-in they're referring to and specific booking details, I cannot provide the requested information.\"}}", - "tool_calls": [], - "invalid_tool_calls": [], - "additional_kwargs": {}, - "response_metadata": {} - } - } - ], - "output": { - "resolution": "I don't have access to your reservation or booking information. To help you find your check-in time, could you please provide more details about what type of check-in you're referring to (hotel, flight, appointment, etc.) and any booking reference or confirmation number you might have? With that information, I can better assist you or direct you to the appropriate resource.", - "reasoning": "The user is asking about a check-in time, but I don't have access to any reservation systems, personal calendars, or booking information. Without specific details about what type of check-in they're referring to (hotel, flight, appointment, etc.) and relevant booking information, I cannot provide the requested information. I need to ask for clarification to properly assist." - } - } - } - } - ] - ] - } - } - ], - "Anthropic Chat Model": [ - { - "startTime": 1747344001520, - "executionTime": 5020, - "executionIndex": 3, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsageEstimate": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are a helpful assistant\n\nIMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer.\nHuman: What time is my check-in?" - ], - "estimatedTokens": 90, - "options": { - "anthropic_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "ANTHROPIC_API_KEY" - ] - }, - "model": "claude-3-7-sonnet-20250219", - "anthropic_api_url": "https://api.anthropic.com", - "max_tokens": 2048, - "temperature": 1, - "top_k": -1, - "top_p": -1, - "invocation_kwargs": {}, - "api_key": { - "lc": 1, - "type": "secret", - "id": [ - "ANTHROPIC_API_KEY" - ] - } - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Anthropic Chat Model", - "runIndex": 0 - }, - { - "node": "Anthropic Chat Model", - "runIndex": 1 - } - ] - } - }, - { - "startTime": 1747344006545, - "executionTime": 4451, - "executionIndex": 9, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent1", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsageEstimate": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are a helpful assistant\n\nIMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer.\nHuman: What time is my check-in?\nAI: {\"output\":{\"resolution\":\"I don't have access to your reservation or booking information. To help you find your check-in time, could you please provide more details about what type of check-in you're referring to (hotel, flight, appointment, etc.) and any booking reference or confirmation number you might have? With that information, I can better assist you or direct you to the appropriate resource.\",\"reasoning\":\"The user is asking about a check-in time, which could refer to a hotel reservation, flight, appointment, or similar scheduled event. However, I don't have access to any specific reservation systems or the user's personal calendar information. Without additional context about what type of check-in they're referring to and specific booking details, I cannot provide the requested information.\"}}\nHuman: What time is my check-in?" - ], - "estimatedTokens": 251, - "options": { - "anthropic_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "ANTHROPIC_API_KEY" - ] - }, - "model": "claude-3-7-sonnet-20250219", - "anthropic_api_url": "https://api.anthropic.com", - "max_tokens": 2048, - "temperature": 1, - "top_k": -1, - "top_p": -1, - "invocation_kwargs": {}, - "api_key": { - "lc": 1, - "type": "secret", - "id": [ - "ANTHROPIC_API_KEY" - ] - } - } - } - } - ] - ] - } - } - ], - "Auto-fixing Output Parser": [ - { - "startTime": 1747344006540, - "executionTime": 1, - "executionIndex": 4, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent", - "previousNodeRun": 0 - } - ], - "data": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "response": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "text": "{\"output\":{\"reasoning\":\"The user is asking about a check-in time, which could refer to a hotel reservation, flight, appointment, or similar scheduled event. However, I don't have access to any specific reservation systems or the user's personal calendar information. Without additional context about what type of check-in they're referring to and specific booking details, I cannot provide the requested information.\",\"resolution\":\"I don't have access to your reservation or booking information. To help you find your check-in time, could you please provide more details about what type of check-in you're referring to (hotel, flight, appointment, etc.) and any booking reference or confirmation number you might have? With that information, I can better assist you or direct you to the appropriate resource.\"}}" - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Auto-fixing Output Parser", - "runIndex": 0 - }, - { - "node": "Auto-fixing Output Parser", - "runIndex": 1 - } - ] - } - }, - { - "startTime": 1747344010996, - "executionTime": 0, - "executionIndex": 10, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent1", - "previousNodeRun": 0 - } - ], - "data": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "response": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "text": "{\"output\":{\"reasoning\":\"The user is asking about a check-in time, but I don't have access to any reservation systems, personal calendars, or booking information. Without specific details about what type of check-in they're referring to (hotel, flight, appointment, etc.) and relevant booking information, I cannot provide the requested information. I need to ask for clarification to properly assist.\",\"resolution\":\"I don't have access to your reservation or booking information. To help you find your check-in time, could you please provide more details about what type of check-in you're referring to (hotel, flight, appointment, etc.) and any booking reference or confirmation number you might have? With that information, I can better assist you or direct you to the appropriate resource.\"}}" - } - } - ] - ] - } - } - ], - "Structured Output Parser": [ - { - "startTime": 1747344006540, - "executionTime": 1, - "executionIndex": 5, - "executionStatus": "success", - "source": [ - { - "previousNode": "Auto-fixing Output Parser", - "previousNodeRun": 0 - } - ], - "data": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "response": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "text": "{\"output\":{\"reasoning\":\"The user is asking about a check-in time, which could refer to a hotel reservation, flight, appointment, or similar scheduled event. However, I don't have access to any specific reservation systems or the user's personal calendar information. Without additional context about what type of check-in they're referring to and specific booking details, I cannot provide the requested information.\",\"resolution\":\"I don't have access to your reservation or booking information. To help you find your check-in time, could you please provide more details about what type of check-in you're referring to (hotel, flight, appointment, etc.) and any booking reference or confirmation number you might have? With that information, I can better assist you or direct you to the appropriate resource.\"}}" - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Structured Output Parser", - "runIndex": 0 - }, - { - "node": "Structured Output Parser", - "runIndex": 1 - } - ] - } - }, - { - "startTime": 1747344010996, - "executionTime": 0, - "executionIndex": 11, - "executionStatus": "success", - "source": [ - { - "previousNode": "Auto-fixing Output Parser", - "previousNodeRun": 0 - } - ], - "data": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "response": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "text": "{\"output\":{\"reasoning\":\"The user is asking about a check-in time, but I don't have access to any reservation systems, personal calendars, or booking information. Without specific details about what type of check-in they're referring to (hotel, flight, appointment, etc.) and relevant booking information, I cannot provide the requested information. I need to ask for clarification to properly assist.\",\"resolution\":\"I don't have access to your reservation or booking information. To help you find your check-in time, could you please provide more details about what type of check-in you're referring to (hotel, flight, appointment, etc.) and any booking reference or confirmation number you might have? With that information, I can better assist you or direct you to the appropriate resource.\"}}" - } - } - ] - ] - } - } - ], - "AI Agent": [ - { - "startTime": 1747344001514, - "executionIndex": 1, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 5027, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AI Agent1": [ - { - "startTime": 1747344006541, - "executionIndex": 7, - "source": [ - { - "previousNode": "AI Agent" - } - ], - "hints": [], - "executionTime": 4455, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "AI Agent1" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": { - "Simple Memory": [ - { - "subRun": [ - { - "node": "Simple Memory", - "runIndex": 0 - }, - { - "node": "Simple Memory", - "runIndex": 1 - }, - { - "node": "Simple Memory", - "runIndex": 2 - }, - { - "node": "Simple Memory", - "runIndex": 3 - } - ] - } - ], - "Anthropic Chat Model": [ - { - "subRun": [ - { - "node": "Anthropic Chat Model", - "runIndex": 0 - }, - { - "node": "Anthropic Chat Model", - "runIndex": 1 - } - ] - } - ], - "Structured Output Parser": [ - { - "subRun": [ - { - "node": "Structured Output Parser", - "runIndex": 0 - }, - { - "node": "Structured Output Parser", - "runIndex": 1 - } - ] - } - ], - "Auto-fixing Output Parser": [ - { - "subRun": [ - { - "node": "Auto-fixing Output Parser", - "runIndex": 0 - }, - { - "node": "Auto-fixing Output Parser", - "runIndex": 1 - } - ] - } - ] - }, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:01.514Z", - "stoppedAt": "2025-05-15T21:20:10.996Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/258-snapshot.json b/test-workflows/snapshots/258-snapshot.json deleted file mode 100644 index b1f70c0bd48..00000000000 --- a/test-workflows/snapshots/258-snapshot.json +++ /dev/null @@ -1,980 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking \"Test workflow\"": [ - { - "startTime": 1747344001828, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Simple Memory": [ - { - "startTime": 1747344001833, - "executionTime": 0, - "executionIndex": 2, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent", - "previousNodeRun": 0 - } - ], - "data": { - "ai_memory": [ - [ - { - "json": { - "action": "loadMemoryVariables", - "chatHistory": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_memory": [ - [ - { - "json": { - "action": "loadMemoryVariables", - "values": { - "input": "What time is my check-in?", - "system_message": "You are a helpful assistant", - "formatting_instructions": "IMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer." - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Simple Memory", - "runIndex": 0 - }, - { - "node": "Simple Memory", - "runIndex": 1 - }, - { - "node": "Simple Memory", - "runIndex": 2 - }, - { - "node": "Simple Memory", - "runIndex": 3 - } - ] - } - }, - { - "startTime": 1747344003839, - "executionTime": 0, - "executionIndex": 8, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent", - "previousNodeRun": 0 - } - ], - "data": { - "ai_memory": [ - [ - { - "json": { - "action": "saveContext", - "chatHistory": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_memory": [ - [ - { - "json": { - "action": "saveContext", - "input": { - "input": "What time is my check-in?", - "system_message": "You are a helpful assistant", - "formatting_instructions": "IMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer." - }, - "output": { - "input": "What time is my check-in?", - "system_message": "You are a helpful assistant", - "formatting_instructions": "IMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer.", - "chat_history": [], - "output": { - "resolution": "Please check your booking confirmation for your check-in time.", - "reasoning": "The customer requested information about their check-in time, which is typically included in their booking confirmation. Therefore, directing them to that document is the best course of action." - } - } - } - } - ] - ] - } - }, - { - "startTime": 1747344003846, - "executionTime": 0, - "executionIndex": 10, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent1", - "previousNodeRun": 0 - } - ], - "data": { - "ai_memory": [ - [ - { - "json": { - "action": "loadMemoryVariables", - "chatHistory": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_memory": [ - [ - { - "json": { - "action": "loadMemoryVariables", - "values": { - "input": "What time is my check-in?", - "system_message": "You are a helpful assistant", - "formatting_instructions": "IMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer." - } - } - } - ] - ] - } - }, - { - "startTime": 1747344007006, - "executionTime": 0, - "executionIndex": 16, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent1", - "previousNodeRun": 0 - } - ], - "data": { - "ai_memory": [ - [ - { - "json": { - "action": "saveContext", - "chatHistory": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_memory": [ - [ - { - "json": { - "action": "saveContext", - "input": { - "input": "What time is my check-in?", - "system_message": "You are a helpful assistant", - "formatting_instructions": "IMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer." - }, - "output": { - "input": "What time is my check-in?", - "system_message": "You are a helpful assistant", - "formatting_instructions": "IMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer.", - "chat_history": [ - { - "lc": 1, - "type": "constructor", - "id": [ - "langchain_core", - "messages", - "HumanMessage" - ], - "kwargs": { - "content": "What time is my check-in?", - "additional_kwargs": {}, - "response_metadata": {} - } - }, - { - "lc": 1, - "type": "constructor", - "id": [ - "langchain_core", - "messages", - "AIMessage" - ], - "kwargs": { - "content": "{\"output\":{\"resolution\":\"Please check your booking confirmation for your check-in time.\",\"reasoning\":\"The customer requested information about their check-in time, which is typically included in their booking confirmation. Therefore, directing them to that document is the best course of action.\"}}", - "tool_calls": [], - "invalid_tool_calls": [], - "additional_kwargs": {}, - "response_metadata": {} - } - } - ], - "output": { - "resolution": "Please provide details such as the hotel name, booking reference number, or any other relevant information to assist with your check-in time.", - "reasoning": "The customer did not provide sufficient information regarding their booking, which is needed to determine the correct check-in time. Requesting additional details ensures that we can offer accurate assistance." - } - } - } - } - ] - ] - } - } - ], - "OpenAI Chat Model": [ - { - "startTime": 1747344001835, - "executionTime": 738, - "executionIndex": 3, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are a helpful assistant\n\nIMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer.\nHuman: What time is my check-in?" - ], - "estimatedTokens": 90, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4o-2024-05-13", - "temperature": 0, - "max_retries": 3, - "timeout": 60000, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model", - "runIndex": 1 - } - ] - } - }, - { - "startTime": 1747344003848, - "executionTime": 990, - "executionIndex": 11, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent1", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are a helpful assistant\n\nIMPORTANT: For your response to user, you MUST use the `format_final_json_response` tool with your complete answer formatted according to the required schema. Do not attempt to format the JSON manually - always use this tool. Your response will be rejected if it is not properly formatted through this tool. Only use this tool once you are ready to provide your final answer.\nHuman: What time is my check-in?\nAI: {\"output\":{\"resolution\":\"Please check your booking confirmation for your check-in time.\",\"reasoning\":\"The customer requested information about their check-in time, which is typically included in their booking confirmation. Therefore, directing them to that document is the best course of action.\"}}\nHuman: What time is my check-in?" - ], - "estimatedTokens": 154, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4o-2024-05-13", - "temperature": 0, - "max_retries": 3, - "timeout": 60000, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - } - } - ], - "Auto-fixing Output Parser": [ - { - "startTime": 1747344002573, - "executionTime": 1265, - "executionIndex": 4, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent", - "previousNodeRun": 0 - } - ], - "data": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "response": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "text": "I don't have access to your personal information, including your check-in time. Please refer to your booking confirmation or contact the relevant service provider for this information." - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Auto-fixing Output Parser", - "runIndex": 0 - }, - { - "node": "Auto-fixing Output Parser", - "runIndex": 1 - } - ] - } - }, - { - "startTime": 1747344004839, - "executionTime": 2166, - "executionIndex": 12, - "executionStatus": "success", - "source": [ - { - "previousNode": "AI Agent1", - "previousNodeRun": 0 - } - ], - "data": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "response": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "text": "To provide you with the correct check-in time, I would need more information about your booking. Please provide details such as the hotel name, booking reference number, or any other relevant information." - } - } - ] - ] - } - } - ], - "Structured Output Parser": [ - { - "startTime": 1747344002574, - "executionTime": 0, - "executionIndex": 5, - "executionStatus": "error", - "source": [ - { - "previousNode": "Auto-fixing Output Parser", - "previousNodeRun": 0 - } - ], - "data": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "text": "I don't have access to your personal information, including your check-in time. Please refer to your booking confirmation or contact the relevant service provider for this information." - } - } - ] - ] - }, - "inputOverride": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "text": "I don't have access to your personal information, including your check-in time. Please refer to your booking confirmation or contact the relevant service provider for this information." - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Structured Output Parser", - "runIndex": 0 - }, - { - "node": "Structured Output Parser", - "runIndex": 1 - }, - { - "node": "Structured Output Parser", - "runIndex": 2 - }, - { - "node": "Structured Output Parser", - "runIndex": 3 - } - ] - }, - "error": { - "message": "Model output doesn't fit required format", - "timestamp": 1747344002574, - "name": "NodeOperationError", - "description": "To continue the execution when this happens, change the 'On Error' parameter in the root node's settings", - "context": {}, - "cause": { - "level": "warning", - "tags": { - "packageName": "@n8n" - } - } - } - }, - { - "startTime": 1747344003837, - "executionTime": 1, - "executionIndex": 7, - "executionStatus": "success", - "source": [ - { - "previousNode": "Auto-fixing Output Parser", - "previousNodeRun": 0 - } - ], - "data": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "response": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "text": "```json\n{\"output\":{\"resolution\":\"Please check your booking confirmation for your check-in time.\",\"reasoning\":\"The customer requested information about their check-in time, which is typically included in their booking confirmation. Therefore, directing them to that document is the best course of action.\"}}\n```" - } - } - ] - ] - } - }, - { - "startTime": 1747344004839, - "executionTime": 0, - "executionIndex": 13, - "executionStatus": "error", - "source": [ - { - "previousNode": "Auto-fixing Output Parser", - "previousNodeRun": 0 - } - ], - "data": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "text": "To provide you with the correct check-in time, I would need more information about your booking. Please provide details such as the hotel name, booking reference number, or any other relevant information." - } - } - ] - ] - }, - "inputOverride": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "text": "To provide you with the correct check-in time, I would need more information about your booking. Please provide details such as the hotel name, booking reference number, or any other relevant information." - } - } - ] - ] - }, - "error": { - "message": "Model output doesn't fit required format", - "timestamp": 1747344004839, - "name": "NodeOperationError", - "description": "To continue the execution when this happens, change the 'On Error' parameter in the root node's settings", - "context": {}, - "cause": { - "level": "warning", - "tags": { - "packageName": "@n8n" - } - } - } - }, - { - "startTime": 1747344007005, - "executionTime": 0, - "executionIndex": 15, - "executionStatus": "success", - "source": [ - { - "previousNode": "Auto-fixing Output Parser", - "previousNodeRun": 0 - } - ], - "data": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "response": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_outputParser": [ - [ - { - "json": { - "action": "parse", - "text": "```json\n{\n \"output\": {\n \"resolution\": \"Please provide details such as the hotel name, booking reference number, or any other relevant information to assist with your check-in time.\",\n \"reasoning\": \"The customer did not provide sufficient information regarding their booking, which is needed to determine the correct check-in time. Requesting additional details ensures that we can offer accurate assistance.\"\n }\n}\n```" - } - } - ] - ] - } - } - ], - "OpenAI Chat Model1": [ - { - "startTime": 1747344002576, - "executionTime": 1261, - "executionIndex": 6, - "executionStatus": "success", - "source": [ - { - "previousNode": "Auto-fixing Output Parser", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "Human: Instructions:\n--------------\nYou must format your output as a JSON value that adheres to a given \"JSON Schema\" instance.\n\n\"JSON Schema\" is a declarative language that allows you to annotate and validate JSON documents.\n\nFor example, the example \"JSON Schema\" instance {{\"properties\": {{\"foo\": {{\"description\": \"a list of test words\", \"type\": \"array\", \"items\": {{\"type\": \"string\"}}}}}}, \"required\": [\"foo\"]}}}}\nwould match an object with one required property, \"foo\". The \"type\" property specifies \"foo\" must be an \"array\", and the \"description\" property semantically describes it as \"a list of test words\". The items within \"foo\" must be strings.\nThus, the object {{\"foo\": [\"bar\", \"baz\"]}} is a well-formatted instance of this example \"JSON Schema\". The object {{\"properties\": {{\"foo\": [\"bar\", \"baz\"]}}}} is not well-formatted.\n\nYour output will be parsed and type-checked according to the provided schema instance, so make sure all fields in your output match the schema exactly and there are no trailing commas!\n\nHere is the JSON Schema instance your output must adhere to. Include the enclosing markdown codeblock:\n```json\n{\"type\":\"object\",\"properties\":{\"output\":{\"type\":\"object\",\"properties\":{\"resolution\":{\"type\":\"string\",\"description\":\"The customer-facing resolution or response that should be communicated to the customer\"},\"reasoning\":{\"type\":\"string\",\"description\":\"Detailed explanation of the solution and reasoning for internal use\"}},\"required\":[\"resolution\",\"reasoning\"],\"additionalProperties\":{}}},\"additionalProperties\":false,\"$schema\":\"http://json-schema.org/draft-07/schema#\"}\n```\n\n--------------\nCompletion:\n--------------\nI don't have access to your personal information, including your check-in time. Please refer to your booking confirmation or contact the relevant service provider for this information.\n--------------\n\nAbove, the Completion did not satisfy the constraints given in the Instructions.\nError:\n--------------\nUnexpected token 'I', \"I don't ha\"... is not valid JSON\n\nTroubleshooting URL: https://js.langchain.com/docs/troubleshooting/errors/OUTPUT_PARSING_FAILURE/\n\n--------------\n\nPlease try again. Please only respond with an answer that satisfies the constraints laid out in the Instructions:" - ], - "estimatedTokens": 471, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4o-mini", - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model1", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model1", - "runIndex": 1 - } - ] - } - }, - { - "startTime": 1747344004841, - "executionTime": 2164, - "executionIndex": 14, - "executionStatus": "success", - "source": [ - { - "previousNode": "Auto-fixing Output Parser", - "previousNodeRun": 0 - } - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "Human: Instructions:\n--------------\nYou must format your output as a JSON value that adheres to a given \"JSON Schema\" instance.\n\n\"JSON Schema\" is a declarative language that allows you to annotate and validate JSON documents.\n\nFor example, the example \"JSON Schema\" instance {{\"properties\": {{\"foo\": {{\"description\": \"a list of test words\", \"type\": \"array\", \"items\": {{\"type\": \"string\"}}}}}}, \"required\": [\"foo\"]}}}}\nwould match an object with one required property, \"foo\". The \"type\" property specifies \"foo\" must be an \"array\", and the \"description\" property semantically describes it as \"a list of test words\". The items within \"foo\" must be strings.\nThus, the object {{\"foo\": [\"bar\", \"baz\"]}} is a well-formatted instance of this example \"JSON Schema\". The object {{\"properties\": {{\"foo\": [\"bar\", \"baz\"]}}}} is not well-formatted.\n\nYour output will be parsed and type-checked according to the provided schema instance, so make sure all fields in your output match the schema exactly and there are no trailing commas!\n\nHere is the JSON Schema instance your output must adhere to. Include the enclosing markdown codeblock:\n```json\n{\"type\":\"object\",\"properties\":{\"output\":{\"type\":\"object\",\"properties\":{\"resolution\":{\"type\":\"string\",\"description\":\"The customer-facing resolution or response that should be communicated to the customer\"},\"reasoning\":{\"type\":\"string\",\"description\":\"Detailed explanation of the solution and reasoning for internal use\"}},\"required\":[\"resolution\",\"reasoning\"],\"additionalProperties\":{}}},\"additionalProperties\":false,\"$schema\":\"http://json-schema.org/draft-07/schema#\"}\n```\n\n--------------\nCompletion:\n--------------\nTo provide you with the correct check-in time, I would need more information about your booking. Please provide details such as the hotel name, booking reference number, or any other relevant information.\n--------------\n\nAbove, the Completion did not satisfy the constraints given in the Instructions.\nError:\n--------------\nUnexpected token 'T', \"To provide\"... is not valid JSON\n\nTroubleshooting URL: https://js.langchain.com/docs/troubleshooting/errors/OUTPUT_PARSING_FAILURE/\n\n--------------\n\nPlease try again. Please only respond with an answer that satisfies the constraints laid out in the Instructions:" - ], - "estimatedTokens": 477, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-4o-mini", - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - } - } - ], - "AI Agent": [ - { - "startTime": 1747344001828, - "executionIndex": 1, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "hints": [], - "executionTime": 2011, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "AI Agent1": [ - { - "startTime": 1747344003839, - "executionIndex": 9, - "source": [ - { - "previousNode": "AI Agent" - } - ], - "hints": [], - "executionTime": 3167, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "AI Agent1" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": { - "Simple Memory": [ - { - "subRun": [ - { - "node": "Simple Memory", - "runIndex": 0 - }, - { - "node": "Simple Memory", - "runIndex": 1 - }, - { - "node": "Simple Memory", - "runIndex": 2 - }, - { - "node": "Simple Memory", - "runIndex": 3 - } - ] - } - ], - "OpenAI Chat Model": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model", - "runIndex": 1 - } - ] - } - ], - "Structured Output Parser": [ - { - "subRun": [ - { - "node": "Structured Output Parser", - "runIndex": 0 - }, - { - "node": "Structured Output Parser", - "runIndex": 1 - }, - { - "node": "Structured Output Parser", - "runIndex": 2 - }, - { - "node": "Structured Output Parser", - "runIndex": 3 - } - ] - } - ], - "OpenAI Chat Model1": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model1", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model1", - "runIndex": 1 - } - ] - } - ], - "Auto-fixing Output Parser": [ - { - "subRun": [ - { - "node": "Auto-fixing Output Parser", - "runIndex": 0 - }, - { - "node": "Auto-fixing Output Parser", - "runIndex": 1 - } - ] - } - ] - }, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:01.828Z", - "stoppedAt": "2025-05-15T21:20:07.006Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/259-snapshot.json b/test-workflows/snapshots/259-snapshot.json deleted file mode 100644 index dfb8163b75c..00000000000 --- a/test-workflows/snapshots/259-snapshot.json +++ /dev/null @@ -1,1380 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "When clicking \"Test workflow\"": [ - { - "hints": [], - "startTime": 1741788353186, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Code": [ - { - "hints": [ - { - "message": "To make sure expressions after this node work, return the input items that produced each output item. More info", - "location": "outputPane" - } - ], - "startTime": 1741788353187, - "executionTime": 11, - "source": [ - { - "previousNode": "When clicking \"Test workflow\"" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "text": "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Default Data Loader2": [ - { - "startTime": 1741788353215, - "executionTime": 900, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_document": [ - [ - { - "json": { - "response": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - }, - "inputOverride": { - "ai_document": [ - [ - { - "json": { - "text": "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Default Data Loader2", - "runIndex": 0 - } - ] - } - } - ], - "Token Splitter2": [ - { - "startTime": 1741788353215, - "executionTime": 899, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_textSplitter": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_textSplitter": [ - [ - { - "json": { - "textSplitter": "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Token Splitter2", - "runIndex": 0 - } - ] - } - } - ], - "Embeddings OpenAI6": [ - { - "startTime": 1741788354115, - "executionTime": 1416, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_embedding": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_embedding": [ - [ - { - "json": { - "documents": [ - "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution", - " uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash", - " model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest", - "-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need", - " next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing", - " new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the", - " confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs", - " see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early", - " ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ", - " ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=", - "1008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4", - ", X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - ] - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Embeddings OpenAI6", - "runIndex": 0 - } - ] - } - } - ], - "In-Memory Vector Store": [ - { - "hints": [], - "startTime": 1741788353198, - "executionTime": 2335, - "source": [ - { - "previousNode": "Code" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "metadata": { - "object": true - }, - "pageContent": "Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": "-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": " ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": "1008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "metadata": { - "object": true - }, - "pageContent": ", X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Check Vector Store Populated2": [ - { - "hints": [], - "startTime": 1741788355533, - "executionTime": 22, - "source": [ - { - "previousNode": "In-Memory Vector Store" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output_length_matches": true, - "has_content": true, - "has_meta": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Vector Store Retriever2": [ - { - "startTime": 1741788355568, - "executionTime": 851, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_retriever": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_retriever": [ - [ - { - "json": { - "query": "What is the size of a block header with no transactions? Respond only with number of bytes.", - "config": { - "handlers": [ - { - "lc": 1, - "type": "not_implemented", - "id": [ - "langchain_core", - "callbacks", - "langchain_tracer", - "LangChainTracer" - ] - } - ], - "inheritableHandlers": [ - { - "lc": 1, - "type": "not_implemented", - "id": [ - "langchain_core", - "callbacks", - "langchain_tracer", - "LangChainTracer" - ] - } - ], - "tags": [ - "retriever" - ], - "inheritableTags": [], - "metadata": { - "execution_id": "138", - "workflow": { - "id": "259", - "name": "ChainQA", - "active": false - }, - "node": "Question and Answer Chain 1.3" - }, - "inheritableMetadata": { - "execution_id": "138", - "workflow": { - "id": "259", - "name": "ChainQA", - "active": false - }, - "node": "Question and Answer Chain 1.3" - }, - "name": "callback_manager", - "_parentRunId": "3b7e540a-2f07-47e8-ab8d-6fde6ebeb4a5" - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Vector Store Retriever2", - "runIndex": 0 - }, - { - "node": "Vector Store Retriever2", - "runIndex": 1 - }, - { - "node": "Vector Store Retriever2", - "runIndex": 2 - } - ] - } - }, - { - "startTime": 1741788357754, - "executionTime": 678, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_retriever": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_retriever": [ - [ - { - "json": { - "query": "What is the size of a block header with no transactions? Respond only with number of bytes.", - "config": { - "handlers": [ - { - "lc": 1, - "type": "not_implemented", - "id": [ - "langchain_core", - "callbacks", - "langchain_tracer", - "LangChainTracer" - ] - } - ], - "inheritableHandlers": [ - { - "lc": 1, - "type": "not_implemented", - "id": [ - "langchain_core", - "callbacks", - "langchain_tracer", - "LangChainTracer" - ] - } - ], - "tags": [ - "retriever" - ], - "inheritableTags": [], - "metadata": { - "execution_id": "138", - "workflow": { - "id": "259", - "name": "ChainQA", - "active": false - }, - "node": "Question and Answer Chain 1.4" - }, - "inheritableMetadata": { - "execution_id": "138", - "workflow": { - "id": "259", - "name": "ChainQA", - "active": false - }, - "node": "Question and Answer Chain 1.4" - }, - "name": "callback_manager", - "_parentRunId": "c589ca8c-9526-4512-b88a-1e4cbdbcf607" - } - } - } - ] - ] - }, - "metadata": {} - }, - { - "startTime": 1741788358866, - "executionTime": 513, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_retriever": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_retriever": [ - [ - { - "json": { - "query": "What is the size of a block header with no transactions? Respond only with number of bytes.", - "config": { - "tags": [], - "metadata": { - "execution_id": "138", - "workflow": { - "id": "259", - "name": "ChainQA", - "active": false - }, - "node": "Question and Answer Chain 1.5" - }, - "recursionLimit": 25, - "signal": {}, - "callbacks": { - "handlers": [ - { - "lc": 1, - "type": "not_implemented", - "id": [ - "langchain_core", - "callbacks", - "langchain_tracer", - "LangChainTracer" - ] - } - ], - "inheritableHandlers": [ - { - "lc": 1, - "type": "not_implemented", - "id": [ - "langchain_core", - "callbacks", - "langchain_tracer", - "LangChainTracer" - ] - } - ], - "tags": [ - "seq:step:2" - ], - "inheritableTags": [], - "metadata": { - "execution_id": "138", - "workflow": { - "id": "259", - "name": "ChainQA", - "active": false - }, - "node": "Question and Answer Chain 1.5" - }, - "inheritableMetadata": { - "execution_id": "138", - "workflow": { - "id": "259", - "name": "ChainQA", - "active": false - }, - "node": "Question and Answer Chain 1.5" - }, - "name": "callback_manager", - "_parentRunId": "49e2e7a0-6e6b-41b2-a74d-f7dbe71055fa" - } - } - } - } - ] - ] - }, - "metadata": {} - } - ], - "In-Memory Vector Store2": [ - { - "startTime": 1741788355569, - "executionTime": 848, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_vectorStore": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_vectorStore": [ - [ - { - "json": { - "query": "What is the size of a block header with no transactions? Respond only with number of bytes.", - "k": 4 - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "In-Memory Vector Store2", - "runIndex": 0 - }, - { - "node": "In-Memory Vector Store2", - "runIndex": 1 - }, - { - "node": "In-Memory Vector Store2", - "runIndex": 2 - } - ] - } - }, - { - "startTime": 1741788357754, - "executionTime": 677, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_vectorStore": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_vectorStore": [ - [ - { - "json": { - "query": "What is the size of a block header with no transactions? Respond only with number of bytes.", - "k": 4 - } - } - ] - ] - } - }, - { - "startTime": 1741788358867, - "executionTime": 511, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_vectorStore": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_vectorStore": [ - [ - { - "json": { - "query": "What is the size of a block header with no transactions? Respond only with number of bytes.", - "k": 4 - } - } - ] - ] - } - } - ], - "Embeddings OpenAI7": [ - { - "startTime": 1741788355569, - "executionTime": 842, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_embedding": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_embedding": [ - [ - { - "json": { - "query": "What is the size of a block header with no transactions? Respond only with number of bytes." - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "Embeddings OpenAI7", - "runIndex": 0 - }, - { - "node": "Embeddings OpenAI7", - "runIndex": 1 - }, - { - "node": "Embeddings OpenAI7", - "runIndex": 2 - } - ] - } - }, - { - "startTime": 1741788357754, - "executionTime": 677, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_embedding": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_embedding": [ - [ - { - "json": { - "query": "What is the size of a block header with no transactions? Respond only with number of bytes." - } - } - ] - ] - } - }, - { - "startTime": 1741788358867, - "executionTime": 511, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_embedding": [ - [ - { - "json": { - "response": [ - "json array" - ] - } - } - ] - ] - }, - "inputOverride": { - "ai_embedding": [ - [ - { - "json": { - "query": "What is the size of a block header with no transactions? Respond only with number of bytes." - } - } - ] - ] - } - } - ], - "OpenAI Chat Model2": [ - { - "startTime": 1741788357187, - "executionTime": 559, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are an assistant for question-answering tasks. Use the following pieces of retrieved context to answer the question.\nIf you don't know the answer, just say that you don't know, don't try to make up an answer.\n----------------\nContext: new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the\n\n next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing\n\n confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs\n\n-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need\nHuman: What is the size of a block header with no transactions? Respond only with number of bytes." - ], - "estimatedTokens": 2071, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-3.5-turbo-0125", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - }, - "metadata": { - "subRun": [ - { - "node": "OpenAI Chat Model2", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model2", - "runIndex": 1 - }, - { - "node": "OpenAI Chat Model2", - "runIndex": 2 - } - ] - } - }, - { - "startTime": 1741788358443, - "executionTime": 408, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are an assistant for question-answering tasks. Use the following pieces of retrieved context to answer the question.\nIf you don't know the answer, just say that you don't know, don't try to make up an answer.\n----------------\nContext: new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the\n\n next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing\n\n confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs\n\n-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need\nHuman: What is the size of a block header with no transactions? Respond only with number of bytes." - ], - "estimatedTokens": 2071, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-3.5-turbo-0125", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - } - }, - { - "startTime": 1741788359403, - "executionTime": 550, - "executionStatus": "success", - "source": [ - null - ], - "data": { - "ai_languageModel": [ - [ - { - "json": { - "response": { - "object": true - }, - "tokenUsage": { - "object": true - } - } - } - ] - ] - }, - "inputOverride": { - "ai_languageModel": [ - [ - { - "json": { - "messages": [ - "System: You are an assistant for question-answering tasks. Use the following pieces of retrieved context to answer the question.\nIf you don't know the answer, just say that you don't know, don't try to make up an answer.\n----------------\nContext: new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the\n\n next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing\n\n confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs\n\n-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need\nHuman: What is the size of a block header with no transactions? Respond only with number of bytes." - ], - "estimatedTokens": 2071, - "options": { - "openai_api_key": { - "lc": 1, - "type": "secret", - "id": [ - "OPENAI_API_KEY" - ] - }, - "model": "gpt-3.5-turbo-0125", - "temperature": 0, - "timeout": 60000, - "max_retries": 2, - "configuration": { - "baseURL": "https://api.openai.com/v1" - }, - "model_kwargs": {} - } - } - } - ] - ] - } - } - ], - "Question and Answer Chain 1.3": [ - { - "hints": [], - "startTime": 1741788355555, - "executionTime": 2193, - "source": [ - { - "previousNode": "Check Vector Store Populated2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "response": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Question and Answer Chain 1.4": [ - { - "hints": [], - "startTime": 1741788357748, - "executionTime": 1104, - "source": [ - { - "previousNode": "Check Vector Store Populated2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "response": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Question and Answer Chain 1.5": [ - { - "hints": [], - "startTime": 1741788358852, - "executionTime": 1103, - "source": [ - { - "previousNode": "Check Vector Store Populated2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "response": "80 bytes" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Merge": [ - { - "hints": [], - "startTime": 1741788359955, - "executionTime": 17, - "source": [ - { - "previousNode": "Question and Answer Chain 1.3" - }, - { - "previousNode": "Question and Answer Chain 1.4" - }, - { - "previousNode": "Question and Answer Chain 1.5" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "response": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "response": { - "object": true - } - }, - "pairedItem": { - "item": 0, - "input": 1 - } - }, - { - "json": { - "response": "80 bytes" - }, - "pairedItem": { - "item": 0, - "input": 2 - } - } - ] - ] - } - } - ], - "Edit Fields2": [ - { - "hints": [], - "startTime": 1741788359972, - "executionTime": 10, - "source": [ - { - "previousNode": "Merge" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "output_matches": true - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "output_matches": true - }, - "pairedItem": { - "item": 1 - } - }, - { - "json": { - "output_matches": true - }, - "pairedItem": { - "item": 2 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Edit Fields2" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": { - "Token Splitter2": [ - { - "subRun": [ - { - "node": "Token Splitter2", - "runIndex": 0 - } - ] - } - ], - "Default Data Loader2": [ - { - "subRun": [ - { - "node": "Default Data Loader2", - "runIndex": 0 - } - ] - } - ], - "Embeddings OpenAI6": [ - { - "subRun": [ - { - "node": "Embeddings OpenAI6", - "runIndex": 0 - } - ] - } - ], - "Embeddings OpenAI7": [ - { - "subRun": [ - { - "node": "Embeddings OpenAI7", - "runIndex": 0 - }, - { - "node": "Embeddings OpenAI7", - "runIndex": 1 - }, - { - "node": "Embeddings OpenAI7", - "runIndex": 2 - } - ] - } - ], - "In-Memory Vector Store2": [ - { - "subRun": [ - { - "node": "In-Memory Vector Store2", - "runIndex": 0 - }, - { - "node": "In-Memory Vector Store2", - "runIndex": 1 - }, - { - "node": "In-Memory Vector Store2", - "runIndex": 2 - } - ] - } - ], - "Vector Store Retriever2": [ - { - "subRun": [ - { - "node": "Vector Store Retriever2", - "runIndex": 0 - }, - { - "node": "Vector Store Retriever2", - "runIndex": 1 - }, - { - "node": "Vector Store Retriever2", - "runIndex": 2 - } - ] - } - ], - "OpenAI Chat Model2": [ - { - "subRun": [ - { - "node": "OpenAI Chat Model2", - "runIndex": 0 - }, - { - "node": "OpenAI Chat Model2", - "runIndex": 1 - }, - { - "node": "OpenAI Chat Model2", - "runIndex": 2 - } - ] - } - ] - }, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-03-12T14:05:53.185Z", - "stoppedAt": "2025-03-12T14:05:59.982Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/26-snapshot.json b/test-workflows/snapshots/26-snapshot.json deleted file mode 100644 index 9aec0b4eda5..00000000000 --- a/test-workflows/snapshots/26-snapshot.json +++ /dev/null @@ -1,408 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1710331918635, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ClickUp": [ - { - "startTime": 1710331918635, - "executionTime": 444, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "90121105892", - "name": "testFolder1710331918638", - "orderindex": 101, - "override_statuses": false, - "hidden": false, - "space": { - "object": true - }, - "task_count": "0", - "archived": false, - "statuses": [ - "json array" - ], - "lists": [ - "json array" - ], - "permission_level": "create" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 8 Seconds": [ - { - "startTime": 1710331919079, - "executionTime": 803, - "source": [ - { - "previousNode": "ClickUp" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "90121105892", - "name": "testFolder1710331918638", - "orderindex": 101, - "override_statuses": false, - "hidden": false, - "space": { - "object": true - }, - "task_count": "0", - "archived": false, - "statuses": [ - "json array" - ], - "lists": [ - "json array" - ], - "permission_level": "create" - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "ClickUp1": [ - { - "startTime": 1710331919882, - "executionTime": 471, - "source": [ - { - "previousNode": "Sleep 8 Seconds" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "90121105892", - "name": "testFolderUpdated1710331919885", - "orderindex": 101, - "override_statuses": false, - "hidden": false, - "space": { - "object": true - }, - "task_count": "0", - "archived": false, - "statuses": [ - "json array" - ], - "lists": [ - "json array" - ], - "permission_level": "create" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 8 Seconds1": [ - { - "startTime": 1710331920353, - "executionTime": 803, - "source": [ - { - "previousNode": "ClickUp1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "90121105892", - "name": "testFolderUpdated1710331919885", - "orderindex": 101, - "override_statuses": false, - "hidden": false, - "space": { - "object": true - }, - "task_count": "0", - "archived": false, - "statuses": [ - "json array" - ], - "lists": [ - "json array" - ], - "permission_level": "create" - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "ClickUp2": [ - { - "startTime": 1710331921156, - "executionTime": 1580, - "source": [ - { - "previousNode": "Sleep 8 Seconds1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "34002010", - "name": "test1627629155971", - "orderindex": 2, - "override_statuses": false, - "hidden": false, - "space": { - "object": true - }, - "task_count": "0", - "archived": false, - "statuses": [ - "json array" - ], - "lists": [ - "json array" - ], - "permission_level": "create" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 8 Seconds2": [ - { - "startTime": 1710331922737, - "executionTime": 802, - "source": [ - { - "previousNode": "ClickUp2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "34002010", - "name": "test1627629155971", - "orderindex": 2, - "override_statuses": false, - "hidden": false, - "space": { - "object": true - }, - "task_count": "0", - "archived": false, - "statuses": [ - "json array" - ], - "lists": [ - "json array" - ], - "permission_level": "create" - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "ClickUp3": [ - { - "startTime": 1710331923540, - "executionTime": 612, - "source": [ - { - "previousNode": "Sleep 8 Seconds2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "90121105892", - "name": "testFolderUpdated1710331919885", - "orderindex": 101, - "override_statuses": false, - "hidden": false, - "space": { - "object": true - }, - "task_count": "0", - "archived": false, - "statuses": [ - "json array" - ], - "lists": [ - "json array" - ], - "permission_level": "create" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 8 Seconds3": [ - { - "startTime": 1710331924152, - "executionTime": 802, - "source": [ - { - "previousNode": "ClickUp3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "90121105892", - "name": "testFolderUpdated1710331919885", - "orderindex": 101, - "override_statuses": false, - "hidden": false, - "space": { - "object": true - }, - "task_count": "0", - "archived": false, - "statuses": [ - "json array" - ], - "lists": [ - "json array" - ], - "permission_level": "create" - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "ClickUp4": [ - { - "startTime": 1710331924954, - "executionTime": 458, - "source": [ - { - "previousNode": "Sleep 8 Seconds3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "ClickUp4" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2024-03-13T12:11:58.634Z", - "stoppedAt": "2024-03-13T12:12:05.412Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/29-snapshot.json b/test-workflows/snapshots/29-snapshot.json deleted file mode 100644 index 698015295e5..00000000000 --- a/test-workflows/snapshots/29-snapshot.json +++ /dev/null @@ -1,561 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1710331919258, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ClickUp": [ - { - "startTime": 1710331919258, - "executionTime": 1567, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "90121105894", - "name": "Test21710331919261", - "orderindex": 102, - "override_statuses": false, - "hidden": false, - "space": { - "object": true - }, - "task_count": "0", - "archived": false, - "statuses": [ - "json array" - ], - "lists": [ - "json array" - ], - "permission_level": "create" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 8 Seconds": [ - { - "startTime": 1710331920826, - "executionTime": 802, - "source": [ - { - "previousNode": "ClickUp" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "90121105894", - "name": "Test21710331919261", - "orderindex": 102, - "override_statuses": false, - "hidden": false, - "space": { - "object": true - }, - "task_count": "0", - "archived": false, - "statuses": [ - "json array" - ], - "lists": [ - "json array" - ], - "permission_level": "create" - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "ClickUp1": [ - { - "startTime": 1710331921629, - "executionTime": 473, - "source": [ - { - "previousNode": "Sleep 8 Seconds" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "901201909617", - "name": "testingList21710331921631", - "deleted": false, - "orderindex": 0, - "content": "", - "priority": { - "object": true - }, - "assignee": { - "object": true - }, - "due_date": { - "object": true - }, - "start_date": { - "object": true - }, - "folder": { - "object": true - }, - "space": { - "object": true - }, - "inbound_address": "a.t.901201909617.u-8779387.a621f41b-e48a-477a-b1d1-b6bf5f95b97c@tasks.clickup.com", - "archived": false, - "override_statuses": false, - "statuses": [ - "json array" - ], - "permission_level": "create" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 8 Seconds1": [ - { - "startTime": 1710331922103, - "executionTime": 802, - "source": [ - { - "previousNode": "ClickUp1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "901201909617", - "name": "testingList21710331921631", - "deleted": false, - "orderindex": 0, - "content": "", - "priority": { - "object": true - }, - "assignee": { - "object": true - }, - "due_date": { - "object": true - }, - "start_date": { - "object": true - }, - "folder": { - "object": true - }, - "space": { - "object": true - }, - "inbound_address": "a.t.901201909617.u-8779387.a621f41b-e48a-477a-b1d1-b6bf5f95b97c@tasks.clickup.com", - "archived": false, - "override_statuses": false, - "statuses": [ - "json array" - ], - "permission_level": "create" - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "ClickUp2": [ - { - "startTime": 1710331922905, - "executionTime": 323, - "source": [ - { - "previousNode": "Sleep 8 Seconds1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 90120030547385, - "hist_id": "bf5d7961-3473-4ba7-9ba2-3ccd75f11f4d", - "date": 1710331923158, - "version": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 8 Seconds2": [ - { - "startTime": 1710331923228, - "executionTime": 803, - "source": [ - { - "previousNode": "ClickUp2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 90120030547385, - "hist_id": "bf5d7961-3473-4ba7-9ba2-3ccd75f11f4d", - "date": 1710331923158, - "version": { - "object": true - } - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "ClickUp3": [ - { - "startTime": 1710331924031, - "executionTime": 408, - "source": [ - { - "previousNode": "Sleep 8 Seconds2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 8 Seconds3": [ - { - "startTime": 1710331924439, - "executionTime": 802, - "source": [ - { - "previousNode": "ClickUp3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "ClickUp4": [ - { - "startTime": 1710331925241, - "executionTime": 325, - "source": [ - { - "previousNode": "Sleep 8 Seconds3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "90120030547385", - "comment": [ - "json array" - ], - "comment_text": "commentUpdated1710331924035", - "user": { - "object": true - }, - "reactions": [ - "json array" - ], - "date": "1710331923158" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 8 Seconds4": [ - { - "startTime": 1710331925566, - "executionTime": 802, - "source": [ - { - "previousNode": "ClickUp4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "90120030547385", - "comment": [ - "json array" - ], - "comment_text": "commentUpdated1710331924035", - "user": { - "object": true - }, - "reactions": [ - "json array" - ], - "date": "1710331923158" - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "ClickUp5": [ - { - "startTime": 1710331926369, - "executionTime": 407, - "source": [ - { - "previousNode": "Sleep 8 Seconds4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 8 Seconds5": [ - { - "startTime": 1710331926777, - "executionTime": 802, - "source": [ - { - "previousNode": "ClickUp5" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "ClickUp6": [ - { - "startTime": 1710331927579, - "executionTime": 2324, - "source": [ - { - "previousNode": "Sleep 8 Seconds5" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 8 Seconds6": [ - { - "startTime": 1710331929903, - "executionTime": 803, - "source": [ - { - "previousNode": "ClickUp6" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "ClickUp7": [ - { - "startTime": 1710331930706, - "executionTime": 426, - "source": [ - { - "previousNode": "Sleep 8 Seconds6" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "ClickUp7" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2024-03-13T12:11:59.256Z", - "stoppedAt": "2024-03-13T12:12:11.132Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/32-snapshot.json b/test-workflows/snapshots/32-snapshot.json deleted file mode 100644 index 4139a6ace4c..00000000000 --- a/test-workflows/snapshots/32-snapshot.json +++ /dev/null @@ -1,168 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747344001850, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Drift ": [ - { - "startTime": 1747344001850, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 632, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 25164082913, - "createdAt": 1747344002321, - "attributes": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Drift 1": [ - { - "startTime": 1747344002482, - "executionIndex": 2, - "source": [ - { - "previousNode": "Drift " - } - ], - "hints": [], - "executionTime": 527, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 25164082913, - "createdAt": 1747344002321, - "attributes": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Drift 2": [ - { - "startTime": 1747344003010, - "executionIndex": 3, - "source": [ - { - "previousNode": "Drift 1" - } - ], - "hints": [], - "executionTime": 520, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 25164082913, - "createdAt": 1747344002321, - "attributes": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Drift 3": [ - { - "startTime": 1747344003530, - "executionIndex": 4, - "source": [ - { - "previousNode": "Drift 2" - } - ], - "hints": [], - "executionTime": 466, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Drift 3" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:01.850Z", - "stoppedAt": "2025-05-15T21:20:03.996Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/33-snapshot.json b/test-workflows/snapshots/33-snapshot.json deleted file mode 100644 index 603b454e144..00000000000 --- a/test-workflows/snapshots/33-snapshot.json +++ /dev/null @@ -1,220 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1676891385930, - "executionTime": 1, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Zoom": [ - { - "startTime": 1676891385931, - "executionTime": 635, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "uuid": "oRlR90RNTw2pd8VI4b+Wcw==", - "id": 78415116127, - "host_id": "nRgFaftbSnmu0V5MWWIDAA", - "host_email": "nodeqa@n8n.io", - "topic": "test", - "type": 2, - "status": "waiting", - "start_time": "2023-02-20T11:09:46Z", - "duration": 60, - "timezone": "Europe/Paris", - "created_at": "2023-02-20T11:09:46Z", - "start_url": "https://us04web.zoom.us/s/78415116127?zak=eyJ0eXAiOiJKV1QiLCJzdiI6IjAwMDAwMSIsInptX3NrbSI6InptX28ybSIsImFsZyI6IkhTMjU2In0.eyJhdWQiOiJjbGllbnRzbSIsInVpZCI6Im5SZ0ZhZnRiU25tdTBWNU1XV0lEQUEiLCJpc3MiOiJ3ZWIiLCJzayI6IjAiLCJzdHkiOjEwMCwid2NkIjoidXMwNCIsImNsdCI6MCwibW51bSI6Ijc4NDE1MTE2MTI3IiwiZXhwIjoxNjc2ODk4NTg2LCJpYXQiOjE2NzY4OTEzODYsImFpZCI6IjFHdXNnSGsxVFAyVVFvUDRNVkU1UlEiLCJjaWQiOiIifQ.EwHxHLdTe-vrH2YMZusYTiShmKhzyOtAT4RYH0UnYQ4", - "join_url": "https://us04web.zoom.us/j/78415116127?pwd=xaYBX8khiADyaoIR03LByEVLuRB4IM.1", - "password": "mV6LuA", - "h323_password": "171732", - "pstn_password": "171732", - "encrypted_password": "xaYBX8khiADyaoIR03LByEVLuRB4IM.1", - "settings": { - "object": true - }, - "pre_schedule": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Zoom1": [ - { - "startTime": 1676891386566, - "executionTime": 367, - "source": [ - { - "previousNode": "Zoom" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Zoom2": [ - { - "startTime": 1676891386933, - "executionTime": 248, - "source": [ - { - "previousNode": "Zoom1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "uuid": "oRlR90RNTw2pd8VI4b+Wcw==", - "id": 78415116127, - "host_id": "nRgFaftbSnmu0V5MWWIDAA", - "topic": "test", - "type": 2, - "start_time": "2023-02-20T11:09:46Z", - "duration": 30, - "timezone": "Europe/Paris", - "created_at": "2023-02-20T11:09:46Z", - "join_url": "https://us04web.zoom.us/j/78415116127?pwd=xaYBX8khiADyaoIR03LByEVLuRB4IM.1" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Zoom3": [ - { - "startTime": 1676891387181, - "executionTime": 277, - "source": [ - { - "previousNode": "Zoom2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "uuid": "oRlR90RNTw2pd8VI4b+Wcw==", - "id": 78415116127, - "host_id": "nRgFaftbSnmu0V5MWWIDAA", - "host_email": "nodeqa@n8n.io", - "topic": "test", - "type": 2, - "status": "waiting", - "start_time": "2023-02-20T11:09:46Z", - "duration": 30, - "timezone": "Europe/Paris", - "created_at": "2023-02-20T11:09:46Z", - "start_url": "https://us04web.zoom.us/s/78415116127?zak=eyJ0eXAiOiJKV1QiLCJzdiI6IjAwMDAwMSIsInptX3NrbSI6InptX28ybSIsImFsZyI6IkhTMjU2In0.eyJhdWQiOiJjbGllbnRzbSIsInVpZCI6Im5SZ0ZhZnRiU25tdTBWNU1XV0lEQUEiLCJpc3MiOiJ3ZWIiLCJzayI6IjAiLCJzdHkiOjEwMCwid2NkIjoidXMwNCIsImNsdCI6MCwibW51bSI6Ijc4NDE1MTE2MTI3IiwiZXhwIjoxNjc2ODk4NTg3LCJpYXQiOjE2NzY4OTEzODcsImFpZCI6IjFHdXNnSGsxVFAyVVFvUDRNVkU1UlEiLCJjaWQiOiIifQ.T6-x2VI8MjhMP0vG-bNtYKMP8gTL5xrZE5NTha2jmqM", - "join_url": "https://us04web.zoom.us/j/78415116127?pwd=xaYBX8khiADyaoIR03LByEVLuRB4IM.1", - "password": "mV6LuA", - "h323_password": "171732", - "pstn_password": "171732", - "encrypted_password": "xaYBX8khiADyaoIR03LByEVLuRB4IM.1", - "settings": { - "object": true - }, - "pre_schedule": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Zoom4": [ - { - "startTime": 1676891387458, - "executionTime": 279, - "source": [ - { - "previousNode": "Zoom3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Zoom4" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-02-20T11:09:45.929Z", - "stoppedAt": "2023-02-20T11:09:47.737Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/34-snapshot.json b/test-workflows/snapshots/34-snapshot.json deleted file mode 100644 index fb3475c7458..00000000000 --- a/test-workflows/snapshots/34-snapshot.json +++ /dev/null @@ -1,544 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1676891385888, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Strava": [ - { - "startTime": 1676891385889, - "executionTime": 523, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "resource_state": 3, - "athlete": { - "object": true - }, - "name": "TestActivity", - "distance": 0, - "moving_time": 5, - "elapsed_time": 5, - "total_elevation_gain": 0, - "type": "Run", - "sport_type": "Run", - "workout_type": { - "object": true - }, - "id": 8591820220, - "start_date": "2023-02-20T10:09:45Z", - "start_date_local": "2023-02-20T11:09:45Z", - "timezone": "(GMT+01:00) Africa/Tunis", - "utc_offset": 3600, - "location_city": { - "object": true - }, - "location_state": { - "object": true - }, - "location_country": "Tunisia", - "achievement_count": 0, - "kudos_count": 0, - "comment_count": 0, - "athlete_count": 1, - "photo_count": 0, - "map": { - "object": true - }, - "trainer": false, - "commute": false, - "manual": true, - "private": false, - "visibility": "everyone", - "flagged": false, - "gear_id": { - "object": true - }, - "start_latlng": [ - "json array" - ], - "end_latlng": [ - "json array" - ], - "average_speed": 0, - "max_speed": 0, - "has_heartrate": false, - "heartrate_opt_out": false, - "display_hide_heartrate_option": false, - "upload_id": { - "object": true - }, - "external_id": { - "object": true - }, - "from_accepted_tag": false, - "pr_count": 0, - "total_photo_count": 0, - "has_kudoed": false, - "description": { - "object": true - }, - "calories": 0, - "perceived_exertion": { - "object": true - }, - "prefer_perceived_exertion": { - "object": true - }, - "segment_efforts": [ - "json array" - ], - "best_efforts": [ - "json array" - ], - "photos": { - "object": true - }, - "stats_visibility": [ - "json array" - ], - "hide_from_home": false, - "embed_token": "8dda88c56f0b4c907a917db2e642635586e4c338", - "similar_activities": { - "object": true - }, - "available_zones": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Strava4": [ - { - "startTime": 1676891386412, - "executionTime": 202, - "source": [ - { - "previousNode": "Strava" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {} - } - ] - ] - } - } - ], - "Strava3": [ - { - "startTime": 1676891386614, - "executionTime": 423, - "source": [ - { - "previousNode": "Strava" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "resource_state": 3, - "athlete": { - "object": true - }, - "name": "TestActivity", - "distance": 0, - "moving_time": 5, - "elapsed_time": 5, - "total_elevation_gain": 0, - "type": "Run", - "sport_type": "Run", - "workout_type": { - "object": true - }, - "id": 8591820220, - "start_date": "2023-02-20T10:09:45Z", - "start_date_local": "2023-02-20T11:09:45Z", - "timezone": "(GMT+01:00) Africa/Tunis", - "utc_offset": 3600, - "location_city": { - "object": true - }, - "location_state": { - "object": true - }, - "location_country": "Tunisia", - "achievement_count": 0, - "kudos_count": 0, - "comment_count": 0, - "athlete_count": 1, - "photo_count": 0, - "map": { - "object": true - }, - "trainer": false, - "commute": false, - "manual": true, - "private": false, - "visibility": "everyone", - "flagged": false, - "gear_id": { - "object": true - }, - "start_latlng": [ - "json array" - ], - "end_latlng": [ - "json array" - ], - "average_speed": 0, - "max_speed": 0, - "has_heartrate": false, - "heartrate_opt_out": false, - "display_hide_heartrate_option": false, - "upload_id": { - "object": true - }, - "external_id": { - "object": true - }, - "from_accepted_tag": false, - "pr_count": 0, - "total_photo_count": 0, - "has_kudoed": false, - "description": { - "object": true - }, - "calories": 0, - "perceived_exertion": { - "object": true - }, - "prefer_perceived_exertion": { - "object": true - }, - "segment_efforts": [ - "json array" - ], - "best_efforts": [ - "json array" - ], - "photos": { - "object": true - }, - "stats_visibility": [ - "json array" - ], - "hide_from_home": false, - "embed_token": "8dda88c56f0b4c907a917db2e642635586e4c338", - "similar_activities": { - "object": true - }, - "available_zones": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Strava5": [ - { - "startTime": 1676891387037, - "executionTime": 196, - "source": [ - { - "previousNode": "Strava4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {} - } - ] - ] - } - } - ], - "Strava1": [ - { - "startTime": 1676891387233, - "executionTime": 416, - "source": [ - { - "previousNode": "Strava3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "resource_state": -1, - "athlete": { - "object": true - }, - "name": "TestActivity", - "distance": 0, - "moving_time": 5, - "elapsed_time": 5, - "total_elevation_gain": 0, - "type": "Ride", - "sport_type": "Ride", - "workout_type": { - "object": true - }, - "id": 8591820220, - "start_date": "2023-02-20T10:09:45Z", - "start_date_local": "2023-02-20T11:09:45Z", - "timezone": "(GMT+01:00) Africa/Tunis", - "utc_offset": 3600, - "location_city": { - "object": true - }, - "location_state": { - "object": true - }, - "location_country": "Tunisia", - "achievement_count": 0, - "kudos_count": 0, - "comment_count": 0, - "athlete_count": 1, - "photo_count": 0, - "map": { - "object": true - }, - "trainer": false, - "commute": false, - "manual": true, - "private": false, - "visibility": "everyone", - "flagged": false, - "gear_id": { - "object": true - }, - "start_latlng": [ - "json array" - ], - "end_latlng": [ - "json array" - ], - "average_speed": 0, - "max_speed": 0, - "has_heartrate": false, - "heartrate_opt_out": false, - "display_hide_heartrate_option": false, - "upload_id": { - "object": true - }, - "external_id": { - "object": true - }, - "from_accepted_tag": false, - "pr_count": 0, - "total_photo_count": 0, - "has_kudoed": false, - "description": { - "object": true - }, - "calories": 0, - "perceived_exertion": { - "object": true - }, - "prefer_perceived_exertion": { - "object": true - }, - "segment_efforts": [ - "json array" - ], - "photos": { - "object": true - }, - "stats_visibility": [ - "json array" - ], - "hide_from_home": false, - "embed_token": "8dda88c56f0b4c907a917db2e642635586e4c338", - "available_zones": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Strava6": [ - { - "startTime": 1676891387649, - "executionTime": 187, - "source": [ - { - "previousNode": "Strava5" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {} - } - ] - ] - } - } - ], - "Strava2": [ - { - "startTime": 1676891387836, - "executionTime": 227, - "source": [ - { - "previousNode": "Strava1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "resource_state": 2, - "athlete": { - "object": true - }, - "name": "TestActivity", - "distance": 0, - "moving_time": 5, - "elapsed_time": 5, - "total_elevation_gain": 0, - "type": "Ride", - "sport_type": "Ride", - "workout_type": { - "object": true - }, - "id": 8591820220, - "start_date": "2023-02-20T10:09:45Z", - "start_date_local": "2023-02-20T11:09:45Z", - "timezone": "(GMT+01:00) Africa/Tunis", - "utc_offset": 3600, - "location_city": { - "object": true - }, - "location_state": { - "object": true - }, - "location_country": "Tunisia", - "achievement_count": 0, - "kudos_count": 0, - "comment_count": 0, - "athlete_count": 1, - "photo_count": 0, - "map": { - "object": true - }, - "trainer": false, - "commute": false, - "manual": true, - "private": false, - "visibility": "everyone", - "flagged": false, - "gear_id": { - "object": true - }, - "start_latlng": [ - "json array" - ], - "end_latlng": [ - "json array" - ], - "average_speed": 0, - "max_speed": 0, - "has_heartrate": false, - "heartrate_opt_out": false, - "display_hide_heartrate_option": false, - "upload_id": { - "object": true - }, - "external_id": { - "object": true - }, - "from_accepted_tag": false, - "pr_count": 0, - "total_photo_count": 0, - "has_kudoed": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Strava2" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-02-20T11:09:45.886Z", - "stoppedAt": "2023-02-20T11:09:48.063Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/35-snapshot.json b/test-workflows/snapshots/35-snapshot.json deleted file mode 100644 index 41e57df8540..00000000000 --- a/test-workflows/snapshots/35-snapshot.json +++ /dev/null @@ -1,476 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747344002190, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack": [ - { - "startTime": 1747344002190, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 121, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "title": "", - "phone": "", - "skype": "", - "real_name": "nodeqa", - "real_name_normalized": "nodeqa", - "display_name": "", - "display_name_normalized": "", - "fields": { - "object": true - }, - "status_text": "Testing...", - "status_emoji": ":speech_balloon:", - "status_emoji_display_info": [ - "json array" - ], - "status_expiration": 0, - "avatar_hash": "gc81277605b1", - "email": "nodeqa@n8n.io", - "image_24": "https://secure.gravatar.com/avatar/c81277605b129fdafaacede5ae34e07c.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-24.png", - "image_32": "https://secure.gravatar.com/avatar/c81277605b129fdafaacede5ae34e07c.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-32.png", - "image_48": "https://secure.gravatar.com/avatar/c81277605b129fdafaacede5ae34e07c.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-48.png", - "image_72": "https://secure.gravatar.com/avatar/c81277605b129fdafaacede5ae34e07c.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-72.png", - "image_192": "https://secure.gravatar.com/avatar/c81277605b129fdafaacede5ae34e07c.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-192.png", - "image_512": "https://secure.gravatar.com/avatar/c81277605b129fdafaacede5ae34e07c.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-512.png", - "status_text_canonical": "" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack13": [ - { - "startTime": 1747344002311, - "executionIndex": 2, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 253, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "ok": true, - "channel": "C01MZ82T9TR", - "ts": "1747344002.517089", - "message": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack1": [ - { - "startTime": 1747344002564, - "executionIndex": 3, - "source": [ - { - "previousNode": "Slack" - } - ], - "hints": [], - "executionTime": 250, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "title": "", - "phone": "", - "skype": "", - "real_name": "nodeqa", - "real_name_normalized": "nodeqa", - "display_name": "", - "display_name_normalized": "", - "fields": { - "object": true - }, - "status_text": "Testing...", - "status_emoji": ":speech_balloon:", - "status_emoji_display_info": [ - "json array" - ], - "status_expiration": 0, - "avatar_hash": "gc81277605b1", - "email": "nodeqa@n8n.io", - "image_24": "https://secure.gravatar.com/avatar/c81277605b129fdafaacede5ae34e07c.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-24.png", - "image_32": "https://secure.gravatar.com/avatar/c81277605b129fdafaacede5ae34e07c.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-32.png", - "image_48": "https://secure.gravatar.com/avatar/c81277605b129fdafaacede5ae34e07c.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-48.png", - "image_72": "https://secure.gravatar.com/avatar/c81277605b129fdafaacede5ae34e07c.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-72.png", - "image_192": "https://secure.gravatar.com/avatar/c81277605b129fdafaacede5ae34e07c.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-192.png", - "image_512": "https://secure.gravatar.com/avatar/c81277605b129fdafaacede5ae34e07c.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0015-512.png", - "status_text_canonical": "" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack18": [ - { - "startTime": 1747344002814, - "executionIndex": 4, - "source": [ - { - "previousNode": "Slack13" - } - ], - "hints": [], - "executionTime": 165, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "ok": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack24": [ - { - "startTime": 1747344002979, - "executionIndex": 5, - "source": [ - { - "previousNode": "Slack13" - } - ], - "hints": [], - "executionTime": 138, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "ok": true, - "presence": "away", - "online": false, - "auto_away": false, - "manual_away": false, - "connection_count": 0 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack19": [ - { - "startTime": 1747344003117, - "executionIndex": 6, - "source": [ - { - "previousNode": "Slack18" - } - ], - "hints": [], - "executionTime": 223, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "ok": true, - "type": "message", - "message": { - "object": true - }, - "channel": "C01MZ82T9TR" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack25": [ - { - "startTime": 1747344003340, - "executionIndex": 7, - "source": [ - { - "previousNode": "Slack24" - } - ], - "hints": [], - "executionTime": 189, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "U01NE1E8FFU", - "team_id": "T01MZ82R8NB", - "name": "nodeqa", - "deleted": false, - "color": "9f69e7", - "real_name": "nodeqa", - "tz": "Europe/Brussels", - "tz_label": "Central European Summer Time", - "tz_offset": 7200, - "profile": { - "object": true - }, - "is_admin": true, - "is_owner": true, - "is_primary_owner": true, - "is_restricted": false, - "is_ultra_restricted": false, - "is_bot": false, - "is_app_user": false, - "updated": 1747344002, - "is_email_confirmed": true, - "has_2fa": false, - "who_can_share_contact_card": "EVERYONE" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack20": [ - { - "startTime": 1747344003529, - "executionIndex": 8, - "source": [ - { - "previousNode": "Slack19" - } - ], - "hints": [], - "executionTime": 152, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "ok": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack14": [ - { - "startTime": 1747344003681, - "executionIndex": 9, - "source": [ - { - "previousNode": "Slack20" - } - ], - "hints": [], - "executionTime": 214, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "ok": true, - "permalink": "https://n8n-qa.slack.com/archives/C01MZ82T9TR/p1747344002517089", - "channel": "C01MZ82T9TR" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack15": [ - { - "startTime": 1747344003895, - "executionIndex": 10, - "source": [ - { - "previousNode": "Slack14" - } - ], - "hints": [], - "executionTime": 233, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "ok": true, - "channel": "C01MZ82T9TR", - "ts": "1747344002.517089", - "text": "Message Updated ", - "message": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack16": [ - { - "startTime": 1747344004128, - "executionIndex": 11, - "source": [ - { - "previousNode": "Slack15" - } - ], - "hints": [], - "executionTime": 222, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "ok": true, - "message_ts": "1747344004.002900" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack17": [ - { - "startTime": 1747344004351, - "executionIndex": 12, - "source": [ - { - "previousNode": "Slack16" - } - ], - "hints": [], - "executionTime": 208, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "ok": true, - "channel": "C01MZ82T9TR", - "ts": "1747344002.517089" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Slack17" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:02.189Z", - "stoppedAt": "2025-05-15T21:20:04.559Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/36-snapshot.json b/test-workflows/snapshots/36-snapshot.json deleted file mode 100644 index 16b6d7df906..00000000000 --- a/test-workflows/snapshots/36-snapshot.json +++ /dev/null @@ -1,1007 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747344002707, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack10": [ - { - "startTime": 1747344002707, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 466, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "F08SQHFSW92", - "created": 1747344002, - "timestamp": 1747344002, - "name": "-.txt", - "title": "Untitled", - "mimetype": "text/plain", - "filetype": "text", - "pretty_type": "Plain Text", - "user": "U01NE1E8FFU", - "user_team": "T01MZ82R8NB", - "editable": true, - "size": 72, - "mode": "snippet", - "is_external": false, - "external_type": "", - "is_public": true, - "public_url_shared": false, - "display_as_bot": false, - "username": "", - "url_private": "https://files.slack.com/files-pri/T01MZ82R8NB-F08SQHFSW92/-.txt", - "url_private_download": "https://files.slack.com/files-pri/T01MZ82R8NB-F08SQHFSW92/download/-.txt", - "permalink": "https://n8n-qa.slack.com/files/U01NE1E8FFU/F08SQHFSW92/-.txt", - "permalink_public": "https://slack-files.com/T01MZ82R8NB-F08SQHFSW92-b62bcefe91", - "edit_link": "https://n8n-qa.slack.com/files/U01NE1E8FFU/F08SQHFSW92/-.txt/edit", - "preview": "Test file upload Thu May 15 2025 22:20:02 GMT+0100 (Irish Standard Time)", - "preview_highlight": "
\n
\n
Test file upload Thu May 15 2025 22:20:02 GMT+0100 (Irish Standard Time)
\n
\n
\n", - "lines": 1, - "lines_more": 0, - "preview_is_truncated": false, - "comments_count": 0, - "is_starred": false, - "shares": { - "object": true - }, - "channels": [ - "json array" - ], - "groups": [ - "json array" - ], - "ims": [ - "json array" - ], - "has_more_shares": false, - "has_rich_preview": false, - "file_access": "visible" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack2": [ - { - "startTime": 1747344003173, - "executionIndex": 2, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 584, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "C08SK5EM3HT", - "name": "testchannelzpixicyzv", - "is_channel": true, - "is_group": false, - "is_im": false, - "is_mpim": false, - "is_private": false, - "created": 1747344003, - "is_archived": false, - "is_general": false, - "unlinked": 0, - "name_normalized": "testchannelzpixicyzv", - "is_shared": false, - "is_org_shared": false, - "is_pending_ext_shared": false, - "pending_shared": [ - "json array" - ], - "context_team_id": "T01MZ82R8NB", - "updated": 1747344003395, - "parent_conversation": { - "object": true - }, - "creator": "U01NE1E8FFU", - "is_ext_shared": false, - "shared_team_ids": [ - "json array" - ], - "pending_connected_team_ids": [ - "json array" - ], - "is_member": true, - "last_read": "0000000000.000000", - "topic": { - "object": true - }, - "purpose": { - "object": true - }, - "previous_names": [ - "json array" - ], - "priority": 0 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack24": [ - { - "startTime": 1747344003757, - "executionIndex": 3, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 133, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack11": [ - { - "startTime": 1747344003890, - "executionIndex": 4, - "source": [ - { - "previousNode": "Slack10" - } - ], - "hints": [], - "executionTime": 164, - "executionStatus": "success", - "data": { - "main": [ - [] - ] - } - } - ], - "Slack9": [ - { - "startTime": 1747344004055, - "executionIndex": 5, - "source": [ - { - "previousNode": "Slack2" - } - ], - "hints": [], - "executionTime": 562, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "C08SK5EM3HT", - "name": "renamedtestchannelzpixicyzv", - "is_channel": true, - "is_group": false, - "is_im": false, - "is_mpim": false, - "is_private": false, - "created": 1747344003, - "is_archived": false, - "is_general": false, - "unlinked": 0, - "name_normalized": "renamedtestchannelzpixicyzv", - "is_shared": false, - "is_org_shared": false, - "is_pending_ext_shared": false, - "pending_shared": [ - "json array" - ], - "context_team_id": "T01MZ82R8NB", - "updated": 1747344004305, - "parent_conversation": { - "object": true - }, - "creator": "U01NE1E8FFU", - "is_ext_shared": false, - "shared_team_ids": [ - "json array" - ], - "pending_connected_team_ids": [ - "json array" - ], - "is_member": true, - "last_read": "0000000000.000000", - "topic": { - "object": true - }, - "purpose": { - "object": true - }, - "previous_names": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack21": [ - { - "startTime": 1747344004617, - "executionIndex": 6, - "source": [ - { - "previousNode": "Slack24" - } - ], - "hints": [], - "executionTime": 220, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "ok": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack3": [ - { - "startTime": 1747344004837, - "executionIndex": 7, - "source": [ - { - "previousNode": "Slack9" - } - ], - "hints": [], - "executionTime": 189, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "C08SK5EM3HT", - "name": "renamedtestchannelzpixicyzv", - "is_channel": true, - "is_group": false, - "is_im": false, - "is_mpim": false, - "is_private": false, - "created": 1747344003, - "is_archived": false, - "is_general": false, - "unlinked": 0, - "name_normalized": "renamedtestchannelzpixicyzv", - "is_shared": false, - "is_org_shared": false, - "is_pending_ext_shared": false, - "pending_shared": [ - "json array" - ], - "context_team_id": "T01MZ82R8NB", - "updated": 1747344004977, - "parent_conversation": { - "object": true - }, - "creator": "U01NE1E8FFU", - "is_ext_shared": false, - "shared_team_ids": [ - "json array" - ], - "pending_connected_team_ids": [ - "json array" - ], - "is_member": false, - "topic": { - "object": true - }, - "purpose": { - "object": true - }, - "previous_names": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack22": [ - { - "startTime": 1747344005026, - "executionIndex": 8, - "source": [ - { - "previousNode": "Slack21" - } - ], - "hints": [], - "executionTime": 131, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "type": "channel", - "channel": "C01MZ82T9TR", - "date_create": 1747344004 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack4": [ - { - "startTime": 1747344005157, - "executionIndex": 9, - "source": [ - { - "previousNode": "Slack3" - } - ], - "hints": [], - "executionTime": 268, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "C08SK5EM3HT", - "name": "renamedtestchannelzpixicyzv", - "is_channel": true, - "is_group": false, - "is_im": false, - "is_mpim": false, - "is_private": false, - "created": 1747344003, - "is_archived": false, - "is_general": false, - "unlinked": 0, - "name_normalized": "renamedtestchannelzpixicyzv", - "is_shared": false, - "is_org_shared": false, - "is_pending_ext_shared": false, - "pending_shared": [ - "json array" - ], - "context_team_id": "T01MZ82R8NB", - "updated": 1747344005369, - "parent_conversation": { - "object": true - }, - "creator": "U01NE1E8FFU", - "is_ext_shared": false, - "shared_team_ids": [ - "json array" - ], - "pending_connected_team_ids": [ - "json array" - ], - "is_member": false, - "topic": { - "object": true - }, - "purpose": { - "object": true - }, - "previous_names": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack23": [ - { - "startTime": 1747344005425, - "executionIndex": 10, - "source": [ - { - "previousNode": "Slack22" - } - ], - "hints": [], - "executionTime": 257, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "ok": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack5": [ - { - "startTime": 1747344005682, - "executionIndex": 11, - "source": [ - { - "previousNode": "Slack4" - } - ], - "hints": [], - "executionTime": 206, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "C08SK5EM3HT", - "name": "renamedtestchannelzpixicyzv", - "is_channel": true, - "is_group": false, - "is_im": false, - "is_mpim": false, - "is_private": false, - "created": 1747344003, - "is_archived": false, - "is_general": false, - "unlinked": 0, - "name_normalized": "renamedtestchannelzpixicyzv", - "is_shared": false, - "is_org_shared": false, - "is_pending_ext_shared": false, - "pending_shared": [ - "json array" - ], - "context_team_id": "T01MZ82R8NB", - "updated": 1747344005369, - "parent_conversation": { - "object": true - }, - "creator": "U01NE1E8FFU", - "is_ext_shared": false, - "shared_team_ids": [ - "json array" - ], - "pending_connected_team_ids": [ - "json array" - ], - "is_member": true, - "last_read": "0000000000.000000", - "topic": { - "object": true - }, - "purpose": { - "object": true - }, - "previous_names": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack13": [ - { - "startTime": 1747344005888, - "executionIndex": 12, - "source": [ - { - "previousNode": "Slack5" - } - ], - "hints": [], - "executionTime": 267, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "C08SK5EM3HT", - "name": "renamedtestchannelzpixicyzv", - "is_channel": true, - "is_group": false, - "is_im": false, - "is_mpim": false, - "is_private": false, - "created": 1747344003, - "is_archived": false, - "is_general": false, - "unlinked": 0, - "name_normalized": "renamedtestchannelzpixicyzv", - "is_shared": false, - "is_org_shared": false, - "is_pending_ext_shared": false, - "pending_shared": [ - "json array" - ], - "context_team_id": "T01MZ82R8NB", - "updated": 1747344005369, - "parent_conversation": { - "object": true - }, - "creator": "U01NE1E8FFU", - "is_ext_shared": false, - "shared_team_ids": [ - "json array" - ], - "pending_connected_team_ids": [ - "json array" - ], - "is_member": true, - "last_read": "0000000000.000000", - "topic": { - "object": true - }, - "purpose": { - "object": true - }, - "previous_names": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack17": [ - { - "startTime": 1747344006155, - "executionIndex": 13, - "source": [ - { - "previousNode": "Slack13" - } - ], - "hints": [], - "executionTime": 268, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "ok": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack16": [ - { - "startTime": 1747344006423, - "executionIndex": 14, - "source": [ - { - "previousNode": "Slack17" - } - ], - "hints": [], - "executionTime": 497, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "C08SK5EM3HT", - "name": "renamedtestchannelzpixicyzv", - "is_channel": true, - "is_group": false, - "is_im": false, - "is_mpim": false, - "is_private": false, - "created": 1747344003, - "is_archived": false, - "is_general": false, - "unlinked": 0, - "name_normalized": "renamedtestchannelzpixicyzv", - "is_shared": false, - "is_org_shared": false, - "is_pending_ext_shared": false, - "pending_shared": [ - "json array" - ], - "context_team_id": "T01MZ82R8NB", - "updated": 1747344005369, - "parent_conversation": { - "object": true - }, - "creator": "U01NE1E8FFU", - "is_ext_shared": false, - "shared_team_ids": [ - "json array" - ], - "pending_connected_team_ids": [ - "json array" - ], - "is_member": true, - "last_read": "1747344005.401359", - "topic": { - "object": true - }, - "purpose": { - "object": true - }, - "previous_names": [ - "json array" - ], - "priority": 0 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack6": [ - { - "startTime": 1747344006920, - "executionIndex": 15, - "source": [ - { - "previousNode": "Slack16" - } - ], - "hints": [], - "executionTime": 216, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "C01MZ82T9TR", - "name": "random", - "is_channel": true, - "is_group": false, - "is_im": false, - "is_mpim": false, - "is_private": false, - "created": 1613575358, - "is_archived": false, - "is_general": false, - "unlinked": 0, - "name_normalized": "random", - "is_shared": false, - "is_org_shared": false, - "is_pending_ext_shared": false, - "pending_shared": [ - "json array" - ], - "context_team_id": "T01MZ82R8NB", - "updated": 1746595136190, - "parent_conversation": { - "object": true - }, - "creator": "U01NE1E8FFU", - "is_ext_shared": false, - "shared_team_ids": [ - "json array" - ], - "pending_connected_team_ids": [ - "json array" - ], - "is_member": true, - "topic": { - "object": true - }, - "purpose": { - "object": true - }, - "properties": { - "object": true - }, - "previous_names": [ - "json array" - ], - "num_members": 2 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack7": [ - { - "startTime": 1747344007136, - "executionIndex": 16, - "source": [ - { - "previousNode": "Slack6" - } - ], - "hints": [], - "executionTime": 207, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "subtype": "channel_join", - "user": "U01NE1E8FFU", - "text": "<@U01NE1E8FFU> has joined the channel", - "type": "message", - "ts": "1747344006.709799" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack18": [ - { - "startTime": 1747344007343, - "executionIndex": 17, - "source": [ - { - "previousNode": "Slack7" - } - ], - "hints": [], - "executionTime": 150, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "subtype": "channel_join", - "user": "U01NE1E8FFU", - "text": "<@U01NE1E8FFU> has joined the channel", - "type": "message", - "ts": "1747344006.709799" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack8": [ - { - "startTime": 1747344007493, - "executionIndex": 18, - "source": [ - { - "previousNode": "Slack18" - } - ], - "hints": [], - "executionTime": 195, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "member": "U01N08LEY9M" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack": [ - { - "startTime": 1747344007688, - "executionIndex": 19, - "source": [ - { - "previousNode": "Slack8" - } - ], - "hints": [], - "executionTime": 279, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "ok": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack14": [ - { - "startTime": 1747344007967, - "executionIndex": 20, - "source": [ - { - "previousNode": "Slack" - } - ], - "hints": [], - "executionTime": 439, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "ok": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Slack1": [ - { - "startTime": 1747344008406, - "executionIndex": 21, - "source": [ - { - "previousNode": "Slack14" - } - ], - "hints": [], - "executionTime": 283, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "ok": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Slack1" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:02.706Z", - "stoppedAt": "2025-05-15T21:20:08.689Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/37-snapshot.json b/test-workflows/snapshots/37-snapshot.json deleted file mode 100644 index 6e62adb6097..00000000000 --- a/test-workflows/snapshots/37-snapshot.json +++ /dev/null @@ -1,1205 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747344003419, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gitlab": [ - { - "startTime": 1747344003419, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 610, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 24497029, - "description": { - "object": true - }, - "name": "nodemationQA", - "name_with_namespace": "nodeqa / nodemationQA", - "path": "nodemationqa", - "path_with_namespace": "nodeqa/nodemationqa", - "created_at": "2021-02-18T08:25:21.075Z", - "default_branch": "master", - "tag_list": [ - "json array" - ], - "ssh_url_to_repo": "git@gitlab.com:nodeqa/nodemationqa.git", - "http_url_to_repo": "https://gitlab.com/nodeqa/nodemationqa.git", - "web_url": "https://gitlab.com/nodeqa/nodemationqa", - "readme_url": "https://gitlab.com/nodeqa/nodemationqa/-/blob/master/README.md", - "forks_count": 0, - "avatar_url": { - "object": true - }, - "star_count": 0, - "last_activity_at": "2025-05-15T21:11:56.291Z", - "namespace": { - "object": true - }, - "container_registry_image_prefix": "registry.gitlab.com/nodeqa/nodemationqa", - "_links": { - "object": true - }, - "marked_for_deletion_at": { - "object": true - }, - "marked_for_deletion_on": { - "object": true - }, - "packages_enabled": true, - "empty_repo": false, - "archived": false, - "visibility": "private", - "resolve_outdated_diff_discussions": false, - "container_expiration_policy": { - "object": true - }, - "repository_object_format": "sha1", - "issues_enabled": true, - "merge_requests_enabled": true, - "wiki_enabled": true, - "jobs_enabled": true, - "snippets_enabled": true, - "container_registry_enabled": true, - "service_desk_enabled": true, - "service_desk_address": "contact-project+nodeqa-nodemationqa-24497029-issue-@incoming.gitlab.com", - "can_create_merge_request_in": true, - "issues_access_level": "enabled", - "repository_access_level": "enabled", - "merge_requests_access_level": "enabled", - "forking_access_level": "enabled", - "wiki_access_level": "enabled", - "builds_access_level": "enabled", - "snippets_access_level": "enabled", - "pages_access_level": "private", - "analytics_access_level": "enabled", - "container_registry_access_level": "enabled", - "security_and_compliance_access_level": "private", - "releases_access_level": "enabled", - "environments_access_level": "enabled", - "feature_flags_access_level": "enabled", - "infrastructure_access_level": "enabled", - "monitor_access_level": "enabled", - "model_experiments_access_level": "enabled", - "model_registry_access_level": "enabled", - "emails_disabled": false, - "emails_enabled": true, - "shared_runners_enabled": true, - "lfs_enabled": true, - "creator_id": 8226562, - "import_url": { - "object": true - }, - "import_type": { - "object": true - }, - "import_status": "none", - "import_error": { - "object": true - }, - "open_issues_count": 2632, - "description_html": "", - "updated_at": "2025-05-15T21:19:09.484Z", - "ci_default_git_depth": 50, - "ci_delete_pipelines_in_seconds": { - "object": true - }, - "ci_forward_deployment_enabled": true, - "ci_forward_deployment_rollback_allowed": true, - "ci_job_token_scope_enabled": false, - "ci_separated_caches": true, - "ci_allow_fork_pipelines_to_run_in_parent_project": true, - "ci_id_token_sub_claim_components": [ - "json array" - ], - "build_git_strategy": "fetch", - "keep_latest_artifact": true, - "restrict_user_defined_variables": false, - "ci_pipeline_variables_minimum_override_role": "developer", - "runner_token_expiration_interval": { - "object": true - }, - "group_runners_enabled": true, - "auto_cancel_pending_pipelines": "enabled", - "build_timeout": 3600, - "auto_devops_enabled": false, - "auto_devops_deploy_strategy": "continuous", - "ci_push_repository_for_job_token_allowed": false, - "ci_config_path": "", - "public_jobs": true, - "shared_with_groups": [ - "json array" - ], - "only_allow_merge_if_pipeline_succeeds": false, - "allow_merge_on_skipped_pipeline": { - "object": true - }, - "request_access_enabled": true, - "only_allow_merge_if_all_discussions_are_resolved": false, - "remove_source_branch_after_merge": true, - "printing_merge_request_link_enabled": true, - "merge_method": "merge", - "merge_request_title_regex": { - "object": true - }, - "squash_option": "default_off", - "enforce_auth_checks_on_uploads": true, - "suggestion_commit_message": { - "object": true - }, - "merge_commit_template": { - "object": true - }, - "squash_commit_template": { - "object": true - }, - "issue_branch_template": { - "object": true - }, - "warn_about_potentially_unwanted_characters": true, - "autoclose_referenced_issues": true, - "max_artifacts_size": { - "object": true - }, - "external_authorization_classification_label": "", - "requirements_enabled": false, - "requirements_access_level": "enabled", - "security_and_compliance_enabled": true, - "compliance_frameworks": [ - "json array" - ], - "permissions": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gitlab2": [ - { - "startTime": 1747344004029, - "executionIndex": 2, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 555, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 167427044, - "iid": 2633, - "project_id": 24497029, - "title": "Issue - Thu May 15 2025", - "description": "QA Test on Thu May 15 2025", - "state": "opened", - "created_at": "2025-05-15T21:20:04.389Z", - "updated_at": "2025-05-15T21:20:04.389Z", - "closed_at": { - "object": true - }, - "closed_by": { - "object": true - }, - "labels": [ - "json array" - ], - "milestone": { - "object": true - }, - "assignees": [ - "json array" - ], - "author": { - "object": true - }, - "type": "ISSUE", - "assignee": { - "object": true - }, - "user_notes_count": 0, - "merge_requests_count": 0, - "upvotes": 0, - "downvotes": 0, - "due_date": { - "object": true - }, - "confidential": false, - "discussion_locked": { - "object": true - }, - "issue_type": "issue", - "web_url": "https://gitlab.com/nodeqa/nodemationqa/-/issues/2633", - "time_stats": { - "object": true - }, - "task_completion_status": { - "object": true - }, - "blocking_issues_count": 0, - "has_tasks": true, - "task_status": "0 of 0 checklist items completed", - "_links": { - "object": true - }, - "references": { - "object": true - }, - "severity": "UNKNOWN", - "subscribed": true, - "moved_to_id": { - "object": true - }, - "imported": false, - "imported_from": "none", - "service_desk_reply_to": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gitlab7": [ - { - "startTime": 1747344004584, - "executionIndex": 3, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 909, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "Release1747344004587", - "tag_name": "Release-tag-test1747344004589", - "description": { - "object": true - }, - "created_at": "2025-05-15T21:20:05.363Z", - "released_at": "2025-05-15T21:20:05.363Z", - "upcoming_release": false, - "author": { - "object": true - }, - "commit": { - "object": true - }, - "commit_path": "/nodeqa/nodemationqa/-/commit/dd2f13c1cc94dfd37e0c3063841860c5d0ae7252", - "tag_path": "/nodeqa/nodemationqa/-/tags/Release-tag-test1747344004589", - "assets": { - "object": true - }, - "evidences": [ - "json array" - ], - "_links": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gitlab8": [ - { - "startTime": 1747344005493, - "executionIndex": 4, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 626, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 24497628, - "description": "Project created for gitlab node QA teting", - "name": "QATestProject", - "name_with_namespace": "n8n qa / QATestProject", - "path": "qatestproject", - "path_with_namespace": "n8nqa/qatestproject", - "created_at": "2021-02-18T08:40:49.130Z", - "default_branch": "main", - "tag_list": [ - "json array" - ], - "ssh_url_to_repo": "git@gitlab.com:n8nqa/qatestproject.git", - "http_url_to_repo": "https://gitlab.com/n8nqa/qatestproject.git", - "web_url": "https://gitlab.com/n8nqa/qatestproject", - "readme_url": { - "object": true - }, - "forks_count": 0, - "avatar_url": { - "object": true - }, - "star_count": 0, - "last_activity_at": "2023-04-30T00:20:13.620Z", - "namespace": { - "object": true - }, - "container_registry_image_prefix": "registry.gitlab.com/n8nqa/qatestproject", - "_links": { - "object": true - }, - "marked_for_deletion_at": { - "object": true - }, - "marked_for_deletion_on": { - "object": true - }, - "packages_enabled": true, - "empty_repo": true, - "archived": false, - "visibility": "private", - "owner": { - "object": true - }, - "resolve_outdated_diff_discussions": false, - "container_expiration_policy": { - "object": true - }, - "repository_object_format": "sha1", - "issues_enabled": true, - "merge_requests_enabled": true, - "wiki_enabled": true, - "jobs_enabled": true, - "snippets_enabled": true, - "container_registry_enabled": true, - "service_desk_enabled": true, - "service_desk_address": "contact-project+n8nqa-qatestproject-24497628-issue-@incoming.gitlab.com", - "can_create_merge_request_in": true, - "issues_access_level": "enabled", - "repository_access_level": "enabled", - "merge_requests_access_level": "enabled", - "forking_access_level": "enabled", - "wiki_access_level": "enabled", - "builds_access_level": "enabled", - "snippets_access_level": "enabled", - "pages_access_level": "private", - "analytics_access_level": "enabled", - "container_registry_access_level": "enabled", - "security_and_compliance_access_level": "private", - "releases_access_level": "enabled", - "environments_access_level": "enabled", - "feature_flags_access_level": "enabled", - "infrastructure_access_level": "enabled", - "monitor_access_level": "enabled", - "model_experiments_access_level": "enabled", - "model_registry_access_level": "enabled", - "emails_disabled": false, - "emails_enabled": true, - "shared_runners_enabled": true, - "lfs_enabled": true, - "creator_id": 8226562, - "import_url": { - "object": true - }, - "import_type": { - "object": true - }, - "import_status": "none", - "open_issues_count": 2, - "description_html": "

Project created for gitlab node QA teting

", - "updated_at": "2024-01-16T16:24:11.955Z", - "ci_default_git_depth": 50, - "ci_delete_pipelines_in_seconds": { - "object": true - }, - "ci_forward_deployment_enabled": true, - "ci_forward_deployment_rollback_allowed": true, - "ci_job_token_scope_enabled": false, - "ci_separated_caches": true, - "ci_allow_fork_pipelines_to_run_in_parent_project": true, - "ci_id_token_sub_claim_components": [ - "json array" - ], - "build_git_strategy": "fetch", - "keep_latest_artifact": true, - "restrict_user_defined_variables": false, - "ci_pipeline_variables_minimum_override_role": "developer", - "runner_token_expiration_interval": { - "object": true - }, - "group_runners_enabled": true, - "auto_cancel_pending_pipelines": "enabled", - "build_timeout": 3600, - "auto_devops_enabled": false, - "auto_devops_deploy_strategy": "continuous", - "ci_push_repository_for_job_token_allowed": false, - "runners_token": "GR1348941pyFzz2y953wFx1bxKt4A", - "ci_config_path": "", - "public_jobs": true, - "shared_with_groups": [ - "json array" - ], - "only_allow_merge_if_pipeline_succeeds": false, - "allow_merge_on_skipped_pipeline": { - "object": true - }, - "request_access_enabled": true, - "only_allow_merge_if_all_discussions_are_resolved": false, - "remove_source_branch_after_merge": true, - "printing_merge_request_link_enabled": true, - "merge_method": "merge", - "merge_request_title_regex": { - "object": true - }, - "squash_option": "default_off", - "enforce_auth_checks_on_uploads": true, - "suggestion_commit_message": { - "object": true - }, - "merge_commit_template": { - "object": true - }, - "squash_commit_template": { - "object": true - }, - "issue_branch_template": { - "object": true - }, - "warn_about_potentially_unwanted_characters": true, - "autoclose_referenced_issues": true, - "max_artifacts_size": { - "object": true - }, - "external_authorization_classification_label": "", - "requirements_enabled": false, - "requirements_access_level": "enabled", - "security_and_compliance_enabled": true, - "compliance_frameworks": [ - "json array" - ], - "permissions": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gitlab1": [ - { - "startTime": 1747344006119, - "executionIndex": 5, - "source": [ - { - "previousNode": "Gitlab" - } - ], - "hints": [], - "executionTime": 1674, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 167427044, - "iid": 2633, - "project_id": 24497029, - "title": "Issue - Thu May 15 2025", - "description": "QA Test on Thu May 15 2025", - "state": "opened", - "created_at": "2025-05-15T21:20:04.389Z", - "updated_at": "2025-05-15T21:20:04.389Z", - "closed_at": { - "object": true - }, - "closed_by": { - "object": true - }, - "labels": [ - "json array" - ], - "milestone": { - "object": true - }, - "assignees": [ - "json array" - ], - "author": { - "object": true - }, - "type": "ISSUE", - "assignee": { - "object": true - }, - "user_notes_count": 0, - "merge_requests_count": 0, - "upvotes": 0, - "downvotes": 0, - "due_date": { - "object": true - }, - "confidential": false, - "discussion_locked": { - "object": true - }, - "issue_type": "issue", - "web_url": "https://gitlab.com/nodeqa/nodemationqa/-/issues/2633", - "time_stats": { - "object": true - }, - "task_completion_status": { - "object": true - }, - "blocking_issues_count": 0, - "has_tasks": true, - "task_status": "0 of 0 checklist items completed", - "_links": { - "object": true - }, - "references": { - "object": true - }, - "severity": "UNKNOWN", - "moved_to_id": { - "object": true - }, - "imported": false, - "imported_from": "none", - "service_desk_reply_to": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gitlab3": [ - { - "startTime": 1747344007793, - "executionIndex": 6, - "source": [ - { - "previousNode": "Gitlab2" - } - ], - "hints": [], - "executionTime": 410, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 2507656340, - "type": { - "object": true - }, - "body": "Comment on issue - Thu May 15 2025 22:20:07 GMT+0100 (Irish Standard Time)", - "author": { - "object": true - }, - "created_at": "2025-05-15T21:20:08.100Z", - "updated_at": "2025-05-15T21:20:08.100Z", - "system": false, - "noteable_id": 167427044, - "noteable_type": "Issue", - "project_id": 24497029, - "resolvable": false, - "confidential": false, - "internal": false, - "imported": false, - "imported_from": "none", - "noteable_iid": 2633, - "commands_changes": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gitlab9": [ - { - "startTime": 1747344008203, - "executionIndex": 7, - "source": [ - { - "previousNode": "Gitlab7" - } - ], - "hints": [], - "executionTime": 618, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "Release1747344004587", - "tag_name": "Release-tag-test1747344004589", - "description": { - "object": true - }, - "created_at": "2025-05-15T21:20:05.363Z", - "released_at": "2025-05-15T21:20:05.363Z", - "upcoming_release": false, - "author": { - "object": true - }, - "commit": { - "object": true - }, - "commit_path": "/nodeqa/nodemationqa/-/commit/dd2f13c1cc94dfd37e0c3063841860c5d0ae7252", - "tag_path": "/nodeqa/nodemationqa/-/tags/Release-tag-test1747344004589", - "assets": { - "object": true - }, - "evidences": [ - "json array" - ], - "_links": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gitlab4": [ - { - "startTime": 1747344008821, - "executionIndex": 8, - "source": [ - { - "previousNode": "Gitlab3" - } - ], - "hints": [], - "executionTime": 613, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 167427044, - "iid": 2633, - "project_id": 24497029, - "title": "Issue - Thu May 15 2025", - "description": "Edited QA Test on Thu May 15 2025", - "state": "opened", - "created_at": "2025-05-15T21:20:04.389Z", - "updated_at": "2025-05-15T21:20:09.169Z", - "closed_at": { - "object": true - }, - "closed_by": { - "object": true - }, - "labels": [ - "json array" - ], - "milestone": { - "object": true - }, - "assignees": [ - "json array" - ], - "author": { - "object": true - }, - "type": "ISSUE", - "assignee": { - "object": true - }, - "user_notes_count": 1, - "merge_requests_count": 0, - "upvotes": 0, - "downvotes": 0, - "due_date": { - "object": true - }, - "confidential": false, - "discussion_locked": { - "object": true - }, - "issue_type": "issue", - "web_url": "https://gitlab.com/nodeqa/nodemationqa/-/issues/2633", - "time_stats": { - "object": true - }, - "task_completion_status": { - "object": true - }, - "blocking_issues_count": 0, - "has_tasks": true, - "task_status": "0 of 0 checklist items completed", - "_links": { - "object": true - }, - "references": { - "object": true - }, - "severity": "UNKNOWN", - "subscribed": true, - "moved_to_id": { - "object": true - }, - "imported": false, - "imported_from": "none", - "service_desk_reply_to": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gitlab10": [ - { - "startTime": 1747344009434, - "executionIndex": 9, - "source": [ - { - "previousNode": "Gitlab9" - } - ], - "hints": [], - "executionTime": 662, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "Release1747344004587", - "tag_name": "Release-tag-test1747344004589", - "description": { - "object": true - }, - "created_at": "2025-05-15T21:20:05.363Z", - "released_at": "2025-05-15T21:20:05.363Z", - "upcoming_release": false, - "author": { - "object": true - }, - "commit": { - "object": true - }, - "commit_path": "/nodeqa/nodemationqa/-/commit/dd2f13c1cc94dfd37e0c3063841860c5d0ae7252", - "tag_path": "/nodeqa/nodemationqa/-/tags/Release-tag-test1747344004589", - "assets": { - "object": true - }, - "evidences": [ - "json array" - ], - "_links": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gitlab5": [ - { - "startTime": 1747344010096, - "executionIndex": 10, - "source": [ - { - "previousNode": "Gitlab4" - } - ], - "hints": [], - "executionTime": 581, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 167427044, - "iid": 2633, - "project_id": 24497029, - "title": "Issue - Thu May 15 2025", - "description": "Edited QA Test on Thu May 15 2025", - "state": "opened", - "created_at": "2025-05-15T21:20:04.389Z", - "updated_at": "2025-05-15T21:20:09.169Z", - "closed_at": { - "object": true - }, - "closed_by": { - "object": true - }, - "labels": [ - "json array" - ], - "milestone": { - "object": true - }, - "assignees": [ - "json array" - ], - "author": { - "object": true - }, - "type": "ISSUE", - "assignee": { - "object": true - }, - "user_notes_count": 1, - "merge_requests_count": 0, - "upvotes": 0, - "downvotes": 0, - "due_date": { - "object": true - }, - "confidential": false, - "discussion_locked": { - "object": true - }, - "issue_type": "issue", - "web_url": "https://gitlab.com/nodeqa/nodemationqa/-/issues/2633", - "time_stats": { - "object": true - }, - "task_completion_status": { - "object": true - }, - "blocking_issues_count": 0, - "has_tasks": true, - "task_status": "0 of 0 checklist items completed", - "_links": { - "object": true - }, - "references": { - "object": true - }, - "severity": "UNKNOWN", - "subscribed": true, - "moved_to_id": { - "object": true - }, - "imported": false, - "imported_from": "none", - "service_desk_reply_to": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gitlab11": [ - { - "startTime": 1747344010677, - "executionIndex": 11, - "source": [ - { - "previousNode": "Gitlab10" - } - ], - "hints": [], - "executionTime": 497, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "UpdatedRelease1747344004587", - "tag_name": "Release-tag-test1747344004589", - "description": { - "object": true - }, - "created_at": "2025-05-15T21:20:05.363Z", - "released_at": "2025-05-15T21:20:05.363Z", - "upcoming_release": false, - "author": { - "object": true - }, - "commit": { - "object": true - }, - "commit_path": "/nodeqa/nodemationqa/-/commit/dd2f13c1cc94dfd37e0c3063841860c5d0ae7252", - "tag_path": "/nodeqa/nodemationqa/-/tags/Release-tag-test1747344004589", - "assets": { - "object": true - }, - "evidences": [ - "json array" - ], - "_links": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gitlab6": [ - { - "startTime": 1747344011174, - "executionIndex": 12, - "source": [ - { - "previousNode": "Gitlab5" - } - ], - "hints": [], - "executionTime": 505, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 167427044, - "iid": 2633, - "project_id": 24497029, - "title": "Issue - Thu May 15 2025", - "description": "Edited QA Test on Thu May 15 2025", - "state": "opened", - "created_at": "2025-05-15T21:20:04.389Z", - "updated_at": "2025-05-15T21:20:09.169Z", - "closed_at": { - "object": true - }, - "closed_by": { - "object": true - }, - "labels": [ - "json array" - ], - "milestone": { - "object": true - }, - "assignees": [ - "json array" - ], - "author": { - "object": true - }, - "type": "ISSUE", - "assignee": { - "object": true - }, - "user_notes_count": 1, - "merge_requests_count": 0, - "upvotes": 0, - "downvotes": 0, - "due_date": { - "object": true - }, - "confidential": false, - "discussion_locked": { - "object": true - }, - "issue_type": "issue", - "web_url": "https://gitlab.com/nodeqa/nodemationqa/-/issues/2633", - "time_stats": { - "object": true - }, - "task_completion_status": { - "object": true - }, - "blocking_issues_count": 0, - "has_tasks": true, - "task_status": "0 of 0 checklist items completed", - "_links": { - "object": true - }, - "references": { - "object": true - }, - "severity": "UNKNOWN", - "subscribed": true, - "moved_to_id": { - "object": true - }, - "imported": false, - "imported_from": "none", - "service_desk_reply_to": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gitlab12": [ - { - "startTime": 1747344011679, - "executionIndex": 13, - "source": [ - { - "previousNode": "Gitlab11" - } - ], - "hints": [], - "executionTime": 479, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "UpdatedRelease1747344004587", - "tag_name": "Release-tag-test1747344004589", - "description": { - "object": true - }, - "created_at": "2025-05-15T21:20:05.363Z", - "released_at": "2025-05-15T21:20:05.363Z", - "upcoming_release": false, - "author": { - "object": true - }, - "commit": { - "object": true - }, - "commit_path": "/nodeqa/nodemationqa/-/commit/dd2f13c1cc94dfd37e0c3063841860c5d0ae7252", - "tag_path": "/nodeqa/nodemationqa/-/tags/Release-tag-test1747344004589", - "assets": { - "object": true - }, - "evidences": [ - "json array" - ], - "_links": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Gitlab12" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:03.418Z", - "stoppedAt": "2025-05-15T21:20:12.158Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/38-snapshot.json b/test-workflows/snapshots/38-snapshot.json deleted file mode 100644 index 21ed8f5542b..00000000000 --- a/test-workflows/snapshots/38-snapshot.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1676891387033, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Medium": [ - { - "startTime": 1676891387034, - "executionTime": 642, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "537ba1e07580", - "title": "Medium node TestQA Draft Mon, 20 Feb 2023 11:09:47 GMT", - "authorId": "14cdac018d33eefeb5cc1a5acbb70b7a7baea3b748f4a7183f782fb3dcac8b393", - "url": "https://medium.com/@nodeqa/537ba1e07580", - "canonicalUrl": "", - "publishStatus": "draft", - "license": "", - "licenseUrl": "https://policy.medium.com/medium-terms-of-service-9db0094a1e0f", - "tags": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Medium1": [ - { - "startTime": 1676891387677, - "executionTime": 430, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "f639e888aee4", - "name": "TestPublication[n8n]", - "description": "test", - "url": "https://medium.com/testpublication-n8n", - "imageUrl": "https://cdn-images-1.medium.com/fit/c/400/400/1*F027-8q7ncDC6CAC5c4ong.png" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Medium1" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-02-20T11:09:47.032Z", - "stoppedAt": "2023-02-20T11:09:48.107Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/40-snapshot.json b/test-workflows/snapshots/40-snapshot.json deleted file mode 100644 index b9dc786e392..00000000000 --- a/test-workflows/snapshots/40-snapshot.json +++ /dev/null @@ -1,620 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1678116858578, - "executionTime": 2, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gmail8": [ - { - "startTime": 1678116858580, - "executionTime": 896, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "186b78f2c87140e8", - "threadId": "186b78f2c87140e8", - "labelIds": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gmail4": [ - { - "startTime": 1678116859476, - "executionTime": 340, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "Label_226", - "name": "TestLabel1678116859477", - "messageListVisibility": "show", - "labelListVisibility": "labelShow" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gmail": [ - { - "startTime": 1678116859816, - "executionTime": 326, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "r30886123786721106", - "message": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gmail13": [ - { - "startTime": 1678116860142, - "executionTime": 890, - "source": [ - { - "previousNode": "Gmail8" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "186b78f2c87140e8", - "threadId": "186b78f2c87140e8", - "labelIds": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gmail5": [ - { - "startTime": 1678116861032, - "executionTime": 221, - "source": [ - { - "previousNode": "Gmail4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "CHAT", - "name": "CHAT", - "messageListVisibility": "hide", - "labelListVisibility": "labelHide", - "type": "system" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gmail1": [ - { - "startTime": 1678116861253, - "executionTime": 392, - "source": [ - { - "previousNode": "Gmail" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "r30886123786721106", - "threadId": "186b78f30f9d05d9", - "labelIds": [ - "json array" - ], - "sizeEstimate": 434, - "headers": { - "object": true - }, - "text": "Draft Test Body\n", - "textAsHtml": "

Draft Test Body

", - "subject": "Draft created at Mon, 06 Mar 2023 15:34:19 GMT", - "date": "2023-03-06T15:34:19.000Z", - "from": { - "object": true - }, - "messageId": "186b78f30f9d05d9", - "html": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gmail15": [ - { - "startTime": 1678116861645, - "executionTime": 437, - "source": [ - { - "previousNode": "Gmail13" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "186b78f2c87140e8", - "threadId": "186b78f2c87140e8", - "labelIds": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gmail7": [ - { - "startTime": 1678116862082, - "executionTime": 190, - "source": [ - { - "previousNode": "Gmail5" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "Label_226", - "name": "TestLabel1678116859477", - "messageListVisibility": "show", - "labelListVisibility": "labelShow", - "type": "user", - "messagesTotal": 0, - "messagesUnread": 0, - "threadsTotal": 0, - "threadsUnread": 0 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gmail2": [ - { - "startTime": 1678116862273, - "executionTime": 220, - "source": [ - { - "previousNode": "Gmail1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "r30886123786721106", - "threadId": "186b78f30f9d05d9", - "labelIds": [ - "json array" - ], - "sizeEstimate": 434, - "headers": { - "object": true - }, - "text": "Draft Test Body\n", - "textAsHtml": "

Draft Test Body

", - "subject": "Draft created at Mon, 06 Mar 2023 15:34:19 GMT", - "date": "2023-03-06T15:34:19.000Z", - "from": { - "object": true - }, - "messageId": "186b78f30f9d05d9", - "html": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gmail9": [ - { - "startTime": 1678116862493, - "executionTime": 320, - "source": [ - { - "previousNode": "Gmail15" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "186b78f30f9d05d9", - "threadId": "186b78f30f9d05d9", - "labelIds": [ - "json array" - ], - "sizeEstimate": 434, - "headers": { - "object": true - }, - "text": "Draft Test Body\n", - "textAsHtml": "

Draft Test Body

", - "subject": "Draft created at Mon, 06 Mar 2023 15:34:19 GMT", - "date": "2023-03-06T15:34:19.000Z", - "from": { - "object": true - }, - "messageId": "", - "html": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gmail16": [ - { - "startTime": 1678116862813, - "executionTime": 326, - "source": [ - { - "previousNode": "Gmail7" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gmail3": [ - { - "startTime": 1678116863140, - "executionTime": 423, - "source": [ - { - "previousNode": "Gmail2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gmail10": [ - { - "startTime": 1678116863563, - "executionTime": 160, - "source": [ - { - "previousNode": "Gmail9" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "186b78f2c87140e8", - "threadId": "186b78f2c87140e8", - "labelIds": [ - "json array" - ], - "sizeEstimate": 474, - "headers": { - "object": true - }, - "text": "Email Body Mon, 06 Mar 2023 15:34:18 GMT\n", - "textAsHtml": "

Email Body Mon, 06 Mar 2023 15:34:18 GMT

", - "subject": "Subject Mon, 06 Mar 2023 15:34:18 GMT", - "date": "2023-03-06T15:34:19.000Z", - "to": { - "object": true - }, - "from": { - "object": true - }, - "messageId": "", - "html": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Gmail12": [ - { - "startTime": 1678116863723, - "executionTime": 504, - "source": [ - { - "previousNode": "Gmail10" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "186b78f41bd42c16", - "threadId": "186b78f2c87140e8", - "labelIds": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.5 Second": [ - { - "startTime": 1678116864227, - "executionTime": 510, - "source": [ - { - "previousNode": "Gmail12" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "186b78f41bd42c16", - "threadId": "186b78f2c87140e8", - "labelIds": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Gmail11": [ - { - "startTime": 1678116864738, - "executionTime": 693, - "source": [ - { - "previousNode": "Sleep 0.5 Second" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.5 Second1": [ - { - "startTime": 1678116865431, - "executionTime": 504, - "source": [ - { - "previousNode": "Gmail11" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Gmail14": [ - { - "startTime": 1678116865935, - "executionTime": 465, - "source": [ - { - "previousNode": "Sleep 0.5 Second1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Gmail14" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-03-06T15:34:18.574Z", - "stoppedAt": "2023-03-06T15:34:26.401Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/41-snapshot.json b/test-workflows/snapshots/41-snapshot.json deleted file mode 100644 index 3b7c303de2e..00000000000 --- a/test-workflows/snapshots/41-snapshot.json +++ /dev/null @@ -1,299 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1678116858375, - "executionTime": 2, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Calendar1": [ - { - "startTime": 1678116858378, - "executionTime": 930, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "calendar#event", - "etag": "\"3356233718144000\"", - "id": "47hbcbv038ub5d4rvhu6adpl7c", - "status": "confirmed", - "htmlLink": "https://www.google.com/calendar/event?eid=NDdoYmNidjAzOHViNWQ0cnZodTZhZHBsN2Mgbm9kZThxYUBt", - "created": "2023-03-06T15:34:19.000Z", - "updated": "2023-03-06T15:34:19.072Z", - "description": "Test", - "creator": { - "object": true - }, - "organizer": { - "object": true - }, - "start": { - "object": true - }, - "end": { - "object": true - }, - "iCalUID": "47hbcbv038ub5d4rvhu6adpl7c@google.com", - "sequence": 0, - "reminders": { - "object": true - }, - "eventType": "default" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Calendar": [ - { - "startTime": 1678116859308, - "executionTime": 364, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "available": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Calendar3": [ - { - "startTime": 1678116859673, - "executionTime": 368, - "source": [ - { - "previousNode": "Google Calendar1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "calendar#event", - "etag": "\"3228659471956000\"", - "id": "svnpd5hm5nifk9sgl76vc5o0bk", - "status": "confirmed", - "htmlLink": "https://www.google.com/calendar/event?eid=c3ZucGQ1aG01bmlmazlzZ2w3NnZjNW8wYmsgbm9kZThxYUBt", - "created": "2021-02-26T08:55:33.000Z", - "updated": "2021-02-26T08:55:35.978Z", - "description": "Test", - "colorId": "7", - "creator": { - "object": true - }, - "organizer": { - "object": true - }, - "start": { - "object": true - }, - "end": { - "object": true - }, - "iCalUID": "svnpd5hm5nifk9sgl76vc5o0bk@google.com", - "sequence": 0, - "reminders": { - "object": true - }, - "eventType": "default" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Calendar2": [ - { - "startTime": 1678116860041, - "executionTime": 351, - "source": [ - { - "previousNode": "Google Calendar3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "calendar#event", - "etag": "\"3356233718144000\"", - "id": "47hbcbv038ub5d4rvhu6adpl7c", - "status": "confirmed", - "htmlLink": "https://www.google.com/calendar/event?eid=NDdoYmNidjAzOHViNWQ0cnZodTZhZHBsN2Mgbm9kZThxYUBt", - "created": "2023-03-06T15:34:19.000Z", - "updated": "2023-03-06T15:34:19.072Z", - "description": "Test", - "creator": { - "object": true - }, - "organizer": { - "object": true - }, - "start": { - "object": true - }, - "end": { - "object": true - }, - "iCalUID": "47hbcbv038ub5d4rvhu6adpl7c@google.com", - "sequence": 0, - "reminders": { - "object": true - }, - "eventType": "default" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Calendar4": [ - { - "startTime": 1678116860392, - "executionTime": 639, - "source": [ - { - "previousNode": "Google Calendar2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "calendar#event", - "etag": "\"3356233721642000\"", - "id": "47hbcbv038ub5d4rvhu6adpl7c", - "status": "confirmed", - "htmlLink": "https://www.google.com/calendar/event?eid=NDdoYmNidjAzOHViNWQ0cnZodTZhZHBsN2Mgbm9kZThxYUBt", - "created": "2023-03-06T15:34:19.000Z", - "updated": "2023-03-06T15:34:20.821Z", - "description": "Test", - "colorId": "7", - "creator": { - "object": true - }, - "organizer": { - "object": true - }, - "start": { - "object": true - }, - "end": { - "object": true - }, - "iCalUID": "47hbcbv038ub5d4rvhu6adpl7c@google.com", - "sequence": 0, - "reminders": { - "object": true - }, - "eventType": "default" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Calendar5": [ - { - "startTime": 1678116861031, - "executionTime": 509, - "source": [ - { - "previousNode": "Google Calendar4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Google Calendar5" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-03-06T15:34:18.372Z", - "stoppedAt": "2023-03-06T15:34:21.540Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/42-snapshot.json b/test-workflows/snapshots/42-snapshot.json deleted file mode 100644 index d474a37a674..00000000000 --- a/test-workflows/snapshots/42-snapshot.json +++ /dev/null @@ -1,214 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1678116858303, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Tasks": [ - { - "startTime": 1678116858304, - "executionTime": 713, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "tasks#task", - "id": "eVRMM3dMeGw5Qjd1a05yTg", - "etag": "\"LTEyMTUzNTM1OTI\"", - "title": "Do Testing", - "updated": "2023-03-06T15:34:19.000Z", - "selfLink": "https://www.googleapis.com/tasks/v1/lists/MDI3ODQzODIxOTE4MjA1ODY3NzM6MDow/tasks/eVRMM3dMeGw5Qjd1a05yTg", - "position": "00000000000000000000", - "status": "needsAction", - "links": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Tasks1": [ - { - "startTime": 1678116859017, - "executionTime": 306, - "source": [ - { - "previousNode": "Google Tasks" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "tasks#task", - "id": "eVRMM3dMeGw5Qjd1a05yTg", - "etag": "\"LTEyMTUzNTM4MDA\"", - "title": "Do Testing", - "updated": "2023-03-06T15:34:19.000Z", - "selfLink": "https://www.googleapis.com/tasks/v1/lists/MDI3ODQzODIxOTE4MjA1ODY3NzM6MDow/tasks/eVRMM3dMeGw5Qjd1a05yTg", - "position": "00000000000000000000", - "status": "completed", - "completed": "2023-03-06T15:34:19.000Z", - "links": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Tasks4": [ - { - "startTime": 1678116859324, - "executionTime": 193, - "source": [ - { - "previousNode": "Google Tasks1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "tasks#task", - "id": "eVRMM3dMeGw5Qjd1a05yTg", - "etag": "\"LTEyMTUzNTM4MDA\"", - "title": "Do Testing", - "updated": "2023-03-06T15:34:19.000Z", - "selfLink": "https://www.googleapis.com/tasks/v1/lists/MDI3ODQzODIxOTE4MjA1ODY3NzM6MDow/tasks/eVRMM3dMeGw5Qjd1a05yTg", - "position": "00000000000000000000", - "status": "completed", - "completed": "2023-03-06T15:34:19.000Z", - "links": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Tasks2": [ - { - "startTime": 1678116859518, - "executionTime": 168, - "source": [ - { - "previousNode": "Google Tasks4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "tasks#task", - "id": "eVRMM3dMeGw5Qjd1a05yTg", - "etag": "\"LTEyMTUzNTM4MDA\"", - "title": "Do Testing", - "updated": "2023-03-06T15:34:19.000Z", - "selfLink": "https://www.googleapis.com/tasks/v1/lists/MDI3ODQzODIxOTE4MjA1ODY3NzM6MDow/tasks/eVRMM3dMeGw5Qjd1a05yTg", - "position": "00000000000000000000", - "status": "completed", - "completed": "2023-03-06T15:34:19.000Z", - "links": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Tasks3": [ - { - "startTime": 1678116859686, - "executionTime": 213, - "source": [ - { - "previousNode": "Google Tasks2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Google Tasks3" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-03-06T15:34:18.302Z", - "stoppedAt": "2023-03-06T15:34:19.899Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/43-snapshot.json b/test-workflows/snapshots/43-snapshot.json deleted file mode 100644 index f2c99a64e5e..00000000000 --- a/test-workflows/snapshots/43-snapshot.json +++ /dev/null @@ -1,265 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1678116858417, - "executionTime": 2, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Contacts": [ - { - "startTime": 1678116858448, - "executionTime": 1054, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "resourceName": "people/c4926459161634783331", - "etag": "%EigBAgMEBQYHCAkKCwwNDg8QERITFBUWFxkfISIjJCUmJy40NTc9Pj9AGgQBAgUHIgxLNHlqR3dpUnBYST0=", - "metadata": { - "object": true - }, - "names": [ - "json array" - ], - "photos": [ - "json array" - ], - "organizations": [ - "json array" - ], - "memberships": [ - "json array" - ], - "contactId": "c4926459161634783331" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 3 seconds": [ - { - "startTime": 1678116859502, - "executionTime": 3025, - "source": [ - { - "previousNode": "Google Contacts" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "resourceName": "people/c4926459161634783331", - "etag": "%EigBAgMEBQYHCAkKCwwNDg8QERITFBUWFxkfISIjJCUmJy40NTc9Pj9AGgQBAgUHIgxLNHlqR3dpUnBYST0=", - "metadata": { - "object": true - }, - "names": [ - "json array" - ], - "photos": [ - "json array" - ], - "organizations": [ - "json array" - ], - "memberships": [ - "json array" - ], - "contactId": "c4926459161634783331" - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Google Contacts1": [ - { - "startTime": 1678116862527, - "executionTime": 782, - "source": [ - { - "previousNode": "Sleep 3 seconds" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "resourceName": "people/c4926459161634783331", - "etag": "%EgUBAi43PRoEAQIFByIMbUdBM3NCWUx0UFE9", - "names": [ - "json array" - ], - "contactId": "c4926459161634783331" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Contacts2": [ - { - "startTime": 1678116863309, - "executionTime": 191, - "source": [ - { - "previousNode": "Google Contacts1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "resourceName": "people/c2992217910493048592", - "etag": "%Eh4BAgMFBgcICQoLDA0ODxATFBUWGSEiJS41Nz0+P0AaBAECBQciDHZTVjkvK2I5YWZBPQ==", - "names": { - "object": true - }, - "photos": [ - "json array" - ], - "organizations": [ - "json array" - ], - "memberships": [ - "json array" - ], - "contactId": "c2992217910493048592" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Contacts3": [ - { - "startTime": 1678116863501, - "executionTime": 161, - "source": [ - { - "previousNode": "Google Contacts2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "resourceName": "people/c4926459161634783331", - "etag": "%Eh4BAgMFBgcICQoLDA0ODxATFBUWGSEiJS41Nz0+P0AaBAECBQciDG1HQTNzQllMdFBRPQ==", - "names": { - "object": true - }, - "photos": [ - "json array" - ], - "organizations": [ - "json array" - ], - "memberships": [ - "json array" - ], - "contactId": "c4926459161634783331" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Contacts4": [ - { - "startTime": 1678116863662, - "executionTime": 334, - "source": [ - { - "previousNode": "Google Contacts3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Google Contacts4" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-03-06T15:34:18.413Z", - "stoppedAt": "2023-03-06T15:34:23.997Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/44-snapshot.json b/test-workflows/snapshots/44-snapshot.json deleted file mode 100644 index 062b9536914..00000000000 --- a/test-workflows/snapshots/44-snapshot.json +++ /dev/null @@ -1,380 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747344003525, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive": [ - { - "startTime": 1747344003525, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 498, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "1gadLOxnVKQnXqTeIDoqgAkKvzJP6pHTr", - "name": "testFolder" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive3": [ - { - "startTime": 1747344004023, - "executionIndex": 2, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 1527, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "drive#file", - "id": "1CTnOyuVQ8YxOWcFDg2hU5KyCDGOMN4cP", - "name": "testFile", - "mimeType": "text/plain" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive10": [ - { - "startTime": 1747344005550, - "executionIndex": 3, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive1": [ - { - "startTime": 1747344005550, - "executionIndex": 4, - "source": [ - { - "previousNode": "Google Drive" - } - ], - "hints": [], - "executionTime": 533, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "drive#permission", - "id": "anyoneWithLink", - "type": "anyone", - "role": "reader", - "allowFileDiscovery": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive4": [ - { - "startTime": 1747344006083, - "executionIndex": 5, - "source": [ - { - "previousNode": "Google Drive3" - } - ], - "hints": [], - "executionTime": 604, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "drive#permission", - "id": "anyoneWithLink", - "type": "anyone", - "role": "reader", - "allowFileDiscovery": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive2": [ - { - "startTime": 1747344006687, - "executionIndex": 6, - "source": [ - { - "previousNode": "Google Drive1" - } - ], - "hints": [], - "executionTime": 497, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "fileId": "1gadLOxnVKQnXqTeIDoqgAkKvzJP6pHTr", - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive5": [ - { - "startTime": 1747344007184, - "executionIndex": 7, - "source": [ - { - "previousNode": "Google Drive4" - } - ], - "hints": [], - "executionTime": 493, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "1YNeDnFJOaq3mDazf8Ezm3V3K-aIKdmugke2m89Qf3dg", - "name": "oupa" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive6": [ - { - "startTime": 1747344007677, - "executionIndex": 8, - "source": [ - { - "previousNode": "Google Drive5" - } - ], - "hints": [], - "executionTime": 971, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "1YNeDnFJOaq3mDazf8Ezm3V3K-aIKdmugke2m89Qf3dg", - "name": "oupa" - }, - "binary": { - "data": { - "mimeType": "text/plain", - "fileType": "text", - "fileExtension": "txt", - "data": "VGVzdCBGaWxlIENvbnRlbnQ=", - "fileName": "testFile", - "fileSize": "17 B" - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive7": [ - { - "startTime": 1747344008648, - "executionIndex": 9, - "source": [ - { - "previousNode": "Google Drive6" - } - ], - "hints": [], - "executionTime": 830, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "drive#file", - "id": "1GEYV0Db2ABpygxCcKuAtDA35cgtrz4EQ", - "name": "testFile", - "mimeType": "text/plain" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive8": [ - { - "startTime": 1747344009479, - "executionIndex": 10, - "source": [ - { - "previousNode": "Google Drive7" - } - ], - "hints": [], - "executionTime": 420, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "fileId": "1CTnOyuVQ8YxOWcFDg2hU5KyCDGOMN4cP", - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Drive9": [ - { - "startTime": 1747344009899, - "executionIndex": 11, - "source": [ - { - "previousNode": "Google Drive8" - } - ], - "hints": [], - "executionTime": 516, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "fileId": "1GEYV0Db2ABpygxCcKuAtDA35cgtrz4EQ", - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Google Drive9" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:03.524Z", - "stoppedAt": "2025-05-15T21:20:10.415Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/45-snapshot.json b/test-workflows/snapshots/45-snapshot.json deleted file mode 100644 index ac593ed2b3e..00000000000 --- a/test-workflows/snapshots/45-snapshot.json +++ /dev/null @@ -1,427 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1678116858649, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Sheets": [ - { - "startTime": 1678116858650, - "executionTime": 2218, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "spreadsheetId": "13KroPsxIAWmV8Q73df1-5OhI0aAG64Ch74waTZqUYhU", - "properties": { - "object": true - }, - "sheets": [ - "json array" - ], - "spreadsheetUrl": "https://docs.google.com/spreadsheets/d/13KroPsxIAWmV8Q73df1-5OhI0aAG64Ch74waTZqUYhU/edit" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Function": [ - { - "startTime": 1678116860868, - "executionTime": 13, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 861, - "name": "test1" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": 61, - "name": "test2" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Sheets7": [ - { - "startTime": 1678116860881, - "executionTime": 1007, - "source": [ - { - "previousNode": "Google Sheets" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "spreadsheetId": "13KroPsxIAWmV8Q73df1-5OhI0aAG64Ch74waTZqUYhU", - "sheetId": 826802864, - "title": "Sheet2", - "index": 1, - "sheetType": "GRID", - "gridProperties": { - "object": true - }, - "tabColor": { - "object": true - }, - "tabColorStyle": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Sheets1": [ - { - "startTime": 1678116861889, - "executionTime": 1273, - "source": [ - { - "previousNode": "Function" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 861, - "name": "test1" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": 61, - "name": "test2" - }, - "pairedItem": { - "item": 1 - } - } - ] - ] - } - } - ], - "Google Sheets8": [ - { - "startTime": 1678116863162, - "executionTime": 577, - "source": [ - { - "previousNode": "Google Sheets7" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "spreadsheetId": "13KroPsxIAWmV8Q73df1-5OhI0aAG64Ch74waTZqUYhU" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Sheets3": [ - { - "startTime": 1678116863740, - "executionTime": 336, - "source": [ - { - "previousNode": "Google Sheets1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 861, - "name": "test1" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": 61, - "name": "test2" - }, - "pairedItem": { - "item": 1 - } - } - ] - ] - } - } - ], - "Google Sheets4": [ - { - "startTime": 1678116864076, - "executionTime": 246, - "source": [ - { - "previousNode": "Google Sheets3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 861, - "name": "test1" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": 861, - "name": "test1" - }, - "pairedItem": { - "item": 1 - } - } - ] - ] - } - } - ], - "Set1": [ - { - "startTime": 1678116864322, - "executionTime": 2, - "source": [ - { - "previousNode": "Google Sheets4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 861, - "name": "Updated test1" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": 61, - "name": "Updated test2" - }, - "pairedItem": { - "item": 1 - } - } - ] - ] - } - } - ], - "Google Sheets2": [ - { - "startTime": 1678116864325, - "executionTime": 1044, - "source": [ - { - "previousNode": "Set1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 861, - "name": "Updated test1" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": 61, - "name": "Updated test2" - }, - "pairedItem": { - "item": 1 - } - } - ] - ] - } - } - ], - "Google Sheets6": [ - { - "startTime": 1678116865369, - "executionTime": 510, - "source": [ - { - "previousNode": "Google Sheets2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 861, - "name": "Updated test1" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": 61, - "name": "Updated test2" - }, - "pairedItem": { - "item": 1 - } - } - ] - ] - } - } - ], - "Google Sheets5": [ - { - "startTime": 1678116865879, - "executionTime": 413, - "source": [ - { - "previousNode": "Google Sheets6" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 861, - "name": "Updated test1" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": 61, - "name": "Updated test2" - }, - "pairedItem": { - "item": 1 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Google Sheets5" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-03-06T15:34:18.647Z", - "stoppedAt": "2023-03-06T15:34:26.292Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/46-snapshot.json b/test-workflows/snapshots/46-snapshot.json deleted file mode 100644 index 9655ccd0e9c..00000000000 --- a/test-workflows/snapshots/46-snapshot.json +++ /dev/null @@ -1,731 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1678116858527, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Books": [ - { - "startTime": 1678116858528, - "executionTime": 1159, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "books#volume", - "id": "tvfyz-4JILwC", - "etag": "o0PPfLNFxNc", - "selfLink": "https://www.googleapis.com/books/v1/volumes/tvfyz-4JILwC", - "volumeInfo": { - "object": true - }, - "saleInfo": { - "object": true - }, - "accessInfo": { - "object": true - }, - "searchInfo": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "kind": "books#volume", - "id": "_CAdswEACAAJ", - "etag": "Q7ewsaDZHyY", - "selfLink": "https://www.googleapis.com/books/v1/volumes/_CAdswEACAAJ", - "volumeInfo": { - "object": true - }, - "saleInfo": { - "object": true - }, - "accessInfo": { - "object": true - }, - "searchInfo": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Books2": [ - { - "startTime": 1678116859687, - "executionTime": 328, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "books#bookshelf", - "id": 7, - "title": "My Google eBooks", - "access": "PRIVATE", - "updated": "2023-03-06T15:34:19.000Z", - "created": "2023-03-06T15:34:19.000Z", - "volumeCount": 0, - "volumesLastUpdated": "2023-03-06T15:34:19.000Z" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "kind": "books#bookshelf", - "id": 1, - "title": "Purchased", - "access": "PRIVATE", - "updated": "2023-03-06T15:34:19.000Z", - "created": "2023-03-06T15:34:19.000Z", - "volumeCount": 0, - "volumesLastUpdated": "2023-03-06T15:34:19.000Z" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "kind": "books#bookshelf", - "id": 5, - "title": "Reviewed", - "access": "PUBLIC", - "updated": "2023-03-06T15:34:19.000Z", - "created": "2023-03-06T15:34:19.000Z", - "volumeCount": 0, - "volumesLastUpdated": "2023-03-06T15:34:19.000Z" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "kind": "books#bookshelf", - "id": 6, - "title": "Recently viewed", - "access": "PRIVATE", - "updated": "2023-03-06T15:34:19.000Z", - "created": "2023-03-06T15:34:19.000Z", - "volumeCount": 0, - "volumesLastUpdated": "2023-03-06T15:34:19.000Z" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "kind": "books#bookshelf", - "id": 9, - "title": "Browsing history", - "access": "PRIVATE", - "updated": "2023-03-06T15:34:19.000Z", - "created": "2023-03-06T15:34:19.000Z", - "volumeCount": 0, - "volumesLastUpdated": "2023-03-06T15:34:19.000Z" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "kind": "books#bookshelf", - "id": 0, - "title": "Favorites", - "access": "PUBLIC", - "updated": "2023-03-06T15:34:19.000Z", - "created": "2023-03-06T15:34:19.000Z", - "volumeCount": 0, - "volumesLastUpdated": "2023-03-06T15:34:19.000Z" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "kind": "books#bookshelf", - "id": 3, - "title": "Reading now", - "access": "PUBLIC", - "updated": "2023-03-06T15:34:19.000Z", - "created": "2023-03-06T15:34:19.000Z", - "volumeCount": 0, - "volumesLastUpdated": "2023-03-06T15:34:19.000Z" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "kind": "books#bookshelf", - "id": 2, - "title": "To read", - "access": "PUBLIC", - "updated": "2023-03-06T15:34:19.000Z", - "created": "2023-03-06T15:34:19.000Z", - "volumeCount": 0, - "volumesLastUpdated": "2023-03-06T15:34:19.000Z" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "kind": "books#bookshelf", - "id": 4, - "title": "Have read", - "access": "PUBLIC", - "updated": "2023-03-06T15:34:19.000Z", - "created": "2023-03-06T15:34:19.000Z", - "volumeCount": 0, - "volumesLastUpdated": "2023-03-06T15:34:19.000Z" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "kind": "books#bookshelf", - "id": 8, - "title": "Books for you", - "access": "PRIVATE", - "updated": "2023-03-06T15:34:19.000Z", - "created": "2023-03-06T15:34:19.000Z", - "volumeCount": 0, - "volumesLastUpdated": "2023-03-06T15:34:19.000Z" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "kind": "books#bookshelf", - "id": 1001, - "title": "FixedBookShelf", - "description": "This a bookshelf create for the test workflows", - "access": "PRIVATE", - "updated": "2023-03-06T11:56:15.625Z", - "created": "2023-03-06T11:56:15.625Z", - "volumeCount": 0, - "volumesLastUpdated": "2023-03-06T11:56:15.622Z" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Google Books1": [ - { - "startTime": 1678116860015, - "executionTime": 818, - "source": [ - { - "previousNode": "Google Books" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "books#volume", - "id": "tvfyz-4JILwC", - "etag": "6O9J2CN53Ew", - "selfLink": "https://www.googleapis.com/books/v1/volumes/tvfyz-4JILwC", - "volumeInfo": { - "object": true - }, - "userInfo": { - "object": true - }, - "saleInfo": { - "object": true - }, - "accessInfo": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "kind": "books#volume", - "id": "_CAdswEACAAJ", - "etag": "jAT797c77bA", - "selfLink": "https://www.googleapis.com/books/v1/volumes/_CAdswEACAAJ", - "volumeInfo": { - "object": true - }, - "userInfo": { - "object": true - }, - "saleInfo": { - "object": true - }, - "accessInfo": { - "object": true - } - }, - "pairedItem": { - "item": 1 - } - } - ] - ] - } - } - ], - "Google Books3": [ - { - "startTime": 1678116860834, - "executionTime": 3343, - "source": [ - { - "previousNode": "Google Books2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "books#bookshelf", - "id": 1001, - "title": "FixedBookShelf", - "description": "This a bookshelf create for the test workflows", - "access": "PRIVATE", - "updated": "2023-03-06T11:56:15.625Z", - "created": "2023-03-06T11:56:15.625Z", - "volumeCount": 0, - "volumesLastUpdated": "2023-03-06T11:56:15.622Z" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "kind": "books#bookshelf", - "id": 1001, - "title": "FixedBookShelf", - "description": "This a bookshelf create for the test workflows", - "access": "PRIVATE", - "updated": "2023-03-06T11:56:15.625Z", - "created": "2023-03-06T11:56:15.625Z", - "volumeCount": 0, - "volumesLastUpdated": "2023-03-06T11:56:15.622Z" - }, - "pairedItem": { - "item": 1 - } - }, - { - "json": { - "kind": "books#bookshelf", - "id": 1001, - "title": "FixedBookShelf", - "description": "This a bookshelf create for the test workflows", - "access": "PRIVATE", - "updated": "2023-03-06T11:56:15.625Z", - "created": "2023-03-06T11:56:15.625Z", - "volumeCount": 0, - "volumesLastUpdated": "2023-03-06T11:56:15.622Z" - }, - "pairedItem": { - "item": 2 - } - }, - { - "json": { - "kind": "books#bookshelf", - "id": 1001, - "title": "FixedBookShelf", - "description": "This a bookshelf create for the test workflows", - "access": "PRIVATE", - "updated": "2023-03-06T11:56:15.625Z", - "created": "2023-03-06T11:56:15.625Z", - "volumeCount": 0, - "volumesLastUpdated": "2023-03-06T11:56:15.622Z" - }, - "pairedItem": { - "item": 3 - } - }, - { - "json": { - "kind": "books#bookshelf", - "id": 1001, - "title": "FixedBookShelf", - "description": "This a bookshelf create for the test workflows", - "access": "PRIVATE", - "updated": "2023-03-06T11:56:15.625Z", - "created": "2023-03-06T11:56:15.625Z", - "volumeCount": 0, - "volumesLastUpdated": "2023-03-06T11:56:15.622Z" - }, - "pairedItem": { - "item": 4 - } - }, - { - "json": { - "kind": "books#bookshelf", - "id": 1001, - "title": "FixedBookShelf", - "description": "This a bookshelf create for the test workflows", - "access": "PRIVATE", - "updated": "2023-03-06T11:56:15.625Z", - "created": "2023-03-06T11:56:15.625Z", - "volumeCount": 0, - "volumesLastUpdated": "2023-03-06T11:56:15.622Z" - }, - "pairedItem": { - "item": 5 - } - }, - { - "json": { - "kind": "books#bookshelf", - "id": 1001, - "title": "FixedBookShelf", - "description": "This a bookshelf create for the test workflows", - "access": "PRIVATE", - "updated": "2023-03-06T11:56:15.625Z", - "created": "2023-03-06T11:56:15.625Z", - "volumeCount": 0, - "volumesLastUpdated": "2023-03-06T11:56:15.622Z" - }, - "pairedItem": { - "item": 6 - } - }, - { - "json": { - "kind": "books#bookshelf", - "id": 1001, - "title": "FixedBookShelf", - "description": "This a bookshelf create for the test workflows", - "access": "PRIVATE", - "updated": "2023-03-06T11:56:15.625Z", - "created": "2023-03-06T11:56:15.625Z", - "volumeCount": 0, - "volumesLastUpdated": "2023-03-06T11:56:15.622Z" - }, - "pairedItem": { - "item": 7 - } - }, - { - "json": { - "kind": "books#bookshelf", - "id": 1001, - "title": "FixedBookShelf", - "description": "This a bookshelf create for the test workflows", - "access": "PRIVATE", - "updated": "2023-03-06T11:56:15.625Z", - "created": "2023-03-06T11:56:15.625Z", - "volumeCount": 0, - "volumesLastUpdated": "2023-03-06T11:56:15.622Z" - }, - "pairedItem": { - "item": 8 - } - }, - { - "json": { - "kind": "books#bookshelf", - "id": 1001, - "title": "FixedBookShelf", - "description": "This a bookshelf create for the test workflows", - "access": "PRIVATE", - "updated": "2023-03-06T11:56:15.625Z", - "created": "2023-03-06T11:56:15.625Z", - "volumeCount": 0, - "volumesLastUpdated": "2023-03-06T11:56:15.622Z" - }, - "pairedItem": { - "item": 9 - } - }, - { - "json": { - "kind": "books#bookshelf", - "id": 1001, - "title": "FixedBookShelf", - "description": "This a bookshelf create for the test workflows", - "access": "PRIVATE", - "updated": "2023-03-06T11:56:15.625Z", - "created": "2023-03-06T11:56:15.625Z", - "volumeCount": 0, - "volumesLastUpdated": "2023-03-06T11:56:15.622Z" - }, - "pairedItem": { - "item": 10 - } - } - ] - ] - } - } - ], - "Google Books4": [ - { - "startTime": 1678116864177, - "executionTime": 615, - "source": [ - { - "previousNode": "Google Books1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - }, - { - "json": {}, - "pairedItem": { - "item": 1 - } - } - ] - ] - } - } - ], - "Google Books5": [ - { - "startTime": 1678116864792, - "executionTime": 565, - "source": [ - { - "previousNode": "Google Books4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - }, - { - "json": {}, - "pairedItem": { - "item": 1 - } - } - ] - ] - } - } - ], - "Google Books6": [ - { - "startTime": 1678116865358, - "executionTime": 602, - "source": [ - { - "previousNode": "Google Books5" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "books#volume", - "id": "_CAdswEACAAJ", - "etag": "9WPBLHtCNPI", - "selfLink": "https://www.googleapis.com/books/v1/volumes/_CAdswEACAAJ", - "volumeInfo": { - "object": true - }, - "userInfo": { - "object": true - }, - "saleInfo": { - "object": true - }, - "accessInfo": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "kind": "books#volume", - "id": "_CAdswEACAAJ", - "etag": "QEA8HzqsC+4", - "selfLink": "https://www.googleapis.com/books/v1/volumes/_CAdswEACAAJ", - "volumeInfo": { - "object": true - }, - "userInfo": { - "object": true - }, - "saleInfo": { - "object": true - }, - "accessInfo": { - "object": true - } - }, - "pairedItem": { - "item": 1 - } - } - ] - ] - } - } - ], - "Google Books7": [ - { - "startTime": 1678116865961, - "executionTime": 668, - "source": [ - { - "previousNode": "Google Books6" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - }, - { - "json": {}, - "pairedItem": { - "item": 1 - } - } - ] - ] - } - } - ], - "Google Books8": [ - { - "startTime": 1678116866629, - "executionTime": 562, - "source": [ - { - "previousNode": "Google Books7" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - }, - { - "json": {}, - "pairedItem": { - "item": 1 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Google Books8" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-03-06T15:34:18.524Z", - "stoppedAt": "2023-03-06T15:34:27.191Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/48-snapshot.json b/test-workflows/snapshots/48-snapshot.json deleted file mode 100644 index c4f51c5dedc..00000000000 --- a/test-workflows/snapshots/48-snapshot.json +++ /dev/null @@ -1,1071 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747344004021, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Asana2": [ - { - "startTime": 1747344004021, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 686, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "gid": "1210267332379092", - "projects": [ - "json array" - ], - "memberships": [ - "json array" - ], - "resource_type": "task", - "created_at": "2025-05-15T21:20:04.296Z", - "modified_at": "2025-05-15T21:20:04.486Z", - "name": "TaskTest", - "notes": "", - "workspace": { - "object": true - }, - "start_at": { - "object": true - }, - "start_on": { - "object": true - }, - "resource_subtype": "default_task", - "due_at": { - "object": true - }, - "due_on": { - "object": true - }, - "completed_at": { - "object": true - }, - "assignee_status": "inbox", - "completed": false, - "actual_time_minutes": 0, - "num_hearts": 0, - "num_likes": 0, - "tags": [ - "json array" - ], - "assignee_section": { - "object": true - }, - "hearted": false, - "liked": false, - "hearts": [ - "json array" - ], - "likes": [ - "json array" - ], - "permalink_url": "https://app.asana.com/1/1177253494675264/project/1199961131280920/task/1210267332379092", - "assignee": { - "object": true - }, - "parent": { - "object": true - }, - "followers": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Asana14": [ - { - "startTime": 1747344004707, - "executionIndex": 2, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 371, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "gid": "1199961026001666", - "email": "nodeqa@n8n.io", - "name": "nodeqa", - "photo": { - "object": true - }, - "resource_type": "user", - "workspaces": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Asana": [ - { - "startTime": 1747344005078, - "executionIndex": 3, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 193, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "gid": "1199961131378839", - "name": "QAtest", - "resource_type": "project" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Asana3": [ - { - "startTime": 1747344005271, - "executionIndex": 4, - "source": [ - { - "previousNode": "Asana2" - } - ], - "hints": [], - "executionTime": 473, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "gid": "1210267332379092", - "projects": [ - "json array" - ], - "memberships": [ - "json array" - ], - "resource_type": "task", - "created_at": "2025-05-15T21:20:04.296Z", - "modified_at": "2025-05-15T21:20:05.610Z", - "name": "UpdatedTestTask", - "notes": "", - "workspace": { - "object": true - }, - "start_at": { - "object": true - }, - "start_on": { - "object": true - }, - "resource_subtype": "default_task", - "due_at": { - "object": true - }, - "due_on": { - "object": true - }, - "completed_at": { - "object": true - }, - "assignee_status": "inbox", - "completed": false, - "actual_time_minutes": 0, - "num_hearts": 0, - "num_likes": 0, - "tags": [ - "json array" - ], - "hearted": false, - "liked": false, - "hearts": [ - "json array" - ], - "likes": [ - "json array" - ], - "assignee_section": { - "object": true - }, - "permalink_url": "https://app.asana.com/1/1177253494675264/project/1199961131280920/task/1210267332379092", - "assignee": { - "object": true - }, - "parent": { - "object": true - }, - "followers": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Asana15": [ - { - "startTime": 1747344005744, - "executionIndex": 5, - "source": [ - { - "previousNode": "Asana14" - } - ], - "hints": [], - "executionTime": 187, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "gid": "1202187737680529", - "name": "Adriana Toader", - "resource_type": "user" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "gid": "1202890883228546", - "name": "Ardit Fetahu", - "resource_type": "user" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "gid": "1206933450858036", - "name": "Aya", - "resource_type": "user" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "gid": "1209716676051853", - "name": "bart@n8n.io", - "resource_type": "user" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "gid": "1201317194658352", - "name": "Dale Player", - "resource_type": "user" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "gid": "1209089579490684", - "name": "David Arens", - "resource_type": "user" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "gid": "1209358493509784", - "name": "Gera", - "resource_type": "user" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "gid": "1183698132267547", - "name": "Inte Gration", - "resource_type": "user" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "gid": "1202307247988024", - "name": "ivan", - "resource_type": "user" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "gid": "1206344448463309", - "name": "ivan@n8n.io", - "resource_type": "user" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "gid": "1198750619112603", - "name": "Jan Oberhauser", - "resource_type": "user" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "gid": "1202718728322685", - "name": "John", - "resource_type": "user" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "gid": "1207168924369543", - "name": "luis@n8n.io", - "resource_type": "user" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "gid": "1202718619090236", - "name": "Mary", - "resource_type": "user" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "gid": "1199961026001666", - "name": "nodeqa", - "resource_type": "user" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "gid": "1177656661193880", - "name": "Ronalds Upenieks", - "resource_type": "user" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "gid": "1177253503277681", - "name": "Tanay Pant", - "resource_type": "user" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "gid": "1204568752114666", - "name": "Thomas Support", - "resource_type": "user" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "gid": "1209729434313156", - "name": "tino.zwirs@n8n.io", - "resource_type": "user" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "gid": "1202404236960393", - "name": "Tom", - "resource_type": "user" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Asana1": [ - { - "startTime": 1747344005931, - "executionIndex": 6, - "source": [ - { - "previousNode": "Asana" - } - ], - "hints": [], - "executionTime": 217, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "gid": "1199961131378839", - "archived": false, - "color": { - "object": true - }, - "completed": false, - "completed_at": { - "object": true - }, - "created_at": "2021-02-19T14:12:58.357Z", - "current_status": { - "object": true - }, - "current_status_update": { - "object": true - }, - "custom_fields": [ - "json array" - ], - "default_access_level": "editor", - "default_view": "list", - "due_on": { - "object": true - }, - "due_date": { - "object": true - }, - "followers": [ - "json array" - ], - "members": [ - "json array" - ], - "minimum_access_level_for_customization": "editor", - "minimum_access_level_for_sharing": "editor", - "modified_at": "2025-05-13T13:32:19.367Z", - "name": "QAtest", - "notes": "", - "owner": { - "object": true - }, - "permalink_url": "https://app.asana.com/1/1177253494675264/project/1199961131378839", - "privacy_setting": "private", - "public": false, - "resource_type": "project", - "start_on": { - "object": true - }, - "team": { - "object": true - }, - "workspace": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Asana4": [ - { - "startTime": 1747344006148, - "executionIndex": 7, - "source": [ - { - "previousNode": "Asana3" - } - ], - "hints": [], - "executionTime": 862, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Asana5": [ - { - "startTime": 1747344007010, - "executionIndex": 8, - "source": [ - { - "previousNode": "Asana4" - } - ], - "hints": [], - "executionTime": 365, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "gid": "1199961131378855", - "name": "✏️ Finish setting up your first project", - "resource_type": "task", - "resource_subtype": "default_task" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Asana6": [ - { - "startTime": 1747344007375, - "executionIndex": 9, - "source": [ - { - "previousNode": "Asana5" - } - ], - "hints": [], - "executionTime": 209, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "gid": "1210267332379092", - "actual_time_minutes": { - "object": true - }, - "assignee": { - "object": true - }, - "assignee_status": "inbox", - "assignee_section": { - "object": true - }, - "completed": false, - "completed_at": { - "object": true - }, - "created_at": "2025-05-15T21:20:04.296Z", - "due_at": { - "object": true - }, - "due_on": { - "object": true - }, - "followers": [ - "json array" - ], - "hearted": false, - "hearts": [ - "json array" - ], - "liked": false, - "likes": [ - "json array" - ], - "memberships": [ - "json array" - ], - "modified_at": "2025-05-15T21:20:06.736Z", - "name": "UpdatedTestTask", - "notes": "", - "num_hearts": 0, - "num_likes": 0, - "parent": { - "object": true - }, - "permalink_url": "https://app.asana.com/1/1177253494675264/project/1199961131378839/task/1210267332379092", - "projects": [ - "json array" - ], - "resource_type": "task", - "start_at": { - "object": true - }, - "start_on": { - "object": true - }, - "tags": [ - "json array" - ], - "resource_subtype": "default_task", - "workspace": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Asana8": [ - { - "startTime": 1747344007584, - "executionIndex": 10, - "source": [ - { - "previousNode": "Asana6" - } - ], - "hints": [], - "executionTime": 600, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "gid": "1210267334811850", - "resource_type": "story", - "created_at": "2025-05-15T21:20:07.929Z", - "num_hearts": 0, - "resource_subtype": "comment_added", - "is_edited": false, - "text": "TestTaskComment", - "type": "comment", - "is_pinned": false, - "source": "api", - "num_likes": 0, - "liked": false, - "hearted": false, - "created_by": { - "object": true - }, - "hearts": [ - "json array" - ], - "likes": [ - "json array" - ], - "previews": [ - "json array" - ], - "is_editable": true, - "target": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Asana10": [ - { - "startTime": 1747344008184, - "executionIndex": 11, - "source": [ - { - "previousNode": "Asana6" - } - ], - "hints": [], - "executionTime": 709, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Asana12": [ - { - "startTime": 1747344008893, - "executionIndex": 12, - "source": [ - { - "previousNode": "Asana6" - } - ], - "hints": [], - "executionTime": 471, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Asana16": [ - { - "startTime": 1747344009364, - "executionIndex": 13, - "source": [ - { - "previousNode": "Asana6" - } - ], - "hints": [], - "executionTime": 1016, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "gid": "1210267364252262", - "projects": [ - "json array" - ], - "memberships": [ - "json array" - ], - "resource_type": "task", - "created_at": "2025-05-15T21:20:09.876Z", - "modified_at": "2025-05-15T21:20:10.148Z", - "name": "SubTestTask", - "notes": "", - "assignee": { - "object": true - }, - "start_at": { - "object": true - }, - "start_on": { - "object": true - }, - "resource_subtype": "default_task", - "due_at": { - "object": true - }, - "due_on": { - "object": true - }, - "completed_at": { - "object": true - }, - "assignee_status": "upcoming", - "completed": false, - "actual_time_minutes": 0, - "workspace": { - "object": true - }, - "num_hearts": 0, - "num_likes": 0, - "hearted": false, - "liked": false, - "hearts": [ - "json array" - ], - "likes": [ - "json array" - ], - "parent": { - "object": true - }, - "tags": [ - "json array" - ], - "permalink_url": "https://app.asana.com/1/1177253494675264/project/1199961131378839/task/1210267364252262", - "followers": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Asana9": [ - { - "startTime": 1747344010380, - "executionIndex": 14, - "source": [ - { - "previousNode": "Asana8" - } - ], - "hints": [], - "executionTime": 742, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Asana11": [ - { - "startTime": 1747344011122, - "executionIndex": 15, - "source": [ - { - "previousNode": "Asana10" - } - ], - "hints": [], - "executionTime": 584, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Asana13": [ - { - "startTime": 1747344011706, - "executionIndex": 16, - "source": [ - { - "previousNode": "Asana12" - } - ], - "hints": [], - "executionTime": 598, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Asana17": [ - { - "startTime": 1747344012305, - "executionIndex": 17, - "source": [ - { - "previousNode": "Asana16" - } - ], - "hints": [], - "executionTime": 451, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "gid": "1210267364252262", - "name": "SubTestTask", - "resource_type": "task", - "resource_subtype": "default_task" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Asana7": [ - { - "startTime": 1747344012756, - "executionIndex": 18, - "source": [ - { - "previousNode": "Asana17" - } - ], - "hints": [], - "executionTime": 573, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Asana7" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:04.020Z", - "stoppedAt": "2025-05-15T21:20:13.329Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/49-snapshot.json b/test-workflows/snapshots/49-snapshot.json deleted file mode 100644 index 2f8ee24512a..00000000000 --- a/test-workflows/snapshots/49-snapshot.json +++ /dev/null @@ -1,173 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1676891392504, - "executionTime": 1, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Bitly": [ - { - "startTime": 1676891392506, - "executionTime": 211, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "created_at": "2021-02-19T16:45:14+0000", - "id": "bit.ly/3qAXhOP", - "link": "https://bit.ly/3qAXhOP", - "custom_bitlinks": [ - "json array" - ], - "long_url": "https://n8n.io/", - "title": "n8n", - "archived": false, - "tags": [ - "json array" - ], - "deeplinks": [ - "json array" - ], - "references": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Bitly1": [ - { - "startTime": 1676891392718, - "executionTime": 238, - "source": [ - { - "previousNode": "Bitly" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "created_at": "2021-02-19T16:45:14+0000", - "id": "bit.ly/3qAXhOP", - "link": "https://bit.ly/3qAXhOP", - "custom_bitlinks": [ - "json array" - ], - "long_url": "https://n8n.io/", - "title": "n8n", - "archived": false, - "created_by": "nodeqa", - "client_id": "a5e8cebb233c5d07e5c553e917dffb92fec5264d", - "tags": [ - "json array" - ], - "deeplinks": [ - "json array" - ], - "references": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Bitly2": [ - { - "startTime": 1676891392957, - "executionTime": 200, - "source": [ - { - "previousNode": "Bitly1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "created_at": "2021-02-19T16:45:14+0000", - "id": "bit.ly/3qAXhOP", - "link": "http://bit.ly/3qAXhOP", - "custom_bitlinks": [ - "json array" - ], - "long_url": "https://n8n.io/", - "archived": false, - "created_by": "nodeqa", - "client_id": "a5e8cebb233c5d07e5c553e917dffb92fec5264d", - "tags": [ - "json array" - ], - "deeplinks": [ - "json array" - ], - "references": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Bitly2" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-02-20T11:09:52.503Z", - "stoppedAt": "2023-02-20T11:09:53.157Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/5-snapshot.json b/test-workflows/snapshots/5-snapshot.json deleted file mode 100644 index f1cbd7039d0..00000000000 --- a/test-workflows/snapshots/5-snapshot.json +++ /dev/null @@ -1,184 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1676891385640, - "executionTime": 1, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Hacker News": [ - { - "startTime": 1676891385642, - "executionTime": 700, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "created_at": "2018-03-14T03:50:30.000Z", - "title": "Stephen Hawking has died", - "url": "http://www.bbc.com/news/uk-43396008", - "author": "Cogito", - "points": 6015, - "story_text": { - "object": true - }, - "comment_text": { - "object": true - }, - "num_comments": 436, - "story_id": { - "object": true - }, - "story_title": { - "object": true - }, - "story_url": { - "object": true - }, - "parent_id": { - "object": true - }, - "created_at_i": 1520999430, - "relevancy_score": 8012, - "_tags": [ - "json array" - ], - "objectID": "16582136", - "_highlightResult": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Hacker News1": [ - { - "startTime": 1676891386343, - "executionTime": 3784, - "source": [ - { - "previousNode": "Hacker News" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 16582136, - "created_at": "2018-03-14T03:50:30.000Z", - "created_at_i": 1520999430, - "type": "story", - "author": "Cogito", - "title": "Stephen Hawking has died", - "url": "http://www.bbc.com/news/uk-43396008", - "text": { - "object": true - }, - "points": 6015, - "parent_id": { - "object": true - }, - "story_id": { - "object": true - }, - "options": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Hacker News2": [ - { - "startTime": 1676891390129, - "executionTime": 598, - "source": [ - { - "previousNode": "Hacker News1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 119207, - "username": "Cogito", - "about": "You can get me at andrew.ardill at gmail.", - "karma": 4263, - "created_at": "2012-04-24T06:32:57.000Z", - "avg": 3.52273, - "delay": { - "object": true - }, - "submitted": 745, - "updated_at": "2022-12-06T03:45:32.000Z", - "submission_count": 24, - "comment_count": 720, - "created_at_i": 1335249177, - "objectID": "Cogito" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Hacker News2" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-02-20T11:09:45.637Z", - "stoppedAt": "2023-02-20T11:09:50.728Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/51-snapshot.json b/test-workflows/snapshots/51-snapshot.json deleted file mode 100644 index b3e3213fa89..00000000000 --- a/test-workflows/snapshots/51-snapshot.json +++ /dev/null @@ -1,644 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1710331931146, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Clockify": [ - { - "startTime": 1710331931146, - "executionTime": 393, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "65f1981b8d52242d1a6a5092", - "name": "TestProject created Wed, 13 Mar 2024 12:12:11 GMT", - "hourlyRate": { - "object": true - }, - "clientId": "", - "workspaceId": "60335ad3f24e660123d7fdee", - "billable": true, - "memberships": [ - "json array" - ], - "color": "#8BC34A", - "estimate": { - "object": true - }, - "archived": false, - "duration": "PT0S", - "clientName": "", - "note": "", - "costRate": { - "object": true - }, - "timeEstimate": { - "object": true - }, - "budgetEstimate": { - "object": true - }, - "template": false, - "public": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Clockify5": [ - { - "startTime": 1710331931540, - "executionTime": 190, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "65f1981be8273c7a4c5e6647", - "name": "TestTag0.9326327500236014", - "workspaceId": "60335ad3f24e660123d7fdee", - "archived": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Clockify9": [ - { - "startTime": 1710331931730, - "executionTime": 157, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "65f1981ba75a0777c651975b", - "description": { - "object": true - }, - "tagIds": { - "object": true - }, - "userId": "60335ad2f24e660123d7fdeb", - "billable": false, - "taskId": { - "object": true - }, - "projectId": { - "object": true - }, - "timeInterval": { - "object": true - }, - "workspaceId": "60335ad3f24e660123d7fdee", - "isLocked": false, - "customFieldValues": [ - "json array" - ], - "type": "REGULAR", - "kioskId": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Clockify1": [ - { - "startTime": 1710331931887, - "executionTime": 307, - "source": [ - { - "previousNode": "Clockify" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "65f1981b8d52242d1a6a5092", - "name": "Updated TestProject created Wed, 13 Mar 2024 12:12:11 GMT", - "hourlyRate": { - "object": true - }, - "clientId": "", - "workspaceId": "60335ad3f24e660123d7fdee", - "billable": false, - "memberships": [ - "json array" - ], - "color": "#8BC34A", - "estimate": { - "object": true - }, - "archived": false, - "duration": "PT0S", - "clientName": "", - "note": "", - "costRate": { - "object": true - }, - "timeEstimate": { - "object": true - }, - "budgetEstimate": { - "object": true - }, - "template": false, - "public": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.5 second": [ - { - "startTime": 1710331932194, - "executionTime": 503, - "source": [ - { - "previousNode": "Clockify5" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "65f1981be8273c7a4c5e6647", - "name": "TestTag0.9326327500236014", - "workspaceId": "60335ad3f24e660123d7fdee", - "archived": false - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Clockify10": [ - { - "startTime": 1710331932697, - "executionTime": 339, - "source": [ - { - "previousNode": "Clockify9" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "65f1981ba75a0777c651975b", - "description": "Updated time entry", - "tagIds": { - "object": true - }, - "userId": "60335ad2f24e660123d7fdeb", - "billable": false, - "taskId": { - "object": true - }, - "projectId": { - "object": true - }, - "timeInterval": { - "object": true - }, - "workspaceId": "60335ad3f24e660123d7fdee", - "isLocked": false, - "customFieldValues": [ - "json array" - ], - "type": "REGULAR", - "kioskId": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Clockify2": [ - { - "startTime": 1710331933037, - "executionTime": 227, - "source": [ - { - "previousNode": "Clockify1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "65f1981b8d52242d1a6a5092", - "name": "Updated TestProject created Wed, 13 Mar 2024 12:12:11 GMT", - "hourlyRate": { - "object": true - }, - "clientId": "", - "workspaceId": "60335ad3f24e660123d7fdee", - "billable": false, - "memberships": [ - "json array" - ], - "color": "#8BC34A", - "estimate": { - "object": true - }, - "archived": false, - "duration": "PT0S", - "clientName": "", - "note": "", - "costRate": { - "object": true - }, - "timeEstimate": { - "object": true - }, - "budgetEstimate": { - "object": true - }, - "template": false, - "public": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Clockify6": [ - { - "startTime": 1710331933264, - "executionTime": 341, - "source": [ - { - "previousNode": "Sleep 0.5 second" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "65f1981be8273c7a4c5e6647", - "name": "UpdatedTag0.6688306691795847", - "workspaceId": "60335ad3f24e660123d7fdee", - "archived": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Clockify11": [ - { - "startTime": 1710331933605, - "executionTime": 241, - "source": [ - { - "previousNode": "Clockify10" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "65f1981ba75a0777c651975b", - "description": "Updated time entry", - "tagIds": { - "object": true - }, - "userId": "60335ad2f24e660123d7fdeb", - "billable": false, - "taskId": { - "object": true - }, - "projectId": { - "object": true - }, - "workspaceId": "60335ad3f24e660123d7fdee", - "timeInterval": { - "object": true - }, - "customFieldValues": [ - "json array" - ], - "type": "REGULAR", - "kioskId": { - "object": true - }, - "hourlyRate": { - "object": true - }, - "costRate": { - "object": true - }, - "isLocked": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Clockify3": [ - { - "startTime": 1710331933846, - "executionTime": 308, - "source": [ - { - "previousNode": "Clockify2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "60bdd9a66c24294f3e5f77b3", - "name": "TestProject created Mon, 07 Jun 2021 08:32:37 GMT", - "hourlyRate": { - "object": true - }, - "clientId": "", - "workspaceId": "60335ad3f24e660123d7fdee", - "billable": true, - "memberships": [ - "json array" - ], - "color": "#00BCD4", - "estimate": { - "object": true - }, - "archived": false, - "duration": "PT0S", - "clientName": "", - "note": "", - "costRate": { - "object": true - }, - "timeEstimate": { - "object": true - }, - "budgetEstimate": { - "object": true - }, - "template": false, - "public": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Clockify7": [ - { - "startTime": 1710331934154, - "executionTime": 170, - "source": [ - { - "previousNode": "Clockify6" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "60bdd90f8b25e0206c07a554", - "name": "TestTag", - "workspaceId": "60335ad3f24e660123d7fdee", - "archived": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Clockify12": [ - { - "startTime": 1710331934324, - "executionTime": 148, - "source": [ - { - "previousNode": "Clockify11" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Clockify4": [ - { - "startTime": 1710331934472, - "executionTime": 0, - "source": [ - { - "previousNode": "Clockify3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "60bdd9a66c24294f3e5f77b3", - "name": "TestProject created Mon, 07 Jun 2021 08:32:37 GMT", - "hourlyRate": { - "object": true - }, - "clientId": "", - "workspaceId": "60335ad3f24e660123d7fdee", - "billable": true, - "memberships": [ - "json array" - ], - "color": "#00BCD4", - "estimate": { - "object": true - }, - "archived": false, - "duration": "PT0S", - "clientName": "", - "note": "", - "costRate": { - "object": true - }, - "timeEstimate": { - "object": true - }, - "budgetEstimate": { - "object": true - }, - "template": false, - "public": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Clockify8": [ - { - "startTime": 1710331934472, - "executionTime": 157, - "source": [ - { - "previousNode": "Clockify7" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Clockify8" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2024-03-13T12:12:11.145Z", - "stoppedAt": "2024-03-13T12:12:14.629Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/52-snapshot.json b/test-workflows/snapshots/52-snapshot.json deleted file mode 100644 index 5f6630348db..00000000000 --- a/test-workflows/snapshots/52-snapshot.json +++ /dev/null @@ -1,629 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747344004590, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Coda11": [ - { - "startTime": 1747344004591, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 2921, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "table-K1_z3jl_HH", - "type": "table", - "tableType": "view", - "href": "https://coda.io/apis/v1/docs/2-5DWWeFZp/tables/table-K1_z3jl_HH", - "browserLink": "https://coda.io/d/_d2-5DWWeFZp#_tutable-K1_z3jl_HH", - "name": "Table View", - "parent": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Coda4": [ - { - "startTime": 1747344007512, - "executionIndex": 2, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 1160, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "c-XvglOYNTU8", - "type": "column", - "name": "number", - "href": "https://coda.io/apis/v1/docs/2-5DWWeFZp/tables/grid-lDqTU2W4nP/columns/c-XvglOYNTU8", - "display": true, - "format": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Coda2": [ - { - "startTime": 1747344008672, - "executionIndex": 3, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 207, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "f-nyztATalRJ", - "type": "formula", - "href": "https://coda.io/apis/v1/docs/2-5DWWeFZp/formulas/f-nyztATalRJ", - "name": "Test", - "parent": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Coda": [ - { - "startTime": 1747344008879, - "executionIndex": 4, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 996, - "executionStatus": "success", - "data": { - "main": [ - [] - ] - } - } - ], - "Coda12": [ - { - "startTime": 1747344009875, - "executionIndex": 5, - "source": [ - { - "previousNode": "Coda11" - } - ], - "hints": [], - "executionTime": 462, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "table-FTj1L0rh08", - "type": "table", - "tableType": "view", - "href": "https://coda.io/apis/v1/docs/2-5DWWeFZp/tables/table-FTj1L0rh08", - "browserLink": "https://coda.io/d/_d2-5DWWeFZp#_tutable-FTj1L0rh08", - "parent": { - "object": true - }, - "parentTable": { - "object": true - }, - "name": "View of Table 1", - "displayColumn": { - "object": true - }, - "rowCount": 121, - "createdAt": "2021-02-22T08:40:15.720Z", - "updatedAt": "2021-02-22T08:40:15.720Z", - "viewId": "v-k0w5NxL7Wt", - "sorts": [ - "json array" - ], - "layout": "masterDetail" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Coda5": [ - { - "startTime": 1747344010337, - "executionIndex": 6, - "source": [ - { - "previousNode": "Coda4" - } - ], - "hints": [], - "executionTime": 235, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "c-XvglOYNTU8", - "type": "column", - "name": "number", - "href": "https://coda.io/apis/v1/docs/2-5DWWeFZp/tables/grid-lDqTU2W4nP/columns/c-XvglOYNTU8", - "display": true, - "format": { - "object": true - }, - "parent": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Coda3": [ - { - "startTime": 1747344010572, - "executionIndex": 7, - "source": [ - { - "previousNode": "Coda2" - } - ], - "hints": [], - "executionTime": 2452, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "f-nyztATalRJ", - "type": "formula", - "href": "https://coda.io/apis/v1/docs/2-5DWWeFZp/formulas/f-nyztATalRJ", - "name": "Test", - "value": "", - "parent": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Coda13": [ - { - "startTime": 1747344013024, - "executionIndex": 8, - "source": [ - { - "previousNode": "Coda12" - } - ], - "hints": [], - "executionTime": 320, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "c-XvglOYNTU8", - "type": "column", - "name": "number", - "href": "https://coda.io/apis/v1/docs/2-5DWWeFZp/tables/grid-lDqTU2W4nP/columns/c-XvglOYNTU8", - "display": true, - "format": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Coda6": [ - { - "startTime": 1747344013344, - "executionIndex": 9, - "source": [ - { - "previousNode": "Coda5" - } - ], - "hints": [], - "executionTime": 316, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "i-62srMH_hOe", - "number": 101, - "sum": 0, - "Column 3": "" - }, - "pairedItem": [ - { - "item": 0 - } - ] - } - ] - ] - } - } - ], - "Coda14": [ - { - "startTime": 1747344013660, - "executionIndex": 10, - "source": [ - { - "previousNode": "Coda13" - } - ], - "hints": [], - "executionTime": 2614, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "i-62srMH_hOe", - "number": 101, - "sum": 0, - "Column 3": "" - }, - "pairedItem": [ - { - "item": 0 - } - ] - } - ] - ] - } - } - ], - "Coda7": [ - { - "startTime": 1747344016274, - "executionIndex": 11, - "source": [ - { - "previousNode": "Coda6" - } - ], - "hints": [], - "executionTime": 259, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "i-62srMH_hOe", - "number": 101, - "sum": 0, - "Column 3": "" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set1": [ - { - "startTime": 1747344016533, - "executionIndex": 12, - "source": [ - { - "previousNode": "Coda14" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "number": 102, - "sum": 0 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set": [ - { - "startTime": 1747344016533, - "executionIndex": 13, - "source": [ - { - "previousNode": "Coda7" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "number": 101, - "sum": 0 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Coda15": [ - { - "startTime": 1747344016533, - "executionIndex": 14, - "source": [ - { - "previousNode": "Set1" - } - ], - "hints": [], - "executionTime": 643, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "number": 102, - "sum": 0 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Coda8": [ - { - "startTime": 1747344017176, - "executionIndex": 15, - "source": [ - { - "previousNode": "Set" - } - ], - "hints": [], - "executionTime": 300, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "number": 101, - "sum": 0 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Coda16": [ - { - "startTime": 1747344017476, - "executionIndex": 16, - "source": [ - { - "previousNode": "Coda15" - } - ], - "hints": [], - "executionTime": 1373, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "rowId": "i-62srMH_hOe", - "columnId": "c-hTB8QwFtUS", - "requestId": "mutate:df2e7520-d748-457f-ae97-81138ebc1f0c" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Coda10": [ - { - "startTime": 1747344018849, - "executionIndex": 17, - "source": [ - { - "previousNode": "Coda8" - } - ], - "hints": [], - "executionTime": 453, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "rowId": "i-62srMH_hOe", - "columnId": "c-hTB8QwFtUS", - "requestId": "mutate:49bd58a9-b483-4b84-8627-0fef4dfcdbf6" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Coda9": [ - { - "startTime": 1747344019302, - "executionIndex": 18, - "source": [ - { - "previousNode": "Coda10" - } - ], - "hints": [], - "executionTime": 4629, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "rowId": "i-62srMH_hOe", - "columnId": "c-hTB8QwFtUS", - "requestId": "mutate:49bd58a9-b483-4b84-8627-0fef4dfcdbf6" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Coda9" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:04.590Z", - "stoppedAt": "2025-05-15T21:20:23.931Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/53-snapshot.json b/test-workflows/snapshots/53-snapshot.json deleted file mode 100644 index 01735600e25..00000000000 --- a/test-workflows/snapshots/53-snapshot.json +++ /dev/null @@ -1,411 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747344006713, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ConvertKit": [ - { - "startTime": 1747344006713, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 542, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 985256, - "name": "ck_field_985256_testfield05605810562389708", - "key": "testfield0_5605810562389708", - "label": "testField0.5605810562389708" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ConvertKit4": [ - { - "startTime": 1747344007255, - "executionIndex": 2, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 467, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 2059113, - "name": "TestForm", - "created_at": "2021-02-22T09:16:09.000Z", - "type": "embed", - "format": "inline", - "embed_js": "https://chipper-musician-5875.kit.com/bec913a630/index.js", - "embed_url": "https://chipper-musician-5875.kit.com/bec913a630", - "archived": false, - "uid": "bec913a630" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ConvertKit1": [ - { - "startTime": 1747344007722, - "executionIndex": 3, - "source": [ - { - "previousNode": "ConvertKit" - } - ], - "hints": [], - "executionTime": 455, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 213135, - "name": "ck_field_213135_testfield", - "key": "testfield", - "label": "testField" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ConvertKit5": [ - { - "startTime": 1747344008177, - "executionIndex": 4, - "source": [ - { - "previousNode": "ConvertKit4" - } - ], - "hints": [], - "executionTime": 586, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 10406664929, - "state": "inactive", - "created_at": "2025-05-15T21:20:08.000Z", - "source": "API::V3::SubscriptionsController (external)", - "referrer": { - "object": true - }, - "subscribable_id": 2059113, - "subscribable_type": "form", - "subscriber": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ConvertKit2": [ - { - "startTime": 1747344008763, - "executionIndex": 5, - "source": [ - { - "previousNode": "ConvertKit1" - } - ], - "hints": [], - "executionTime": 490, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ConvertKit7": [ - { - "startTime": 1747344009253, - "executionIndex": 6, - "source": [ - { - "previousNode": "ConvertKit5" - } - ], - "hints": [], - "executionTime": 507, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 7925787, - "name": "tag1747344009258", - "created_at": "2025-05-15T21:20:09.000Z" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ConvertKit3": [ - { - "startTime": 1747344009760, - "executionIndex": 7, - "source": [ - { - "previousNode": "ConvertKit2" - } - ], - "hints": [], - "executionTime": 505, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ConvertKit8": [ - { - "startTime": 1747344010265, - "executionIndex": 8, - "source": [ - { - "previousNode": "ConvertKit7" - } - ], - "hints": [], - "executionTime": 1218, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 2205755, - "name": "tag1613985759319", - "created_at": "2021-02-22T09:22:40.000Z" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ConvertKit9": [ - { - "startTime": 1747344011483, - "executionIndex": 9, - "source": [ - { - "previousNode": "ConvertKit8" - } - ], - "hints": [], - "executionTime": 511, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 10406665311, - "state": "active", - "created_at": "2025-05-15T21:20:11.000Z", - "source": "API::V3::SubscriptionsController (external)", - "referrer": { - "object": true - }, - "subscribable_id": 7925787, - "subscribable_type": "tag", - "subscriber": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ConvertKit10": [ - { - "startTime": 1747344011994, - "executionIndex": 10, - "source": [ - { - "previousNode": "ConvertKit9" - } - ], - "hints": [], - "executionTime": 450, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": [ - { - "item": 0, - "input": 0 - } - ] - } - ] - ] - } - } - ], - "ConvertKit11": [ - { - "startTime": 1747344012444, - "executionIndex": 11, - "source": [ - { - "previousNode": "ConvertKit10" - } - ], - "hints": [], - "executionTime": 464, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": 7925787, - "name": "tag1747344009258", - "created_at": "2025-05-15T21:20:09.000Z" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ConvertKit6": [ - { - "startTime": 1747344012908, - "executionIndex": 12, - "source": [ - { - "previousNode": "ConvertKit11" - } - ], - "hints": [], - "executionTime": 529, - "executionStatus": "success", - "data": { - "main": [ - [] - ] - } - } - ] - }, - "lastNodeExecuted": "ConvertKit6" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:06.712Z", - "stoppedAt": "2025-05-15T21:20:13.437Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/55-snapshot.json b/test-workflows/snapshots/55-snapshot.json deleted file mode 100644 index 72b0d1b5a77..00000000000 --- a/test-workflows/snapshots/55-snapshot.json +++ /dev/null @@ -1,201 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747344007024, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Hunter": [ - { - "startTime": 1747344007024, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 197, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "value": "ben@n8n.io", - "type": "personal", - "confidence": 99, - "sources": [ - "json array" - ], - "first_name": "Ben", - "last_name": "Kiziltug", - "position": "Vice President of Sales", - "position_raw": "VP Sales", - "seniority": "executive", - "department": "sales", - "linkedin": "https://www.linkedin.com/in/benkiziltug", - "twitter": { - "object": true - }, - "phone_number": { - "object": true - }, - "verification": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Hunter1": [ - { - "startTime": 1747344007221, - "executionIndex": 2, - "source": [ - { - "previousNode": "Hunter" - } - ], - "hints": [], - "executionTime": 372, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "first_name": { - "object": true - }, - "last_name": { - "object": true - }, - "email": { - "object": true - }, - "score": { - "object": true - }, - "domain": "n8n.io", - "accept_all": { - "object": true - }, - "position": { - "object": true - }, - "twitter": { - "object": true - }, - "linkedin_url": { - "object": true - }, - "phone_number": { - "object": true - }, - "company": { - "object": true - }, - "sources": [ - "json array" - ], - "verification": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Hunter2": [ - { - "startTime": 1747344007593, - "executionIndex": 3, - "source": [ - { - "previousNode": "Hunter1" - } - ], - "hints": [], - "executionTime": 250, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": "valid", - "result": "deliverable", - "_deprecation_notice": "Using result is deprecated, use status instead", - "score": 90, - "email": "nodeqa@n8n.io", - "regexp": true, - "gibberish": false, - "disposable": false, - "webmail": false, - "mx_records": true, - "smtp_server": true, - "smtp_check": true, - "accept_all": false, - "block": false, - "sources": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Hunter2" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:07.024Z", - "stoppedAt": "2025-05-15T21:20:07.843Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/58-snapshot.json b/test-workflows/snapshots/58-snapshot.json deleted file mode 100644 index af784cea7f1..00000000000 --- a/test-workflows/snapshots/58-snapshot.json +++ /dev/null @@ -1,314 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747344007863, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Todoist": [ - { - "startTime": 1747344007863, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 841, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "9167050615", - "assigner_id": { - "object": true - }, - "assignee_id": { - "object": true - }, - "project_id": "2259097055", - "section_id": { - "object": true - }, - "parent_id": { - "object": true - }, - "order": 21, - "content": "Test Task", - "description": "", - "is_completed": false, - "labels": [ - "json array" - ], - "priority": 1, - "comment_count": 0, - "creator_id": "32694069", - "created_at": "2025-05-15T21:20:08.213266Z", - "due": { - "object": true - }, - "url": "https://app.todoist.com/app/task/9167050615", - "duration": { - "object": true - }, - "deadline": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Todoist1": [ - { - "startTime": 1747344008704, - "executionIndex": 2, - "source": [ - { - "previousNode": "Todoist" - } - ], - "hints": [], - "executionTime": 248, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "9167050615", - "assigner_id": { - "object": true - }, - "assignee_id": { - "object": true - }, - "project_id": "2259097055", - "section_id": { - "object": true - }, - "parent_id": { - "object": true - }, - "order": 21, - "content": "Test Task", - "description": "", - "is_completed": false, - "labels": [ - "json array" - ], - "priority": 1, - "comment_count": 0, - "creator_id": "32694069", - "created_at": "2025-05-15T21:20:08.213266Z", - "due": { - "object": true - }, - "url": "https://app.todoist.com/app/task/9167050615", - "duration": { - "object": true - }, - "deadline": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Todoist2": [ - { - "startTime": 1747344008952, - "executionIndex": 3, - "source": [ - { - "previousNode": "Todoist1" - } - ], - "hints": [], - "executionTime": 521, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Todoist3": [ - { - "startTime": 1747344009473, - "executionIndex": 4, - "source": [ - { - "previousNode": "Todoist2" - } - ], - "hints": [], - "executionTime": 654, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Todoist5": [ - { - "startTime": 1747344010127, - "executionIndex": 5, - "source": [ - { - "previousNode": "Todoist3" - } - ], - "hints": [], - "executionTime": 471, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "4610234385", - "assigner_id": { - "object": true - }, - "assignee_id": { - "object": true - }, - "project_id": "2259097055", - "section_id": { - "object": true - }, - "parent_id": { - "object": true - }, - "order": 1, - "content": "Test Task", - "description": "", - "is_completed": false, - "labels": [ - "json array" - ], - "priority": 1, - "comment_count": 0, - "creator_id": "32694069", - "created_at": "2021-02-25T12:23:24.274629Z", - "due": { - "object": true - }, - "url": "https://app.todoist.com/app/task/4610234385", - "duration": { - "object": true - }, - "deadline": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Todoist4": [ - { - "startTime": 1747344010598, - "executionIndex": 6, - "source": [ - { - "previousNode": "Todoist5" - } - ], - "hints": [], - "executionTime": 487, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Todoist4" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:07.863Z", - "stoppedAt": "2025-05-15T21:20:11.085Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/6-snapshot.json b/test-workflows/snapshots/6-snapshot.json deleted file mode 100644 index 350ae976871..00000000000 --- a/test-workflows/snapshots/6-snapshot.json +++ /dev/null @@ -1,177 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747344008477, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set files": [ - { - "startTime": 1747344008477, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 9, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "filename": "n8n-logo.png" - }, - "binary": { - "binaryfile": { - "mimeType": "image/png", - "data": "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", - "fileName": "n8n-logo.png" - } - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "filename": "05-versions-space.pdf" - }, - "binary": { - "binaryfile": { - "mimeType": "application/pdf", - "data": "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3iVUEWUxQu8Tqou1xDr0TqGR2ExsJbYTO4rdxD7l0TMKxSJxojhNnCU+LtriAnGxuFRcIa4RN4hviJsv1nddIR/7zXgoAawCVgUTwSTwElAGLwWDYAiMgAqogTpogFHwcvAK8EqwOvgn8CqwJlgLvA5MAa8H64I3gDeC9cEG4E1gI7AJ2BRsBt4KtgHbgneC7cEOYCrYGUwDu4BdwW5gd7AH2BPsBfYG+4B9wX7g3WB/cAA4EL/QPwl+B34P/hs8Bf4A/sgYJaAAiqAHlEAv5R9On8tpE06bcNqE0yacNuG0CadNOG3CaRNOm3DahNMmnDbhtAmnTThtwmkTTptw2oTTJpw24bQJp004bcJpE06bcNqE0yacNuG0CadNOG3CaRNOm3DahNMmnDbhtAmnTThtwmkTTptw2oTTJpw24bQJp004bcJpE06bcNqE0yacNuG0CadNOG3CaRNOm3DahNMmnDbhtAmnTThtwmkTTptw2oTTJpw24bQJp004bcJpE06bcNr8w+lzOm3BaQtOW3DagtMWnLbgtAWnLThtwWkLTltw2oLTFpy24LQFpy04bcFpC05bcNqC0xactuC0BactOG3BaQtOW3DagtMWnLbgtAWnLThtwWkLTltw2oLTFpy24LQFpy04bcFpC05bcNqC0xactuC0BactOG3BaQtOW3DagtMWnLbgtAWnLThtwWkLTltw2oLTFpy24LQFpy04bcFpC05bcNqC0xactuC0BactOG3BaQtOW384fU6nHTjtwGkHTjtw2oHTDpx24LQDpx047cBpB047cNqB0w6cduC0A6cdOO3AaQdOO3DagdMOnHbgtAOnHTjtwGkHTjtw2oHTDpx24LQDpx047cBpB047cNqB0w6cduC0A6cdOO3AaQdOO3DagdMOnHbgtAOnHTjtwGkHTjtw2oHTDpx24LQDpx047cBpB047cNqB0w6cduC0A6cdOO3AaQdOO3DagdMOnHbgtAOnHTjtwGnnD6fP6bQLp1047cJpF067cNqF0y6cduG0C6ddOO3CaRdOu3DahdMunHbhtAunXTjtwmkXTrtw2oXTLpx24bQLp1047cJpF067cNqF0y6cduG0C6ddOO3CaRdOu3DahdMunHbhtAunXTjtwmkXTrtw2oXTLpx24bQLp1047cJpF067cNqF0y6cduG0C6ddOO3CaRdOu3DahdMunHbhtAunXTjtwmkXTrtw2oXTLpx24bQLp1047f7enb4Yo7jROmcQ9oQIowR6QR9YBawKJoJ+8BJQBgNgEAyDEVABVdAAo+BlYDXwcvBKsDpYA7wGTAavBeuA14HXg3XBG8AbwfrgTWAjsDHYBGwG3gq2AFuCt4OtwTvAduCdYHvwLrADmAp2BDuBncE0sAvYFewGdgd7gIgfHMW2jSaA2MJRbOEotnA0CcQWjmILRy8FsZ2j2M7REMi29h9On8tpC05bcNqC0xactuC0BactOG3BaQtOW3DagtMWnLbgtAWnLThtwWkLTltw2oLTFpy24LQFpy04bcFpC05bcNqC0xactuC0BactOG3BaQtOW3DagtMWnLbgtAWnLThtwWkLTltw2oLTFpy24LQFpy04bcFpC05bcNqC0xactuC0BactOG3BaQtOW3DagtMWnLbgtAWnLThtwWkLTltw2oLTFpy24LQFpy04bcFpC05bcPp335++SE7bcNqG0zactuG0DadtOG3DaRtO23DahtM2nLbhtA2nbThtw2kbTttw2obTNpy24bQNp204bcNpG07bcNqG0zactuG0DadtOG3DaRtO23DahtM2nLbhtA2nbThtw2kbTttw2obTNpy24bQNp204bcNpG07bcNqG0zactuG0DadtOG3DaRtO23DahtM2nLbhtA2nbThtw2kbTttw2obTNpy24bQNp204bcNpG07bcNqG03b59+GIwhFaHLHY6Ox6hr4CaTpNBZJDGpAFZDFZSlYg8uMbFX6peoKcEqTy54ZrCXWEWmSFUJ9so1ObCq0wnnMPemxkCDls9GP6V0TL2CZMpsfH44JL52K5p4Wlwiq69Dr239vQU6GFtBe9KLSSPWESmUci+A/E5fgPRAr+91AX/3u4Ef97qE9bXorvhUpZ1E/KPLAYHAnafL1ewrt80AULwPngPMyVx8ty+DIO3xazMfU5sAh8Bp+M4/On8/lMnr6ENJfFQkX6AOZaCY7DtAks3ibqmM1rno1RwtkcsdrGY3oR/3wmT0t4OpvFKkUL8D4W1RMp1i2q4l0smmcKiZBmpBWeEe5FBpIMko1IEUV4aiwW27NsH7PnJe4JDyMknB0ezQwJD2QRXikR+zfM+sDs3dDyNDY1GxwCTgRngRMos1BCFi8hC0tm8RKyeAlZKCELJWShhCyU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kYPrt5OXtxSXaxZf+jNV8/IY1Cx6nMM59q+xJrj4U28LwUPKkqiMLlSdsLBPG+x1W7usXXdCsD8qLLTNy2LdXqFSjuSk0+CydwCDYzt/8yB/3Sv+qBSlj27BEMh/ABW4qmINCmVuZHN0cmVhbQ0KZW5kb2JqDQoyMCAwIG9iag0KPDwvVHlwZS9YUmVmL1NpemUgMjAvV1sgMSA0IDJdIC9Sb290IDEgMCBSL0luZm8gOSAwIFIvSURbPDMyMThENkU0QjEwRjNFNDk4MEE3OTdBQUUxRTVCOTZEPjwzMjE4RDZFNEIxMEYzRTQ5ODBBNzk3QUFFMUU1Qjk2RD5dIC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDgxPj4NCnN0cmVhbQ0KeJxjYACC//8ZgaQgAwOIqoVQW8EU42EwxcwPobaDKZZlEOo2mGIVYGBgAmoQYGCGUCwQihVCMUEoqBI2kIZfMB4jkMfeATaFI5eBAQACHwkSDQplbmRzdHJlYW0NCmVuZG9iag0KeHJlZg0KMCAyMQ0KMDAwMDAwMDAxMCA2NTUzNSBmDQowMDAwMDAwMDE3IDAwMDAwIG4NCjAwMDAwMDAxMjUgMDAwMDAgbg0KMDAwMDAwMDE4MSAwMDAwMCBuDQowMDAwMDAwNDUxIDAwMDAwIG4NCjAwMDAwMDA3ODMgMDAwMDAgbg0KMDAwMDAwMDk1MSAwMDAwMCBuDQowMDAwMDAxMTkwIDAwMDAwIG4NCjAwMDAwMDEyNDMgMDAwMDAgbg0KMDAwMDAwMTI5NiAwMDAwMCBuDQowMDAwMDAwMDExIDY1NTM1IGYNCjAwMDAwMDAwMTIgNjU1MzUgZg0KMDAwMDAwMDAxMyA2NTUzNSBmDQowMDAwMDAwMDE0IDY1NTM1IGYNCjAwMDAwMDAwMTUgNjU1MzUgZg0KMDAwMDAwMDAxNiA2NTUzNSBmDQowMDAwMDAwMDE3IDY1NTM1IGYNCjAwMDAwMDAwMDAgNjU1MzUgZg0KMDAwMDAwMTkyOCAwMDAwMCBuDQowMDAwMDAyMTU3IDAwMDAwIG4NCjAwMDAxODU1MTkgMDAwMDAgbg0KdHJhaWxlcg0KPDwvU2l6ZSAyMS9Sb290IDEgMCBSL0luZm8gOSAwIFIvSURbPDMyMThENkU0QjEwRjNFNDk4MEE3OTdBQUUxRTVCOTZEPjwzMjE4RDZFNEIxMEYzRTQ5ODBBNzk3QUFFMUU1Qjk2RD5dID4+DQpzdGFydHhyZWYNCjE4NTc5OQ0KJSVFT0YNCnhyZWYNCjAgMA0KdHJhaWxlcg0KPDwvU2l6ZSAyMS9Sb290IDEgMCBSL0luZm8gOSAwIFIvSURbPDMyMThENkU0QjEwRjNFNDk4MEE3OTdBQUUxRTVCOTZEPjwzMjE4RDZFNEIxMEYzRTQ5ODBBNzk3QUFFMUU1Qjk2RD5dIC9QcmV2IDE4NTc5OS9YUmVmU3RtIDE4NTUxOT4+DQpzdGFydHhyZWYNCjE4NjM3Ng0KJSVFT0Y=", - "fileName": "05-versions-space.pdf" - } - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "filename": "n8n-screenshot.png" - }, - "binary": { - "binaryfile": { - "mimeType": "image/png", - "data": "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", - "fileName": "n8n-screenshot.png" - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Write Binary File": [ - { - "startTime": 1747344008486, - "executionIndex": 2, - "source": [ - { - "previousNode": "Set files" - } - ], - "hints": [], - "executionTime": 3, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "filename": "n8n-logo.png", - "fileName": "/tmp/n8n-logo.png" - }, - "pairedItem": { - "item": 0 - }, - "binary": { - "binaryfile": { - "mimeType": "image/png", - "data": "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", - "fileName": "n8n-logo.png" - } - } - }, - { - "json": { - "filename": "05-versions-space.pdf", - "fileName": "/tmp/05-versions-space.pdf" - }, - "pairedItem": { - "item": 1 - }, - "binary": { - "binaryfile": { - "mimeType": "application/pdf", - "data": "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3iVUEWUxQu8Tqou1xDr0TqGR2ExsJbYTO4rdxD7l0TMKxSJxojhNnCU+LtriAnGxuFRcIa4RN4hviJsv1nddIR/7zXgoAawCVgUTwSTwElAGLwWDYAiMgAqogTpogFHwcvAK8EqwOvgn8CqwJlgLvA5MAa8H64I3gDeC9cEG4E1gI7AJ2BRsBt4KtgHbgneC7cEOYCrYGUwDu4BdwW5gd7AH2BPsBfYG+4B9wX7g3WB/cAA4EL/QPwl+B34P/hs8Bf4A/sgYJaAAiqAHlEAv5R9On8tpE06bcNqE0yacNuG0CadNOG3CaRNOm3DahNMmnDbhtAmnTThtwmkTTptw2oTTJpw24bQJp004bcJpE06bcNqE0yacNuG0CadNOG3CaRNOm3DahNMmnDbhtAmnTThtwmkTTptw2oTTJpw24bQJp004bcJpE06bcNqE0yacNuG0CadNOG3CaRNOm3DahNMmnDbhtAmnTThtwmkTTptw2oTTJpw24bQJp004bcJpE06bcNr8w+lzOm3BaQtOW3DagtMWnLbgtAWnLThtwWkLTltw2oLTFpy24LQFpy04bcFpC05bcNqC0xactuC0BactOG3BaQtOW3DagtMWnLbgtAWnLThtwWkLTltw2oLTFpy24LQFpy04bcFpC05bcNqC0xactuC0BactOG3BaQtOW3DagtMWnLbgtAWnLThtwWkLTltw2oLTFpy24LQFpy04bcFpC05bcNqC0xactuC0BactOG3BaQtOW384fU6nHTjtwGkHTjtw2oHTDpx24LQDpx047cBpB047cNqB0w6cduC0A6cdOO3AaQdOO3DagdMOnHbgtAOnHTjtwGkHTjtw2oHTDpx24LQDpx047cBpB047cNqB0w6cduC0A6cdOO3AaQdOO3DagdMOnHbgtAOnHTjtwGkHTjtw2oHTDpx24LQDpx047cBpB047cNqB0w6cduC0A6cdOO3AaQdOO3DagdMOnHbgtAOnHTjtwGnnD6fP6bQLp1047cJpF067cNqF0y6cduG0C6ddOO3CaRdOu3DahdMunHbhtAunXTjtwmkXTrtw2oXTLpx24bQLp1047cJpF067cNqF0y6cduG0C6ddOO3CaRdOu3DahdMunHbhtAunXTjtwmkXTrtw2oXTLpx24bQLp1047cJpF067cNqF0y6cduG0C6ddOO3CaRdOu3DahdMunHbhtAunXTjtwmkXTrtw2oXTLpx24bQLp1047f7enb4Yo7jROmcQ9oQIowR6QR9YBawKJoJ+8BJQBgNgEAyDEVABVdAAo+BlYDXwcvBKsDpYA7wGTAavBeuA14HXg3XBG8AbwfrgTWAjsDHYBGwG3gq2AFuCt4OtwTvAduCdYHvwLrADmAp2BDuBncE0sAvYFewGdgd7gIgfHMW2jSaA2MJRbOEotnA0CcQWjmILRy8FsZ2j2M7REMi29h9On8tpC05bcNqC0xactuC0BactOG3BaQtOW3DagtMWnLbgtAWnLThtwWkLTltw2oLTFpy24LQFpy04bcFpC05bcNqC0xactuC0BactOG3BaQtOW3DagtMWnLbgtAWnLThtwWkLTltw2oLTFpy24LQFpy04bcFpC05bcNqC0xactuC0BactOG3BaQtOW3DagtMWnLbgtAWnLThtwWkLTltw2oLTFpy24LQFpy04bcFpC05bcPp335++SE7bcNqG0zactuG0DadtOG3DaRtO23DahtM2nLbhtA2nbThtw2kbTttw2obTNpy24bQNp204bcNpG07bcNqG0zactuG0DadtOG3DaRtO23DahtM2nLbhtA2nbThtw2kbTttw2obTNpy24bQNp204bcNpG07bcNqG0zactuG0DadtOG3DaRtO23DahtM2nLbhtA2nbThtw2kbTttw2obTNpy24bQNp204bcNpG07bcNqG03b59+GIwhFaHLHY6Ox6hr4CaTpNBZJDGpAFZDFZSlYg8uMbFX6peoKcEqTy54ZrCXWEWmSFUJ9so1ObCq0wnnMPemxkCDls9GP6V0TL2CZMpsfH44JL52K5p4Wlwiq69Dr239vQU6GFtBe9KLSSPWESmUci+A/E5fgPRAr+91AX/3u4Ef97qE9bXorvhUpZ1E/KPLAYHAnafL1ewrt80AULwPngPMyVx8ty+DIO3xazMfU5sAh8Bp+M4/On8/lMnr6ENJfFQkX6AOZaCY7DtAks3ibqmM1rno1RwtkcsdrGY3oR/3wmT0t4OpvFKkUL8D4W1RMp1i2q4l0smmcKiZBmpBWeEe5FBpIMko1IEUV4aiwW27NsH7PnJe4JDyMknB0ezQwJD2QRXikR+zfM+sDs3dDyNDY1GxwCTgRngRMos1BCFi8hC0tm8RKyeAlZKCELJWShhCyU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kYPrt5OXtxSXaxZf+jNV8/IY1Cx6nMM59q+xJrj4U28LwUPKkqiMLlSdsLBPG+x1W7usXXdCsD8qLLTNy2LdXqFSjuSk0+CydwCDYzt/8yB/3Sv+qBSlj27BEMh/ABW4qmINCmVuZHN0cmVhbQ0KZW5kb2JqDQoyMCAwIG9iag0KPDwvVHlwZS9YUmVmL1NpemUgMjAvV1sgMSA0IDJdIC9Sb290IDEgMCBSL0luZm8gOSAwIFIvSURbPDMyMThENkU0QjEwRjNFNDk4MEE3OTdBQUUxRTVCOTZEPjwzMjE4RDZFNEIxMEYzRTQ5ODBBNzk3QUFFMUU1Qjk2RD5dIC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDgxPj4NCnN0cmVhbQ0KeJxjYACC//8ZgaQgAwOIqoVQW8EU42EwxcwPobaDKZZlEOo2mGIVYGBgAmoQYGCGUCwQihVCMUEoqBI2kIZfMB4jkMfeATaFI5eBAQACHwkSDQplbmRzdHJlYW0NCmVuZG9iag0KeHJlZg0KMCAyMQ0KMDAwMDAwMDAxMCA2NTUzNSBmDQowMDAwMDAwMDE3IDAwMDAwIG4NCjAwMDAwMDAxMjUgMDAwMDAgbg0KMDAwMDAwMDE4MSAwMDAwMCBuDQowMDAwMDAwNDUxIDAwMDAwIG4NCjAwMDAwMDA3ODMgMDAwMDAgbg0KMDAwMDAwMDk1MSAwMDAwMCBuDQowMDAwMDAxMTkwIDAwMDAwIG4NCjAwMDAwMDEyNDMgMDAwMDAgbg0KMDAwMDAwMTI5NiAwMDAwMCBuDQowMDAwMDAwMDExIDY1NTM1IGYNCjAwMDAwMDAwMTIgNjU1MzUgZg0KMDAwMDAwMDAxMyA2NTUzNSBmDQowMDAwMDAwMDE0IDY1NTM1IGYNCjAwMDAwMDAwMTUgNjU1MzUgZg0KMDAwMDAwMDAxNiA2NTUzNSBmDQowMDAwMDAwMDE3IDY1NTM1IGYNCjAwMDAwMDAwMDAgNjU1MzUgZg0KMDAwMDAwMTkyOCAwMDAwMCBuDQowMDAwMDAyMTU3IDAwMDAwIG4NCjAwMDAxODU1MTkgMDAwMDAgbg0KdHJhaWxlcg0KPDwvU2l6ZSAyMS9Sb290IDEgMCBSL0luZm8gOSAwIFIvSURbPDMyMThENkU0QjEwRjNFNDk4MEE3OTdBQUUxRTVCOTZEPjwzMjE4RDZFNEIxMEYzRTQ5ODBBNzk3QUFFMUU1Qjk2RD5dID4+DQpzdGFydHhyZWYNCjE4NTc5OQ0KJSVFT0YNCnhyZWYNCjAgMA0KdHJhaWxlcg0KPDwvU2l6ZSAyMS9Sb290IDEgMCBSL0luZm8gOSAwIFIvSURbPDMyMThENkU0QjEwRjNFNDk4MEE3OTdBQUUxRTVCOTZEPjwzMjE4RDZFNEIxMEYzRTQ5ODBBNzk3QUFFMUU1Qjk2RD5dIC9QcmV2IDE4NTc5OS9YUmVmU3RtIDE4NTUxOT4+DQpzdGFydHhyZWYNCjE4NjM3Ng0KJSVFT0Y=", - "fileName": "05-versions-space.pdf" - } - } - }, - { - "json": { - "filename": "n8n-screenshot.png", - "fileName": "/tmp/n8n-screenshot.png" - }, - "pairedItem": { - "item": 2 - }, - "binary": { - "binaryfile": { - "mimeType": "image/png", - "data": "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", - "fileName": "n8n-screenshot.png" - } - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Write Binary File" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:08.477Z", - "stoppedAt": "2025-05-15T21:20:08.489Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/60-snapshot.json b/test-workflows/snapshots/60-snapshot.json deleted file mode 100644 index c5175a23060..00000000000 --- a/test-workflows/snapshots/60-snapshot.json +++ /dev/null @@ -1,426 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "hints": [], - "startTime": 1734619806689, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Taiga": [ - { - "hints": [], - "startTime": 1734619806690, - "executionTime": 895, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "tags": [ - "json array" - ], - "due_date": { - "object": true - }, - "due_date_reason": "", - "due_date_status": "not_set", - "attachments": [ - "json array" - ], - "project": 399742, - "project_extra_info": { - "object": true - }, - "status": 2801529, - "status_extra_info": { - "object": true - }, - "assigned_to": { - "object": true - }, - "assigned_to_extra_info": { - "object": true - }, - "owner": 470482, - "owner_extra_info": { - "object": true - }, - "is_watcher": false, - "total_watchers": 0, - "is_voter": false, - "total_voters": 0, - "id": 1880291, - "ref": 1927, - "severity": 1996617, - "priority": 1201587, - "type": 1206845, - "milestone": { - "object": true - }, - "created_date": "2024-12-19T14:50:07.433Z", - "modified_date": "2024-12-19T14:50:07.438Z", - "finished_date": { - "object": true - }, - "subject": "Test", - "external_reference": { - "object": true - }, - "version": 1, - "watchers": [ - "json array" - ], - "is_blocked": false, - "blocked_note": "", - "is_closed": false, - "comment": "", - "generated_user_stories": { - "object": true - }, - "blocked_note_html": "", - "description": "TestIssue", - "description_html": "

TestIssue

" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Taiga1": [ - { - "hints": [], - "startTime": 1734619807585, - "executionTime": 1712, - "source": [ - { - "previousNode": "Taiga" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "tags": [ - "json array" - ], - "due_date": { - "object": true - }, - "due_date_reason": "", - "due_date_status": "not_set", - "attachments": [ - "json array" - ], - "project": 399742, - "project_extra_info": { - "object": true - }, - "status": 2801529, - "status_extra_info": { - "object": true - }, - "assigned_to": { - "object": true - }, - "assigned_to_extra_info": { - "object": true - }, - "owner": 470482, - "owner_extra_info": { - "object": true - }, - "is_watcher": false, - "total_watchers": 0, - "is_voter": false, - "total_voters": 0, - "id": 1880291, - "ref": 1927, - "severity": 1996617, - "priority": 1201587, - "type": 1206845, - "milestone": { - "object": true - }, - "created_date": "2024-12-19T14:50:07.433Z", - "modified_date": "2024-12-19T14:50:09.170Z", - "finished_date": { - "object": true - }, - "subject": "UpdatedTest", - "external_reference": { - "object": true - }, - "version": 2, - "watchers": [ - "json array" - ], - "is_blocked": false, - "blocked_note": "", - "is_closed": false, - "comment": "", - "generated_user_stories": { - "object": true - }, - "blocked_note_html": "", - "description": "TestIssue", - "description_html": "

TestIssue

" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Taiga2": [ - { - "hints": [], - "startTime": 1734619809297, - "executionTime": 847, - "source": [ - { - "previousNode": "Taiga1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "tags": [ - "json array" - ], - "due_date": { - "object": true - }, - "due_date_reason": "", - "due_date_status": "not_set", - "attachments": [ - "json array" - ], - "project": 399742, - "project_extra_info": { - "object": true - }, - "status": 2801529, - "status_extra_info": { - "object": true - }, - "assigned_to": { - "object": true - }, - "assigned_to_extra_info": { - "object": true - }, - "owner": 470482, - "owner_extra_info": { - "object": true - }, - "is_watcher": false, - "total_watchers": 0, - "is_voter": false, - "total_voters": 0, - "id": 1880291, - "ref": 1927, - "severity": 1996617, - "priority": 1201587, - "type": 1206845, - "milestone": { - "object": true - }, - "created_date": "2024-12-19T14:50:07.433Z", - "modified_date": "2024-12-19T14:50:09.170Z", - "finished_date": { - "object": true - }, - "subject": "UpdatedTest", - "external_reference": { - "object": true - }, - "version": 2, - "watchers": [ - "json array" - ], - "is_blocked": false, - "blocked_note": "", - "is_closed": false, - "comment": "", - "generated_user_stories": { - "object": true - }, - "blocked_note_html": "", - "description": "TestIssue", - "description_html": "

TestIssue

", - "neighbors": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Taiga3": [ - { - "hints": [], - "startTime": 1734619810144, - "executionTime": 918, - "source": [ - { - "previousNode": "Taiga2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "tags": [ - "json array" - ], - "due_date": { - "object": true - }, - "due_date_reason": "", - "due_date_status": "not_set", - "attachments": [ - "json array" - ], - "project": 399742, - "project_extra_info": { - "object": true - }, - "status": 2801529, - "status_extra_info": { - "object": true - }, - "assigned_to": { - "object": true - }, - "assigned_to_extra_info": { - "object": true - }, - "owner": 470482, - "owner_extra_info": { - "object": true - }, - "is_watcher": false, - "total_watchers": 0, - "is_voter": false, - "total_voters": 0, - "id": 1880291, - "ref": 1927, - "severity": 1996617, - "priority": 1201587, - "type": 1206845, - "milestone": { - "object": true - }, - "created_date": "2024-12-19T14:50:07.433Z", - "modified_date": "2024-12-19T14:50:09.170Z", - "finished_date": { - "object": true - }, - "subject": "UpdatedTest", - "external_reference": { - "object": true - }, - "version": 2, - "watchers": [ - "json array" - ], - "is_blocked": false, - "blocked_note": "", - "is_closed": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Taiga4": [ - { - "hints": [], - "startTime": 1734619811062, - "executionTime": 997, - "source": [ - { - "previousNode": "Taiga3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Taiga4" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2024-12-19T14:50:06.689Z", - "stoppedAt": "2024-12-19T14:50:12.059Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/61-snapshot.json b/test-workflows/snapshots/61-snapshot.json deleted file mode 100644 index 81ec5475cdc..00000000000 --- a/test-workflows/snapshots/61-snapshot.json +++ /dev/null @@ -1,800 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747344008506, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Spotify": [ - { - "startTime": 1747344008506, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 86, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "external_urls": { - "object": true - }, - "followers": { - "object": true - }, - "genres": [ - "json array" - ], - "href": "https://api.spotify.com/v1/artists/0dwFxqYkvZLSA6U6XfQcDV", - "id": "0dwFxqYkvZLSA6U6XfQcDV", - "images": [ - "json array" - ], - "name": "Fairuz", - "popularity": 65, - "type": "artist", - "uri": "spotify:artist:0dwFxqYkvZLSA6U6XfQcDV" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Spotify8": [ - { - "startTime": 1747344008592, - "executionIndex": 2, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 289, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "collaborative": false, - "description": "null", - "external_urls": { - "object": true - }, - "href": "https://api.spotify.com/v1/playlists/4bH0XDDKQCIuE0pOECEjqu", - "id": "4bH0XDDKQCIuE0pOECEjqu", - "images": { - "object": true - }, - "name": "Playlist1747343948797", - "owner": { - "object": true - }, - "primary_color": { - "object": true - }, - "public": true, - "snapshot_id": "AAAAAUa4yHYgRLtKdnQXKpsqfHKJ0N1N", - "tracks": { - "object": true - }, - "type": "playlist", - "uri": "spotify:playlist:4bH0XDDKQCIuE0pOECEjqu" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Spotify14": [ - { - "startTime": 1747344008881, - "executionIndex": 3, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 80, - "executionStatus": "success", - "data": { - "main": [ - [] - ] - } - } - ], - "Spotify17": [ - { - "startTime": 1747344008961, - "executionIndex": 4, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 110, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "added_at": "2021-03-09T20:01:56Z", - "track": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Spotify1": [ - { - "startTime": 1747344009071, - "executionIndex": 5, - "source": [ - { - "previousNode": "Spotify" - } - ], - "hints": [], - "executionTime": 125, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "album_type": "album", - "total_tracks": 9, - "available_markets": [ - "json array" - ], - "external_urls": { - "object": true - }, - "href": "https://api.spotify.com/v1/albums/5ZJnifXQ8ovGURQY7XhgCG", - "id": "5ZJnifXQ8ovGURQY7XhgCG", - "images": [ - "json array" - ], - "name": "Fauroziat فيروزياΨͺ (Instrumental)", - "release_date": "2024-12-21", - "release_date_precision": "day", - "type": "album", - "uri": "spotify:album:5ZJnifXQ8ovGURQY7XhgCG", - "artists": [ - "json array" - ], - "album_group": "album" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Spotify3": [ - { - "startTime": 1747344009196, - "executionIndex": 6, - "source": [ - { - "previousNode": "Spotify" - } - ], - "hints": [], - "executionTime": 181, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "album": { - "object": true - }, - "artists": [ - "json array" - ], - "available_markets": [ - "json array" - ], - "disc_number": 1, - "duration_ms": 202997, - "explicit": false, - "external_ids": { - "object": true - }, - "external_urls": { - "object": true - }, - "href": "https://api.spotify.com/v1/tracks/1Xf9s0vxxGyiMHQDtxK9Cu", - "id": "1Xf9s0vxxGyiMHQDtxK9Cu", - "is_local": false, - "is_playable": true, - "name": "Konna Netlaka", - "popularity": 62, - "preview_url": "https://p.scdn.co/mp3-preview/43c539282f10c04afca6c696af461ca23fac47c8?cid=d6fc82a01ffb43538b33c4003257c758", - "track_number": 1, - "type": "track", - "uri": "spotify:track:1Xf9s0vxxGyiMHQDtxK9Cu" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Spotify2": [ - { - "startTime": 1747344009377, - "executionIndex": 7, - "source": [ - { - "previousNode": "Spotify" - } - ], - "hints": [], - "executionTime": 126, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "external_urls": { - "object": true - }, - "followers": { - "object": true - }, - "genres": [ - "json array" - ], - "href": "https://api.spotify.com/v1/artists/1FcYCSOydUCgoauspPwypS", - "id": "1FcYCSOydUCgoauspPwypS", - "images": [ - "json array" - ], - "name": "Majida El Roumi", - "popularity": 49, - "type": "artist", - "uri": "spotify:artist:1FcYCSOydUCgoauspPwypS" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Spotify9": [ - { - "startTime": 1747344009503, - "executionIndex": 8, - "source": [ - { - "previousNode": "Spotify8" - } - ], - "hints": [], - "executionTime": 252, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "collaborative": false, - "description": "null", - "external_urls": { - "object": true - }, - "followers": { - "object": true - }, - "href": "https://api.spotify.com/v1/playlists/4bH0XDDKQCIuE0pOECEjqu", - "id": "4bH0XDDKQCIuE0pOECEjqu", - "images": { - "object": true - }, - "name": "Playlist1747343948797", - "owner": { - "object": true - }, - "primary_color": { - "object": true - }, - "public": true, - "snapshot_id": "AAAAAUa4yHYgRLtKdnQXKpsqfHKJ0N1N", - "tracks": { - "object": true - }, - "type": "playlist", - "uri": "spotify:playlist:4bH0XDDKQCIuE0pOECEjqu" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Spotify4": [ - { - "startTime": 1747344009755, - "executionIndex": 9, - "source": [ - { - "previousNode": "Spotify1" - } - ], - "hints": [], - "executionTime": 123, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "album_type": "album", - "total_tracks": 9, - "available_markets": [ - "json array" - ], - "external_urls": { - "object": true - }, - "href": "https://api.spotify.com/v1/albums/5ZJnifXQ8ovGURQY7XhgCG", - "id": "5ZJnifXQ8ovGURQY7XhgCG", - "images": [ - "json array" - ], - "name": "Fauroziat فيروزياΨͺ (Instrumental)", - "release_date": "2024-12-21", - "release_date_precision": "day", - "type": "album", - "uri": "spotify:album:5ZJnifXQ8ovGURQY7XhgCG", - "artists": [ - "json array" - ], - "tracks": { - "object": true - }, - "copyrights": [ - "json array" - ], - "external_ids": { - "object": true - }, - "genres": [ - "json array" - ], - "label": "Atef Bahr", - "popularity": 32 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Spotify10": [ - { - "startTime": 1747344009878, - "executionIndex": 10, - "source": [ - { - "previousNode": "Spotify9" - } - ], - "hints": [], - "executionTime": 283, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "snapshot_id": "AAAAAtWGmmpVobJ7hcaQCTx5KdKU+0hQ" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Spotify13": [ - { - "startTime": 1747344010161, - "executionIndex": 11, - "source": [ - { - "previousNode": "Spotify4" - } - ], - "hints": [], - "executionTime": 334, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "album_type": "ep", - "artists": [ - "json array" - ], - "available_markets": [ - "json array" - ], - "external_urls": { - "object": true - }, - "href": "https://api.spotify.com/v1/albums/5UAGPzp0t0DIczTuIPLCak", - "id": "5UAGPzp0t0DIczTuIPLCak", - "images": [ - "json array" - ], - "name": "Cotinga", - "release_date": "2025-04-17", - "release_date_precision": "day", - "total_tracks": 6, - "type": "album", - "uri": "spotify:album:5UAGPzp0t0DIczTuIPLCak" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Spotify11": [ - { - "startTime": 1747344010495, - "executionIndex": 12, - "source": [ - { - "previousNode": "Spotify10" - } - ], - "hints": [], - "executionTime": 108, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "added_at": "2025-05-15T21:20:10Z", - "added_by": { - "object": true - }, - "is_local": false, - "primary_color": { - "object": true - }, - "track": { - "object": true - }, - "video_thumbnail": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Spotify5": [ - { - "startTime": 1747344010603, - "executionIndex": 13, - "source": [ - { - "previousNode": "Spotify13" - } - ], - "hints": [], - "executionTime": 95, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "artists": [ - "json array" - ], - "available_markets": [ - "json array" - ], - "disc_number": 1, - "duration_ms": 304266, - "explicit": false, - "external_urls": { - "object": true - }, - "href": "https://api.spotify.com/v1/tracks/3M84jLJbkduv2Zc3xIHPRl", - "id": "3M84jLJbkduv2Zc3xIHPRl", - "name": "Tayr Lwarwar طير Ψ§Ω„ΩˆΨ±ΩˆΨ§Ψ±", - "preview_url": "https://p.scdn.co/mp3-preview/eb6cfe4dab53c8c9e2689539539fd8e492212fcc?cid=d6fc82a01ffb43538b33c4003257c758", - "track_number": 1, - "type": "track", - "uri": "spotify:track:3M84jLJbkduv2Zc3xIHPRl", - "is_local": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Spotify12": [ - { - "startTime": 1747344010698, - "executionIndex": 14, - "source": [ - { - "previousNode": "Spotify11" - } - ], - "hints": [], - "executionTime": 278, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Spotify6": [ - { - "startTime": 1747344010976, - "executionIndex": 15, - "source": [ - { - "previousNode": "Spotify5" - } - ], - "hints": [], - "executionTime": 87, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "album": { - "object": true - }, - "artists": [ - "json array" - ], - "available_markets": [ - "json array" - ], - "disc_number": 1, - "duration_ms": 304266, - "explicit": false, - "external_ids": { - "object": true - }, - "external_urls": { - "object": true - }, - "href": "https://api.spotify.com/v1/tracks/3M84jLJbkduv2Zc3xIHPRl", - "id": "3M84jLJbkduv2Zc3xIHPRl", - "is_local": false, - "name": "Tayr Lwarwar طير Ψ§Ω„ΩˆΨ±ΩˆΨ§Ψ±", - "popularity": 31, - "preview_url": "https://p.scdn.co/mp3-preview/eb6cfe4dab53c8c9e2689539539fd8e492212fcc?cid=d6fc82a01ffb43538b33c4003257c758", - "track_number": 1, - "type": "track", - "uri": "spotify:track:3M84jLJbkduv2Zc3xIHPRl" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Spotify16": [ - { - "startTime": 1747344011063, - "executionIndex": 16, - "source": [ - { - "previousNode": "Spotify12" - } - ], - "hints": [], - "executionTime": 235, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "collaborative": false, - "description": "null", - "external_urls": { - "object": true - }, - "followers": { - "object": true - }, - "href": "https://api.spotify.com/v1/playlists/0BQ1JO1OK3l9Vg7zeHnJ9v", - "id": "0BQ1JO1OK3l9Vg7zeHnJ9v", - "images": [ - "json array" - ], - "primary_color": { - "object": true - }, - "name": "Playlist1747344011065", - "type": "playlist", - "uri": "spotify:playlist:0BQ1JO1OK3l9Vg7zeHnJ9v", - "owner": { - "object": true - }, - "public": true, - "snapshot_id": "AAAI50lYiWenT2YxYHUn3ksjudGeNJEo", - "tracks": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Spotify7": [ - { - "startTime": 1747344011298, - "executionIndex": 17, - "source": [ - { - "previousNode": "Spotify6" - } - ], - "hints": [], - "executionTime": 70, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "danceability": 0.599, - "energy": 0.639, - "key": 0, - "loudness": -7.542, - "mode": 1, - "speechiness": 0.0448, - "acousticness": 0.307, - "instrumentalness": 0.363, - "liveness": 0.0685, - "valence": 0.78, - "tempo": 119.334, - "type": "audio_features", - "id": "3M84jLJbkduv2Zc3xIHPRl", - "uri": "spotify:track:3M84jLJbkduv2Zc3xIHPRl", - "track_href": "https://api.spotify.com/v1/tracks/3M84jLJbkduv2Zc3xIHPRl", - "analysis_url": "https://api.spotify.com/v1/audio-analysis/3M84jLJbkduv2Zc3xIHPRl", - "duration_ms": 304267, - "time_signature": 4 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Spotify7" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:08.505Z", - "stoppedAt": "2025-05-15T21:20:11.368Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/62-snapshot.json b/test-workflows/snapshots/62-snapshot.json deleted file mode 100644 index 908ad1e8c04..00000000000 --- a/test-workflows/snapshots/62-snapshot.json +++ /dev/null @@ -1,243 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747344008708, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ProfitWell": [ - { - "startTime": 1747344008708, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 457, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "fd47e958-b607-46be-b5b1-2e87c43dffbf", - "name": "n8nqa", - "currency": "eur", - "timezone": "Europe/Paris" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ProfitWell1": [ - { - "startTime": 1747344009165, - "executionIndex": 2, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 898, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "recurring_revenue": 0, - "date": "2025-05", - "new_recurring_revenue": 0, - "existing_recurring_revenue": 0, - "churned_recurring_revenue": 0, - "churned_recurring_revenue_cancellations": 0, - "churned_recurring_revenue_delinquent": 0, - "upgraded_recurring_revenue": 0, - "downgraded_recurring_revenue": 0, - "reactivated_recurring_revenue": 0, - "active_customers": 0, - "new_customers": 0, - "existing_customers": 0, - "churned_customers": 0, - "churned_customers_cancellations": 0, - "churned_customers_delinquent": 0, - "upgraded_customers": 0, - "downgraded_customers": 0, - "reactivated_customers": 0, - "average_revenue_per_user": 0, - "lifetime_value": { - "object": true - }, - "customers_churn_rate": { - "object": true - }, - "customers_churn_cancellations_rate": { - "object": true - }, - "customers_churn_delinquent_rate": { - "object": true - }, - "revenue_churn_rate": { - "object": true - }, - "revenue_churn_cancellations_rate": { - "object": true - }, - "revenue_churn_delinquent_rate": { - "object": true - }, - "revenue_retention_rate": { - "object": true - }, - "customers_retention_rate": { - "object": true - }, - "downgrade_rate": { - "object": true - }, - "upgrade_rate": { - "object": true - }, - "growth_rate": { - "object": true - }, - "saas_quick_ratio": { - "object": true - }, - "converted_recurring_revenue": 0, - "new_trialing_customers": 0, - "existing_trialing_customers": 1, - "churned_trialing_customers": 0, - "converted_customers": 0, - "active_trialing_customers": 1, - "customer_conversion_rate": 0, - "trial_conversion_time": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ProfitWell2": [ - { - "startTime": 1747344010063, - "executionIndex": 3, - "source": [ - { - "previousNode": "ProfitWell1" - } - ], - "hints": [], - "executionTime": 880, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "new_recurring_revenue": [ - "json array" - ], - "upgraded_recurring_revenue": [ - "json array" - ], - "downgraded_recurring_revenue": [ - "json array" - ], - "churned_recurring_revenue": [ - "json array" - ], - "reactivated_recurring_revenue": [ - "json array" - ], - "new_customers": [ - "json array" - ], - "upgraded_customers": [ - "json array" - ], - "downgraded_customers": [ - "json array" - ], - "churned_customers": [ - "json array" - ], - "reactivated_customers": [ - "json array" - ], - "recurring_revenue": [ - "json array" - ], - "cumulative_net_new_mrr": [ - "json array" - ], - "future_churn_mrr": [ - "json array" - ], - "cumulative_new_trialing_customers": [ - "json array" - ], - "active_customers": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "ProfitWell2" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:08.708Z", - "stoppedAt": "2025-05-15T21:20:10.943Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/63-snapshot.json b/test-workflows/snapshots/63-snapshot.json deleted file mode 100644 index 9d7f828a2df..00000000000 --- a/test-workflows/snapshots/63-snapshot.json +++ /dev/null @@ -1,156 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747344009798, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Segment": [ - { - "startTime": 1747344009798, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 692, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Segment1": [ - { - "startTime": 1747344010490, - "executionIndex": 2, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 683, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Segment3": [ - { - "startTime": 1747344011173, - "executionIndex": 3, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 674, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Segment2": [ - { - "startTime": 1747344011847, - "executionIndex": 4, - "source": [ - { - "previousNode": "Segment1" - } - ], - "hints": [], - "executionTime": 669, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Segment2" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:09.797Z", - "stoppedAt": "2025-05-15T21:20:12.516Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/66-snapshot.json b/test-workflows/snapshots/66-snapshot.json deleted file mode 100644 index 75d207397c8..00000000000 --- a/test-workflows/snapshots/66-snapshot.json +++ /dev/null @@ -1,439 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1676891395112, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Storyblok": [ - { - "startTime": 1676891395113, - "executionTime": 311, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "TestEntry", - "parent_id": 0, - "created_at": "2021-02-25T10:06:43.421Z", - "deleted_at": { - "object": true - }, - "group_id": "569ce22f-d30b-4d92-a549-de49fdf4d1aa", - "sort_by_date": { - "object": true - }, - "updated_at": "2023-02-20T11:06:39.624Z", - "published_at": "2023-02-20T11:06:39.462Z", - "id": 39088436, - "uuid": "f52c4a20-cc6a-4994-bec1-9d3ea0e4fa9e", - "is_folder": false, - "published": false, - "slug": "testentry", - "path": { - "object": true - }, - "full_slug": "testentry", - "position": 20, - "unpublished_changes": false, - "is_startpage": false, - "pinned": false, - "publish_at": { - "object": true - }, - "expire_at": { - "object": true - }, - "first_published_at": "2021-02-25T10:07:50.000Z", - "release_ids": [ - "json array" - ], - "stage": { - "object": true - }, - "alternates": [ - "json array" - ], - "default_root": "", - "disble_fe_editor": true, - "last_author": { - "object": true - }, - "content_summary": { - "object": true - }, - "content_type": "Blank", - "tag_list": [ - "json array" - ], - "can_not_view": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Storyblok1": [ - { - "startTime": 1676891395424, - "executionTime": 112, - "source": [ - { - "previousNode": "Storyblok" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "TestEntry", - "parent_id": 0, - "group_id": "569ce22f-d30b-4d92-a549-de49fdf4d1aa", - "alternates": [ - "json array" - ], - "created_at": "2021-02-25T10:06:43.421Z", - "deleted_at": { - "object": true - }, - "sort_by_date": { - "object": true - }, - "tag_list": [ - "json array" - ], - "updated_at": "2023-02-20T11:06:39.624Z", - "published_at": "2023-02-20T11:06:39.462Z", - "id": 39088436, - "uuid": "f52c4a20-cc6a-4994-bec1-9d3ea0e4fa9e", - "is_folder": false, - "content": { - "object": true - }, - "published": false, - "slug": "testentry", - "path": { - "object": true - }, - "full_slug": "testentry", - "default_root": "", - "disble_fe_editor": true, - "parent": { - "object": true - }, - "is_startpage": false, - "unpublished_changes": false, - "meta_data": { - "object": true - }, - "imported_at": { - "object": true - }, - "preview_token": { - "object": true - }, - "pinned": false, - "breadcrumbs": [ - "json array" - ], - "publish_at": { - "object": true - }, - "expire_at": { - "object": true - }, - "first_published_at": "2021-02-25T10:07:50.000Z", - "last_author": { - "object": true - }, - "user_ids": [ - "json array" - ], - "space_role_ids": [ - "json array" - ], - "translated_slugs": [ - "json array" - ], - "localized_paths": [ - "json array" - ], - "position": 20, - "translated_stories": [ - "json array" - ], - "can_not_view": false, - "is_scheduled": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Storyblok2": [ - { - "startTime": 1676891395536, - "executionTime": 260, - "source": [ - { - "previousNode": "Storyblok1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "TestEntry", - "parent_id": 0, - "group_id": "569ce22f-d30b-4d92-a549-de49fdf4d1aa", - "alternates": [ - "json array" - ], - "created_at": "2021-02-25T10:06:43.421Z", - "deleted_at": { - "object": true - }, - "sort_by_date": { - "object": true - }, - "tag_list": [ - "json array" - ], - "updated_at": "2023-02-20T11:09:55.693Z", - "published_at": "2023-02-20T11:09:55.664Z", - "id": 39088436, - "uuid": "f52c4a20-cc6a-4994-bec1-9d3ea0e4fa9e", - "is_folder": false, - "content": { - "object": true - }, - "published": true, - "slug": "testentry", - "path": { - "object": true - }, - "full_slug": "testentry", - "default_root": "", - "disble_fe_editor": true, - "parent": { - "object": true - }, - "is_startpage": false, - "unpublished_changes": false, - "meta_data": { - "object": true - }, - "imported_at": { - "object": true - }, - "preview_token": { - "object": true - }, - "pinned": false, - "breadcrumbs": [ - "json array" - ], - "publish_at": { - "object": true - }, - "expire_at": { - "object": true - }, - "first_published_at": "2021-02-25T10:07:50.000Z", - "last_author": { - "object": true - }, - "user_ids": [ - "json array" - ], - "space_role_ids": [ - "json array" - ], - "translated_slugs": [ - "json array" - ], - "localized_paths": [ - "json array" - ], - "position": 20, - "translated_stories": [ - "json array" - ], - "can_not_view": { - "object": true - }, - "is_scheduled": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Storyblok3": [ - { - "startTime": 1676891395796, - "executionTime": 182, - "source": [ - { - "previousNode": "Storyblok2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "TestEntry", - "parent_id": 0, - "group_id": "569ce22f-d30b-4d92-a549-de49fdf4d1aa", - "alternates": [ - "json array" - ], - "created_at": "2021-02-25T10:06:43.421Z", - "deleted_at": { - "object": true - }, - "sort_by_date": { - "object": true - }, - "tag_list": [ - "json array" - ], - "updated_at": "2023-02-20T11:09:55.945Z", - "published_at": "2023-02-20T11:09:55.664Z", - "id": 39088436, - "uuid": "f52c4a20-cc6a-4994-bec1-9d3ea0e4fa9e", - "is_folder": false, - "content": { - "object": true - }, - "published": false, - "slug": "testentry", - "path": { - "object": true - }, - "full_slug": "testentry", - "default_root": "", - "disble_fe_editor": true, - "parent": { - "object": true - }, - "is_startpage": false, - "unpublished_changes": false, - "meta_data": { - "object": true - }, - "imported_at": { - "object": true - }, - "preview_token": { - "object": true - }, - "pinned": false, - "breadcrumbs": [ - "json array" - ], - "publish_at": { - "object": true - }, - "expire_at": { - "object": true - }, - "first_published_at": "2021-02-25T10:07:50.000Z", - "last_author": { - "object": true - }, - "user_ids": [ - "json array" - ], - "space_role_ids": [ - "json array" - ], - "translated_slugs": [ - "json array" - ], - "localized_paths": [ - "json array" - ], - "position": 20, - "translated_stories": [ - "json array" - ], - "can_not_view": { - "object": true - }, - "is_scheduled": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Storyblok3" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-02-20T11:09:55.111Z", - "stoppedAt": "2023-02-20T11:09:55.978Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/67-snapshot.json b/test-workflows/snapshots/67-snapshot.json deleted file mode 100644 index e587aa3947f..00000000000 --- a/test-workflows/snapshots/67-snapshot.json +++ /dev/null @@ -1,1348 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747344010437, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Twist": [ - { - "startTime": 1747344010437, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 319, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "archived": false, - "color": 1, - "created_ts": 1747344011, - "creator": 511904, - "default_groups": [ - "json array" - ], - "default_recipients": [ - "json array" - ], - "description": "", - "filters": { - "object": true - }, - "icon": 0, - "id": 786209, - "is_favorited": false, - "name": "TestChannel1747344010441", - "public": false, - "use_default_recipients": false, - "user_ids": [ - "json array" - ], - "version": 0, - "workspace_id": 164330 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Twist4": [ - { - "startTime": 1747344010756, - "executionIndex": 2, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 323, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "actions": [ - "json array" - ], - "attachments": [ - "json array" - ], - "content": "Message 1747344010758", - "conversation_id": 1067233, - "creator": 511904, - "creator_name": "nodeqa", - "deleted": false, - "direct_group_mentions": [ - "json array" - ], - "direct_mentions": [ - "json array" - ], - "id": 102322002, - "last_edited_ts": { - "object": true - }, - "obj_index": 2740, - "posted_ts": 1747344011, - "reactions": { - "object": true - }, - "system_message": { - "object": true - }, - "version": 0, - "workspace_id": 164330 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Twist13": [ - { - "startTime": 1747344011079, - "executionIndex": 3, - "source": [ - { - "previousNode": "Twist" - } - ], - "hints": [], - "executionTime": 333, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "actions": [ - "json array" - ], - "attachments": [ - "json array" - ], - "channel_id": 786209, - "closed": false, - "comment_count": 0, - "content": "test", - "creator": 511904, - "creator_name": "nodeqa", - "direct_group_mentions": [ - "json array" - ], - "direct_mentions": [ - "json array" - ], - "groups": [ - "json array" - ], - "id": 6968332, - "in_inbox": false, - "is_archived": true, - "is_saved": false, - "last_comment": { - "object": true - }, - "last_edited_ts": { - "object": true - }, - "last_obj_index": -1, - "last_updated_ts": 1747344011, - "muted_until_ts": { - "object": true - }, - "participants": [ - "json array" - ], - "pinned": false, - "pinned_ts": { - "object": true - }, - "posted_ts": 1747344011, - "reactions": { - "object": true - }, - "recipients": [ - "json array" - ], - "responders": [ - "json array" - ], - "snippet": "test", - "snippet_creator": 511904, - "snippet_mask_avatar_url": { - "object": true - }, - "snippet_mask_poster": { - "object": true - }, - "starred": false, - "system_message": { - "object": true - }, - "title": "Thread1747344011082", - "to_emails": [ - "json array" - ], - "version": 0, - "workspace_id": 164330 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Twist9": [ - { - "startTime": 1747344011412, - "executionIndex": 4, - "source": [ - { - "previousNode": "Twist4" - } - ], - "hints": [], - "executionTime": 295, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "actions": [ - "json array" - ], - "attachments": [ - "json array" - ], - "content": "Message 1747344010758", - "conversation_id": 1067233, - "creator": 511904, - "creator_name": "nodeqa", - "deleted": false, - "direct_group_mentions": [ - "json array" - ], - "direct_mentions": [ - "json array" - ], - "id": 102322002, - "last_edited_ts": { - "object": true - }, - "obj_index": 2740, - "posted_ts": 1747344011, - "reactions": { - "object": true - }, - "system_message": { - "object": true - }, - "version": 0, - "workspace_id": 164330 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Twist18": [ - { - "startTime": 1747344011707, - "executionIndex": 5, - "source": [ - { - "previousNode": "Twist13" - } - ], - "hints": [], - "executionTime": 365, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "actions": [ - "json array" - ], - "attachments": [ - "json array" - ], - "channel_id": 786209, - "content": "Comment1747344011710", - "creator": 511904, - "creator_name": "nodeqa", - "deleted": false, - "deleted_by": { - "object": true - }, - "direct_group_mentions": [ - "json array" - ], - "direct_mentions": [ - "json array" - ], - "groups": [ - "json array" - ], - "id": 95587076, - "last_edited_ts": { - "object": true - }, - "obj_index": 0, - "posted_ts": 1747344012, - "reactions": { - "object": true - }, - "recipients": [ - "json array" - ], - "system_message": { - "object": true - }, - "thread_id": 6968332, - "to_emails": [ - "json array" - ], - "version": 0, - "workspace_id": 164330 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Twist10": [ - { - "startTime": 1747344012072, - "executionIndex": 6, - "source": [ - { - "previousNode": "Twist9" - } - ], - "hints": [], - "executionTime": 143, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "actions": [ - "json array" - ], - "attachments": [ - "json array" - ], - "content": "Message 1747344010758", - "conversation_id": 1067233, - "creator": 511904, - "creator_name": "nodeqa", - "deleted": false, - "direct_group_mentions": [ - "json array" - ], - "direct_mentions": [ - "json array" - ], - "id": 102322002, - "last_edited_ts": { - "object": true - }, - "obj_index": 2740, - "posted_ts": 1747344011, - "reactions": { - "object": true - }, - "system_message": { - "object": true - }, - "version": 0, - "workspace_id": 164330 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Twist19": [ - { - "startTime": 1747344012215, - "executionIndex": 7, - "source": [ - { - "previousNode": "Twist18" - } - ], - "hints": [], - "executionTime": 156, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "actions": [ - "json array" - ], - "attachments": [ - "json array" - ], - "channel_id": 786209, - "content": "Comment1747344011710", - "creator": 511904, - "creator_name": "nodeqa", - "deleted": false, - "deleted_by": { - "object": true - }, - "direct_group_mentions": [ - "json array" - ], - "direct_mentions": [ - "json array" - ], - "groups": [ - "json array" - ], - "id": 95587076, - "last_edited_ts": { - "object": true - }, - "obj_index": 0, - "posted_ts": 1747344012, - "reactions": { - "object": true - }, - "recipients": [ - "json array" - ], - "system_message": { - "object": true - }, - "thread_id": 6968332, - "to_emails": [ - "json array" - ], - "version": 0, - "workspace_id": 164330 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Twist11": [ - { - "startTime": 1747344012371, - "executionIndex": 8, - "source": [ - { - "previousNode": "Twist10" - } - ], - "hints": [], - "executionTime": 158, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "actions": [ - "json array" - ], - "attachments": [ - "json array" - ], - "content": "Message 1747344010758", - "conversation_id": 1067233, - "creator": 511904, - "creator_name": "nodeqa", - "deleted": false, - "direct_group_mentions": [ - "json array" - ], - "direct_mentions": [ - "json array" - ], - "id": 102322002, - "last_edited_ts": { - "object": true - }, - "obj_index": 2740, - "posted_ts": 1747344011, - "reactions": { - "object": true - }, - "system_message": { - "object": true - }, - "version": 1, - "workspace_id": 164330 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Twist20": [ - { - "startTime": 1747344012529, - "executionIndex": 9, - "source": [ - { - "previousNode": "Twist19" - } - ], - "hints": [], - "executionTime": 174, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "actions": [ - "json array" - ], - "attachments": [ - "json array" - ], - "channel_id": 786209, - "content": "Updated Content", - "creator": 511904, - "creator_name": "nodeqa", - "deleted": false, - "deleted_by": { - "object": true - }, - "direct_group_mentions": [ - "json array" - ], - "direct_mentions": [ - "json array" - ], - "groups": [ - "json array" - ], - "id": 95587076, - "last_edited_ts": 1747344012, - "obj_index": 0, - "posted_ts": 1747344012, - "reactions": { - "object": true - }, - "recipients": [ - "json array" - ], - "system_message": { - "object": true - }, - "thread_id": 6968332, - "to_emails": [ - "json array" - ], - "version": 1, - "workspace_id": 164330 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Twist12": [ - { - "startTime": 1747344012703, - "executionIndex": 10, - "source": [ - { - "previousNode": "Twist11" - } - ], - "hints": [], - "executionTime": 148, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": "ok" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Twist21": [ - { - "startTime": 1747344012851, - "executionIndex": 11, - "source": [ - { - "previousNode": "Twist20" - } - ], - "hints": [], - "executionTime": 168, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "actions": [ - "json array" - ], - "attachments": [ - "json array" - ], - "channel_id": 786209, - "content": "Updated Content", - "creator": 511904, - "creator_name": "nodeqa", - "deleted": false, - "deleted_by": { - "object": true - }, - "direct_group_mentions": [ - "json array" - ], - "direct_mentions": [ - "json array" - ], - "groups": [ - "json array" - ], - "id": 95587076, - "last_edited_ts": 1747344013, - "obj_index": 0, - "posted_ts": 1747344012, - "reactions": { - "object": true - }, - "recipients": [ - "json array" - ], - "system_message": { - "object": true - }, - "thread_id": 6968332, - "to_emails": [ - "json array" - ], - "version": 1, - "workspace_id": 164330 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Twist22": [ - { - "startTime": 1747344013019, - "executionIndex": 12, - "source": [ - { - "previousNode": "Twist21" - } - ], - "hints": [], - "executionTime": 171, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": "ok" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Twist14": [ - { - "startTime": 1747344013190, - "executionIndex": 13, - "source": [ - { - "previousNode": "Twist22" - } - ], - "hints": [], - "executionTime": 143, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "actions": [ - "json array" - ], - "attachments": [ - "json array" - ], - "channel_id": 786209, - "closed": false, - "comment_count": 1, - "content": "test", - "creator": 511904, - "creator_name": "nodeqa", - "direct_group_mentions": [ - "json array" - ], - "direct_mentions": [ - "json array" - ], - "groups": [ - "json array" - ], - "id": 6968332, - "in_inbox": false, - "is_archived": true, - "is_saved": false, - "last_comment": { - "object": true - }, - "last_edited_ts": { - "object": true - }, - "last_obj_index": 0, - "last_updated_ts": 1747344012, - "muted_until_ts": { - "object": true - }, - "participants": [ - "json array" - ], - "pinned": false, - "pinned_ts": { - "object": true - }, - "posted_ts": 1747344011, - "reactions": { - "object": true - }, - "recipients": [ - "json array" - ], - "responders": [ - "json array" - ], - "snippet": "test", - "snippet_creator": 511904, - "snippet_mask_avatar_url": { - "object": true - }, - "snippet_mask_poster": { - "object": true - }, - "starred": false, - "system_message": { - "object": true - }, - "title": "Thread1747344011082", - "to_emails": [ - "json array" - ], - "version": 3, - "workspace_id": 164330 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Twist15": [ - { - "startTime": 1747344013333, - "executionIndex": 14, - "source": [ - { - "previousNode": "Twist14" - } - ], - "hints": [], - "executionTime": 172, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "actions": [ - "json array" - ], - "attachments": [ - "json array" - ], - "channel_id": 786209, - "closed": false, - "comment_count": 1, - "content": "Updated Content", - "creator": 511904, - "creator_name": "nodeqa", - "direct_group_mentions": [ - "json array" - ], - "direct_mentions": [ - "json array" - ], - "groups": [ - "json array" - ], - "id": 6968332, - "in_inbox": false, - "is_archived": true, - "is_saved": false, - "last_comment": { - "object": true - }, - "last_edited_ts": 1747344013, - "last_obj_index": 0, - "last_updated_ts": 1747344012, - "muted_until_ts": { - "object": true - }, - "participants": [ - "json array" - ], - "pinned": false, - "pinned_ts": { - "object": true - }, - "posted_ts": 1747344011, - "reactions": { - "object": true - }, - "recipients": [ - "json array" - ], - "responders": [ - "json array" - ], - "snippet": "test", - "snippet_creator": 511904, - "snippet_mask_avatar_url": { - "object": true - }, - "snippet_mask_poster": { - "object": true - }, - "starred": false, - "system_message": { - "object": true - }, - "title": "Thread1747344011082", - "to_emails": [ - "json array" - ], - "version": 4, - "workspace_id": 164330 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Twist17": [ - { - "startTime": 1747344013505, - "executionIndex": 15, - "source": [ - { - "previousNode": "Twist15" - } - ], - "hints": [], - "executionTime": 151, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "actions": [ - "json array" - ], - "attachments": [ - "json array" - ], - "channel_id": 786209, - "closed": false, - "comment_count": 1, - "content": "Updated Content", - "creator": 511904, - "creator_name": "nodeqa", - "direct_group_mentions": [ - "json array" - ], - "direct_mentions": [ - "json array" - ], - "groups": [ - "json array" - ], - "id": 6968332, - "in_inbox": false, - "is_archived": true, - "is_saved": false, - "last_comment": { - "object": true - }, - "last_edited_ts": 1747344013, - "last_obj_index": 0, - "last_updated_ts": 1747344012, - "muted_until_ts": { - "object": true - }, - "participants": [ - "json array" - ], - "pinned": false, - "pinned_ts": { - "object": true - }, - "posted_ts": 1747344011, - "reactions": { - "object": true - }, - "recipients": [ - "json array" - ], - "responders": [ - "json array" - ], - "snippet": "Updated Content", - "snippet_creator": 511904, - "snippet_mask_avatar_url": { - "object": true - }, - "snippet_mask_poster": { - "object": true - }, - "starred": false, - "system_message": { - "object": true - }, - "title": "Thread1747344011082", - "to_emails": [ - "json array" - ], - "version": 4, - "workspace_id": 164330 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Twist16": [ - { - "startTime": 1747344013656, - "executionIndex": 16, - "source": [ - { - "previousNode": "Twist17" - } - ], - "hints": [], - "executionTime": 156, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": "ok" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Twist1": [ - { - "startTime": 1747344013812, - "executionIndex": 17, - "source": [ - { - "previousNode": "Twist16" - } - ], - "hints": [], - "executionTime": 298, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "archived": false, - "color": 1, - "created_ts": 1747344011, - "creator": 511904, - "default_groups": [ - "json array" - ], - "default_recipients": [ - "json array" - ], - "description": "", - "filters": { - "object": true - }, - "icon": 0, - "id": 786209, - "is_favorited": false, - "name": "UpdatedChannel1747344013817", - "public": false, - "use_default_recipients": false, - "user_ids": [ - "json array" - ], - "version": 1, - "workspace_id": 164330 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Twist2": [ - { - "startTime": 1747344014110, - "executionIndex": 18, - "source": [ - { - "previousNode": "Twist1" - } - ], - "hints": [], - "executionTime": 143, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "archived": false, - "color": 1, - "created_ts": 1747344011, - "creator": 511904, - "default_groups": [ - "json array" - ], - "default_recipients": [ - "json array" - ], - "description": "", - "filters": { - "object": true - }, - "icon": 0, - "id": 786209, - "is_favorited": false, - "name": "UpdatedChannel1747344013817", - "public": false, - "use_default_recipients": false, - "user_ids": [ - "json array" - ], - "version": 1, - "workspace_id": 164330 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Twist3": [ - { - "startTime": 1747344014253, - "executionIndex": 19, - "source": [ - { - "previousNode": "Twist2" - } - ], - "hints": [], - "executionTime": 206, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "archived": false, - "color": 1, - "created_ts": 1614250659, - "creator": 511904, - "default_groups": [ - "json array" - ], - "default_recipients": [ - "json array" - ], - "description": "", - "filters": { - "object": true - }, - "icon": 0, - "id": 437294, - "is_favorited": false, - "name": "General", - "public": true, - "use_default_recipients": false, - "user_ids": [ - "json array" - ], - "version": 0, - "workspace_id": 164330 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Twist5": [ - { - "startTime": 1747344014459, - "executionIndex": 20, - "source": [ - { - "previousNode": "Twist3" - } - ], - "hints": [], - "executionTime": 145, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": "ok" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Twist6": [ - { - "startTime": 1747344014605, - "executionIndex": 21, - "source": [ - { - "previousNode": "Twist5" - } - ], - "hints": [], - "executionTime": 147, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": "ok" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Twist7": [ - { - "startTime": 1747344014752, - "executionIndex": 22, - "source": [ - { - "previousNode": "Twist6" - } - ], - "hints": [], - "executionTime": 169, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": "ok" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Twist8": [ - { - "startTime": 1747344014921, - "executionIndex": 23, - "source": [ - { - "previousNode": "Twist7" - } - ], - "hints": [], - "executionTime": 180, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "status": "ok" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Twist8" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:10.436Z", - "stoppedAt": "2025-05-15T21:20:15.101Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/70-snapshot.json b/test-workflows/snapshots/70-snapshot.json deleted file mode 100644 index cafc3d1b570..00000000000 --- a/test-workflows/snapshots/70-snapshot.json +++ /dev/null @@ -1,395 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747344010966, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Contentful5": [ - { - "startTime": 1747344010966, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 60, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "code": "en-US", - "name": "English (United States)", - "default": true, - "fallbackCode": { - "object": true - }, - "sys": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Contentful": [ - { - "startTime": 1747344011026, - "executionIndex": 2, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 61, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "title": "Static sites are great", - "slug": "static-sites-are-great", - "heroImage": { - "object": true - }, - "description": "Worry less about security, caching, and talking to the server. Static sites are the new thing.", - "body": "## The case for the static site generator\n\nMore and more developers are jumping on the \"go static train\", and rightfully so. Static pages are fast, lightweight, they scale well. They are more secure, and simple to maintain and they allow you to focus all your time and effort on the user interface. Often times, this dedication really shows.\n\nIt just so happens that static site generators are mostly loved by developers, but not by the average Joe. They do not offer WYSIWYG, previewing on demo sites may take an update cycle, they are often based on markdown text files, and they require some knowledge of modern day repositories.\n\nMoreover, when teams are collaborating, it can get complicated quickly. Has this article already been proof-read or reviewed? Is this input valid? Are user permissions available, e.g. for administering adding and removing team members? Can this article be published at a future date? How can a large repository of content be categorized, organized, and searched? All these requirements have previously been more or less solved within the admin area of your CMS. But of course with all the baggage that made you leave the appserver-app-database-in-one-big-blob stack in the first place.\n\n## Content APIs to the rescue\n\nAn alternative is decoupling the content management aspect from the system. And then replacing the maintenance prone server with a cloud based web service offering. Effectively, instead of your CMS of old, you move to a [Content Management as a Service (CMaaS)](https://www.contentful.com/r/knowledgebase/content-as-a-service/ \"Content Management as a Service (CMaaS)\") world, with a content API to deliver all your content. That way, you get the all the [benefits of content management features](http://www.digett.com/blog/01/16/2014/pairing-static-websites-cms \"benefits of content management features\") while still being able to embrace the static site generator mantra.\n\nIt so happens that Contentful is offering just that kind of content API. A service that\n\n* from the ground up has been designed to be fast, scalable, secure, and offer high uptime, so that you don’t have to worry about maintenance ever again.\n* offers a powerful editor and lots of flexibility in creating templates for your documents that your editors can reuse and combine, so that no developers resources are required in everyday writing and updating tasks.\n* separates content from presentation, so you can reuse your content repository for any device platform your heart desires. That way, you can COPE (\"create once, publish everywhere\").\n* offers webhooks that you can use to rebuild your static site in a fully automated fashion every time your content is modified.\n\nExtracted from the article [CMS-functionality for static site generators](https://www.contentful.com/r/knowledgebase/contentful-api-cms-static-site-generators/ \"CMS-functionality for static site generators\"). Read more about the [static site generators supported by Contentful](https://www.contentful.com/developers/docs/tools/staticsitegenerators/ \"static site generators supported by Contentful\").", - "author": { - "object": true - }, - "publishDate": "2017-05-16T00:00+02:00", - "tags": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Contentful1": [ - { - "startTime": 1747344011087, - "executionIndex": 3, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 54, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "title", - "name": "Title", - "type": "Symbol", - "localized": false, - "required": true, - "disabled": false, - "omitted": false - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": "slug", - "name": "Slug", - "type": "Symbol", - "localized": false, - "required": true, - "disabled": false, - "omitted": false - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": "heroImage", - "name": "Hero Image", - "type": "Link", - "localized": false, - "required": true, - "disabled": false, - "omitted": false, - "linkType": "Asset" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": "description", - "name": "Description", - "type": "Text", - "localized": false, - "required": true, - "disabled": false, - "omitted": false - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": "body", - "name": "Body", - "type": "Text", - "localized": false, - "required": true, - "disabled": false, - "omitted": false - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": "author", - "name": "Author", - "type": "Link", - "localized": false, - "required": false, - "disabled": false, - "omitted": false, - "linkType": "Entry" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": "publishDate", - "name": "Publish Date", - "type": "Date", - "localized": false, - "required": true, - "disabled": false, - "omitted": false - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": "tags", - "name": "Tags", - "type": "Array", - "localized": false, - "required": false, - "disabled": false, - "omitted": false, - "items": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Contentful2": [ - { - "startTime": 1747344011141, - "executionIndex": 4, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 51, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "title": "TestAsset", - "file": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Contentful6": [ - { - "startTime": 1747344011192, - "executionIndex": 5, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 51, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "sys": { - "object": true - }, - "name": "n8n", - "locales": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Contentful4": [ - { - "startTime": 1747344011243, - "executionIndex": 6, - "source": [ - { - "previousNode": "Contentful" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "title": "Static sites are great", - "slug": "static-sites-are-great", - "heroImage": { - "object": true - }, - "description": "Worry less about security, caching, and talking to the server. Static sites are the new thing.", - "body": "## The case for the static site generator\n\nMore and more developers are jumping on the \"go static train\", and rightfully so. Static pages are fast, lightweight, they scale well. They are more secure, and simple to maintain and they allow you to focus all your time and effort on the user interface. Often times, this dedication really shows.\n\nIt just so happens that static site generators are mostly loved by developers, but not by the average Joe. They do not offer WYSIWYG, previewing on demo sites may take an update cycle, they are often based on markdown text files, and they require some knowledge of modern day repositories.\n\nMoreover, when teams are collaborating, it can get complicated quickly. Has this article already been proof-read or reviewed? Is this input valid? Are user permissions available, e.g. for administering adding and removing team members? Can this article be published at a future date? How can a large repository of content be categorized, organized, and searched? All these requirements have previously been more or less solved within the admin area of your CMS. But of course with all the baggage that made you leave the appserver-app-database-in-one-big-blob stack in the first place.\n\n## Content APIs to the rescue\n\nAn alternative is decoupling the content management aspect from the system. And then replacing the maintenance prone server with a cloud based web service offering. Effectively, instead of your CMS of old, you move to a [Content Management as a Service (CMaaS)](https://www.contentful.com/r/knowledgebase/content-as-a-service/ \"Content Management as a Service (CMaaS)\") world, with a content API to deliver all your content. That way, you get the all the [benefits of content management features](http://www.digett.com/blog/01/16/2014/pairing-static-websites-cms \"benefits of content management features\") while still being able to embrace the static site generator mantra.\n\nIt so happens that Contentful is offering just that kind of content API. A service that\n\n* from the ground up has been designed to be fast, scalable, secure, and offer high uptime, so that you don’t have to worry about maintenance ever again.\n* offers a powerful editor and lots of flexibility in creating templates for your documents that your editors can reuse and combine, so that no developers resources are required in everyday writing and updating tasks.\n* separates content from presentation, so you can reuse your content repository for any device platform your heart desires. That way, you can COPE (\"create once, publish everywhere\").\n* offers webhooks that you can use to rebuild your static site in a fully automated fashion every time your content is modified.\n\nExtracted from the article [CMS-functionality for static site generators](https://www.contentful.com/r/knowledgebase/contentful-api-cms-static-site-generators/ \"CMS-functionality for static site generators\"). Read more about the [static site generators supported by Contentful](https://www.contentful.com/developers/docs/tools/staticsitegenerators/ \"static site generators supported by Contentful\").", - "author": { - "object": true - }, - "publishDate": "2017-05-16T00:00+02:00", - "tags": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Contentful3": [ - { - "startTime": 1747344011243, - "executionIndex": 7, - "source": [ - { - "previousNode": "Contentful2" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "title": "TestAsset", - "file": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Contentful3" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:10.966Z", - "stoppedAt": "2025-05-15T21:20:11.243Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/71-snapshot.json b/test-workflows/snapshots/71-snapshot.json deleted file mode 100644 index 59b9eb1acc4..00000000000 --- a/test-workflows/snapshots/71-snapshot.json +++ /dev/null @@ -1,395 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747344011005, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Contentful1": [ - { - "startTime": 1747344011005, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 200, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "title", - "name": "Title", - "type": "Symbol", - "localized": false, - "required": true, - "disabled": false, - "omitted": false - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": "slug", - "name": "Slug", - "type": "Symbol", - "localized": false, - "required": true, - "disabled": false, - "omitted": false - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": "heroImage", - "name": "Hero Image", - "type": "Link", - "localized": false, - "required": true, - "disabled": false, - "omitted": false, - "linkType": "Asset" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": "description", - "name": "Description", - "type": "Text", - "localized": false, - "required": true, - "disabled": false, - "omitted": false - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": "body", - "name": "Body", - "type": "Text", - "localized": false, - "required": true, - "disabled": false, - "omitted": false - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": "author", - "name": "Author", - "type": "Link", - "localized": false, - "required": false, - "disabled": false, - "omitted": false, - "linkType": "Entry" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": "publishDate", - "name": "Publish Date", - "type": "Date", - "localized": false, - "required": true, - "disabled": false, - "omitted": false - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "id": "tags", - "name": "Tags", - "type": "Array", - "localized": false, - "required": false, - "disabled": false, - "omitted": false, - "items": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Contentful": [ - { - "startTime": 1747344011205, - "executionIndex": 2, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 183, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "title": "Static sites are great", - "slug": "static-sites-are-great", - "heroImage": { - "object": true - }, - "description": "Worry less about security, caching, and talking to the server. Static sites are the new thing.", - "body": "## The case for the static site generator\n\nMore and more developers are jumping on the \"go static train\", and rightfully so. Static pages are fast, lightweight, they scale well. They are more secure, and simple to maintain and they allow you to focus all your time and effort on the user interface. Often times, this dedication really shows.\n\nIt just so happens that static site generators are mostly loved by developers, but not by the average Joe. They do not offer WYSIWYG, previewing on demo sites may take an update cycle, they are often based on markdown text files, and they require some knowledge of modern day repositories.\n\nMoreover, when teams are collaborating, it can get complicated quickly. Has this article already been proof-read or reviewed? Is this input valid? Are user permissions available, e.g. for administering adding and removing team members? Can this article be published at a future date? How can a large repository of content be categorized, organized, and searched? All these requirements have previously been more or less solved within the admin area of your CMS. But of course with all the baggage that made you leave the appserver-app-database-in-one-big-blob stack in the first place.\n\n## Content APIs to the rescue\n\nAn alternative is decoupling the content management aspect from the system. And then replacing the maintenance prone server with a cloud based web service offering. Effectively, instead of your CMS of old, you move to a [Content Management as a Service (CMaaS)](https://www.contentful.com/r/knowledgebase/content-as-a-service/ \"Content Management as a Service (CMaaS)\") world, with a content API to deliver all your content. That way, you get the all the [benefits of content management features](http://www.digett.com/blog/01/16/2014/pairing-static-websites-cms \"benefits of content management features\") while still being able to embrace the static site generator mantra.\n\nIt so happens that Contentful is offering just that kind of content API. A service that\n\n* from the ground up has been designed to be fast, scalable, secure, and offer high uptime, so that you don’t have to worry about maintenance ever again.\n* offers a powerful editor and lots of flexibility in creating templates for your documents that your editors can reuse and combine, so that no developers resources are required in everyday writing and updating tasks.\n* separates content from presentation, so you can reuse your content repository for any device platform your heart desires. That way, you can COPE (\"create once, publish everywhere\").\n* offers webhooks that you can use to rebuild your static site in a fully automated fashion every time your content is modified.\n\nExtracted from the article [CMS-functionality for static site generators](https://www.contentful.com/r/knowledgebase/contentful-api-cms-static-site-generators/ \"CMS-functionality for static site generators\"). Read more about the [static site generators supported by Contentful](https://www.contentful.com/developers/docs/tools/staticsitegenerators/ \"static site generators supported by Contentful\").", - "author": { - "object": true - }, - "publishDate": "2017-05-16T00:00+02:00", - "tags": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Contentful5": [ - { - "startTime": 1747344011388, - "executionIndex": 3, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 177, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "code": "en-US", - "name": "English (United States)", - "default": true, - "fallbackCode": { - "object": true - }, - "sys": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Contentful2": [ - { - "startTime": 1747344011565, - "executionIndex": 4, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 210, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "title": "TestAsset", - "file": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Contentful6": [ - { - "startTime": 1747344011775, - "executionIndex": 5, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 187, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "sys": { - "object": true - }, - "name": "n8n", - "locales": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Contentful4": [ - { - "startTime": 1747344011962, - "executionIndex": 6, - "source": [ - { - "previousNode": "Contentful" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "title": "Static sites are great", - "slug": "static-sites-are-great", - "heroImage": { - "object": true - }, - "description": "Worry less about security, caching, and talking to the server. Static sites are the new thing.", - "body": "## The case for the static site generator\n\nMore and more developers are jumping on the \"go static train\", and rightfully so. Static pages are fast, lightweight, they scale well. They are more secure, and simple to maintain and they allow you to focus all your time and effort on the user interface. Often times, this dedication really shows.\n\nIt just so happens that static site generators are mostly loved by developers, but not by the average Joe. They do not offer WYSIWYG, previewing on demo sites may take an update cycle, they are often based on markdown text files, and they require some knowledge of modern day repositories.\n\nMoreover, when teams are collaborating, it can get complicated quickly. Has this article already been proof-read or reviewed? Is this input valid? Are user permissions available, e.g. for administering adding and removing team members? Can this article be published at a future date? How can a large repository of content be categorized, organized, and searched? All these requirements have previously been more or less solved within the admin area of your CMS. But of course with all the baggage that made you leave the appserver-app-database-in-one-big-blob stack in the first place.\n\n## Content APIs to the rescue\n\nAn alternative is decoupling the content management aspect from the system. And then replacing the maintenance prone server with a cloud based web service offering. Effectively, instead of your CMS of old, you move to a [Content Management as a Service (CMaaS)](https://www.contentful.com/r/knowledgebase/content-as-a-service/ \"Content Management as a Service (CMaaS)\") world, with a content API to deliver all your content. That way, you get the all the [benefits of content management features](http://www.digett.com/blog/01/16/2014/pairing-static-websites-cms \"benefits of content management features\") while still being able to embrace the static site generator mantra.\n\nIt so happens that Contentful is offering just that kind of content API. A service that\n\n* from the ground up has been designed to be fast, scalable, secure, and offer high uptime, so that you don’t have to worry about maintenance ever again.\n* offers a powerful editor and lots of flexibility in creating templates for your documents that your editors can reuse and combine, so that no developers resources are required in everyday writing and updating tasks.\n* separates content from presentation, so you can reuse your content repository for any device platform your heart desires. That way, you can COPE (\"create once, publish everywhere\").\n* offers webhooks that you can use to rebuild your static site in a fully automated fashion every time your content is modified.\n\nExtracted from the article [CMS-functionality for static site generators](https://www.contentful.com/r/knowledgebase/contentful-api-cms-static-site-generators/ \"CMS-functionality for static site generators\"). Read more about the [static site generators supported by Contentful](https://www.contentful.com/developers/docs/tools/staticsitegenerators/ \"static site generators supported by Contentful\").", - "author": { - "object": true - }, - "publishDate": "2017-05-16T00:00+02:00", - "tags": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Contentful3": [ - { - "startTime": 1747344011962, - "executionIndex": 7, - "source": [ - { - "previousNode": "Contentful2" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "title": "TestAsset", - "file": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Contentful3" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:11.005Z", - "stoppedAt": "2025-05-15T21:20:11.962Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/72-snapshot.json b/test-workflows/snapshots/72-snapshot.json deleted file mode 100644 index c59ee837c73..00000000000 --- a/test-workflows/snapshots/72-snapshot.json +++ /dev/null @@ -1,852 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1676891396434, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Read Binary File": [ - { - "startTime": 1676891396435, - "executionTime": 24, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "binary": { - "data": { - "mimeType": "image/png", - "fileType": "image", - "fileExtension": "png", - "data": "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", - "directory": "/tmp", - "fileName": "n8n-logo.png", - "fileSize": "2.67 kB" - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Zulip": [ - { - "startTime": 1676891396459, - "executionTime": 475, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": "success", - "msg": "", - "id": 328952614 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Zulip7": [ - { - "startTime": 1676891396934, - "executionTime": 376, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": "success", - "msg": "", - "subscribed": { - "object": true - }, - "already_subscribed": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Zulip12": [ - { - "startTime": 1676891397310, - "executionTime": 332, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "email": "nodeqa@n8n.io", - "user_id": 392595, - "avatar_version": 1, - "is_admin": true, - "is_owner": true, - "is_guest": false, - "is_billing_admin": false, - "role": 100, - "is_bot": false, - "full_name": "nodeqa", - "timezone": "Europe/Paris", - "is_active": true, - "date_joined": "2021-02-25T14:05:26.897277+00:00", - "avatar_url": { - "object": true - }, - "delivery_email": "nodeqa@n8n.io" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Zulip6": [ - { - "startTime": 1676891397643, - "executionTime": 516, - "source": [ - { - "previousNode": "Read Binary File" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": "success", - "msg": "", - "uri": "https://nodeqa.zulipchat.com//user_uploads/33385/j5pTnm6OfvyVgGiNXDVJ2Lkm/n8n-logo.png" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Zulip1": [ - { - "startTime": 1676891398160, - "executionTime": 478, - "source": [ - { - "previousNode": "Zulip" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": "success", - "msg": "" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Zulip8": [ - { - "startTime": 1676891398638, - "executionTime": 424, - "source": [ - { - "previousNode": "Zulip7" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "can_remove_subscribers_group_id": 35057, - "date_created": 1676891397, - "description": "testing stream from n8n", - "first_message_id": 328952616, - "history_public_to_subscribers": true, - "invite_only": false, - "is_web_public": false, - "message_retention_days": { - "object": true - }, - "name": "StreamTest", - "rendered_description": "

testing stream from n8n

", - "stream_id": 371131, - "stream_post_policy": 1, - "is_announcement_only": false - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "can_remove_subscribers_group_id": 35057, - "date_created": 1614934173, - "description": "testing stream from n8n", - "first_message_id": 228916381, - "history_public_to_subscribers": true, - "invite_only": false, - "is_web_public": false, - "message_retention_days": { - "object": true - }, - "name": "UpdateStream1614934177572", - "rendered_description": "

testing stream from n8n

", - "stream_id": 279988, - "stream_post_policy": 1, - "is_announcement_only": false - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "can_remove_subscribers_group_id": 35057, - "date_created": 1614934197, - "description": "testing stream from n8n", - "first_message_id": 228916526, - "history_public_to_subscribers": true, - "invite_only": false, - "is_web_public": false, - "message_retention_days": { - "object": true - }, - "name": "UpdateStream1614934202284", - "rendered_description": "

testing stream from n8n

", - "stream_id": 280046, - "stream_post_policy": 1, - "is_announcement_only": false - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "can_remove_subscribers_group_id": 35057, - "date_created": 1614261926, - "description": "Everyone is added to this stream by default. Welcome! :octopus:", - "first_message_id": 227771365, - "history_public_to_subscribers": true, - "invite_only": false, - "is_web_public": false, - "message_retention_days": { - "object": true - }, - "name": "general", - "rendered_description": "

Everyone is added to this stream by default. Welcome! :octopus:

", - "stream_id": 278952, - "stream_post_policy": 1, - "is_announcement_only": false - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "can_remove_subscribers_group_id": 35057, - "date_created": 1614262281, - "description": "testing stream", - "first_message_id": 227772218, - "history_public_to_subscribers": true, - "invite_only": true, - "is_web_public": false, - "message_retention_days": { - "object": true - }, - "name": "test", - "rendered_description": "

testing stream

", - "stream_id": 278954, - "stream_post_policy": 1, - "is_announcement_only": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Zulip10": [ - { - "startTime": 1676891399062, - "executionTime": 434, - "source": [ - { - "previousNode": "Zulip7" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "audible_notifications": { - "object": true - }, - "can_remove_subscribers_group_id": 35057, - "color": "#c2c2c2", - "date_created": 1676891397, - "description": "testing stream from n8n", - "desktop_notifications": { - "object": true - }, - "email_address": "streamtest.84bda58354e62c8acafb42fa7db1a3be.show-sender@streams.zulipchat.com", - "email_notifications": { - "object": true - }, - "first_message_id": 328952616, - "history_public_to_subscribers": true, - "in_home_view": true, - "invite_only": false, - "is_announcement_only": false, - "is_muted": false, - "is_web_public": false, - "message_retention_days": { - "object": true - }, - "name": "StreamTest", - "pin_to_top": false, - "push_notifications": { - "object": true - }, - "rendered_description": "

testing stream from n8n

", - "stream_id": 371131, - "stream_post_policy": 1, - "stream_weekly_traffic": { - "object": true - }, - "wildcard_mentions_notify": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "audible_notifications": { - "object": true - }, - "can_remove_subscribers_group_id": 35057, - "color": "#b0a5fd", - "date_created": 1614934173, - "description": "testing stream from n8n", - "desktop_notifications": { - "object": true - }, - "email_address": "updatestream1614934177572.0a60ffc95fcff95cdd638cbdb200b767.show-sender@streams.zulipchat.com", - "email_notifications": { - "object": true - }, - "first_message_id": 228916381, - "history_public_to_subscribers": true, - "in_home_view": true, - "invite_only": false, - "is_announcement_only": false, - "is_muted": false, - "is_web_public": false, - "message_retention_days": { - "object": true - }, - "name": "UpdateStream1614934177572", - "pin_to_top": false, - "push_notifications": { - "object": true - }, - "rendered_description": "

testing stream from n8n

", - "stream_id": 279988, - "stream_post_policy": 1, - "stream_weekly_traffic": 0, - "wildcard_mentions_notify": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "audible_notifications": { - "object": true - }, - "can_remove_subscribers_group_id": 35057, - "color": "#addfe5", - "date_created": 1614934197, - "description": "testing stream from n8n", - "desktop_notifications": { - "object": true - }, - "email_address": "updatestream1614934202284.62a670187b37f80ce229645999a1a786.show-sender@streams.zulipchat.com", - "email_notifications": { - "object": true - }, - "first_message_id": 228916526, - "history_public_to_subscribers": true, - "in_home_view": true, - "invite_only": false, - "is_announcement_only": false, - "is_muted": false, - "is_web_public": false, - "message_retention_days": { - "object": true - }, - "name": "UpdateStream1614934202284", - "pin_to_top": false, - "push_notifications": { - "object": true - }, - "rendered_description": "

testing stream from n8n

", - "stream_id": 280046, - "stream_post_policy": 1, - "stream_weekly_traffic": 0, - "wildcard_mentions_notify": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "audible_notifications": { - "object": true - }, - "can_remove_subscribers_group_id": 35057, - "color": "#a6c7e5", - "date_created": 1614262281, - "description": "testing stream", - "desktop_notifications": { - "object": true - }, - "email_address": "test.fce82544c99d40f13a35dc8706e86faa.show-sender@streams.zulipchat.com", - "email_notifications": { - "object": true - }, - "first_message_id": 227772218, - "history_public_to_subscribers": true, - "in_home_view": true, - "invite_only": true, - "is_announcement_only": false, - "is_muted": false, - "is_web_public": false, - "message_retention_days": { - "object": true - }, - "name": "test", - "pin_to_top": false, - "push_notifications": { - "object": true - }, - "rendered_description": "

testing stream

", - "stream_id": 278954, - "stream_post_policy": 1, - "stream_weekly_traffic": 0, - "wildcard_mentions_notify": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Zulip13": [ - { - "startTime": 1676891399496, - "executionTime": 420, - "source": [ - { - "previousNode": "Zulip12" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": "success", - "msg": "", - "user": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Zulip2": [ - { - "startTime": 1676891399916, - "executionTime": 447, - "source": [ - { - "previousNode": "Zulip1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": "success", - "msg": "", - "id": 328952630 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Function": [ - { - "startTime": 1676891400363, - "executionTime": 9, - "source": [ - { - "previousNode": "Zulip8" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "can_remove_subscribers_group_id": 35057, - "date_created": 1676891397, - "description": "testing stream from n8n", - "first_message_id": 328952616, - "history_public_to_subscribers": true, - "invite_only": false, - "is_web_public": false, - "message_retention_days": { - "object": true - }, - "name": "StreamTest", - "rendered_description": "

testing stream from n8n

", - "stream_id": 371131, - "stream_post_policy": 1, - "is_announcement_only": false - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Zulip14": [ - { - "startTime": 1676891400373, - "executionTime": 0, - "source": [ - { - "previousNode": "Zulip13" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": "success", - "msg": "", - "user": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Zulip3": [ - { - "startTime": 1676891400373, - "executionTime": 435, - "source": [ - { - "previousNode": "Zulip2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": "success", - "msg": "", - "message": { - "object": true - }, - "raw_content": "Update content 1676891398165" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Zulip9": [ - { - "startTime": 1676891400808, - "executionTime": 375, - "source": [ - { - "previousNode": "Function" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": "success", - "msg": "" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Zulip15": [ - { - "startTime": 1676891401184, - "executionTime": 0, - "source": [ - { - "previousNode": "Zulip14" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": "success", - "msg": "", - "user": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Zulip4": [ - { - "startTime": 1676891401184, - "executionTime": 374, - "source": [ - { - "previousNode": "Zulip3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": "success", - "msg": "" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Zulip11": [ - { - "startTime": 1676891401558, - "executionTime": 431, - "source": [ - { - "previousNode": "Zulip9" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": "success", - "msg": "" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Zulip5": [ - { - "startTime": 1676891401989, - "executionTime": 483, - "source": [ - { - "previousNode": "Zulip4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "result": "success", - "msg": "" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Zulip5" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-02-20T11:09:56.431Z", - "stoppedAt": "2023-02-20T11:10:02.472Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/73-snapshot.json b/test-workflows/snapshots/73-snapshot.json deleted file mode 100644 index 79b73c686ee..00000000000 --- a/test-workflows/snapshots/73-snapshot.json +++ /dev/null @@ -1,965 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1678116858529, - "executionTime": 1, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "YouTube13": [ - { - "startTime": 1678116858530, - "executionTime": 703, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "YouTube18": [ - { - "startTime": 1678116859234, - "executionTime": 131, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "youtube#videoCategory", - "etag": "grPOPYEUUZN3ltuDUGEWlrTR90U", - "id": "1", - "snippet": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "YouTube4": [ - { - "startTime": 1678116859365, - "executionTime": 729, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "youtube#playlist", - "etag": "cZxvObsnYlgTQ5KURoRfgGtFZpA", - "id": "PLSug7srxxXFf2x85_vM2dVCsrTnKaCbE0", - "snippet": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "YouTube1": [ - { - "startTime": 1678116860094, - "executionTime": 176, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "youtube#channel", - "etag": "w0TrUr6fWdqCBhWBjQVLPE3AAp0", - "id": "UCiHVTkJtWSdc9N3h0nUGWLg", - "snippet": { - "object": true - }, - "contentDetails": { - "object": true - }, - "statistics": { - "object": true - }, - "topicDetails": { - "object": true - }, - "status": { - "object": true - }, - "brandingSettings": { - "object": true - }, - "contentOwnerDetails": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.5 second4": [ - { - "startTime": 1678116860270, - "executionTime": 513, - "source": [ - { - "previousNode": "YouTube13" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Sleep 0.5 second1": [ - { - "startTime": 1678116860783, - "executionTime": 504, - "source": [ - { - "previousNode": "YouTube4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "youtube#playlist", - "etag": "cZxvObsnYlgTQ5KURoRfgGtFZpA", - "id": "PLSug7srxxXFf2x85_vM2dVCsrTnKaCbE0", - "snippet": { - "object": true - } - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Sleep 0.5 second": [ - { - "startTime": 1678116861287, - "executionTime": 504, - "source": [ - { - "previousNode": "YouTube1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "youtube#channel", - "etag": "w0TrUr6fWdqCBhWBjQVLPE3AAp0", - "id": "UCiHVTkJtWSdc9N3h0nUGWLg", - "snippet": { - "object": true - }, - "contentDetails": { - "object": true - }, - "statistics": { - "object": true - }, - "topicDetails": { - "object": true - }, - "status": { - "object": true - }, - "brandingSettings": { - "object": true - }, - "contentOwnerDetails": { - "object": true - } - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "YouTube14": [ - { - "startTime": 1678116861791, - "executionTime": 163, - "source": [ - { - "previousNode": "Sleep 0.5 second4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "youtube#video", - "etag": "CU762SGxLJSQ9Zoa5a5lMfVPIRY", - "id": "sJO3b0WXm8I", - "snippet": { - "object": true - }, - "status": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "YouTube5": [ - { - "startTime": 1678116861954, - "executionTime": 534, - "source": [ - { - "previousNode": "Sleep 0.5 second1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "youtube#playlist", - "etag": "x1ifiVNV20WdssD7ZZvcIylYEI8", - "id": "PLSug7srxxXFf2x85_vM2dVCsrTnKaCbE0", - "snippet": { - "object": true - }, - "status": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "YouTube": [ - { - "startTime": 1678116862488, - "executionTime": 263, - "source": [ - { - "previousNode": "Sleep 0.5 second" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "youtube#channel", - "etag": "fCuCBJVzK5ufWTV-IWDIgBqRptA", - "id": "UCkdph8FDLpq2UD2i_OlwErA", - "snippet": { - "object": true - }, - "contentDetails": { - "object": true - }, - "statistics": { - "object": true - }, - "status": { - "object": true - }, - "brandingSettings": { - "object": true - }, - "contentOwnerDetails": { - "object": true - }, - "localizations": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "HTTP Request": [ - { - "startTime": 1678116862752, - "executionTime": 0, - "source": [ - { - "previousNode": "YouTube14" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "youtube#video", - "etag": "CU762SGxLJSQ9Zoa5a5lMfVPIRY", - "id": "sJO3b0WXm8I", - "snippet": { - "object": true - }, - "status": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "YouTube9": [ - { - "startTime": 1678116862752, - "executionTime": 491, - "source": [ - { - "previousNode": "YouTube5" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "youtube#playlistItem", - "etag": "51b2-FnJVTOoejrxHMjUub8dQmc", - "id": "UExTdWc3c3J4eFhGZjJ4ODVfdk0yZFZDc3JUbkthQ2JFMC41NkI0NEY2RDEwNTU3Q0M2", - "snippet": { - "object": true - }, - "contentDetails": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "YouTube2": [ - { - "startTime": 1678116863243, - "executionTime": 1225, - "source": [ - { - "previousNode": "YouTube" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "youtube#channel", - "etag": "FJbGUwCbpYOnGAel0jE_WyNVJqk", - "id": "UCkdph8FDLpq2UD2i_OlwErA", - "brandingSettings": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.5 second5": [ - { - "startTime": 1678116864468, - "executionTime": 1, - "source": [ - { - "previousNode": "HTTP Request" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "youtube#video", - "etag": "CU762SGxLJSQ9Zoa5a5lMfVPIRY", - "id": "sJO3b0WXm8I", - "snippet": { - "object": true - }, - "status": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.5 second2": [ - { - "startTime": 1678116864469, - "executionTime": 504, - "source": [ - { - "previousNode": "YouTube9" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "youtube#playlistItem", - "etag": "51b2-FnJVTOoejrxHMjUub8dQmc", - "id": "UExTdWc3c3J4eFhGZjJ4ODVfdk0yZFZDc3JUbkthQ2JFMC41NkI0NEY2RDEwNTU3Q0M2", - "snippet": { - "object": true - }, - "contentDetails": { - "object": true - } - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Read Binary File": [ - { - "startTime": 1678116864974, - "executionTime": 0, - "source": [ - { - "previousNode": "YouTube2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "youtube#channel", - "etag": "FJbGUwCbpYOnGAel0jE_WyNVJqk", - "id": "UCkdph8FDLpq2UD2i_OlwErA", - "brandingSettings": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "YouTube15": [ - { - "startTime": 1678116864974, - "executionTime": 0, - "source": [ - { - "previousNode": "Sleep 0.5 second5" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "youtube#video", - "etag": "CU762SGxLJSQ9Zoa5a5lMfVPIRY", - "id": "sJO3b0WXm8I", - "snippet": { - "object": true - }, - "status": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "YouTube10": [ - { - "startTime": 1678116864974, - "executionTime": 247, - "source": [ - { - "previousNode": "Sleep 0.5 second2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "youtube#playlistItem", - "etag": "vfNj2T80rWmuEtn3bdR9w-gJxKM", - "id": "UExTdWc3c3J4eFhGZjJ4ODVfdk0yZFZDc3JUbkthQ2JFMC41NkI0NEY2RDEwNTU3Q0M2", - "contentDetails": { - "object": true - }, - "status": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "YouTube3": [ - { - "startTime": 1678116865221, - "executionTime": 0, - "source": [ - { - "previousNode": "Read Binary File" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "youtube#channel", - "etag": "FJbGUwCbpYOnGAel0jE_WyNVJqk", - "id": "UCkdph8FDLpq2UD2i_OlwErA", - "brandingSettings": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "YouTube16": [ - { - "startTime": 1678116865221, - "executionTime": 0, - "source": [ - { - "previousNode": "YouTube15" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "youtube#video", - "etag": "CU762SGxLJSQ9Zoa5a5lMfVPIRY", - "id": "sJO3b0WXm8I", - "snippet": { - "object": true - }, - "status": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "YouTube11": [ - { - "startTime": 1678116865221, - "executionTime": 244, - "source": [ - { - "previousNode": "YouTube10" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "youtube#playlistItem", - "etag": "vfNj2T80rWmuEtn3bdR9w-gJxKM", - "id": "UExTdWc3c3J4eFhGZjJ4ODVfdk0yZFZDc3JUbkthQ2JFMC41NkI0NEY2RDEwNTU3Q0M2", - "contentDetails": { - "object": true - }, - "status": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.5 second6": [ - { - "startTime": 1678116865465, - "executionTime": 0, - "source": [ - { - "previousNode": "YouTube16" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "youtube#video", - "etag": "CU762SGxLJSQ9Zoa5a5lMfVPIRY", - "id": "sJO3b0WXm8I", - "snippet": { - "object": true - }, - "status": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Sleep 0.5 second3": [ - { - "startTime": 1678116865465, - "executionTime": 503, - "source": [ - { - "previousNode": "YouTube11" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "youtube#playlistItem", - "etag": "vfNj2T80rWmuEtn3bdR9w-gJxKM", - "id": "UExTdWc3c3J4eFhGZjJ4ODVfdk0yZFZDc3JUbkthQ2JFMC41NkI0NEY2RDEwNTU3Q0M2", - "contentDetails": { - "object": true - }, - "status": { - "object": true - } - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "YouTube17": [ - { - "startTime": 1678116865969, - "executionTime": 0, - "source": [ - { - "previousNode": "Sleep 0.5 second6" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "youtube#video", - "etag": "CU762SGxLJSQ9Zoa5a5lMfVPIRY", - "id": "sJO3b0WXm8I", - "snippet": { - "object": true - }, - "status": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "YouTube12": [ - { - "startTime": 1678116865969, - "executionTime": 589, - "source": [ - { - "previousNode": "Sleep 0.5 second3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "YouTube6": [ - { - "startTime": 1678116866558, - "executionTime": 290, - "source": [ - { - "previousNode": "YouTube12" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "kind": "youtube#playlist", - "etag": "PovpXjHyDmQRrWiHF2py5vCN0sE", - "id": "PLSug7srxxXFf2x85_vM2dVCsrTnKaCbE0", - "snippet": { - "object": true - }, - "status": { - "object": true - }, - "contentDetails": { - "object": true - }, - "player": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "YouTube7": [ - { - "startTime": 1678116866849, - "executionTime": 480, - "source": [ - { - "previousNode": "YouTube6" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "YouTube7" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-03-06T15:34:18.525Z", - "stoppedAt": "2023-03-06T15:34:27.329Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/78-snapshot.json b/test-workflows/snapshots/78-snapshot.json deleted file mode 100644 index 2a66e466b6d..00000000000 --- a/test-workflows/snapshots/78-snapshot.json +++ /dev/null @@ -1,879 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1676891397882, - "executionTime": 1, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "date": "2019-05-05", - "explanation": "This is not a solar eclipse. Pictured here is a busy vista of moons and rings taken at Saturn. The large circular object in the center of the image is Titan, the largest moon of Saturn and one of the most intriguing objects in the entire Solar System. The dark spot in the center is the main solid part of the moon. The bright surrounding ring is atmospheric haze above Titan, gas that is scattering sunlight to a camera operating onboard the robotic Cassini spacecraft. Cutting horizontally across the image are the rings of Saturn, seen nearly edge on. At the lower right of Titan is Enceladus, a small moon of Saturn. Since the image was taken pointing nearly at the Sun, the surfaces of Titan and Enceladus appear in silhouette, and the rings of Saturn appear similar to a photographic negative. Now if you look really really closely at Enceladus, you can see a hint of icy jets shooting out toward the bottom of the image. It is these jets that inspired future proposals to land on Enceladus, burrow into the ice, and search for signs of extraterrestrial life.", - "hdurl": "https://apod.nasa.gov/apod/image/1905/TitanBusy_Cassini_1080.jpg", - "media_type": "image", - "service_version": "v1", - "title": "Saturn, Titan, Rings, and Haze", - "url": "https://apod.nasa.gov/apod/image/1905/TitanBusy_Cassini_1080.jpg" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "NASA": [ - { - "startTime": 1676891397883, - "executionTime": 1202, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "links": { - "object": true - }, - "id": "2000433", - "neo_reference_id": "2000433", - "name": "433 Eros (A898 PA)", - "name_limited": "Eros", - "designation": "433", - "nasa_jpl_url": "http://ssd.jpl.nasa.gov/sbdb.cgi?sstr=2000433", - "absolute_magnitude_h": 10.31, - "estimated_diameter": { - "object": true - }, - "is_potentially_hazardous_asteroid": false, - "close_approach_data": [ - "json array" - ], - "orbital_data": { - "object": true - }, - "is_sentry_object": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "NASA3": [ - { - "startTime": 1676891399087, - "executionTime": 4243, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "activityID": "2023-01-21T02:00:00-CME-001", - "catalog": "M2M_CATALOG", - "startTime": "2023-01-21T02:00Z", - "sourceLocation": "", - "activeRegionNum": { - "object": true - }, - "link": "https://webtools.ccmc.gsfc.nasa.gov/DONKI/view/CME/23401/-1", - "note": "Faint CME SSW in SOHO LASCO C2/C3 and STEREO A COR2, another faint outflow following the 2023-01-20 mid-day filament eruptions/CMEs. No definitive source has been found.", - "instruments": [ - "json array" - ], - "cmeAnalyses": [ - "json array" - ], - "linkedEvents": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "NASA7": [ - { - "startTime": 1676891403333, - "executionTime": 934, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "NASA5": [ - { - "startTime": 1676891404267, - "executionTime": 1473, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "flrID": "2023-01-22T12:12:00-FLR-001", - "instruments": [ - "json array" - ], - "beginTime": "2023-01-22T12:12Z", - "peakTime": "2023-01-22T12:26Z", - "endTime": "2023-01-22T12:34Z", - "classType": "M1.1", - "sourceLocation": "S20W40", - "activeRegionNum": 13190, - "linkedEvents": { - "object": true - }, - "link": "https://webtools.ccmc.gsfc.nasa.gov/DONKI/view/FLR/23406/-1" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "NASA8": [ - { - "startTime": 1676891405743, - "executionTime": 999, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "rbeID": "2023-02-08T12:45:00-RBE-001", - "eventTime": "2023-02-08T12:45Z", - "instruments": [ - "json array" - ], - "linkedEvents": [ - "json array" - ], - "link": "https://webtools.ccmc.gsfc.nasa.gov/DONKI/view/RBE/23643/-1" - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "rbeID": "2023-02-12T14:00:00-RBE-001", - "eventTime": "2023-02-12T14:00Z", - "instruments": [ - "json array" - ], - "linkedEvents": [ - "json array" - ], - "link": "https://webtools.ccmc.gsfc.nasa.gov/DONKI/view/RBE/23729/-1" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "NASA6": [ - { - "startTime": 1676891406742, - "executionTime": 1003, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "NASA4": [ - { - "startTime": 1676891407745, - "executionTime": 1266, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "catalog": "M2M_CATALOG", - "activityID": "2023-01-25T08:30:00-IPS-001", - "location": "STEREO A", - "eventTime": "2023-01-25T08:30Z", - "link": "https://webtools.ccmc.gsfc.nasa.gov/DONKI/view/IPS/23450/-1", - "instruments": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "NASA9": [ - { - "startTime": 1676891409011, - "executionTime": 1063, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "hssID": "2023-01-30T19:45:00-HSS-001", - "eventTime": "2023-01-30T19:45Z", - "instruments": [ - "json array" - ], - "linkedEvents": { - "object": true - }, - "link": "https://webtools.ccmc.gsfc.nasa.gov/DONKI/view/HSS/23526/-1" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "NASA10": [ - { - "startTime": 1676891410074, - "executionTime": 1889, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "simulationID": "WSA-ENLIL/23411/1", - "modelCompletionTime": "2023-01-22T15:04Z", - "au": 2, - "cmeInputs": [ - "json array" - ], - "estimatedShockArrivalTime": { - "object": true - }, - "estimatedDuration": { - "object": true - }, - "rmin_re": { - "object": true - }, - "kp_18": { - "object": true - }, - "kp_90": { - "object": true - }, - "kp_135": { - "object": true - }, - "kp_180": { - "object": true - }, - "isEarthGB": false, - "impactList": { - "object": true - }, - "link": "https://webtools.ccmc.gsfc.nasa.gov/DONKI/view/WSA-ENLIL/23411/-1" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "NASA11": [ - { - "startTime": 1676891411965, - "executionTime": 2177, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "messageType": "CME", - "messageID": "20230219-AL-003", - "messageURL": "https://kauai.ccmc.gsfc.nasa.gov/DONKI/view/Alert/23823/1", - "messageIssueTime": "2023-02-19T19:34Z", - "messageBody": "## Community Coordinated Modeling Center Database Of Notifications, Knowledge, Information ( CCMC DONKI )\n## Message Type: Space Weather Notification - CME (Juno, Dawn, Parker Solar Probe)\n##\n## Message Issue Date: 2023-02-19T19:34:54Z\n## Message ID: 20230219-AL-003\n##\n## Disclaimer: NOAA's Space Weather Prediction Center is the United States Government official source for space weather forecasts. This \"Experimental Research Information\" consists of preliminary NASA research products and should be interpreted and used accordingly.\n\n\n## Summary:\n\nC-type CME detected by SOHO. \n\nStart time of the event: 2023-02-18T02:48Z.\n\nEstimated speed: ~992 km/s.\n\nEstimated opening half-angle: 45 deg.\n\nDirection (lon./lat.): -161/1 in Heliocentric Earth Equatorial coordinates.\n\nActivity ID: 2023-02-18T02:48:00-CME-001\n\nBased on preliminary analysis by the Moon to Mars Space Weather Analysis Office and heliospheric modeling carried out at NASA Community Coordinated Modeling Center, it is estimated that the CME may impact Juno (minor impact) and Parker Solar Probe. The leading edge of the CME will reach Juno at 2023-03-04T00:00Z, and Parker Solar Probe at 2023-02-19T06:34Z (plus minus 7 hours). \n\nLinks to the movies of the modeled event (includes CME: 2023-02-18T02:48:00-CME-001):\n\n(a) 2 AU outer boundary\nhttp://iswa.gsfc.nasa.gov/downloads/20230218_063200_2.0_anim.tim-den.gif\nhttp://iswa.gsfc.nasa.gov/downloads/20230218_063200_2.0_anim.tim-vel.gif\nhttp://iswa.gsfc.nasa.gov/downloads/20230218_063200_2.0_ENLIL_CONE_timeline.gif\nhttp://iswa.gsfc.nasa.gov/downloads/20230218_063200_2.0_ENLIL_CONE_PSP_timeline.gif\n\n(b) 5.5 AU outer boundary\nhttp://iswa.gsfc.nasa.gov/downloads/20230218_063200_5.5_anim.tim-den.gif\nhttp://iswa.gsfc.nasa.gov/downloads/20230218_063200_5.5_anim.tim-vel.gif\nhttp://iswa.gsfc.nasa.gov/downloads/20230218_063200_5.5_ENLIL_CONE_Juno_timeline.gif\n\n\n## Notes: \n\n\nSCORE CME typification system:\nS-type: CMEs with speeds less than 500 km/s\nC-type: Common 500-999 km/s\nO-type: Occasional 1000-1999 km/s\nR-type: Rare 2000-2999 km/s\nER-type: Extremely Rare >3000 km/s\n\n\n" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "NASA12": [ - { - "startTime": 1676891414154, - "executionTime": 6091, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "date": "2019-05-05", - "explanation": "This is not a solar eclipse. Pictured here is a busy vista of moons and rings taken at Saturn. The large circular object in the center of the image is Titan, the largest moon of Saturn and one of the most intriguing objects in the entire Solar System. The dark spot in the center is the main solid part of the moon. The bright surrounding ring is atmospheric haze above Titan, gas that is scattering sunlight to a camera operating onboard the robotic Cassini spacecraft. Cutting horizontally across the image are the rings of Saturn, seen nearly edge on. At the lower right of Titan is Enceladus, a small moon of Saturn. Since the image was taken pointing nearly at the Sun, the surfaces of Titan and Enceladus appear in silhouette, and the rings of Saturn appear similar to a photographic negative. Now if you look really really closely at Enceladus, you can see a hint of icy jets shooting out toward the bottom of the image. It is these jets that inspired future proposals to land on Enceladus, burrow into the ice, and search for signs of extraterrestrial life.", - "hdurl": "https://apod.nasa.gov/apod/image/1905/TitanBusy_Cassini_1080.jpg", - "media_type": "image", - "service_version": "v1", - "title": "Saturn, Titan, Rings, and Haze", - "url": "https://apod.nasa.gov/apod/image/1905/TitanBusy_Cassini_1080.jpg" - }, - "binary": { - "data": { - "mimeType": "image/png", - "fileType": "image", - "fileExtension": "png", - "data": "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NNM7bfRUM309evr9mbh5//U0zfROGz3VTO800zvN9E4bPdVM7zTTO830TjM91UzvNNM7zfROM73TRk810zvN9E4zvdNGTzXTO830TjO900ZPNdM7zfROM73TTO+00VPN9E4zvdNM77TRUw1tTho9NWZ6Zwz0WjK900zvNNM7zfRUM73TTO/0HXea6U9gf2/3OA72DmZKo6fGTO8sA8AKzfROM73TTO800w8ePXl9hv7X//6/0zTTO830TjO900ZPNdM7zfROM73TRk810zvN9E4zvdNGTzXTO830TjO900zvtNFTzfROM73TTO+00VPN9E4zvdNM77TRU830TjO900zvNNNTzfROM73TTO800ztt9FRDm5NGT42Z3hkDvZZM7zTTO830Ths91UzvNNMf3/bmzl+tZnqnjZ5Ko6fGTO8sA8AKzfROM/37bly/fYZuTtRGTzXTO830TjO900zvtNFTzfROM73TTO+00VPN9E4zvdNM77TRU830TjO900zvNNNTzfROM73TTO800ztt9FQzvdNM7zTTO230VDO900zvNNM7bfRUM73TTO800zvN9E4bPdVM76TRU2Omd8ZAryXTO830TjO900Z/HFsbmydz/rcb0zSdr4dmeqqZ3kmjp8ZM7/zNDwCPvv7+zH1+7c40zfROM73TRk810zvN9E4zvdNMTzXTO830TjO900zvtNFTzfROM73TTO+00VPN9E4zvdNM77TRU830TjO900zvNNM7bfRUM73TTO800ztt9FQzvdNM7zTTO230VDO900zvNNM7zfRUM73TTO+k0VNjpnfGQK8l0zvN9B+38dnmibWbr41meqfpfD200VPN9E4aPTVmeufnAeDOo9ef5O6Xz6Zpo6ea6Z1meqeZ3mmjp5rpnWZ6p5neaaOnmumdZnqnmd5ppnfa6KlmeqeZ3mmmd9roqWZ6p5neaaZ32uipZnqnmd5ppnea6almeqeZ3mmmd5rpnTZ6qpneaaZ3mumdNnqqmd5ppnea6Z02eqqZ3mmmd9LoqTHTU2Oj/wWb5zdP79xvz0/TTO+0m6+NZnqn6Xw9tNFTzfROGj01ZnpnGQBWaKZ3mumdZnqnjZ5qpnea6Z1meqeNnmqmd5rpnWZ6p5meaqZ3mumdZnqnmd5po6ea6Z1meqeZ3mmjp5rpnWZ6p5neaaOnmumdZnqnmd5ppqea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eqeZ3mmmd9roqWZ6p5neaaZ3mumpZnqnmd5ppnea6Z02eqqZ/jTu3n36EV89ejVNM73TRk810zvN9E4zvdNGTzXTO830TjO900zvtNFTzfROM73TTO+00VPN9E4zvdNM77TRU830TjO900zvNNNTzfROA6LTTO800ztt9FTT+Xpopnf6cK6NZnqnmd5JoNfGTO8sA8Comd5po6ea6Z1meqeZ3mmjp5rpnWZ6p5neaaOnmumdZnqnmd5ppj+xo+vPPu7gwp2ZmumdZnqnmd5po6ea6Z1meqeZ3mmjp5rpnWZ6p5neaaanmumdZnqnmd5ppnfa6KlmeqeZ3mmmd9roqWZ6p5neaaZ32uipZnqnAdFppnea6Z02eqrpfD000zt9ONdGM73TTO8k0GtjpneWAWDUTO+00VPN9E4zvdNM77TRU830TjO900zvtNFTzfROM/0J3P/qzXG8ePMv0zTTU830TjO900zvNNM7bfRUM73TTO800ztt9FQzvdNM7zTTO230VDO900zvNNM7zfROGz3VTO800zvN9E4bPdVM7zTTO830Ths91UzvNCA6zfROMz3VTO80na+HZnqnD+faaKZ3mumdBHptzPTOMgCMmumpZnqnmd5ppnea6Z02eqqZ3mmmd5rpnTb6T3X51vef4PqTaZrpnWZ6p42eaqZ3mumdZnqnmd5po6ea6Z1meqeZ3mmjp5rpnWZ6p5neaaOnmumdZnqnmd5ppqea6Z1meqeZ3mmmd9roqWZ6p5neaaZ32uipZnqnAdFppnfa6KlmeqfpfD000zt9ONdGM73TTO8k0GtjpneWAWDURk810zvN9E4zvdNM77TRU830TjP98f3X//F/PsnLf/zv04yBXkumd5rpnWZ6p42eaqZ3mumdZnqnmZ5qpnea6Z1meqeZ3mmjp5rpnWZ6p5neaaOnmumdZnqnmd5po6ea6Z1meqeZ3mmmd9roqWZ6p5neaaZ32uipZnqnAdFppnfa6KlmeqfpfD0001N9PtdDM73TTO8k0FvnP9ucbBkAftZGTzXTO830TjO900xPNdMfx4s3/3wCf/kv/3OaZnqnmd4ZA72WTO800zvN9E4bPdVM7zTTO830Ths91UzvNNM7zfROM73TRk810zvN9E4zvdNGTzXTO830TjO900ZPNdM7zfROM73TTE810zvN9E4zvdNM77TRU830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Znqnmd5ppnfa6KlmeqeZ3mmmd9roqWZ6p5neaaZ32uipZnqnmd5ppnea6almeqeZ3mmmd5rpnTb647h27d7JXL50a5pmeqeZ3mmjp5rpnWZ6J42eGhs91UzvNNM7zfROM73TRk810zvN9E4zvdNGTzXTO830TjO90+ZLNdM7zfROM73TU6Wa6Z1memcZAEZt9FQzvdNM7zTTO230VDO900zvNNM7zfRUM73TTO800zvN9E4bPdVM7zTTO830Ths91UzvNNM7zfROGz3VTO800zvN9B9x9ejmaVw5ujVNGz3VTO800zvN9E4bPdVM7zTTO2n01NjoqWZ6p5neaaZ3mumpZnqnmd5ppnea6Z02eqqZ3mmmd5rpnQZfqpneaaZ3mumdnirVTO800zvLADBqo6ea6Z1meqeZ3mmjp5rpnWZ6p5neaaOnmumdZnqnmd5ppnfa6KlmeqeZ3mmmd9roqWZ6p5neaaZ32uipZvqVbj94c3r3vvxmmmZ6p5meaqZ3mumdZnqnmd5po6ea6Z1meieNnhobPdVM7zTTO830Ths91UzvNNM7zfROM73TRk810zvN9E4zvdPgSzXTO830TjO901OlmumdZnpnGQBWaKZ3mumdZnqnmd5po6ea6Z1meqeZ3mmjp5rpnWZ6p5neaaanmumdZnqnmd5ppnfa6KlmeqeZ3mmmr6Ob35yJB0//OFMzvdNM7zTTO230VDO900zvNNM7zfROGz3VTO800ztp9NTY6KlmeqeZ3mmmd9roqWZ6p5neaaZ3mumpZnqnmd5ppnea6Z0GX6qZ3mmmd5rpnZ4q1UzvNNM7ywCwQjO900zvNNM7zfROGz3VTO800zvN9E4bPdVM7zTTO830Ths91UzvNNM7zfROM73TRk8107/vwuUHZ+ji0aNpmumdNnqqmd5ppnea6Z02eqqZ3mmmd5rpnWZ6qpneaaZ3mumdNHpqbPRUM73TTO800ztt9FQzvdNM7zTTO230VDO900zvNNM7zfROgy/VTO800zvN9E5PlWqmd5rpnWUAWKGZ3mmmd5rpnWZ6qpneaaZ3mumdZnqnjZ5qpnea6Z1meqeNnmqmd5rpnWZ6p5n+nWu3Hp+56188naaZ3mmmd5rpnTZ6qpneaaZ3mumdNnqqmd5ppnea6Z02eqqZ3mmmd5rpnTR6amz0VDO900zvNNM7bfRUM73TTO800ztt9FQzvdNM7zTTO830VJuv00zvNNM7zfROT5Vqpnea6Z1lAFihmd5ppnea6Z02eqqZ3mmmd5rpnWZ6p42eaqZ3mumdZnqnjZ5qpnea6X9086s/El9+O00bPdVM7zTTO830TjM91UzvNNM7zfROM73TRk810zvN9E4zvdNGTzXTO830TjO9k0avjZneaaZ3mumdZnqnjZ5qpnea6Z1meqeNnmqmd5rpnWZ6p42eavN1mumdZnqnmd7pqVLN9E4zvbMMACs00zvN9E4zvdNGTzXTO830TjO900xPNdM7zfROM73TTO+00d/+8pVz7c48Y6OnkumdNnqqmd5ppnea6Z02eqqZ3mmmd5rpnWZ6p42eaqZ3mumdZnqnjZ5qpnea6Z1meieBXhszvdNM7zTTO830Ths91UzvNNM7zfROGz3VTO800zvN9E4bPdXm6zTTO830TjM91YN1mumdZnpnGQBWaKZ3mumdZnqnjZ5qpnea6Z1meqeNnmqmd5rpnfcD/ZOn1sPH303TRk810ztjo6eS6Z02eqqZ3mmmd5rpnTZ6qpneaaZ3mumdZnqqmd5ppnea6Z1meqeNnmqmd5rpnWZ6J4FeGzO900zvNNM7zfRUM73TTO800zvN9E4bPdVM7zTTO830Ths91ebrNNM7zfROGz3Vg3Wa6Z1memcZAFZopnea6Z1meqeNnmqmd5rpnWZ6p42eepvmX7z4wwRfffVymmZ6p5meaqZ3mumdsdFTyfROGz3VTO800zvN9E4bPdVM7zTTO830Ths91UzvNNM7zfROM73TRk810zvN9E4zvZNAr42Z3mmmd5rpnTZ6qpneaaZ3mumdZnqnjZ5qpnea6Z1meqeNnmrzdZrpnWZ6p42e6sE6zfROM/0v+u1p/W0MAFfmbgDN9E4zvdNM77TRU830TjO98zbN/+nP/zbB6+/+PFMzvdNM7zTTO230VDO900zvjI2eSqZ32uipZnqnmd5ppnfa6KlmeqeZ3mmmd9roqWZ6p5neaaZ3mumpZnqnmd5ppnea6Z0Eem3M9E4zvdNM77TRU830TjO900zvNNNTzfROM73TTO800ztt9FSbr9NM7zTTO230VA8257xzVrY3t6dppneWAWCFZnqnmd5ppnfa6KnnT383zatXP0zTTO+00VPN9E4zvdNM77TRU830TjO9MzZ6KpmeaqZ3mumdZnqnmd5po6ea6Z1meqeZ3mmjp5rpnWZ6p5neaaOnmumdZnqnmd5ppncS6LUx0zvN9E4zvdNGTzXTO830TjO900ZPNdM7zfROM73TTE810zvNx04zvdNM/76NcxtnqP98qpneaaZ3mumdZQBYoZneaaZHHj148erl38/08vnvp2mmd5rpnWZ6p42eaqZ3mumdZnqnjZ5qpnea6Z2x0VNp9FQzvdNM7zTTO830Ths91UzvNNM7zfROGz3VTO800zvN9E4bPdVM7zTTO830TjM9lUZPjZneaaZ3mumdNnqqmd5ppnea6Z02eqqZ3mmmd5rpnTZ6qpneaab/0cb5TWFrc2uaZnqnjZ5qpnea6Z1memcZAH52//7Ltx58+WyaRw9eTNNGTzXTO830TjO900zvtNFTzfROM73TTO+00VPN9E4zvTM2eiqNnmqmd5rpnWZ6p5meaqZ3mumdZnqnmd5po6ea6Z1meqeZ3mmjp5rpnWZ6p5neaaOn0uipMdM7zfROM73TRk810zvN9E4zvdNGTzXTO830TjO9MwT6JuCz1SLvNNM7zfROT5Vqpnea6Z1meqeZ3vnkAeD2nRdvffHFy5ne1fkJmumdZnqnjZ5qpnea6Z1meqeZnmqmd5rpnWZ6p5neaaOnmumdZnpnbPRUGj3VTO800zvN9E4bPdVM7zTTO830TjO900ZPNdM7zfROM73TRk810zvN9E4zvdNGT6XRU2Omd5rpnWZ6qpneaaZ3mumdZnqnjZ5qpnd+DvTb3Ma5zYnG4Es10zvN9E4zvdNTpZrpnWZ6p5neaaZ3fvMu6H+qNnqqmd5ppnea6Z02eqqZ3mmmd5rpnTZ6qpneaaZ3mumdZnqqmd5ppnea6Z2x0VNp9FQzvdNM7zTTO230VDO900zvNNM7zfRUM73TTO800zvN9E4bPdVM7zTTO830Ths9lUZPjZneaaZ32uipZnqnmd5ppnea6Z3dnd2drZ1p9nZ2p2mmd9LoqTH4Us30TjO900zv9FSpZnqnmd5ppnea6Z2TDwC3524AzfROM73TTO+00VPN9E4zvdNM77TRU830TjO900zvtNFTzfROM73TTO+MjZ5Ko6ea6Z1meqeZ3mmjp5rpnWZ6p5neaaOnmumdZnqnmd5ppnfa6KlmeqeZ3mmmd9roqTR6asz0TjO900ZPNdM7zfTI7s7B5sbONNubUzXTO830TjO9k0ZPjcGXaqZ3mumdZnqnp0o10zvN9E4zvdNM7ywDwArN9E4zvdNGTzXTO830TjO900ZPNdM7zfROM73TRk810zvN9E4zvTM2ei2Z3mmmd5rpnWZ6p42eaqZ3mumdZnqnjZ5qpnea6Z1meqeZnmqmd5rpnWZ6p5neaaOn0uipMdM7zfROG/2Z2zy//c7O1v40uzsH0zTTO230VDO900zvNNM7afTUGHypZnqnmd5ppnd6qlQzvdNM7zTTO830zjIArNBM7zTTU830TjO900zvNNM7bfRUM73TTO800ztt9FQzvdNM7zTTO2Og15LpnWZ6p5neaaZ32uipZnqnmd5ppnfa6KlmeqeZ3mmmd9roqWZ6p5neaaZ3mumdNnoqjZ4aM/0Z2t3Zf9/mxu4879X5CZrpnWZ6p5neaaOnmumdZnqnmd5Jo9fG5us00zvN9E4zvdNTpZrpnWZ6p5neaaZ3lgFghWZ6p42eaqZ3mumdZnqnmd5po6ea6Z1meqeZ3mmjp5rpnWZ6p5neGQO9lkzvNNM7zfROMz3VTO800zvN9E4zvdNGTzXTO830TjO900ZPNdM7zfROM73TTE8105+Jvd2DOti/MM3Q6Kmx0VNp9FQzvdNM7zTTO230VDO900zvNNM7CfTa2HydZnqnmd5ppnd6qlQzvdNM7zTTO830zjIArNBM77TRU830TjO900zvNNNTzfROM73TTO800ztt9FQzvdNM7zTTO2Og15LpnWZ6p5neaaOnmumdZnqnmd5ppnfa6KlmeqeZ3mmmd9roqWZ6p5neaaY/pUsXD3/JztbuTM30TjO900zvjI2eSqOnmumdZnqnmd5po6ea6Z1meqeZ3kmg18bm6zTTO830TjM91YN1mumdZnqnmd5ppneWAWCFZnqnjZ5qpnea6Z1meqeNnmqmd5rpnWZ6p5neaaOnmumdZnqnmd4ZA72WTO800zvN9E4bPdVM7zTTO830TjM91UzvNNM7zfROM73TRk8105/Y/t7Fjzu8cn2aZnqnjZ5qpnea6Z1memds9FoyvdNM7zTTO830Ths91UzvNNM7zfROAr02Nl+nmd5ppnfa6KkerNNM7zTTO830TjO9swwAKzTTO230VDO900zvNNM7bfRUM73TTO800zvN9FQzvdNM7zTTO830zhjotWR6p5neaaZ32uipZnqnmd5ppnfa6KlmeqeZ3mmmd5rpT+bz61/8qstXrs/UTO800zvN9E4bPdVM7zTTO830zhjotWR6p5neaaZ3mumpZnqnmd5ppnea6Z0Eem1svk4zvdNM77TRUz1Yp5neaaZ3mumplnpkGQBWaKZ32uipZnqnmd5ppnfa6KlmeqeZ3mmmd9roqWZ6p5neaaZ3mumdMdBryfROM73TTO+00VPN9E4zvdNM77TRU830TjP9p/r8+t3j+vzWPMn0VDO900zvNNM7zfROGz3VTO800zvN9M4Y6LVkeqeZ3mmmd9roqWZ6p5neaaZ3mumdBHptbL5OM73TTO+00VM9WKeZ3mmmd9roqZZ6ZBkAVmimp5rpnWZ6p5neaaZ32uipZnqnmd5ppnfa6KlmeqeZ3mmmd5rpqbHRU8n0TjO900zvtNFTzfROM73TTO+00R/fjTvPP9Xte19PMzZ6qpneSaOnmumdZnqnmd5ppnfa6KlmeqeZ3mmmd8ZAryXTO830TjO900ZPNdM7zfROM73TTE+l0VNj83Wa6Z1meqeNnurBOs30TjO900ZPtdQjywCwQhs91UzvNNM7zfROM73TRk810zvN9E4zvdNGTzXTO830TjO900ZPjY2eSqZ3mumdZnqnjZ5qpnea6Y/j+p03J3Dr/utp2uipZnpnbPRUM72TRk810zvN9E4zvdNMTzXTO830TjO900zvjIFeS6Z3mumdZnqnjZ5qpnea6Z1meqeNnkqjp8bm6zTTO830Ths91YN1mumdZnqnjZ5qqUeWAWCFNnqqmd5ppnea6Z1meqqZ3mmmd5rpnWZ6p42eaqZ3mumdZnqnjZ4aGz2VTO800zvN9FQz/cfd/OL5id358tU0zfROM73TRk810ztjo6ea6Z00eqqZ3mmmd5rpnTZ6qpneaaZ3mumdZnpnDPRaMr3TTO800ztt9FQzvdNM7zTTO230VBo9NTZfp5neaaanmumdHqzTTO800ztt9FRLPbIMACu00VPN9E4zvdNM77TRU830TjO900zvNNM7bfRUM73TTO800ztt9NTY6KlkeqeZ/iP2Ltw6jc9vPJqpmd5ppnea6Z1meqeNnmqmd8ZGTzXTO2n0VDO900zvNNM7bfRUM73TTO800zvN9NTY6KlkeqeZ3mmmd9roqWZ6p5neaaZ32uipNHpqbL5OM73TRk810zs9WKeZ3mmmd9roqZZ6ZBkAVmijp5rpnWZ6p5neaaOnmumdZnqnmd5ppqea6Z1meqeZ3mmmd9roqbHR/4JrXzw5vaMbD6dppnfa6KlmeqeZ3mmmd5rpqWZ6p5neGRs91UzvpNFTzfROM73TTO+00VPN9E4zvdNM77TRU2Ojp5LpnWZ6p5neaaOnmumdZnqnmd5po6fS6Kmx+TrN9E4bPdVM7/RgnWZ6p5meaqZ3WuqRZQBYoY2eaqZ3mumdZnqnjZ5qpnea6Z1meqeNnmqmd5rpnWZ6p5m+7j/57kxcu/31VMn0TjO900zvtNFTzfROM73TTO+00VPN9E4zvTM2eqqZ3kmjp5rpnWZ6p5neaaOnmumdZnqnmd5po6fGRk8l0zvN9E4zPdVM7zTTO830TjO900ZPpdFTY/N1mumdNnqqmd7pwTrN9E4bPdVM77TUI8sAsEIbPdVM7zTTO830Ths91UzvNNM7zfROGz3VTO8007/v1u2vztDDp99P00xPjY2eSqZ3mumdZnqnjZ5qpnea6Z1meqeNnmqmd5rpnbHRU830VDK900zvNNM7zfROGz3VTO800zvN9E4bPTU2eiqZ3mmmd9roqWZ6p5neaaZ3mumdNnoqjZ4am6/TTO+00VPN9E4P1mmmd9roqWZ6p6UeWQaA1ZrpnWZ6p5neaaZ32uipZnqnmd5ppnfa6N95cP/pmbtx7fY0zfROM73TRk+NjZ5Kpnea6Z1meqeNnmqmd5rpnWZ6p42eaqZ3mumdsdFTbfRUMr3TTO800zvN9FQzvdNM7zTTO830Ths9NTZ6KpneaaZ32uipZnqnmd5ppnea6almeieNnhqbr9NM77TRU830Tg/WaaZ32uipZnqnpf74PvvtxvEtA8BqzfROM73TTO800ztt9FQzvdNM/9bv//AvZ+7Vqz9P00ZPNdM7zfROM73TRk+NjZ5Kpnea6Z1meqqZ3mmmd5rpnWZ6p42eaqZ3mumdsdFTbfRUMr3TTO800ztt9FQzvdNM7zTTO830Ths9NTZ6KpneaaZ32uipZnqnmd5ppnfa6KlmeieNnhqbr9NM77TRU830Tg/WaaZ32uiP6fy5zRPoTXRa6pFlAFitmd5ppnea6Z1meqqZ/snXr5Hvvv3zNM30TjO900ZPNdM7zfROM73TRk+NjZ5Kpnea6Z02eqqZ3mmmd5rpnWZ6p42eaqZ3mumdsdFTbfRUMr3TTO800ztt9FQzvdNM7zTTO830VDO9MzZ6KpneaaZ32uipZnqnmd5ppnfa6KlmeieNnhqbr9NMT7XDOs30Tg/2V+SnPb5zn21M00ZP9cs6LfXIMgCs1kzvNNM7Q6N/+vSV8/irZzM10zvN9E4zvdNM77TRU830TjO900zvtNFTY6OnkumdZnqnjZ5qpnea6Z1meqeZnmqmd5rpnWZ6Z2z0VBs9lUzvNNM7zfROGz3VTO800zvN9E4bPdVM74yNnkqmd5rpnTZ6qpneaaZ3mumdNnqqmd5Jo6fSi5k2eqoddqXz587/belXcJrpnTZ6ql/WaalHlgFgtXd1/t6dR9qd23enaaZ32uipZnqnmd5ppnea6almeqeZ3mmmd5rpnTZ6amz0VDK900zvtNFTzfROM73TTO+00VPN9E4zvdNM74yNnmqjp5LpnWZ6p5neaaOnmumdZnqnmd5po6ea6Z2x0VPJ9E4zPdVM7zTTO830TjO900ZPNdM7afTUmOlr89zWmdjamKrpfD20LzvN9FQzvdMv67TUI2czADx++kZ79NV3MzXTO830TjO900ZPNdM7zfROM73TRk810zvN9E4zvdNM77TRU2Ojp5LpnWZ6p42eaqZ3mumdZnqnjZ5qpnea6Z1memds9FozvZNM7zTTO830Ths91UzvNNM7zfROGz3VTO+MjZ5Kpnfa6KlmeqeZ3mmmd5rpnTZ6qpn+nZ3t3bO1ubE9TzK900ZPNZ2vh/Zlp42eaqZ3+mWdlnrkN18+fHlizfRUM73TTO800zvN9E4bPdVM7zTTO830Ths91UzvNNM7zfROMz3VTO+MjZ5Kpnea6Z02eqqZ3mmmd5rpnTZ6qpneaaZ3mumdMdBrzfROMr3TTO800ztt9FQzvdNM7zTTO230VDO9MzZ6KpneaaOnmumdZnqnmd5ppv/R1sY2srO9N9GY6Z2x0VPJ9E4bPdV0vh7al502eqqZ3umXdVrqkWUAWK2Z3mmmd5rpnTZ6qpneaaZ3mumdNnqqmd5ppnea6Z02eqqZ3hkbPZVM7zTTU830TjO900zvNNM7bfRUM73TTO800ztjoNea6Z1keqeZ3mmmp5rpnWZ6p5neaaZ32uipZnpnbPRUMr3TRk810ztDoz86vOnsbG1P00ZPpdFTY6Z3xkZPJdM7bfRU0/l6aF922uipZnqnX9ZpqUeWAWC1Znqnmd5ppqea6Z1meqeZ3mmmd9roqWZ6p5neaaZ32uipZnpnbPRUMr3TRk810zvN9E4zvdNM77TRU830TjO900zvjIFea6Z3kumdZnqnjZ5qpnea6Z1meqeZ3mmjp5rpnbHRU8n0zvt1/sLBNe3Rw1fTNNM7zfROGz2VRk+Nmd4ZGz2VTE810ztN5+uhfdlpo6ea6Z1+WaelHlkGgNWa6Z1meqeNnmqmd5rpnWZ6p5neaaOnmumdZnqnmd5po6ea6Z2x0VPJ9E4bPdVM7zTTO830TjM91UzvNNM7zfROM70zBnqtmd5Jpnea6Z02eqqZ3mmmd5rpnWZ6qpneaaZ3NjfGg3V2dy5N00ZPNdM7zfROM73TRk+l0VNjpnfGRk+l0VPN9E7T+XpoX3ba6Klmeqdf1mmpR5YBYLVmeqeZ3mmjp5rpnWZ6p5neaaanmumdZnqnmd5ppnfa6Klmemds9FQyvdNGTzXTO830TjO900ZPNdM7zfROM73TTO+MgV5rpneS6Z1meqeNnmqmd5rpnTZfp43euXJ4/eKFS9P0B3B6sE4zvdNGTzXTO830TjO900ZPpdFTY6Z3xkZPpdFTzfRO0/l6aF+mmumdZnqn39RpqUeWAWC1Znqnmd5po6ea6Z1meqeZ3mmjp5rpnWZ6p5neaaZ32uipZnpnbPRUMr3TRk810zvN9E4zvdNGTzXTO830TjO900xPjY2eaqZ3kumdZnqnjZ5qpnea6c/e5etvHRwcTXPl8PpMzfROM73TTO8001PN9E4zvdNM7zTTO230VBo9NWZ6Z2z0VBo91UzvNJ2vh/ZlqpneaaZ3+k2dlnpkGQBWa6Z3mumdNnqqmd5ppnea6Z02eqqZ3mmmd5rpnWZ6qpneaaZ3xkZPJdM7bfRUM73TTO800ztt9FQzvdNM7zTTO2301NjoqWZ6J5neaaZ32ujP1sWLV993dPXeNO/q/ATN9E4bPdVM7zTTO830Ths91UzvNNM7zfROM73TRk+l0VNjpnfGRk+l0VPN9E7T+XpoX6aa6Z1meqff1GmpR041AHw5dwNopnea6Z1meqeNnmqmd5rpnWZ6p42eaqZ3mumdZnqnjZ5qpnea6Z2x0VPJ9E4bPdVM7zTTO830Ths91UzvNNM7zfROGz01Nnqqmd5Jpj8rFy9cHly7dnumodFTzfROM73TTO+00VPN9E4zvdNM77TRU830TjO900zvNNNTzfROGj01ZnpnbPRUGj3VTO80na+H9mWqmd5ppnf6TZ2WemQZAFZrpnea6almeqeZ3mmmd5rpnTZ6qpneaaZ3mumdNnqqmd5ppnfGRk8l01PN9E4zvdNM7zTTO230VDO900zvNNM7bfTU2OjPwuVLV1c6vDJPM73TRk810zvN9E4zvdNM77TRU830TjO900zvtNFTzfROM73TTO+00VPN9E4aPTVmemds9FQaPdVM7zSdr4f2ZaqZ3mmmd/pNnZZ6ZBkAVmumd9roqWZ6p5neaaZ3mumdNnqqmd5ppnea6Z02eqqZ3mmmd8ZGT6XRU830TjO900zvNNM7bfRUM73TTO8005/Srfuvfsn1649maqZ3mumdZnqnjZ5qpnea6Z1meqeZnmqmd5rpnWZ6p5neaaOnmumdZnqnmd5po/9/7Nzrbh3ZmZhhXcHEbpHiSSRFUdShJfXBPeO2284cEyBBEuTPIBeR+7+A9KQnms73Stw81FMYb1Th+WlgbbGqVq31roapZnonjZ6amd6ZjV5Lpnea6Z2m8/3Qvkw10zvN9E7/pU5LPbIdAHxeM73TRk810zvN9E4zvdNMTzXTO830TjO900zvtNFTzfROM70zGz2VRk810zvN9E4zvdNMTzXTO830D3P1+qedLl/99Wqa6Z02eqqZ3mmmd5rpnTZ6qpneaaZ3mumdNnqqmd5ppnea6Z1meqeNnmqmd5rpnWZ6p42eaqZ30uipmemdGei1ZHqnmd5pOt8P7ctUM73TTO/0X+q01CPbAcDnNdM7bfRUM73TTO800ztt9FQzvdNM7zTTO830Ths91UzvNNM7s9FTafRUM73TTO800ztt9A9wdf37O/rmr/9xNc30TjO900zvtNFTzfROM73TTO+00VPN9E4zvdNM77TRU830TjO900zvNNNTzfROM73TTO800ztt9FQzvZNGT81M78xAryXTO830TtP53mhidprpnWZ6p/9Sp6Ue2Q4APq+Z3mmjp5rpnWZ6p5neaaOnmumdZnqnmd5ppqea6Z1meqeZ3pmNnkqjp5rpnWb6e2n0ucXN6w+raaOnmumdZnqnmd5ppqea6Z1meqeZ3mmmd9roqWZ6p5ne6bTstNFTzfROM73TTO+00VPN9E4zvdNM7zTTO230VDO9k0ZPzUzvzECvJdM7zfROu/neaGJ2mumdZnqn/1KnpR7ZDgA+r5neaaOnmumdZnqnmd5po6ea6Z1meqeZ3mmjp5rpnWZ6p5nemY2eSqO/u+ubj/d1fvF6Na02TjO900ZPNdM7zfROM73TRk810zvN9E4zvdNM77TRU830TjO902nZaaOnmumdZnqnmd5po6ea6Z1meqeZ3mmmp5rpnWZ6J42empnemYFeS6Z3mumddvO90cTsNNM7zfRO/6VUY72wHQB8XjO900ZPNdM7zfROM73TRk810zvN9E4zvdNGTzXTO830TjP9Xbx5//0DXFy9X1MzvdNM77TaOM30Ths91UzvNNM7zfROGz3VTO800zvN9E4zPdVM7zTTO830Tqdlp42eaqZ3mumdZnqnjZ5qpnea6Z1meqeNnmqmd5rpnTR6amZ6ZwZ6LZneaaZ32s33Rvuy00zvNNM7/ZdSjfXCdgDwec30VDO900zvNNM7zfROGz3VTO800zvN9E4bPdVMf7uTk5cP9uLlh9U00ztt9FQzvdNM77TaOM30Ths91UzvNNM7zfROGz3VTO800zvN9E4bPdVM7zTTO830Tqdlp42eaqZ3mumdZnqnjZ5qpnea6Z1meqeNnmqmd5rpnTR6amZ6ajZ6KpneaaZ32s33Rvuy00zvNNM7/ZdSjfXCdgDweW30VDO900zvNNM7zfROGz3VTO800zvN9Le7eXnzYOenF2tqpnea6Z1meqeNnmqmd5rpnVYbp5meaqZ3mumdZnqnmd5po6ea6Z1meqeZ3mmjp5rpnWZ6p5ne6bRMNdM7zfROM73TTO+00VPN9E4zvdNM77TRU830TjO9k0ZPzUZPzUZPJdM7zfROu/neaF92mumdZnqn/1Kqsf6ROh/+bDsA+Lw2eqqZ3mmmd5rpnWZ6qpneaab/kj/84T8/0n/803qa6Z02eqqZ3mmmd5rpnTZ6qpneaaZ3mmycNnqqmd5ppnea6Z1meqeNnmqmd5rpnWZ6p42eaqZ3mumdZnqn0zLVTO800zvN9E4zvdNGTzXTO830TjO900ZPNdM7bVJOGj01Gz01Gz2VTO800zvt5nujfdlppnea6R/s2eHxLs/W1OlL2A4APq+Nnmqmd5rpnWZ6p43+s/74x/+xiL/7+39eTTO900zvNNM7bfRUM73TTO800ztt9FQzvdNM7zTZOG30VDO900zvNNM7zfRUM73TTO800zvN9E4bPdVM7zTTO830TqdlqpneaaZ3mumdZnqqmd5ppnea6Z1meqeNnmqmd9qknDR6ajZ6ajZ6KpneaaZ32s33RjP9fX3126d31JYtNdM7HR3q9CVsBwCf10ZPNdM7zfTDq5fXS/n44YfVtNFTzfROM73TTO8001PN9E4zvdNM7zTTO230VDO900zvNNk4bfRUM73TTO800ztt9FQzvdNM7zTTO830Ths91UzvNNM7zfROp2Wqmd5ppnea6Z02eqqZ3mmmd5rpnWZ6p42eaqZ32qScNHpqNnpqNnoqmd5ppnfaze/hN/f29LdPV9NM77RlS830VH+A0ulL2A4APq+Nfri+ermgm5dXq2mmd5rpnTZ6qpneaaZ3mumdNnqqmd5ppnea6Z1meqeNnmqmd5rpnSYbp42eaqZ3mumdZnqnjZ5qpnea6Z1meqeZnmqmd5rpnWZ6p5ne6bRMNdM7zfROM73TRk810zvN9E4zvdNMTzXTO830TpuUk0ZPzUZPzUZPJdPfyVcHD5ACC7XRU830TjO905YtzZuI9Qconb4EeADww9/847K+/e4Pa2qmd5rpnWZ6p5neaaOnmumdZnqnmd5po6ea6Z1meqeZ3mmmp5rpnWZ6p5neabJx2uipZnqnmd5ppnfa6KlmeqeZ3mmmd9roqWZ6p5neaaZ3mumdTstUM73TTO800ztt9FQzvdNM7zTTO230VDO900zvtEk5afTUbPS3e/rV4WM8OzhYTTO9kwILtdFTzfROM73Tli3Nm4j1ByidvoQnv//xHx6jmd5po6ea6Z1meqeZ3mmmd9roqWZ6p5neaaZ32uipZnqnmd5ppnfa6KlmeqeZ3mmmd5psnDZ6qpneaaZ3mumdNnqqmd5ppnea6Z02eqqZ3mmmd5rpnWZ6qjOz00zvNNM7zfROGz3VTO800zvN9E4bPdVM7zTTO21SX/Ls4OiRTo9P19RM7zTTO830Tgos1EZPNdM7zfROW7Y0byLWH6B0AhS2A4AvaqZ3mumdZnqnmZ5qpnea6Z1meqeZ3mmjp5rpnWZ6p5neaaOnmumdZnqnmd5psqGa6Z1meqeZ3mmmd9roqWZ6p5neaaZ32uipZnqnmd5ppnfa6KlOy04zvdNM7zTTO230VDO900zvNNM7bfRUM/1wdvJ8KQ2ITjO900ZPNdM7zfROM72TAgu10VN9F5xmeqctW5o3EesPUBrrhe0A4Iua6Z1meqeZ3mmjp5rpnWZ6p5neaaZ32uipZnqnmd5ppnfa6KlmeqeZ3mmmd5psqGZ6p5neaaZ3mumdNnqqmd5ppnea6Z02eqqZ3mmmd5rpnTZ6qtOy00zvNNM7zfRUM73TTO800zvN9L/28vrdgm5ef7+mZnqnAdFppnfa6KlmeqeZ3mmmd1JgrWZ6p++C00zvtGVL8w5i/QFKY72wHQB8UTO900zvNNM7bfRUM73TTO800zvN9FQzvdNM7zTTO830Ths91UzvNNM7zfROkw3VTO800zvN9E4zPdVM7zTTO830TjO900ZPNdM7zfROM73TRk91Wnaa6Z1meqeNnmqmd5rpf3Z58VY4f/5yNc30Ths91UzvNCA6zfROGz3VTO800zvN9E4KrNVM7/RdcJrpnbZsad5BrD9AaawXtgOAL2qmd5rpnWZ6p42eaqZ3mumdZnqnjZ5qpnea6Z1meqeZ3mmjp5rpnWZ6p5neabKhmumdZnqnmd5po6ea6Z1meqeZ3mmmd9roqWZ6p5neaaZ32uipTstOM73TTO+00b9//zvn4uL9aprpnWZ6p5meaqZ3mumdBkSnmd5po6ea6Z1meqeZ3kmBtZrpnb4LTjO905aNzZsodXSlsV7YDgC+qJneaaZ3mumdNnqqmd5ppnea6Z02eqqZ3mmmd5rpnWZ6qpneaaZ3mumdZnqnyYZqpnea6Z1meqeNnmqmd5rpnWZ6p5meaqZ3mumdZnqnmd5po6c6LTu/DvRXL7+lPnzz42ra6KlmeqeZ3mmmd9roqWZ6p5neaUB0mumdNnqqmd5ppnea6Z0UWKuZ3um74DTTO23Z2LyJUkdXGuuFv6QDgB/WPQNopnea6Z1meqeNnmqmd5rpnWZ6p42eaqZ3mumdZnqnjZ5qpnea6Z1meqeZ3mmyoZrpnWZ6p5neaaOnmumdZnqnmd5po6ea6Z1meqeZ3mmmp15ef3N1/Yd1nJ2/X00zvdNM77TRU830TjO900zvtNFTzfROM73TgOg001PN9E4zvdNM7zTTOymwVjO903fBaaZ32rKxeROljq401gvbAcAXNdM7zfROM73TRk810zvN9E4zvdNGTzXTO830TjO900ZPNdM7zfROM73TTE810zvN9E4zvdNM77TRU830TjO900zvtNFTzfROM71zc/N+Nd9+/6c1NdM7zfROM73TTO+00VPN9E4zvdNM77TRU830TjO904DotNFTzfROM73TTO800zspsFYzvdN3wWmmd9qysXkTpY6uNNYL2wHAFzXTO830TjM91UzvNNM7zfROM73TRk810zvN9E4zvdNGTzXTO830TjO900ZPNdM7zfROM73TTO+00VPN9E4zvdNM77TRK1cff3Z9/W41F5c3q2mmd9roqWZ6p5neaaZ3mumpZnqnmd5ppnea6Z02eqqZ3mmmdxoQnTZ6qpneaaZ3mumdZnoqERZqpnf6LjjN9E5bNjZvotTRlcZ6YTsA+KJmeqeZ3mmjp5rpnWZ6p5neaaanmumdZnqnmd5ppnfa6KlmeqeZ3mmmd9roqWZ6p5neaaZ3mumpZnqnmd5ppl/cj//0v35x8/bPq/mly6+mmd5ppnea6Z02eqqZ3mmmd5rpnTZ6qpneaaZ3mumdZnqnjZ5qpnea6Z0GRKeNnmqmd5rpnWZ6p42eSoSFmumdvgtOM73Tlo3Nmyh1dKWxXtgOAL6omd5ppnfa6KlmeqeZ3mmmd9roqWZ6p5neaaZ3mumdNnqqmd5ppnea6Z02eqqZ3mmmd5rpnTZ6qpl+QZevvv+1l69/XM2nOr+CZnqnjZ5qpnea6Z1meqeNnmqmd5rpnWZ6p42eaqZ3mumdZnqnmZ5qpnea6Z1meqcB0Wmjp5rpnWZ6p5neaaOnEmGhZnqn74LTTE81Z0vzJkodXWmsF5606d9LGz3VTO800zvN9E4bPdVM7zTTO830Ths91UzvNNM7zfROMz3VTO800zvN9E4zvdNGTzXTO830TjP9Is7P39Wb939a02j0VDO900zvNNNTzfROM73TTO800ztt9FQzvdNM7zTTO230VDO900zvNNM7bfRUM73TTO800zsNiE4bPdVM7zTTO830Ths9lQgLNdM7fRecNnqqOVuaN1Hq6EpjvfCkTf++mumdZnqnmd5ppnfa6KlmeqeZ3mmmd9roqWZ6p5neaaZ32uipZnqnmd5ppnea6Z02eqqZ/pHevP36S65eXK2mmd5po6ea6Z1meqeZ3mmjp5rpnWZ6p5neaaZ32uipZnqnmd5ppnfa6KlmeqeZ3mmmd9roqWZ6p5neaaZ3GhCpZnqnmd5ppnea6Z02eioRFmqmd/oiOG30VHO2NG+i1NGVxnrhSYP+fTXTO830TjO900zvtNFTzfROM73TTO+00VPN9E4zvdNM77TRU830TjO900zvNNM/xsuXr2/3+s271TTTO830TjO900ZPNdM7zfROM73TRk810zvN9E4zvdNMTzXTO830TjO900zvtNFTzfROM73TTO+00VPN9E4zvdNM7zQgUs30TjO900zvNNM7bfRUIizUTO/0RXDa6KnmbGneRKmjK431wpMG/ftqpnea6Z1meqeZnmqmd5rpnWZ6p5neaaOnmumdZnqnmd5po6ea6Z1m+gd7cXl9u+Oj56tpo6ea6Z1meqeZ3mmmd9roqWZ6p5neaaZ32uipZnqnmd5ppnfa6KlmeqeZ3mmmd5rpnTZ6qpneaaZ3mumdNnqqmd5ppnea6Z0GRKqZ3mmmd5rpnWZ6qpneSYSFmumdvghOGz3VnC3Nmyh1dKWxXnjSoH9fzfROM73TTO+00VPN9E4zvdNM7zTTO230VDO900zvNNM7bfQPc3R0fhfHRxeraaZ3mumdNnqqmd5ppnea6Z1meqqZ3mmmd5rpnWZ6p42eaqZ3mumdZnqnjZ5qpnea6Z1meqeZnmqmd5rpnWZ6p5neaaOnmumdZnqnmd5pQKSa6Z1meqeZ3mmjp5rpnURYqJne6YvgtNFTzdnSvIlSR1ca64UnDfr31UzvNNM7zfROGz3VTO800zvN9E4zPdVM7zTTO83093X+/PKOTo5PVtNGTzXTO830TjO900ZPNdM7zfROM73TRk810zvN9E4zvdNM77TRU830TjO900zvtNFTzfROM73TTO+00VPN9E4zvdNM7zTTO230VDO900zvNNM7DYhUM73TTO800ztt9FQzvZMICzXTO30RqGZ6pzlbmjdR6uhKY73wpEH/vprpnWZ6p5neaaOnmumdZnqnmd5po6ea6e/u4sW39/Lm7TeraaZ3mumdNnqqmd5ppnea6Z02eqqZ3mmmd5rpnTZ6qpneaaZ3mumdZnqqmd5ppnea6Z1meqeNnmqmd5rpnWZ6p42eaqZ3mumdZnqnmZ5qpnea6Z1meqeZ3mk9pJrpnWZ6p5neaaOnmumdRFiomd7pi0A10zvN2dK8iQt6fnr6aydHR6s5O32+gicN+vfVTO800zvN9E4bPdVM7zTTO830d3Tz9k/3df3692tqpnea6Z1meqeZnmqmd5rpnWZ6p5neaaOnmumdZnqnmd5po6ea6Z1meqeZ3mmjp5rpnWZ6p5neaaZ32uipZnqnmd5ppnfa6KlmeqeZ3mmmd9roqWZ6p5neaaZ3mumd1kOqmd5ppnea6Z02eqqZ3mmWdZrpnb4IVDP94x0dHn7W5cX5akajp5rpqfb6xT1p0L+vZnqnmd5ppnfa6Klm+p1+fhof5s2bb1fTTO+00VPN9E4zvdNM77TRU830TjO900zvNNM7bfRUM73TTO800ztt9FQzvdNM7zTTO230VDO900zvNNM7zfRUM73TTO800zvN9E4bPdVM7zTTO830Ths91UzvNNM7zfROMz3VgOg00zvN9E4zvdNGTzXTO830TjP9Y/324EsOnx6uqZneaaZ3mumdNnqqvX5xTxr076uZ3mmmd5rpd+qbcHcnx6eraaZ3mumdZnqnjZ5qpnea6Z1meqeNnmqmd5rpnWZ6p5meaqZ3mumdZnqnmd5po6ea6Z1meqeZ3mmjp5rpnWZ6p5neaaOnmumdZnqnmd5ppnfa6KlmeqeZ3mmmd9roqWZ6p5neaaZ32uipZnqnmd5ppnea6Z02eqqZ/mHOn5/t1JbtNNM7HZ1qcnSa6Z1meqeNnmqvX9yTBv37aqa/xatXbx9jHthJfaypZnqnmd5ppnea6Z02eqqZ3mmmd5rpnTZ6qpneaaZ3mumdNnqqmd5ppnea6Z1meqeNnmqmd5rpnWZ6p42eaqZ3mumdZnqnjZ5qpnea6Z1meqeZnmqmd5rpnWZ6p5neaaOnmumdZnqnmd5po6ea6Z1meqeZ3mmmv6+zk5O7Ozk6Xk0zvdOW7TTTOx2danJ0mumdZnqnjZ5qr1/ck9c37x+pmd5ppnf6WFPN9E4zvdNM7zTTU830TjO900zvNNM7bfRUM73TTO800ztt9FQzvdNM7zTTO830VDO900zvNNM7zfROGz3VTO800zvN9E4bPdVM7zTTO830Ths91UzvNNM7zfROM73TRk810zvN9E4zvdNGTzXTO830d3f+/Pm9XK6ojZ5qpnea6Z22bKeZ3unoVJOj00zvNNM7bfRUe/3itgOAL+pjTTXTO830TjO900ZPNdM7zfROM73TTO+00VPN9E4zvdNM77TRU830TjO900zvtNFTzfROM73TTO800ztt9FQzvdNM7zTTO230VDO900zvNNM7bfRUM73TTO800zvN9FQzvdNM7zTTO830Thv9nZydP8zh06PVNNM7zfROGz3VTO800ztt2U4zPdUf4DQ5Os30TjO900ZPtdcvbjsA+KI+1lQzvdNM7zTTO230VDO900zvNNM7zfRUM73TTO800zvN9E4bPdVM7zTTO830Ths91UzvNNM7zfROMz3VTO800zvN9E4zvdNGTzXTO830TjO900ZPNdM7zfROM73TRk810zvN9E4z/e3Ozi4e7PLyejVt9FQzvdNM7zTTO230VDO900zvtGU7bfRUf4DT5Og00zvN9E4bPdVev7jtAOCL+lhTzfROM73TTO+00VPN9E4zvdNM77TRU830TjO900zvNNM7bfRUM73TTO800ztt9FQzvdNM7zTTO230VDO900zvNNM7zfROGz3VTO800zvN9E4bPdVM7zTTO830Ths91Uz/Wd98+9PjXV29Xk0zvdNMTzXTO830TjO900zvtNFTzfROM73Tlu200VP9AU6To9NM7zTTU830Tnv94rYDgC/qY0010zvN9E4zvdNGTzXTO830TjO900ZPNdM7zfROM73TTE810zvN9E4zvdNM77TRU830TjO900zvtNFTzfROM73TTO8001PN9E4zvdNM7zTTO230VDO900zvNNPXx+/+bhEfvvnzmprpnWZ6p5neaaOnmumdZnqnmd5ppnfa6KlmeqeZ3mnLdtroqf4Ap8nRaaZ32uipZnqnvX5x2wHAbfpkO830TjO900zvtNFTzfROM73TTO+00VPN9E4zvdNM77TRU830TjO900zvNNM7bfRUM73TTO800ztt9FQzvdNM7zTTO230VDO900zvNNM7zfROGz3VTP9rb7/+cUHf/u7vV9NM77TRU830TjO900zvtNFTzfROM73TTO8001PN9E4zvdNM77RlO230VH+A0+ToNNM7bfRUM73TXr+47QDgNn2ynWZ6p5neaaZ32uipZnqnmd5ppnfa6KlmeqeZ3mmmd9roqWZ6p5neaaZ3mumpZnqnmd5ppnea6Z02eqqZ3mmmd5rpnTZ6qpneaaZ3mumdZvpffPzuH4SX13+zmmZ6p5neaaZ32uipZnqnmd5ppnfa6KlmeqeZ3mmmd9roqWZ6p5neaaZ32rKdNnqqP8BpcnSa6Z02eqqZ3mmvX9x2AHCbPtlOM73TTO8001PN9E4zvdNM7zTTO230VDO900zvNNM7bfRUM73TTO800ztt9FQzvdNM7zTTO830Ths91UzvNNM7zfROGz3VTO8005+dniNv3n23mjZ6qpneaaZ3mumdZnqnjZ5qpnea6Z1meqeNnmqmd5rpnWZ6p42eaqZ3mumdZnqnLZtqpnc6utPk6DTTO230VDO9016/uO0A4DZ9sp1meqeZ3mmjp5rpnWZ6p5neaaZ32uipZnqnmd5ppnfa6KlmeqeZ3mmmd9roqWZ6p5neaaZ3mumpZnqnmd5ppnea6Z0R6N+8/YFqlHea6Z1meqeNnmqmd5rpnWZ6p5meaqZ3mumdZnqnmd5po6ea6Z1meqeZ3mmjp5rpnWZ6p5neacummumdju40OTrN9E4bPdVM77TXL247ALhNn2ynmd5ppnfa6KlmeqeZ3mmmd5rpqWZ6p5neaaZ3mumdNnqqmd5ppnea6Z02eqqZ3mmmd5rpnTZ6qpneaaZ3PtX5b3/4J+3l9e9W00ZPNdM7zfROM73TRk810zvN9E4zvdNGTzXTO830TjO900zvtNFTzfROM73TTO+00VPN9E4zvdNM77RlU830Tkd3mhydZnqqmd5ppnfa6xe3HQDcpk+200zvNNM7bfRUM73TTO800ztt9FQzvdNM7zTTO830Ths91UzvNNM7zfROGz3VTO800zvN9E4bPfXy9Y/f/e6ndfzhb//raprpnWZ6qpneaaZ3mumdZnqnjZ5qpnea6Z1meqeNnmqmd5rpnWZ6p5meaqZ3mumdZnqnmd5po6ea6Z1meqeZ3mnLpprpnY7uNDk6bfRUM73TTO+01y/uL+wA4NW6ZwB9sp1meqeZ3mmjp5rpnWZ6p5neaaOnmumdZnqnmd5ppqea6Z1meqeZ3mmmd9roqWZ6p5neefX629W8fPVhTc30TjO900zvtNFTzfROM73TTO800ztt9FQzvdNM7zTTO230VDO900zvNNM7bfRUM73TTO800zvN9E4bPdVM7zTTO830Tls21UzvdHSnydFpo6ea6Z1meqe9fnHbAcBt+mQ7zfROM73TRk810zvN9E4zvdNGTzXTO830TjO900ZPNdM7zfROM73TTO+00WPvV3N9vZ5meqeNnmqmd5rpnWZ6p42eaqZ3mumdZnqnmZ5qpnea6Z1meqeZ3mmjp5rpnWZ6p5neaaOnmumdZnqnmd5ppqea6Z1meqeZ3mmmd9qyqWZ6p6M7TY5OGz3VTO800zvt9YvbDgBu0yfbaaZ3mumpZnqnmd5ppnea6Z02eqqZ3mmmd5rpnTZ6qpneaaZ3mukXd3Z6+ovzda80empmeqeZ3mmmd9roqWZ6p5neaaZ32uipZnqnmd5ppnfa6KlmeqeZ3mmmd5rpnTZ6qpneaaZ3mumdNnqqmd5ppnea6Z02eqqZ3mmmd5rpnWZ6py2baqZ3OrrT5Oi00VPN9E4zvdNev7jtAOA2fbKdZnqnjZ5qpnea6Z1meqeZ3mmjp5rpnWZ6p5neaaOnmukXdHp8+v85Wc+nOr+CWejxlUZPzUzvNNM7zfROGz3VTO800zvN9E4bPdVM7zTTO830Ths91UzvNNM7zfROMz3VTO800zvN9E4zvdNGTzXTO830TjO900ZPNdM7zfROM73TTE81ZzvN9E5Hd5ocnTZ6qpneaaZ32usXtx0A3KZPttNM77TRU830TjO900zvNNNTzfROM73TTO800y/l+PB4eraq2eipZHqnmd6ZhR5fafTUzPROM73TTE810zvN9E4zvdNM77TRU830TjO900zvtNFTzfROM73TTO+00VPN9E4zvdNM7zTTO230VDO900zvNNM7bfRUM73TTO800ztt9FRzttNM73R0p8nRaaOnmumdZnqnvX5x2wHAbfpkO830Ths91UzvNNM7zfROGz3VTO800z/e1Yubzzo9fr6a2eipNHpqNnoqmd5ppndmocdXGj01M73TTO+00VPN9E4zvdNM7zTTO230VDO900zvNNM7bfRUM73TTO800ztt9FQzvdNM7zTTO830VDO900zvNNM7zfROGz3VTO800zvN9E4bPdWc7TTTOx3daXKkmumdZnqnmd5pr1/cAgcAr9c9A2imd/pYO830Ths91UzvNNM7zfROG/0jPb/4cItXrz6uppneaaZ3ZqPXkumd2eipZHqnmd6ZhR5fafTUzPROM73TRk810zvN9E4zvdNMTzXTO830TjO900zvtNFTzfROM73TTO+00VPN9E4zvdNM77TRU830TjO900zvNNM7bfRUM73TTO800ztt9FRzttNM73R0p8mRaqZ3mumdk6OjFxcX67j8+fOCbQcAt+lj7TTTO230VDO900z/YCfHZ7c7e/56NW30VDO900zvNNM7M9BryfTObPRUMr3TTO/MQo+vNHpqZnqnmd5po6ea6Z1meqeZ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TO/MQK8l0zvN9M6nOv/znKW9//BxVcn0TjO900zvNNM7bfRUM73TTO800ztt9FQzvdNM7zTTO230VDO900zvNNM7zfRUM73TTO800zvN9E4bPdVM7zTTO830Ths9lUZPzVzmNNM77eZ7o5neaTrfD230VDO902S/rO0AYIdmemc2eiqZ3mmjp5rpnWZ6p5neaaanmumdZnpnNnoqmd6ZgV47OT05OlpHlxdQMr0zA72WTO800zvN9E4zPdVM7zTTO830TjO900ZPNdM7zfROM73TRk810zvN9E4zvdNGTzXTO830TjO900zvtNFTzfROM73TTO+00VNp9NTMZU4zvdNuvjea6Z25/dwXbfRUM73TZL+s7QBgh2Z6ZzZ6KpneaaOnmumdZnqnmd5po6ea6Z1memc2eurZ0WoOvjpYUzO90+UFlEzvzECvJdM7zfROM73TRk810zvN9E4zvdNM77TRU830TjO900zvtNFTzfROM73TTO+00VPN9E4zvdNM7zTTU830TjO900zvNNM7bfRUGj01c5nTTO+0m++NZnpnbj/3SDO900zvNNkv6y/vAOBs3TOAZnpnNnoqmd5po6ea6Z1meqeZ3mmjp5rphcuLVz87OjxezdPfHqymmZ5qpnea6Z2uLaBkemcGei2Z3mmmd5rpnTZ6qpneaaZ3mumdZnqqmd5ppnea6Z1meqeNnmqmd5rpnWZ6p42eaqZ3mumdZnqnjZ5qpnea6Z1meqeZ3mmjp9LoqdnKnGZ6p918bzTTO3P7uUea6Z1meqfJflnbAcAOzfTObPRUMr3TRk810zvN9E4z/eKOj1/+4tWrb9f0S5pfRzO900zvtNFTzfROM73TtQWUTO/MQK8l0zvN9E4zvdNGTzXTO830TjO900ZPNdM7zfROM73TTO+00VPN9E4zvdNM77TRU830TjO900zvtNFTzfROM73TTO8001PN9E4aPTVbmdNM77Sb741memduP/dIM73TTP+zd2/fCS8urqjtAGCHZnpnNnoqmZ5qpnea6Rf07PDZrx0dn6/mU51fQRs91UzvNNM7zfROGz3VTO800ztdW0DJ9NRs9FQyvdNM7zTTO230VDO900zvNNM7bfRUM73TTO800zvN9FQzvdNM7zTTO830Ths91UzvNNM7zfROGz3VTO800zvN9E4bPdVM76TRU7OVOc30Trv5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M73TTO+00VPN9E4zvdMBI805TjXTO830TjO900zvzECvJdM7zfROM73TRk810zvN9MfyFz/82fDS86+s5slAr7XRU830TjO900zvtNFTzfROM73TTO+00VPN9E4zvdNM7zTTO230VDO900zvNNM7bfRUM73TTO800zvN9FQzvdNM7zTTO830Ths91ay/u20D4Aia6Z1meqeVzWmmp2ajp2YYhZrpnWZ6p42eaqZ3mumdDhhpznGqmd5ppnea6Z1memcGei2Z3mmmd5rpnTb6o3jvvXc/1N/84peraaZ3mumdZnqqmd5ppnea6Z1meqeNnmqmd5rpnWZ6p42eaqZ3mumdZnqnmZ5qpnea6Z1meqeZ3mmjp5rpnWZ6p5neaaOnmumdZnqnmd5ppnfa6Klm/d1tGwBH0EzvNNM7rWxOGz01Gz01wyjUTO800ztt9FQzvdNM73TASHOOU830TjO900zvNNNTs9FTyfROM/2Bumh87MUXnltNGz3VTO800zvN9E4bPdVM7zTTO830TjO900ZPNdM7zfROM73TRk810zvN9E4zvdNGTzXTO830TjO90w8tp42eaqZ3mumdZnqnjZ5qpnea6Z1meqeZnmqmd5r1d7dtABxBM73TTO+0sjlt9NRs9NQMo1AzvdNM77TRU830TjO90wEjzTlONdM7zfROM73TRk/NRn+A65dXT9ebCGWN5zTTO230VDO900zvNNM7bfRUM73TTO800zvN9FQzvdNM7zTTO830Ths91UzvNNM7zfROGz3VTO800zvN9E4/tJw2eqqZ3mmmd5rpnTZ6qpneaaZ3mumdNnqqmd5p1t/dtgFwBM30TjO908rmtNFTs9FTM4xCzfROMz3VTO800zvN9E4HjDTnODUjrNRM7zTTL3N1ef1j3bl9e03N9E5vIpQ1ntNMTzXTO830TjO900zvtNFTzfROM73TTO+00VPN9E4zvdNM7zTTO230VDO900zvNNM7bfRUM73TTO800zv90KKa6Z1meqeZ3mmmd9roqWZ6p5neaaZ32uipZnqnWX93v5sbAA810zvN9E4zvdPK5rTRU7PRUzOMQs30Ths91UzvNNM7zfROB4w05zg1I+z+Tq+d7erkfDXN9E4bPdVM7/R2Q1ngOW30VDO900zvNNM7zfROGz3VTO800zvN9E4bPdVM7zTTO830TjM91UzvNNM7zfROM73TRk810zvN9E4zvdMPLaqZ3mmmd5rpnWZ6p42eaqZ3mumdZnqnjZ5qpnea9Xe3bQAcQTO900zvtLI5bfTUbPTUDKNQM73TRk810zvN9E4zvdMBs5fL88u9nD88ubXMRk8l0zvN9E4bPdVM78xGT2WB57TRU830TjO900zvNNM7bfRUM73TTO800ztt9FQzvdNM7zTTO230VDO900zvNNM7zfROGz3VTO800zvN9E4/tKhmeqeZ3mmmd5rpqWZ6p5neaaZ3mumdNnqqmd5p1t/dtgFwBM30TjO900xPNdM7s9FTCalOM73TRk810zvN9Du6ef1qXzcuL1fTRk810zuz0VPJ9E4zvdNGTzXTO7PRU1ngOW30VDO900zvNNM7zfRUM73TTO800zvN9E4bPdVM7zTTO830Ths91UzvNNM7zfROM73TRk810zvN9E4zvdMPLaqZ3mmmd5rpnTZ6qpneaaZ3mumdZnqnjZ5qpnea9Xe3bQAcQTO900zvtNFTzfTObPRUMr3TTO+00e/iYrnz1TTTO830Ths91UzvzEZPJdM7zfRUM73TTO/MRk9lgee00VPN9E4zvdNM77TRU830TjO900zvNNM7bfRUM73TTO800ztt9FQzvdNM7zTTO830VDO900zvNNM7zfROP7SoZnqnmd5ppnfa6KlmeqeZ3mmmd5rpnTZ6qpn+KL741ufrrS/dW2zbADiCZnqnmd5po6ea6Z3Z6Klk+qc7Pz09wNlqEui1memdZnqnmd5po6ea6Z3Z6KlkeqeNnmqmd5rpndnoqSzwnDZ6qpneaaZ3mumdNnqqmd5ppnea6Z1meqqZ3mmmd5rpnWZ6p42eaqZ3mumdZnqnjZ5qpnea6Z1meqeZ3umHFtVM7zTTO830Ths91UzvNNM7zfROM/2BXvnMq0/x3lfeW00zvdOsv7ttA+AImumdZnqnjZ5qpn+KhO99zZwt9ehOjw6l0VMz0zvN9E4zvdNGTzXTO7PRU8n0Ths91UzvNNM7s9FTWeA5bfRUM73TTO800ztt9FQzvdNM7zTTO230VDO900zvNNM7zfROGz3VTO800zvN9E4bPdVM7zTTO830TjM91W8tp5neaaZ3mumdNnqqmd5ppl/m7qtvfazXXv3catroqWZ6p5neadbf3XobALfX3QNopnea6Z1m+o9y6/qNAzX4Ys3ZTo/u9OhOjw6l0VMz0zvN9E4zvdNGTzXTO7PRU8n0Ths91UzvNNM7s9FTWeBRzfROM73TTO800ztt9FQzvdNM7zTTO230VDO900zvNNM7zfROGz3VTO800zvN9E4bPdVM7zTTO830Ths91Q8tp5neaaZ3mumdNvoF/ugPv7mjb37wJ6tppnea6Z02eqqZ3mmmd5r1d/evewMg0XyZ87Pz1TTTOw2+WHO206M7PbrTo0Np9NTM9E4zvdNMTzXTO830zmz0VDK900ZPNdM7zfTObPRUFnhUM73TTO800zvN9E4bPdVM7zTTO830Ths91UzvNNM7zfROMz3VTO800zvN9E4zvdNGTzXTO830TjO900ZP9UPLaaZ3mul398rLL+3lnXfur6aNnmqmd5rpnWZ6p42eaqZ3mumdZv3dfcwGwHPP3jmiq4uL1TTTO830TjO90+CLNWc7PbrTozs9OpRGT81M7zTTO230VDO900zvzEZPJdM7bfRUM73TTO/MRk9lgUc10zvN9E4zvdNMTzXTO830TjO900zvtNFTzfROM73TTO+00VPN9E4zvdNM7zTTO230VDO900zvNNM7bfRUP7Q+1tX55TI3b95YTTO900xPNdM7zfROM73TTO+00VPN9E4zvdOsv7tPNNM7zfROM73TTO8001NtvlJzttOjOz2606NDafTUzPROM73TRk810zvN9M5s9FQyvdNGTzXTO830zmz0VFaGVDO900zvNNM7bfRUM73TTO800zvN9E4bPdVM7zTTO830Ths91UzvNNM7zfROMz3VTO800zvN9E4z/dP1w2x3VxfrSqZ3mumdZnqnjZ5qpnea6Z1meqeZ3mmjp5rpnWZ6p1l/d9sGwBE00ztt9FSbr9Sc7fToTo/u9OhQGj01M73TTO+00VPN9E4zvTMbPZVMTzXTO830Ttd4zmz0VBo91UzvNNM7zfROGz3VTO800zvN9E4zvdNGTzXTO830TjO900ZPNdM7zfROM73TRk810zvN9B/qy29943C3rt9ZTT+0nBnotWR6p5neaaZ32uipZnqnmd5ppnea6almeqeZ3mmmd5r1d7dtABxBM73TRk+1+UrN2U6P7vToVP8AJY2empneaaZ32uipZnqnmd6ZjZ5Ko6ea6Z1meqdrPGc2eiqNnmqmd5rpnWZ6p42eaqZ3mumdZnqnmZ5q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00ZPNdM7zfROM73TTO+00VPN9E4zvdOyv6F5AFhGM73TRk/t7oyZ3mmmd/omOu3LThs91Zzt9Jd1+tOdBHptzPROM73TTO+00VPN9E4zvdNM7zTTO230VDO900zvNNM7bfRUM73TTO80059351d+1bJe89rXrqmZ3mmmd5rpnWZ6p42eaqZ3mumdZnqnjZ5qpnea6Z1meqeZ3mmjp5rpnWZ6p5neaaOnmumdZnqnmd5ppqea6Z1meqeZ3mnZ39A8ACyjmd5po6d2d8ZM7zTTO30TnfZlqpneac52+ps6/elOAr02Znqnmd5ppnfa6KlmeqeZ3mmmd5rpnTZ6qpneaaZ3mumdNnqqmf6Dj3wL8pY3vm01zfROGz3VTO800zvN9E4zvdNGTzXTO830TjO900ZPNdM7zfROM73TTE810zvN9E4zvdNM77TRU830TjO900zvtNFTzfROM73TTO+07G/oimuvvqqZ3mmmd9phnWZ6p42e2t0ZM73TTO/0TXTal6lmeqc52+lv6vSnOwn02pjpnWZ6p5neaaOnmumdZnqnmd5ppqea6Z1meqeZ3hka/d1vuMe5//5719RM7zTTO830Ths91UzvNNM7zfROM73TRk810zvN9E4zvdNGTzXTO830TjO900ZPNdM7zfROM73TTO+00VPN9E4zvdNM77TRU830TjO900zvtOxvaB4AltFM77TRU7s7Y6Z3mumdvolO+zLVTO80Zzv9TZ3+dCqNnhozvdNM7zTTO230VDO900zvNNM7bfRUM71zvs6/9tVfqX3dPW9cTTO900ZPNdM7zfROM73TRk810zvN9E4zvdNMTzXTO830TjO900zvtNFTzfROM73TTO+00VPN9E4zvdNM7zTTO230VDO900zvNNM7bfRUM73TTO800zst+xuaB4BlNNNTzfTO7s6Y6Z1meqdvotO+TDXTO23ZTn9Tpz+dSqOnxkzvNNM7zfROGz3VTO800zvN9M65Lv/aV92zjptefHY1zfROM73TTE810zvN9E4zvdNM77TRU830TjO900zvtNFTzfROM73TTO800ztt9FQzvdNM7zTTO230VDO900zvNNM7zfRUM73TTO800zvN9E4bPdVM7zTTO830Tsv+huYBYBlt9FQzvbO7M2Z6p5ne6ZvotC9TzfROW7bT39TpT6fS6Kkx0zvN9E4zPdVM7zTTOzunTq/mpTfetJo2eqqZ3mmmd5rpnTZ6qpneaaZ3mumdZnqnjZ5qpnea6Z1meqeNnmqmd5rpnWZ6p5meaqZ3mumdZnqnmd5po6ea6Z1meqeZ3mmjp5rpnWZ6p5neaaZ32uipZnqnmd5ppnda9jc0DwDLaKOnmumd3Z0x0zvN9E7fRKd9mWqmd9qynf6mTn86lUZPjZneaaZ32uiRkydOPaPp3Llq97rVNNM7zfROGz3VTO800zvN9E4bPdVM7zTTO830TjM91UzvNNM7zfROM73TRk810zvN9E4zvdNGTzXTO830TjO900zvtNFTzfROM73TTO+00VPN9E4zvdNM7zTTU830TjO900zvNNM7LfsbmgeAZbTRU830zu7OmOmdZnqnbyLVxOw00ztt2U5/U6c/nUqjp8ZMv7hn3qu/kBfWOdflV9NM7zTTO830TjO900ZPNdM7zfROM73TRk810zvN9E4zvdNGTzXTO830TjO900zvtNFTzfROM73TTO+00VPN9E4zvdNM7zTTU830TjO900zvNNM7bfRUM73TTO800ztt9FQzvdNM7zTTO830Tsv+huYBYBlt9FQzvbO7M2Z6p5ne6ZtItVc6zfROW7bT39TpT1/aqf1OnTy5oi/U+RXkhXXa6KlmeqeZ3mmmd5rpqWZ6p5neaaZ3mumdNnqqmd5ppnea6Z02eqqZ3mmmd5rpnWZ6p42eaqZ3mumdZnqnjZ5qpnea6Z1meqeNnmqmd5rpnWZ6p5neaaOnmumdZnqnmd5po6ea6Z1meqeZ3mmmd1r2NzQPAMtoo6ea6Z3dnTHTO830Tt9Eqr3SaaZ30rUXc3pvb5D/Jrs1NHoqjZ5Kpnfy4XTa6KlmeqeZ3mmmd9roqWZ6p5neaaZ3mumdNnqqmd5ppnea6Z02eqqZ3mmmd5rpnWZ6qpneaaZ3mumdZnqnjZ5qpnea6Z1meqeNnmqmd5rpnWZ6p5neaaOnmumdZnqnmd5po6ea6Z1meqeZ3mmmp4ay/7ZvuHcT8wCwjDZ6qpneaaZ3mumdvolUe+UiWuSfcdXe3mqa6Z02eqqZ3kmjp5LpnXxinTZ6qpneaaZ3mumdNnqqmd5ppnea6Z1meqqZ3mmmd5rpnWZ6p42eaqZ3mumdZnqnjZ5qpnea6Z1meqeZ3mmjp5rpnWZ6p5neaaOnmumdZnqnmd5ppqea6Z1meqeZ3mmmd9roqWZ6p5neOV/nP/ODn9be+bb3rKlxfxPzALCYZnqnmd5ppnea6Y+uH4znRTO900zvNNM7bfRUM72TRk8l0zvJ9E4bPdVM7zTTO830Ths91UzvNNM7zfROGz3VTO800zvN9E4zvdNGTzXTO830TjO900ZPNdM7zfROM73TTE810zvN9E4zvdNM77TRU830TjO900zvtNFTzfROM73TTO800ztt9NRtt77uG7/+ret49AP3r6aZ3mmjpxr3NzEPAItppnea6Y/izLVXX8RVp0+vpm/i1mimd5rpnWZ6p42eaqZ30uipZHonmZ5qpnea6Z1meqeZ3mmjp5rpnWZ6p5neaaOnmumdZnqnmd5ppnfa6KlmeqeZ3mmmd9roqWZ6p5neaaZ32uipZnqnmd5ppnea6Z02eqqZ3mmmd5rpnTZ6qpneaaZ3mumRO15/2ze85e41PXTfvatppnea6Z1meqeNnmrc38Q8AGzk5InjB9o5cXI1zfROM73TN3FrNNM7zfROM73TRk810ztp9FQyvZNGTzXTO830TjO900zvtNFTzfROM73TTO+00VPN9E4zvdNM7zTTU830TjO900zvNNM7bfRUM73TTO800ztt9FQzvdNM7zTTO830Ths91UzvNNM7zfROGz3VTL+sF9xw5ryzt758NXe8/rbVtNFTzfROM73TTO800ztt9FTj/iauWPAAsLe7c6CTx46tJ42eaqZ3mumdZnqn3XxrNNM7zfROM73TRk810ztp9FQyvZNGTzXTO830TjO900xPNdM7zfROM73TTO+00VPN9E4zvdNM77TRU830TjO900zvNNM7bfRUM73TTO800ztt9FQzvdNM7zTTO830VDO900zvNNM7zfQLuu6aF+x3w/UvXNP+QK+dTaZ3mumdNnqqmd5ppnea6Z1meqeNnmrc38QVJ0+caKZ3xkZPpdFTzfROM73TTO+0m2+NZnqnmd5ppnfa6KlmeieNnkqmd9LoqWZ6p5neaaZ32uipZnqnmd5ppnea6Z02eqqZ3mmmd5rpnTZ6qpneaaZ3mumdZnqqmd5ppnea6Z1meqeNnmqmd5rpnWZ6p42eaqZ3mumP7rprrn5WV5++bjVDo6fa6KlmeudsMr3TTO+00VPN9E4zvdNM7zTTU830TuP+JuYBYDHN9E4zvdNM77Sbb41meqeZ3mmmp5rpnWZ6J42eSqZ30uipZnqnmd5ppnfa6KlmeqeZ3mmmd5rpnTZ6qpneaaZ3mumdNnqqmd5ppnea6Z02eqqZ3mmmd5rpnWZ6p42eaqZ3mumdZnqnjf6IdnZPXcTx4+tppnea6Z1meqqZ3mmmd84m0zvN9E4bPdVM7zTTO830Ths91UzvNO5vYqsPAMdWvQE00zvN9E4zvdNuvjWa6Z1meqeNnmqmd5rpnTR6KpneSaOnmumdZnqnmd5po6ea6Z1meqeZ3mmmp5rpnWZ6p5neaaZ32uipZnqnmd5ppnfa6KlmeqeZ3mmmd5rpnTZ6qpneaaY/nJPH9w50eu+q1bTRU830TjO900zvtNFTzfROM71zNpneaaZ32uipZnqnmd5ppnfa6KlmeqdxfxPzALCYZnqnmd5ppnfazbdGM73TTO+00VPN9E4zvZNGTyXTU8n0TjO900zvNNM7bfRUM73TTO800ztt9FQzvdNM7zTTO830Ths91UzvNNM7zfROGz3VTO800zvN9E4zPdVMf6nufdODG7rlpa9YTTO900zvtNFTzfROM73TTO+00VPN9E4zvXM2md5ppnfa6KlmeqeZ3mmmd9roqWZ6p3F/E/MAsJhmeqeZ3mmmp5rOt0MzvdNM77TRU830TjO9k0ZPpdFTyfROM73TTO800ztt9FQzvdNM7zTTO230VDO900zvNNM7zfRUM73TTO800zvN9E4bPdVM7zTTO830l+Sd9717cw+89eE1NdM7zfROM73TTO+00VPN9E4zvdNM77TRU830TjO9czaZ3mmmp5rpnWZ6p5neaaZ32uipZnqncX8T8wCwmGZ6p5neaaOnms63QzO900zvtNFTzfROM72TRk+l0VPJ9E4zvdNM7zTTU830TjO900zvNNM7bfRUM73TTO800ztt9FQzvdNM7zTTO830Ths91Uy/ibu+5vZDeOQ9D6+mmd5po6ea6Z1meqeZ3mmmp5rpnWZ6p5neaaZ32uipZnqnmd45m0zvtNFTzfROM73TTO800ztt9FQzvdO4v4l5AFhMM73TTO+00VNN59uhmd5ppnfa6KlmeqeZ3kmjp9LoqWR6p5neaaZ32uipZnqnmd5ppnea6Z02eqqZ3mmmd5rpnTZ6qpneuTOZ3mmmd5rpD/SyW15xaDfddPNqmumdZnqnmd5po6ea6Z1meqeZ3mmjp5rpnWZ6p5neaaZ32uipZnqnmd45m0zvtNFTzfROM73TTO8001PN9E4zvdO4v4l5AFhMM73TTO+00VNN59uhmd5ppqea6Z1meqeZ3kmjp9LoqWR6p5neaaZ32uipZnqnmd5ppnea6Z02eqqZ3mmmd5rpnTZ6qpneuTOZ/iIeuPf+o7j9NXetpo2eaqZ3mumdZnqnmd5po6ea6Z1meqeZ3mmjp5rpnWZ6p5neaaZ32uipZnqnmd45m0zvtNFTzfROM73TTO+00VPN9E4zvdO4v4m1DwB7K98AkumdZnqnmd5po6eazrdDM73TRk810zvN9E4zvZNGT6XRU8n0TjO900zvtNFTzfROM73TTO/ePwNzAACAAElEQVQ001PN9E4zvdNM7zTTO230z+Xpjz95dB985NHVNNM7zfROGz3VTO800zvN9E4zvdNGTzXTO830TjO900ZPNdM7zfROM73TTE810zvN9E4zvXM2md5po6ea6Z1meqeZ3mmjp5rpnWZ6p3F/E/MAsJhmeqeZ3mmjp5rOt0MzvdNGTzXTO830TjO9k0avJdM7yfROM73TTO+00VPN9E4zvdNM77TRU830TjO900w/uOO2O5fywP1vW00bPdVM7zTTO830Ths91UzvNNM7zfROMz3VTO800zvN9E4zvdNGTzXTO830TjO900ZPNdM7zfROM71zNpneaaOnmumdZnqnmd5po6ea6Z1meqdxfxPzALCYZnqnmd5po6eazrdDM73TRk810zvN9E4zvZNAryXTO8n0TjO900zvtNFTzfROM73TTO+00VPN9Oc9/sGnlvXuBx9cTTO980AyPdVM7zTTO830TjO900ZPNdM7zfROM73TRk810zvN9E4zvdNM77TRU830TjO900zvtNFTzfROM73TTO+cTaanmumdZnqnmd5ppnfa6KlmeqeZ3mnc38Q8ACymmd5ppqea6Z2m8+3QTO+00VPN9E4zvdNM7yTQa8n0TjK900zvNNM7bfRUM73TTO8005/z8EOPLO7xR59eVTK900zvNNM7D6TRU830TjO900zvNNM7bfRUM73TTO800ztt9FQzvdNM7zTTO830VDO900zvNNM7zfROGz3VTO800zvN9M7ZNHqqmd5ppnea6Z1meqeNnmqmd5rpncb9TcwDwGKa6Z02eqqZ3mk63w7N9E4bPdVM7zTTO830TgK9lkzvJNM7zfROMz3VTO80099y463IHbffsZpmemcM9FoyvdNM7zTTOw+k0VPN9E4zvdNM7zTTO230VDO900zvNNM7bfRUM73TTO800ztt9FQzvdNM7zTTO830Ths91UzvNNM7zfTO2TR6qpneaaZ3mumdZnqnjZ5qpnea6Z3G/U3MA8BimumdNnqqmd5pOt8OzfRUM73TTO800zvN9E4CvZZM7yTTO830zhDoX3TDLdRNL37ZaprpnWZ6p5neGQO9lkzvNNM7zfTOA2n0VDO900zvNNM7zfRUM73TTO800zvN9E4bPdVM7zTTO830Ths91UzvNNM7zfROM73TRk810zvN9E4zvXM2jZ5qpnea6Z1meqeZnmqmd5rpnWZ6p3F/E58/AKx8AxgbPZVM7zTTO230VDO903S+HdroqWZ6p5neaaZ3mumdBHotmd75Qp0/c+2LtRtfeOtq2uipZnqnmd5ppnea6amx0VPJ9E4zvdNM77TRU830TjO900zvtNFTzfROM73TTO800ztt9FQzvdNM7zTTO230VDO900zvNNM7zfRUM73TTO800zvN9M7ZNHqqmd5ppnea6Z02eqqZ3mmmd5rpncb9TcwDwGKa6Z02eqqZ3mk63w5t9FQzvdNM7zTTO830zrkun39YKn3SdZrpnWZ6p42eaqZ3mumdZnqnjZ4aGz2VTO800zvN9E4bPdVM7zTTO830Ths91UzvNNM7zfROMz3VTO800zvN9E4zvdNGTzXTO830TjO900ZP9U8Mp5neaaZ3mumds2n0VDO900zvNNM7bfRUM73TTO800zuN+5uYB4DFNNM7bfRUM73TdL4d2uipZnqnmd7Z2z29mhNXnlhT/kkJ9UnXaaZ3mumdNnqqmd5ppnea6Z02emps9FQyvdNM7zTTO230VDO900zvNNM7bfRUM73TTO800ztt9FQzvdNM7zTTO830Ths91UzvNNM7zfROGz3VPzGcZnqnmd5ppqfOJtM7zfROM73TTO+00VPN9E4zvdNM7zTu11Mf+u7BPAAsppmeaqZ3mumdpvPt0EYvncoDobSzu5pmeqeNnso/KaE+6TrN9E4zvdNGTzXTO830TjO900ZPjY2eSqZ3mumdZnqqmd5ppnea6Z1meqeNnmqmd5rpnWZ6p42eaqZ3mumdZnqnmd5po6ea6Z384QQ10ztt9FT/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cJrpnTZ6amj0Dz50j/Oeh9+5mmZ6p5meaqZ3mumdZnqnmd5po6ea6Z1meqeZ3mnfP9A8ACxpDPRaMr3TTO+k0VNjpnfa6KlmeqeZ3mmmd9roqWZ6p5neaaZ3mumpZnqnmd5ppnea6Z02eqqZ3mmmd9LoqbHRU830TjO900zvNNM7bfRUM73TTO800ztt9FQzvdNM7zTTO830VDO900zvNBo45+v8qZMntFtvvXFNzfROM73TTO+00VPN9E4zvdNM7zTTO230VDO900zvNNM77fsHmgeAJY2BXkumd5rpnTR6asz0Ths91UzvNNM7zfROGz3VTO800zvN9E4bPdVM7zTTO830TjO900ZPNdM7zfROGj01Nnqqmd5ppnea6Z1meqeNnmqmd5rpnWZ6p42eaqZ3mumdZnqnjZ5qpnf2dvZ2Tuys48ovO76aZnqnjZ5qpnea6Z1meqeNnmqmd5rpnWZ6p5neaaOnmumdZnqnmd5p3z/QPAAsaQz0WjK900zvpNFTY6anmumdZnqnmd5ppnfa6KlmeqeZ3mmmd9roqWZ6p5neaaZ3mumdNnqqmd5ppnfS6Kmx0VPN9E4zvdNM7zTTU830TjO900zvNNM7bfRUM73TTO800yMffuzxO173tWu6au+a1TTTO830TjO900ZPNdM7zfROM73TRk810zvN9E4zvdNMTzXTO830TjO900zvtO8faB4AljQGei2Z3mmmd9LoqbHRU830TjO900zvNNM7bfRUM73TTO800ztt9FQzvdNM7zTTO830VDO900zvNNM7afTU2OipZnqnmd5ppnfa6KlmeqeZ3mmmd5rpnTZ6qpl+cQ8+eN8573jg/tV8+LHHV9NGTzXTO830TjO900xPNdM7zfROM73TTO+00VPN9E4zvdNM77TRU830TjO900zvNNM77fsHmgeAJY2BXkumd5rpnTR6amz0VDO900zvNNM7zfRUM73TTO800zvN9E4bPdVM7zTTO830Ths91UzvNNM7zfROGj01Nnqqmd5ppnea6Z02eqqZ3mmmd5rpnWb6ZT395Cf3e/CBd6znC3V+Bc30TjO900ZPNdM7zfROM73TRk810zvN9E4zvdNM77TRU830TjO900zvtNFTzfROM73TTO8001NN/Bc3DwBLGgO9lkzvNNM7afTU2OipZnqnmd5ppnfa6KlmeqeZ3mmm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zECvJdM7zfROM73TRk810zvN9E4zvdNMTzXTO830TjO900zvNFZayfROM70zGz2VRk810zt9DnfmlSk10ztt9FQzvdNM7zTTO230VDO900zvNNM7zfTObrc7rc1GTzXTO830Trv/HgBc/wHA+ffjyCdrT3f6BE810zvN9E4zvdNGTzXTOzPSyzXTO8301Gz0VDK900zvNNM7bfRUM73TTO800ztt9FQzvdNM7zTTO830TmOllUzvNNM7s9FTafRUM73T53BnXplSM73TRk810zvN9E4zvdNGTzXTO830TjO900xP7Xa709rM9E4zvdNM77T7//EcAJzdOHu+G2++eZhmeqeZnupDvNNM7zTTO830Ths91UzvzEgv10zvtNFTs9FTyfROM73TTO+00VPN9E4zvdNM77TRU830TjO900zvNNM7jZVWMr3TTO/MRk+l0VPN9E6fw515ZUrN9FQzvdNM7zTTO830Ths91UzvNNM7zfROGz212+1OazPTO830TjO90+7/gwOAW2d3nq+Z3mmmd5rpnTZ6qg/xTjO900zvNNM7bfRUM70zI71cM73TRk/NRk8l0zvN9E4zvdNGTzXTO830TjO900ZPNdM7zfROM73TTE+1V0LJ9E4zvTMbPZVGTzXTO30Od+aVKbXRU830TjO900zvNNM7bfRUM73TTO800ztt9Ndot9ud+mamd5rpnWZ6p91/DwD2AOB6NNM7zfROMz3VTO800zsz0ss10ztt9NRs9FQyvdNM7zTTU830TjO900zvNNM7bfRUM73TTO800ztt9FR7JZRM7zTTO7PRU2n0VDO90+dwZ16ZUhs91UzvNNM7zfROM73TRk810zvN9K/ugy+9/Yn+i//6bxxm1rzdbrd7gc1M7zTTO830Trv/HgDsAcD1aKZ3mumdNnqqmd5ppndmpJdrpnfa6KnZ6KlkeqeZ3mmjp5rpnWZ6p5neaaZ32uipZnqnmd5ppnfa6Kn2SiiZ3mmmd2ajp9LoqWZ6p8/hzrwypTZ6qpneaaZ3mumdZnqqmf6V5O/lp733ztuHaaZ3mumdWfN2u93uBTYzvdNM7zTTO+3+ewCwBwDXo5neaaZ32uipZnqnmd6ZkV6umd5po6dmo6eS6Z1meqeNnmqmd5rpnWZ6p5meagJwmumdZnqnmd5po6faK6FkeqeZ3pmNXkumd5rpnT6H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p5neaaOnmumdZnqn3ztpNnqqmd5ppnea6Z38BKE2eqqZ3mmmd5rpnTZ6qpneaaZ3mumdZnqqmf7h3bh+baebN24tMxo91UzvtNFTzfROM73TTO8001PN9E4zvdNM7zTTO230VDO900zvbAuAHZrpnWZ6p42eaqZ3mumdZnqnjZ5qpnea6Z1meqeZnmqmd5rpnWZ6p9XGaaOnmumdZnqnmd5ppqea6Z1meqeZ3un3TpqNnmqmd5rpnWZ6Jz9Bq5neaaZ3mumdZnqnjZ5qpnea6Z1m+of0zFN3XsvV4+srNdM7zfROM73TTO+00VPN9E4zvdNM77TRU830TjO900zvNNM7bfRUM73TTO9sC4AdmumdZnqqmd5ppnea6Z1meqeNnmqmd5rpnWZ6p42eaqZ3mumdZnqnycZpo6ea6Z1meqeZ3mmjp5rpnWZ6p5ne6fdOmo2eaqZ3mumdZnonP0Grmd5ppnea6Z1meqeNnmqmP5s7d559XX/qjS8s00zvtNFTzfROM73TTO800ztt9FQzvdNM7zTTO230VDO900zvNNM7zfROGz3VTO800zvbAmCHZnqnjZ5qpnea6Z1meqeZ3mmjp5rpnWZ6p5neaaOnmumdZnqnmd5psnHa6KlmeqeZ3mmmd9roqWZ6p5neaaZ3+r2TZqOnmumdZnqnmd7JT9Bqpnea6Z1meqeZ/gxu3bx1Ss88c2eZZnqnmd5ppnfa6KlmeqeZ3mmmd5rpqWZ6p5neaaZ3mumdNnqqmd5ppnea6Z1meqqZ3mmmd5rpnW0BsEMzvdNGTzXTO830TjO900zvtNFTzfROM73TTO+00VPN9E4zvdNM7zTZUM30TjO900zvNNM7bfRUM73TTO800zv90mEz0zvN9E4zvdNM7+THZzXTO830D+TK0fHp9Txx2uipZnqnmd5ppnea6Z02eqqZ3mmmd5rpnTZ6qpneaaZ3mumdZnqnjZ5qpnea6Z1meqeNnmqmd5rpnWZ6Z1sA7NBM77TRU830TjO900zvNNNTzfROM73TTO800ztt9FQzvdNM7zTTO002VDO900zvNNM7zfROGz3V+OU00zvN9E6/dNjM9E4zvdNM7zTTO/nxndaFRy+cQX+ITjO90/PEaaOnmumdZnqnmd5ppnfa6KlmeqeZ3mmmd9roqWZ6p5neaaZ3mumdNnqqmd5ppnea6Z02eqqZ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2hYAOzTTO313Oc30TjO988kf+eHf+tXfXubn/uGvLtNM7zTTO230VDO900zvNNM7zfRUM73TTO/MRk8l0ztt9FQzvdNM7zTTO230VDO900zvzEZP5VLnzEKPp5neaaZ3mumdNnqqmd5ppnea6Z1meqeNnmqmd5rpnWZ6p42eaqZ3mumdZnqnmd5po6ea6Z1meqeZ3mmjp5rp73n8yWv79dhj6zTTO830Ths9tS0Admimd/ruQi6cv/jKdWKZT/7ID6/UTO800zvN9E4zvdNGTzXTO830TjO900ZPNdM7zfTObPRUMr3TRk810zvN9E4zvdNGTzXTO830zmz0VO51ziz0eJrpnWZ6p5neaaOnmumdZnqnmd5ppnfa6KlmeqeZ3mmmd9roqWZ6p5neaaZ3mumpZnqnmd5ppnea6V9x903vFG7ffnylZnqnmd5ppnea6almemdbAHzehT90caF7H7pAM73TRk810zvN9E4zvdNM77TRU830TjO900zvtNFTzfROM70zGz2VTE810zvN9E4zvdNM77TRU830TjO9Mxs9lUxPzUgvp5neaaZ3mumdNnqqmd5ppnea6Z1meqqZ3mmmd5rpnWZ6p42eaqZ3mumdZnqnjZ5qpndGo//YR37Q+bZv+vgyzfROGz3VTO800zvN9E4bPdVM7zzYAuDSxUv3XDh3YankbKeZ3umnO830Ths91UzvNNM7zfROMz3VTO800zvN9E4zvdNGTzXTO830zmz0VBo91UzvNNM7zfROM73TRk810zvN9M5s9FQaPTUjvZxmeqeZ3mmmd9roqWZ6p5neaaZ32uipZnqnmd5ppnea6Z02eqqZ3mmmd5rpnXtp/s1f9cICf+bd37hMM73TTO800ztt9FQzvdNM7zTTO230VDO98/kFwMm4fxoz0GvJ2U4zvdNPd5rpnTZ6qpneaaZ3mumdNnqqmd5ppnea6Z1meqeNnmqmd5rpndnoqTR6qpneaaZ3mumdZnqnjZ5qpnea6Z3Z6Kk0empGejnN9E4zvdNM77TRU830TjO900zvtNFTzfROM73TTO800ztt9FQzvfP7af7mGo89sU4bPdVM7zTTO830TjM91UzvNNM7zfROM73TRk810zvbAmCHZnqnn+400ztt9FQzvdNM7zTTO230VDO900zvNNM7zfROGz3VTO800zuz0VNp9FQzvdNM7zTTO830VDO900zvNNM7s9FTafTUjPRymumdZnqnmZ5qpnea6Z1meqeZ3mmjp5rpnWZ6p5neaaZHHrv1xCtu3XhsoZvLNNM7zfROGz3VTO800zvN9E4bPdVM7zTTO830TjO900ZPNdM72wJgh2Z6p5/uNNNTzfROM73TTO800ztt9FQzvdNM7zTTO830VDO900zvNNM7s9FTafRUM73TTO800ztt9FQzvdNM7zTTO7PRU2n01Iz0cprpnWZ6p42eaqZ3mumdZnqnmd5po6ea6Z1m+r37wJ/98KueuHlnmVe7/DJp9NTM9E4zvdNM77TRU830TjO900zvtNFTzfROM73TTO800ztt9FQzvbMtAHZopnf66U4bPdVM7zTTO830TjO900ZPNdM7zfROM73TRk810zvN9E4zvTMbPZVGTzXTO830TjO900ZPNdM7zfROM70zGz2VRk/NSC+nmd5ppnfa6KlmeqeZ3mmmd5rpnTb6PXrsxovD2776fcvcq/MLNNM7bfRUGj01M73TTO800ztt9FQzvdNM7zTTO230VDO900zvNNM7zfRUM73TTO9sC4AdmumdfrrTRk810zvN9E4zvdNM77TRU830TjO900zvtNFTzfROM73TTO/MRk+l0VPN9E4zvdNM77TRU830TjO900zvzEavJdM7M9LLaaZ3mumdNnqqmd5ppnea6ffixTtfXzeO37BSM73TTO800zvN9E4bPZVGT81M7zTTO830VDO900zvNNM7zfROGz3VTO800zvN9E4bPdVM7zTTO2dfAFxavANIznaa6Z1+utNGTzXTO830TjO900xPNdM7zfROM73TTO+00VPN9E4zvdNM78xGryXTO830TjO900zvtNFTzfROM73TTO/MQK8l0zsz0stppnea6Z02eqqZ/iFdO3rqtVw9urVMM73TRk810zvN9E4zvdNM77TRU2n01Mz0TjO900ZPNdM7zfROM73TTO+00VPN9E4zvdNM77TRU830TjO9sy0Admimd/rpThs91UzvNNM7zfROGz3VTO800zvN9E4zvdNGTzXTO830TjO9MwO9lkzvNNM7zfROM73TRk810zvN9E4zvTMDvZZM78xIL6eZ3mmmP7Mnr7/t/u489bUrNdM7zfROM73TRk810zvN9E4zvdNM77TRU2n01Mz0TjO900ZPNdM7zfROM73TTO+00VPN9E4zvdNM77TRU830TjO9sy0Admimd/rpThs91UzvNNM7zfROGz3VTO800zvN9E4zvdNGTzXTO830TjO9MwO9lkzvNNM7zfROM73TRk810zvN9E4zvTMDvZZM78xIf6Y5Prp+Gk/cenaZZnqqmd5ppnea6Z1meqeNnmqmd5rpnWZ6p5meaqZ30uipmemdZnqnjZ5qpnea6Z1meqeZnmqmd5rpnWZ6p5neaaOnmumdZnpnWwDs0Ezv9NOpZnqnmd5ppnea6Z02eqqZ3mmmd5rpnWZ6qpneaaZ3mumdZnpnBnotmd5ppnea6Z1meqqZ3mmmd5rpnWZ6Zwb6B3f5QRxdPlqmmd5ppnfa6KlmeqeZ3mmmd5rpnTZ6qpneaaZ3mumdNnqqmd5Jo6dmpnea6Z02eqqZ3vn/7Nn706d3Xd9x/4DKIZuQMyHIYQ1IEhMgciaAgFRQRPDEQpDCQhQrGxFQvCMRoRFiJUmlw8mik0SoElBBpqaKcoiVVXRbhY6iQ7WeaaXW1q1TGmed7fbz/N6be+/7fny6+c71mscv5JddJt+5cl3PdzO900zvtNFTzfROM73TTO800ztt9FQzvdNM7ywHgBWa6Z3+6VQzvdNM7zTTO830Ths91UzvNNM7zfROGz3VTO800zvN9E4zvTMGei2Z3mmmd5rpnTZ6qpneaaZ3mum37gmPe+oJ+bIH7Z2mjZ5qpnea6Z1meqeNnmqmd5rpnWZ6p5neaaOnmumdZnqnmd5po6ea6Z00emrM9E4zvdNGTzXTO830TjO900ZPNdM7zfROM73TTE810zvN9E4zvbMcAFZopnf6p1PN9E4zvdNM7zTTO230VDO900zvNNM7bfRUM73TTO800zvN9M4Y6LVkeqeZ3mmmd9roqWb6rXj79bduw7Wvu3GaZnqnmZ5qpnea6Z1meqeZ3mmjp5rpnWZ6p5neaaanmumdZnqnmd5ppnfa6KlmeieNnhozvdNMTzXTO830TjO900zvtNFTzfROM73TTO+00VPN9E4zvdNM7ywHgBWa6Z3+6VQzvdNM7zTTO830VDO900zvNNM7zfROGz3VTO800zvN9E4zPTU2eiqZ3mmmd5rp79R37v/B7XnjNTfN1EzvNNM7zfROGz3VTO800zvN9E4zvdNGTzXTO830TjO900ZPNdM7zfROM73TTO+00VPN9E4aPTVmeqeNnmqmd5rpnWZ6p5neaaOnmumdZnqnmd5po6ea6Z1meqeZ3lkOACs00zv906lmeqeZ3mmmd9roqWZ6p5neaaZ3mumdNnqqmd5ppnea6Z02emps9FQy/XHc42733IlHP/zyaZrpnTZ6qpneaaZ3mumdNnqqmd5ppnea6Z1meqeNnmqmd5rpnWZ6p42eaqZ3mumdZnqnmd5po6ea6Z00emrM9E4bPdVM7zTTO830TjO900ZPNdM7zfROM73TRk810zvN9E4zvbMcAFZopnf6p1PN9E4zvdNM77TRU830TjO900zvNNM7bfRUM73TTO800ztt9Js594wLdu6L/9Ep0zTTO830TjO900ZPNdM7zfROM73TRk810zvN9E4zvdNMTzXTO830TjO900zvtNFTzfROM73TTO8001PN9E4zvZNGT42Z3mmjp5rpnWZ6p5neaaanmumdZnqnmd5ppnfa6KlmeqeZ3mmmd5YDwArN9FT/Ak4zvdNM7zTTO230VDO900zvNNM7zfRUM73TTO8009cHfvbnd8U3f+23TdNGTzXTO830TjO900xPNdM7zfROM73TTO+00VPN9E4zvdNM77TRU830TjO900zvNNM7bfRUM73TTO800ztt9FQzvdNM76TRU2Omd9roqWZ6p5neaaZ32uipZnqnmd5ppnea6Z02eqqZ3mmmd5rpneUAsEIbPdW/gNNM7zTTO830Ths91UzvNNM7zfROGz3VTH+s3/7dj+2i3/vsb0/TTO800ztt9FQzvdNM7zTTO230VDO900zvNNM7zfROGz3VTO800zvN9E4bPdVM7zTTO830TjO900ZPNdM7zfROM73TRk810zvN9E4aPTVmeqeNnmqmd5rpnWZ6p42eaqZ3mumdZnqnmd5po6ea6Z1meqeZ3lkOACu00VP9CzjN9E4zvdNM77TRU830TjO900x/1A3X3rq7fvT6m2dqpnea6Z1meqeZ3mmjp5rpnWZ6p5neaaOnmumdZnqnmd5ppnfa6KlmeqeZ3mmmd9roqWZ6p5neaaZ3mumpZnqnmd5ppnea6Z02eqqZ3mmmd9LoqTHTU830TjO900zvNNM7bfRUM73TTO800zvN9FQzvdNM7zTTO830J2TvBV+ydRd/+QVHLAeA/6uNnupfwGmmd5rpnWZ6qpneaaa/wy/edrvwwZ/76DTN9E4b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0zvN9E4zvdNM77TRU830TjO900zvtNFTzfROM73TTO800ztt9FQzvdNM7zTTO230VDO900zvNNM7zfROGz3VTO800zvN9E4bPdVM7zTTO8sBYIVmeqeZ3mmjp5rpnTHSyzXTO230VDO900zvNNM7zfROGz3VTO800zvN9E4bPdVMf0LOPOu0rTvw8v3TNNM7zfROGz3VTO800zvN9E4bPdVM7zTTO830TjO900ZPNdM7zfROM73TRk810zvN9E4zvdNM77TRU830TjO900zvtNFTzfROM73TTO8001PN9E4zvdNM7zTTO230VDO900zvLAeAFZrpnWZ6p42eaqZ3xkgv10zvtNFTzfROM73TTO8001PN9E4zvdNM7zTTb92jH/a4E3LqntNnaqZ3mumdZnqnmZ5qpnea6Z1meqeZ3mmjp5rpnWZ6p5neaaanmumdZnqnmd5ppnfa6KlmeqeZ3mmmd5rpqWZ6p5neaaZ3mumdNnqqmd5ppnea6Z02eqqZ3mmmd5rpnWZ6p42eaqZ3mumd5QCwQjO900xPNdM7zfTOGOnlmumdNnqqmd5ppnea6Z02eqqZ3mmm34rv+p4XbsOV+6+YppneaaOnmumdZnqnmd5po6ea6Z1meqeZ3mmmd9roqWZ6p5neaaZ32uipZnqnmd5ppnea6Z02eqqZ3mmmd5rpnTZ6qpneaaZ3mumdZnqnjZ5qpnea6Z1meqeNnmqmd5rpnWZ6p5neaaOnmumdZnpnOQCs0EzvtNFTzfROM70zRnq5ZnqnjZ5qpnea6Z1meqeN/k69/k0Htu17f2D/NM30TjO900zvtNFTzfROM73TTO+00VPN9E4zvdNM7zTTO230VDO900zvNNM7bfRUM73TTO800zvN9E4bPdVM7zTTO830Ths91UzvNNM7zfROM73TRk810zvN9E4zvdNGTzXTO830TjO900xPNdM7zfROM72zHABWaKZ32uipZnqnmd4ZI71cM73TRk810zvN9MfxKx/7xZ14x4/dOE0bPdVM7zTTO830TjM91UzvNNM7zfROM73TRk810zvN9E4zvdNMTzXTO830TjO900zvtNFTzfROM73TTO8001PN9E4zvdNM7zTTO230VDO900zvNNM7zfRUM73TTO800zvN9E4bPdVM7zTTO830Ths91UzvNNM7zfQ79NTHPXszj3roE+6wHAD+H830Ths91UzvNNM7Y6SXa6anmulXOvSb/2nnPnnwt6dppnea6Z02eqqZ3mmmd5rpnTZ6qpneaaZ3mumdZnqnjZ5qpnea6Z1meqeNnmqmd5rpnWZ6p5neaaOnmumdZnqnmd5po6ea6Z1meqeZ3mmmd9roqWZ6p5neaaZ32uipZnqnmd5ppnea6Z02eqqZ3mmmd5rpnTZ6qpl+e8476+I7dco9zpmmmd5ZDgArNNM7bfRUM73TTO+MkV7ur/9qqmZ6p5neaaZ3mumdNnqqmd5ppnea6Z02eqqZ3mmmd5rpnWZ6p42eaqZ3mumdZnqnjZ5qpnea6Z1meqeZ3mmjp5rpnWZ6p5neaaOnmumdZnqnmd5ppnfa6KlmeqeZ3mmmd9roqWZ6p5neaaZ3mumdNnqqmd5ppnea6U/UNa945xY96ynfPlMzvdNM7zTTO8sBYIVmeqeNnmqmH1x14EW75U/+7NPTjJFero2eaqZ3mumdZnqnmZ5qpnea6Z1meqeZ3mmjp5rpnWZ6p5neaaanmumdZnqnmd5ppnfa6KlmeqeZ3mmmd5rpqWZ6p5neaaZ3mumdNnqqmd5ppnea6Z1meqqZ3mmmd5rpnWZ6p42eaqZ3mumdZnqnmZ5qpnea6bfuZ2697YS8+Q23TtNM77TRU830TjO900zvLAeAFZrpj3X/+z1gdz3iskdN00zvNNM7Y6SXa6OnmumdZnqnmd5po6ea6Z1meqeZ3mmmd9roqWZ6p5neaaZ32uipZnqnmd5ppnea6Z02eqqZ3mmmd5rpnTZ6qpneaaZ3mumdZnqnjZ5qpnea6Z1meqeNnmqmd5rpnWZ6p5neaaOnmumdZnqnmd5po9+KH/qRq7bn13/r16Zppnea6Z1meqeNnmqmd5rpnWZ6Rx0A7nmPe+6uu93tHtO00VPN9E4zvdNM74yRXq6Nnmqmd5rpnWZ6p42eaqZ3mumdZnqnmd5po6ea6Z1meqeZ3mmjp5rpnWZ6p5neaaZ32uipZnqnmd5ppnfa6KlmeqeZ3mmmd5rpnTZ6qpneaaZ3mumdNnqqmd5ppnea6Z1meqeNnmqmd5rpj+9xX/H4bbvokoumaaOnmumdZnqnmd5ppqea6Z1meqeZ3mmmd/7hAHDqnj3b0EzvNNM7bfRUM73TTO800ztjpJdro6ea6Z1meqeZ3mmjp5rpnWZ6p5neaaan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3mmmd9roqWZ6p5neaaZ3mumpZnqnmd5ppnea6Z02eqqZ3mmmd5rpnWZ6qpneaaZ3mumdZnqnjZ5qpnea6Z1meqeNnmqmd5rpnWZ6Z2z0VBs9lUzvNNM7zfROG/3WXbD3ohO1b99zp2mmd5rpnWZ6p42eaqZ3mumdZnqnjZ5qpnea6Z1memc5AKxYM73TRk810ztp9NTarpneaaZ3mumdZnqnjZ5qpnea6Z1meqeNnmqmd5rpnWZ6p5neaaOnmumdZnqnmd5po6ea6Z1meqeZ3mmmd9roqWZ6p5neaaZ32uipZnqnmd5ppnfGRk+10VPJ9E4z/Vbsvf8Dt+G+5z1gmjZ6qpneaaZ3mumdZnqnjZ5qpnea6Z1meqeNnmqmd5rpnWZ6ZzkArFgzvdNGTzXTO2n01Nqumd5ppnea6Z1meqeNnmqmd5rpnWZ6p42eaqZ3mumdZnqnmd5po6ea6Z1meqeZ3mmjp5rpnWZ6p5neaaZ32uipZnqnmd5ppnfa6KlmeqeZ3mmmd8ZGrzXTb+6SSy7amQdP00zvNNM7bfRUM73TTO800zvN9FQzvdNM7zTTO830Ths91UzvNNM7zfTOcgBYsWZ6qpneaaZ30uiptV0zvdNM7zTTO830VDO900zvNNM7zfROGz3VTO800zvN9E4zPdVM7zTTO830TjO900ZPNdM7zfROM73TTE810zvN9E4zvdNM77TRU830TjO900y/mZdc8ZodOuecM2dKo6fGTO800zvN9E4bPdVM7zTTO830Ths91UzvNNM7zfROM73TRk810zvN9E4zvbMcAFasjZ5qpnea6Z00empt10zvNNM7zfROGz3VTO800zvN9E4zvdNGTzXTO830TjO900ZPNdM7zfROM73TTO+00VPN9E4zvdNM77TRU830TjO900zvNNM7bfRUM32Nb+rb3Wf+4zzN9E4bPZVGT42Z3mmmd5rpnTZ6qpneaaZ3mumdNnqqmd5ppnea6Z1meqeNnmqmd5rpnWZ6ZzkArFgbPdVM7zTTO2n01Nqumd5ppnea6Z02eqqZ3mmmd5rpnWZ6p42eaqZ3mumdZnqnjZ5qpnea6Z1meqeZ3mmjp5rpnWZ6p5neaaOnmumdZnqnmd5ppj/W+CK7bJM10zvN9E4bPZVGT42Z3mmmd5rpqWZ6p5neaaZ3mumdNnqqmd5ppnea6Z1meqqZ3mmmd5rpnWZ6ZzkArFgbPdVM7zTTO2n01Nqumd5ppnea6Z02eqqZ3mmmd5rpnWZ6qpneaaZ3mumdZnqnjZ5qpnea6Z1meqeZnmqmd5rpnWZ6p5neaaOnmumdZvoj/uQPP7/rxtfHZSf9mumdZnqnjZ5Ko6fGTO800ztt9FQzvdNM7zTTO830Ths91UzvNNM7zfROGz3VTO800zvN9E4zvbMcAFasjZ5qpnea6Z00empt10zvNNM7zfROGz3VTO800zvN9E4bPdVM7zTTO830TjO900ZPNdM7zfROM73TRk810zvN9E4zvdNM77TR3+FHrvth5Nb3/utpmumd8fVx2Um/Znqnmd5po6fS6Kkx0zvN9E4bPdVM7zTTO830TjO900ZPNdM7zfROM73TRk810zvN9E4zvdNM7ywHgBVro6ea6Z1meieNnlrbNdM7zfROM73TRk810zvN9E4zvdNGTzXTO830TjO900zvtNFTzfROM73TTO+00VPN9E4zvTM0+quuvNb5iZ+4ZZo2eqqZ3mmmd8bXx2Un/ZrpnWZ6p42eSqOnxkzvNNM7bfRUM73TTO800zvN9FQzvdNM7zTTO830Ths91UzvNNM7zfROMz21HABWrJneaaZ3mumdNHpqbddM7zTTO830VDO900zvNNM7zfROGz3VTO800zvN9E4zPdVM7zTTO830TjO900ZPHUnz3/6tr5riu6dppnea6almeqeZ3mmmd8bXx2Un/ZrpnWZ6qpneSaOnxkzvNNM7bfRUM73TTO800ztt9FQzvdNM7zTTO830Ths91UzvNNM7zfROGz21HABWrJneaaZ3mumdNHpqbddM7zTTO230VDO900zvNNM7zfROGz3VTO800zvN9E4bPdVM7zTTO830zvVvvv5Vr37JHD/wmn8+Uxo9NWZ6p5neaaOnmumdZnqnmd4ZXx+XnfRrpnfa6KlmeieNnhozvdNM77TRU830TjO900zvtNFTzfROM73TTO800ztt9FQzvdNM7zTTO2301HIAWLFmeqeZ3mmmd9LoqbVdM73TTO+00VPN9E4zvdNM7zTTO230VDO900zvNNM7bfRUMz1yy823XPmCA9Nc9siHTNNM77TRU2n01JjpnWZ6p42eaqZ3mumdZnpnfH1cdtKvmd5po6ea6Z00emrM9E4zvdNGTzXTO830TjO900ZPNdM7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vdNM77TRUxuJ9cJyANhUM73TTO8001PN9M745SrXTO800ztt9FQzvdNM7zTTO830VDO900zvNNM7zfTO+ORatq010zvN9FQzvdNM7zTTO+PPZY3WTO8002/b8557xfHdcMMbp2mmp5rpnWZ6p5neaaZ32uipZnqnmd5ppnea6almeqeZ3mmmd5rpnTZ6qpneaaZ3mumdZnqqmd5ppnea6Z1meqeNntpIrBeWA8CmmumdZnqnjZ5qpnfGL1e5Znqnmd5po6ea6Z1meqeZ3mmjp5rpnWZ6p5neaaZ3xifXsm2tmd5po6ea6Z1meqeZ3hl/LneF/be/2ZJ3v/tnpmmmd5rpnTZ6qpneaaZ3mumdZnqnjZ5qpnea6Z1meqeNnmqmd5rpnWZ6p5neaaOnmumdZnqnmd5po6ea6Z1meqeZ3mmmd9roqY3EemE5AGyqmd5ppnfa6Klmemf8wJVrpnea6Z02eqqZ3mmmd5rpnTZ6qpneaaZ3mumdZnpnfHIt29aa6Z02eqqZ3mmmd5rpT9T4Izg51kZPNdM7zfROM73TRk810zvN9E4zvdNM77TRU830TjO900zvtNFTzfROM73TTO800ztt9FQzvdNM7zTTO230VDO900zvNNM7zfROGz21kVgv7PQAcOrcG0AzvdNM7zTTO230VDO9M34oyzXTO830VDO900zvNNM7zfROGz3VTO800zvN9E4zPTU+vJad+JrpnTZ6qpl+6/7gs589If/z8N9MM/4rXKM10zvN9E4zvdNM77TRU830TjO900zvNNNTzfROM73TTO800ztt9FQzvdNM7zTTO830VDO900zvNNM7zfROGz3VTO800zvN9E4zPdVM72wk1gvLAWBTzfROM73TRk810zvjV7JcM73TRk810zvN9E4zvdNM77TRU830TjO900zvtNFT48Nr2YmvmX6LPvTzP3eiPvjBD83UTO800zvjv8I1WjO900zvNNM7zfROGz3VTO800zvN9E4bPdVM7zTTO830TjO900ZPNdM7zfROM73TRk810zvN9E4zvdNM77TRU830TjO900zvtNFTzfTORmK9sBwANtVM7zTTO230VDO9M34lyzXTO230VDO900zvNNM7zfROGz3VTO800zvN9E4bPTU+vNZlv3bog9M00ztt9FQzvdNM74w/lzVaM73TTO800zvN9E4bPdVM7zTTO830Ths91UzvNNM7zfROM73TRk810zvN9E4zvdNGTzXTO830TjO900zvtNFTzfROM73TTO+00VPN9M5GYr2wHAA21UzvNNNTzfROM70zfiXLNdM7bfRUM73TTO800zvN9FQzvdNM7zTTO830Thv98f3t3/7dTowPr3VZM73TTE810zvN9E4zvTP+XNZozfROM73TTO8001PN9E4zvdNM7zTTO230VDO900zvNNM7zfRUM73TTO800zvN9E4bPdVM7zTTO830TjM91UzvNNM7zfROM73TRk810zsbifXCcgDYVDO900ZPNdM7zfTO+JUs10zvtNFTzfROM73TTO+00VPN9E4zvdNMv5nP/dH/3qFPf/KPp2mjp8aH17qsmd5po6ea6Z1meqeZ3hl/Lmu0Znqnmd5ppnfa6KlmeqeZ3mmmd5rpnTZ6qpneaaZ3mumdNnqqmd5ppnea6Z1meqeNnmqmd5rpnWZ6p42eaqZ3mumdZnqnmd5po6ea6Z2NxHphOQBsqpneaaOnmumdZnpn/EqWa6Z32uipZnqnmd5ppnfa6Klm+nrj1e/aFT99023TNNM7zfROGz01PrzWZc30Ths91UzvNNM7zfTO+HNZozXTO830TjO900ZPNdM7zfROM73TTO+00VPN9E4zvdNM77TRU830TjO900zvNNM7bfRUM73TTO800ztt9FQzvdNM7zTTO830Ths91UzvbCTWC8sBYFPN9E4bPdVM7zTTO+NXslwzPdVM7zTTO830TjP94B8/5Qm75YXf8uKZmumdZnqnmd5ppqea6Z3x4bUua6Z32uipZnqnmd5ppnfGn8sarZneaaZ3mumdNnqqmd5ppnea6Z1meqqZ3mmmd5rpnWZ6p42eaqZ3mumdZnqnmZ5qpnea6Z1meqeZ3mmjp5rpnWZ6p5neaaanmumdZnpnI7FeWA4Am2qmd9roqWZ6p5neGb+S5droqWZ6p5n+qIsuvmh3XfLw+03TTO+00VPN9E4zvdNM77TRU830zvjwWpc10ztt9FQzvdNM7zTTO+PPZY3WTO800zvN9E4bPdVM7zTTO830Ths91UzvNNM7zfROM73TRk810zvN9E4zvdNGTzXTO830TjO900zvtNFTzfROM73TTO+00VPN9E4z/da98fVvPCE3/fhPT7AcADbVTO+00VPN9E4zvTN+Jcu10R/x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eqeZ3mmmp85GTyXTO830TjO900ZPNdM7zfROM73TTE810zvN9E4zvXP+3bPdac30TjO900xPNdM7zfROM71zPpoPaM30TjO900zvNNnfr10APF4zvdNM7zTTO+fZINdGTzXTO830TjO900ZPNdPfi5/68V+u5//t85ezbVe5Znqnmd5ppnea6Z02eqqZ3mmmd5rpnTZ66mz0VDK900zvNNM7bfRUM73TTO800ztt9FQzvdNM7zTTO+ffPdud1kzvNNM7bfRUM73TTO800zvno/mA1kzvNNM7zfROk/392gXA4zXTO830TjO9c54NeM30TjO900zvNNO/cJ/+ijf9un70+3/5kprpnbPRU9t2lWumd5rpnWZ6p5neaaOnmumdZnqnmd5po6fORk8l0zvN9E4zvdNGTzXTO830TjO900ZPNdM7zfROM71z/t2z3WnN9E4zvdNGTzXTO830TjO9cz6aD2jN9E4zvdNM77xrrD///97HdgHweM30TjO900zvnM8dXjO900z/Aj377Be8O2/9ir9/Mc30Ths91UzvnI2e2rarXDO900zvNNM7zfRUM73TTO800zvN9E4bPXU2eiqZ3mmmd5rpqWZ6p5neaaZ3mumdNnqqmd5ppnea6Z3z757tTmumd5rpnTZ6qpneaaZ3mumd89F8QGumd376R95+/uu3G2wXAI/XTO800zvN9M753L2wvfUbX/Non/wpL7uYZnqnmd5ppnfa6Klmeuds9NS2XeWa6Z1meqeZ3mmjp5rpnWZ6p5neaaZ32uips9FTyfROM73TRk810zvN9E4zvdNM77TRU830TjO900zvnH/3bHdaM73TTO+00VPN9E4zvdNM75yP5rZdcE/lBcB7XvYOoJneaaa/mw/8wPd7rG/89tdeTBs91UzvNNM7zfROM73TRk810ztno6e27SrXTO800zvN9E4bPdVM7zTTO830TjO900ZPnY2eSqZ3mumdNnqqmd5ppnea6Z1meqeNnmqmd5rpnWZ65/y7Z7vTmumdZnqnjZ5qpnea6e/dD/y9H3qHX/ypn76Y89Hctgvuei8Aftd/8t/d0Hv/7v/qYprpnWZ6p42eaqZ3mumdZnqnmZ5qpnea6Z2z0VPbdpVrpnea6Z1meqeNnmqmd5rpnWZ6p5meaqZ3zkZPJdM7zfROGz3VTO800zvN9E4zPdVM7zTT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c56SdG30VDK900zvpNFT27bh/eoF9Zyktm17aveSdvw7a6Z32uipZnqnmd5ppnea6almeqeZ3jnf4G3btqtfM73TTO800zvN9FQzvdNM7zTTO830Ths91UzvNNM7zfTOeUrSNQ9RyfROM72TRk9t24bXTO/0nKS2bXtqtwuAG2mmd5rpnWZ6p42eaqZ3mumd8w3etm27+jXTO830TjO900ZPNdM7zfROM73TTO+00VPN9E4zvdNM75ynpF4LkZNM7zTTO2n01LZteM30Ts9Jatu2p3a7ALiRZnqnmd5ppnfa6KlmeqeZ3jnf4G3btqtfM73TTO800ztt9FQzvdNM7zTTO830Ths91UzvNNM7zfTOeUrqtRA5yfROM72TRk9t24bXTO/0nKS2bXtq97ReALzysncAzfROM73TTO+00VPN9E4zvXO+wdu2bVe/Znqnmd5ppnfa6KlmeqeZ3mmmd5rpnTZ6qpneaaZ3mumd85TUayFykumdZnonjf6F27btxVszvdNzktq27andLgBupJneaaZ3mumdNnqqmd5ppnfON3jbtu3q10zvNNM7zfROGz3VTO800zvN9E4zPdVM7zTTO830TjO9c56Sei1ETjL93W3btqE101M9Kp1t257a7QLgRprpnWZ6p5neaaOnmumdZnrnfIO3bduufs30TjO900zvtNFTzfROM73TTO+00VPN9E4zvdNM7zTTO+cpuW3btl1ybfRUM72zbdtTu10A3EgzvdNM7zTTU830TjO900zvnG/wtm3b1a+Z3mmmd5rpqWZ6p5neaaZ3mumdNnqqmd5ppnea6W/lT3zAn765N/3Nz76Y85Tctm3bLrk2eqqZ3tm27andLgBupJneaaZ32uipZnqnmd5ppnfON3jbtu3q10zvNNM7bfRUM73TTO800zvN9E4bPdVMf0M/8IP/4Lbe+tVfejHN9E4zPXUelNu2bdvF1kZPNdM727Y9tdsFwI000zvN9E4bPdVM7zTTO830zvkGb9u2Xf2a6Z1meqeNnmqmd5rpnWZ6p5n+Jr7g8z/tDr7u6//2JTXTO830TjO900ZPnQfltm3bdrG10VPN9M62bU/t7vMC4A9e9g6gmd5ppnea6Z02eqqZ3mmmd5rpnfMN3rZtu/o10zvN9E4bPdVM7zTTP8Jf+Jg/90J8yitfdjHN9E4bPdVM7zTTO830Ths9dR6U27Zt28XWRk810zvbtj212wXAjTTTO830Ths91UzvNNM7zfTO+QZv27Zd/ZrpnWZ6p43+3Xnb1/ytF+5TP+njLqaZ3mmmd5rpqWZ6p5neaaZ3mumdNnrqPCi3bdu2S66Z3mmmd7Zte2q3C4AbaaZ3mumdNnqqmd5ppnea6Z3zDd62bbv6NdPXn/6TH3IvPuKlH3YxbfRUM73TTO800ztt9FQzvdNM7zTTO830Ths9dR6U27Zt2yXXTO800zvbtj212wXAjTTTO830VDO900zvNNM7zfTO+QZv27Y9kftnP/5PLqaZ3mmmd9roqWZ6p5neaaZ32uipZnqnmd5ppnea6Z02euo8lLdt27ZLrpneaaZ3tm17arcLgBtppnfa6KlmeqeZ3mmmd5rpnfMN3rZteyLXTO800zvN9FQzvdNM7zTTO830Ths91UzvNNM7zfROMz3VTO+ch/K2bdt2yTXTO830zrZtT+12AXAjzfROGz3VTO800zvN9E4zvXO+wdu2bU/kmumdZnqnjZ5qpnea6Z1meqeZ3mmjp5rpnWZ6p5neaaOnmumd81Detm3bLrlmeqeZ3tm27andLgBupJneaaOnmumdZnqnmd5ppqfOl3jbtu3JWzO900zvtNFTzfROM73TTO800ztt9FQzvdNM7zTTO230VDO9cx7K27Zt2yXXTO800zvbtj212wXAjTTTO230VDO900zvNNM7bfTU+RJv27Y9eWumd5rpnTZ6qpneaaZ3mumdZnqqmd5ppnea6Z1meqeNnmqmd85Dedu2bbvkmumdZnpn27andrsAuJFmeqeNnmqmd5rpnWZ6p42eepf391e8bdu2u6yZ3mmmd9roqWZ6p5neaaZ32uipZnqnmd5ppnea6Z02eqqZ3jkP5W3btu2Sa6Z3mumdbdue2u0C4Eaa6almeqeZ3mmmd/7/NP8DF3C+VXzN9M62bdtd1kzvNNM7bfRUM73TTO800ztt9FQzvdNM7zTTO830Ths91UzvnIfytm3bdsk10zvN9M62bU/tdgFwI230VDO988c/4KUX85rPeMPFNNM751vF10zvbNu23WXN9E4zPdVM7zTTO830TjO900ZPNdM7zfROM73TTE810zvN9M55KG/btm2XXDO900zvbNv21G4XADfypW/8skv66Je94mKa6Z1meqeZ3jnfKr5memfbtu0ua6Z32uipZnqnmd5ppnea6Z02eqqZ3mmmd5rpnTZ6qpneaaZ3zkN527Ztu+Sa6Z1memfbtqd293YB8NI/+8G/5q++7rMv5nu/9x9fTBs91UzvNNM7zfROMz11vlh2zfTOtm3bXdZM77TRU830TjO900zvNNM7bfRUM73TTO800ztt9FQzvdNM75yH8rZt23bJHY1+27btxd5L3hHu70szvdNM77TRU830TjO900zvtNFT54tl10zvbNu23WXN9E4bPdVM7zTTO830TjM91UzvNNM7zfROM73TRk810zvN9M55KG/btm3btm1XvF0A3EgbPdVM7zTTO830Ths9db5Yds30zrZt213WTO+00VPN9E4zvdNM77TRU830TjO900zvNNM7bfRUM73TTO+ch/K2bdu2bdt2xdsFwE010zvN9E4zvdNM77TRU+eLZddM72zbtt1lzfROGz3VTO800zvN9E4bPdVM7zTTO830TjO900ZPNdM7zfTOeShv27Zt27ZtV7xdANxUM73TTO800zvN9E4bPXW+WHbN9M62bdtd1kxPNdM7zfROM73TTO+00VPN9E4zvdNM7zTTU830TjO900zvnIfytm3btm3bdsXbBcBNNdM7zfROM73TTO+00VPni2XXTO9s27bdZW30VDO900zvNNM7zfROGz3VTO800zvN9E4bPdVM7zTTO830znkob9u2bdu2bVe8XQDcVDO900zvNNM7zfRUM71zvlh2zfTOtm3bXdZGTzXTO830TjO900zvtNFTzfROM73TTO+00VPN9E4zvdNM75yH8rZt27Zt23bF2wXATTXTO830TjO900ZPNdM754tl10zvbNu23WVt9FQzvdNM7zTTO830VDO900zvNNM7zfROGz3VTO80079An/Lyj3533voVf+NizkN527Zt27Ztu+LtAuCmmumdZnqnmd5po6ea6Z3zxbJrpne2bdvusjZ6qpneaaZ3mumdNnqqmd5ppnea6Z1meqeN/oX4tm/+pkf7tE/82Itppnea6Z3zUN62bdu2bduueE/xBcBfvewdQDO900zvNNM7bfRUM71zvlh2zfTOtm3bXdZGTzXTO830TjO900ZPNdM7zfROM/3dfMkXfeFjff3XfNXFtNFTzfROM73TTO+ch/K2bdu2bdt2xdsFwE010zvN9E4zvdNGTzXTO+eLZddM72zbtt1xzfROM73TTO800ztt9FQz/W299IM/6IY+9RM/5mKa6Z1meqqZ3mmmd5rpnWZ65zyRt23btm3btiveLgBuqpneaaZ3mumdNnqqmd45Xyy7Znpn27btjmumd5rpnWZ6p5n+5t74RZ93Kx/1Zz/0kprpnWZ6p5neaaOnmumdZnqnmd5ppnfOE3nbtm3btm274u0C4Kaa6Z1meqeZnmqmd5rpnfPFsmumd7Zt2+64Znqnmf4mPuxP/6k7eNUnvuJimumdNnqqmd5ppnea6Z02eqqZ3mmmd5rpnWZ65zyRt23btm3btiveLgBuqpneaaZ32uipZnqnmd45Xyy7Znpn27ar3nNv/PQ7e9mHf9DFNNM7zfROMz3VTO800zvN9E4zvdNGTzXTO830TjO900xPnQf6tm3btm3bdq3bBcBNNdM7zfROGz3VTO800zvni2XXTO9s22b3xq/4vItpo6ea6Z1meqeZ3mmjp5rpnWZ6p5neaaZ32uipZnqnmd5ppnfa6Knz92bbtm3btm271t3zBcBLL3sH0EzvNNM7zfROGz3VTO800zvni2XXTO9s22bXTO+00VPN9E4zvdNM77TRU830TjO900zvNNM7bfRUM73TTO800ztt9NT5e7Nt27Zt27Zd63YBcFPN9E4zvdNGTzXTO830zvli2TXTU9u2wTXTU830TjO900zvNNM7bfRUM73TTO800zvN9FQzvdNM7zTTO830Ths9df7ebNu2bdu2bde6XQDcVDO900zvtNFTzfROM71zvlh2bfTUtm1wbfRUM73TTO800zvN9E4bPdVM7zTTO830Ths91UzvNNM7zfROM73TRk+dvzfbtm3btm3btW4XADfVTO8001PN9E4zvdNM75wvll0b/b/z02//kft1/su3bbvXtdFTzfROM73TTO800ztt9FQzvdNM7zTTO230VDO900zvNNM7zfROGz11/t5s27Zt27Zt17pdANxUM73TRk810zvN9E4z/Tv87M++/d49//wvXkwbPXWeGdu23eva6KnnkumdZnqnmd5ppqea6Z1meqeZ3mmmd9roqWZ6p5neaaZ3mumdNnrq/L3Ztm3btm3brnW7ALipZnqnjZ5qpn/uDa9FfuanfuJimumdZnqnjZ46z4xt2+51bfTUc8n0TjO900zvtNFTzfROM73TTO800ztt9FQzvdNM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qpneaaZ3mumdZnrnDPTatm3btm3b9qRuFwC30EzvNNM7bfRUM73TTP/u/PD3//0X6Md/+B9dTDO9c54Z23Yda6Z3mumdNnqqmd5ppnea6Z1meqqZ3mmmd5rpnWZ6p42eaqZ3mumdZnqnmZ46Gz21bdu2bdu2PanbBcAtNNM7zfROG/2785c+42NfuL/3Pd94Mc30TjO900zvnGfGtl3HmumdZnqnjZ5qpnea6Z1meqeNnmqmd5rpnWZ6p5neaaOnmumdZnqnmd5po6fORk9t27Zt27ZtT+ru/wLgQy57B9BM7zTT10d++J+9F3/kf3+fi2mjp5rpnWZ6p5neaaanzmNj265gzfROMz3VTO800zvN9E4zvdNGTzXTO830TjO900zvtNFTzfROM73TTO+00VNno6e2bdu2bdu2J3UvwgXAy/7cR96jV37iKy6mmd5ppnfa6KlmeqeZ3mmmd9roqfPY2LYrWDO900ZPNdM7zfROM73TTO+00VPN9E4zvdNM7zTTU830TjO900zvNNM7bfTU2eipbdu2bdu27UndS17xMZ9w75rpnWZ6p5neaaZ32uipZnqnmd5ppnfa6Knz2Ni2K1gzvdNGTzXTO830TjO900zvtNFTzfROM73TTO+00VPN9E4zvdNM7zTTO2301NnoqW3btm3btu1J3S4AbqGZ3mmmp5rpnWZ6p5neaaZ32uip89jYtitYM73TRk810zvN9E4zvdNM77TRU830TjO900zvtNFTzfROM73TTO800ztt9NTZ6Klt27Zt27btSd0uAG6hmd5po6ea6Z1meqeZ3mmmd9roqfPY2LYrWDO900ZPNdM7zfROM73TTE810zvN9E4zvdNM77TRU830TjO900zvNNNTzfTO2eipbdu2bdu27UndLgBuoZneaaOnmumdZnqnmd5ppnfa6Knz2Ni2K1gzvdNGTzXTO830TjO900ZPNdM7zfROM73TTO+00VPN9E4zvdNM77TRU830ztnoqW3btm3btu1J3S4AbqGZ3mmjp5rpnWZ6p5neaaanmumd89jYtitYM73TRk810zvN9E4zvdNGTzXTO830TjO900zvtNFTzfROM73TTO+00VPN9M7Z6Klt27Zt27btSd0uAG6hmd5po6ea6Z1meqeZ3mmjp5rpnfPY2LYrWDM91UzvNNM7zfROM73TRk810zvN9E4zvdNMTzXTO830TjO900zvtNFTzfTO2eipbdu2bdu27UndLgBuoZneaaOnmumdZnqnmd5po6ea6Z3z2Ni2K1gbPdVM7zTTO830TjO900ZPNdM7zfROM73TRk810zvN9E4zvdNM77TRU++s8z/zoz+knb9t27Zt27Zt21VuFwC30ExPNdM7zfROM73TTO+00VPN9M55bGzbFayNnmqmd5rpnWZ6p5neaaOnmumdZnqnmd5po6ea6Z1meqeZ3nlHmv/6N3/xBfyjv/stl9RM75y/bdu2bdu2bdtVbhcAt9BGTzXTO830TjO900zvtNFTzfTOeWxs2xWsjZ5qpnea6Z1meqeZnmqmd5rpnWZ6p5neaaOnmumdb3vbGy/mq9/4BRfTTE810zvN9M7527Zt27Zt27Zd5XYBcAtt9FQzvdNM7zTTO830Ths91UzvnMfGtl3B2uipZnqnmd5ppnfa6KlmeqeZ3mmmd5rpkde+6i+84bWfcklv+7LXXkwzvdNM77TRU830TjO9c/62bdu2bdu2bVe5XQDcQhs91UzvNNM7zfROMz3VTO800zvnsbFtV7A2eqqZ3mmmd5rpnTZ6qpneaaa/d6/7rFe9w1/+i6+8mNe+6i9cTBs91UzvNNM7zfROGz3VTO800zvnb9u2bdu2bdt2ldsFwC200VPN9E4zvdNM77TRU830TjO9cx4b23Yda6Z3mumdZnqnmd5po79fX/IFn/+u/ubr/vLFvLPOX0AzvdNMTzXTO830TjO900zvtNFTzfROM71z/rBt27Zt27ZtV7ldANxCGz3VTO800zvN9E4bPdVM7zTTO+exsW3XsWZ6p5neaaa/L9//3W8/vPn1b7yYI9BrzfROM73TTO+00VPN9E4zvdNM7zTTO230VDO900zvnD9s27Zt27Zt21VuFwC300zvNNM7zfROM73TRk810zvN9M55bGzbdayZ/oV7EtZM7zTTO230VDO900zvNNM7bfRUM73TTO800zvN9E4bPdVM7zTTO+cPwLZt27Zt23aV2wXA7TTTO830TjO900zvtNFTzfROM71zHhvbtj3Na6Z3mumpZnqnmd5ppnea6Z02eqqZ3mmmd5rpnWZ6qpneaaZ3mumd8wdg27Zt27Ztu8rtAuB2mumdZnqnmd5ppnfa6KlmeqeZ3jmPjW3bnuY10ztt9FQzvdNM7zTTO830Ths91UzvNNM7zfROGz3VTO800zvN9M75A7Bt27Zt27Zd5XYBcDvN9E4zvdNM7zTTU830TjO900zvnMfGtm1P85rpnTZ6qpneaaZ3mumdZnqnjZ5qpnea6Z1meqeNnmqmd5rpnWZ65/wB2LZt27Zt265yuwC4nWZ6p5neaaZ32uipZnqnmd5ppr+t8zDYtu061kzvtNFTzfROM73TTO8001PN9E4zvdNM7zTTO230VDO900zvNNM75w/Atm3btm3bdpXbBcDtNNM7zfROM73TRk8109/cv/7pX72V8/Xatm178tZM77TRU830TjO900zvtNFTzfROM73TTO800ztt9FQzvdNM7zTTO+cPwLZt27Zt23aVe+ovAF522TuAZnqnmd5ppr+517/2DbfyD77z2y+pmd45X69t27Ynb830Ths91UzvNNM7zfROGz3VTO800zvN9E4zvdNGTzXTO830TjO9c/4AbNu2bdu2bVe5XQDcTjP9TfyxP/pH7uAvvuKzLqaZ3mmjp5rpnfP12rZte/LWTE810zvN9E4zvdNM77TRU830TjO900zvNNNTzfROM73TTO800zvnD8C2bdu2bdt2lXtSLgA+5EM+8M7e//3/p4tppnea6Z1meqeNnmqmd87Xa9u27clbGz3VTO800zvN9E4zvdNGTzXTO830TjO900ZPNdM7zfROM73TTO+cPwDbtm3btm3bVe4lr3jFS+9dGz3VTO800zvN9E4zPdVM7zTTO+frtW3b9uStjZ5qpnea6Z1meqeZ3mmjp5rpnWZ6p5neaaOnmumdZnqnmd5ppnfOH4Bt27Zt27btKrcLgNtppnea6Z02eqqZ3mmmd87Xa9u27clbGz3VTO800zvN9E4zPdVM7zTTO830TjO900ZPNdM7zfROM73TTO+cPwDbtm3btm3bVW4XALfTTO800ztt9FQzvdNM75yv17Zt25O3Nnqqmd5ppnea6Z02eqqZ3mmmd5rpnWZ6p42eaqZ3mumdZnqnmZ46fwO2bdu2bdu26xu5AHjFZe8AmumdZnqnmd5po6ea6Z1meud8vbZt2568tdFTzfROM73TTO+00VPN9E4zvdNM7zTTO230VDO900zvNNM7bfTU+Ruwbdu2bdu2Xd92AXA7zfROM73TRk810zvN9M75em3btj2Ra6Z3mumdZnqnmd5po6ea6Z1meqeZ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v74nSbaEmV6NM70XZ3qvudGrzY1eLUmOAWd6r7nRq3Gm95obvRpnei/O9F6c6b240atxpvfiTO/Fmd6LM70XN3o1zvRe2OjV5kzvxZlejTO9F2d6L870XpzpvTDQ282Z3oszvRfX/AV1AFje/PqeJNkSNno1zvRenOm95kavNjd6tSQ5BpzpveZGr8aZ3mtu9Gqc6b0403txpvfiRq/Gmd6LM70XZ3ovzvRe3OjVONN7YaNXmzO9Fzd6Nc70XpzpvTjTe3Gm98JAbzdnei/O9FIvPfvUvWfv718HgL2a3+CTJJvBRq/Gmd6LM73X3OjV5kavliTHgDO919zo1TjTq82Z3oszvRdnei/O9F7c6NU403txpvfiTO/Fmd6LG70aZ3ovbPRqc6b34kavxpneizO9F2d6L870XhjolV598fNvdf/FJzbrpWef2iyu+QvqALBX8xt8kmQz2OjVONN7cab3mhu92tzo1ZLkGHCm95obvRo3erU503txpvfiTO/Fmd6LG70aZ3ovzvRenOm9ONOrcab34kzvhY1ebc70Xtzo1TjTe3Gm9+JMv2K3P/fJB7v75ce27O11foM403txpvfimr+gDgB7Nb/BJ0k2g41ejTO9F2d6r7nRq82N3i5JDh5neq+50atxo1ebM70XZ3ovzvRenOm9uNGrcab34kzvxZneixu9Gmd6L870Xtjo1eZM78WNXo0z/f4988SnLu3245/crndu9Grc6NU403txpvfiTO/FNX9BHQD+rG98/WJBSZIbg41ejTO9F2d6r7nRq82B3i5JDh5neq+50atxo1ebM70XZ3ovzvRenOnVONN7cab34kzvxZneixu9Gmd6L870Xtjo1eZMv2f37/zuu/XilzaNM73X3OjVMNN7caNX40zvxZneizO9F9f8BV3jAPB9/+z7l/WR//3QZnGjV0uS3CTM9F6c6b0403vNjV5tDvR2SXLwONN7zY1ejRu92pzpvTjTe3Gm9+JGr8aZ3oszvRdnei/O9F7c6NU403txpl/Wy08//J69cud3N4szvRpnei/O9F5zo1fDTO/FjV6NM70XZ3ovzvReXPMXdIt7/epxpvfiRq+WJLlJmOm9ONN7cab3mhu92hzo7ZLk4HGm95obvRo3erU503txpvfiTO/FjV6NM70XZ3ovzvRenOm9uNEv6KUvfmLH/uCphzaLM70XZ3ovbvRqnOm9ONN7zY1eDTO9Fzd6Nc70XpzpvTjTe3HNX9CpHQA+su0NIElykzDTe3Gm9+JM7zU3erU50NslycHjTO81N3o7zvRec6b34kzvxZneixu9Gmd6L870Xpzpd++FJx66Vn/w1MObxY1ejTO9F2d6L870Xtzo1TjTe3Gm95obvRpmei9u9Gqc6b0403txpvfimr+gDgB7lSS5SZjpvTjTe3Gm95obvdoc6O2S5OBxpveaA70dZ3qvOdN7cab34kzvxY1ejTP9Lt15/KElfe7hzeJM78WZXo0zvRdnei/O9F6c6b240atxpvfiTO81N3o1zPRe3OjVONN7cab34kzvxTV/QR0A9ipJcpMw03txpvfiTO81N3q7udGrJcnB40zvNQd6O870XnOm9+JM78WZ/uqef/KRxd198hNbNjd6Ncz0XpzpvbjRq3Gm9+JM78WZ3oszvRc3ejXO9F6c6b3mRq+GmV6NM70XZ3ovzvRenOm9uOYvqAPAXiVJbhJmei/O9F6c6b3mQG83N3q1JDl4nOm95kBvx5nea87079reXnvu6c3iTK/Gmd5rbvRqmOm9ONN7caNX40zvxZneizO9F2d6L270apzpvTjTe82NXg0bvRpnei/O9F6c6b0403txzV9QB4C9SpLcJMz0XpzpvTjTe82B3m5u9GpJcvA403vNgf5dypU403txo1fjTO81N3o1zPRenOm9uNGrcab34kzvxZneizO9Gmd6L870XpzpveZGr4aNXo0zvRdnei/O9F6c6b245i+oA8BeJUluEmZ6L870XpzpveZAbzc3erUkSVbGmd6LG70aZ3qvudGrYab34kzvxY1ejTO9F2d6L870Xtzo1TjTe3Gm9+JM7zU3ejVs9Gqc6b0403txpvfiTK/GQf+6bXEA+L5tbwCc6b2SJDcJM70XZ3ovzvRec6C3mxu9WpIkK+NM78WNXo0zvdfc6NUw03txpvfiRq/Gmd6LM70XZ3ovbvRqnOm9ONN7cab3mhu9GjZ6Nc70XpzpvTjTe3GjV+Ogf906AOxVkuQmYab34kzvxZneaw70dnOjV0uSZGWc6b240atxpveaG70aZnovzvRqnOm9ONN7cab34kzvxY1ejTO9F2d6L870XnOjV8NGr8aZ3oszvRdnei9u9Goc9K9bB4C9SpLcJMz0XpzpvTjTq82NXm1u9GpJkqyMM70XN3o1zvRec6NXw0zvxY1ejTO9F2d6L870XpzpvbjRq3Gm9+JM78WZ3mtu9HaY6b0403txpvfiTO/FjV6Ng/516wCwV0mSm4SZ3oszvRc3erW50avNjV4tSZKVcaZX40zvxZnea270apjpvbjRq3Gm9+JM78WZ3oszvRc3ejXO9F6c6b0403vNgd4OM70XZ3ovzvRenOm9uNGrcdC/bh0A9ipJcpMw03txpvfiRq82N3q1udGrJUmyMm70apzpvTjTe82NXg0zvRc3ejXO9F6c6b0403txplfjTO/Fmd6LM70XZ3qvOdDbYab34kzvxZneizO9Fzd6NQ76160DwF4lSW4SZnovzvRe3OjV5qeaJEneBTd6Nc70XpzpveZGr4aZ3osbvRpnei/O9F6c6b240atxpvfiTO/Fmd6LM73XHOjtMNN7cab34kzvxZlejTO9Fwf969YBYK+SJDcJM71VkiRJB4CVmhu9GmZ6L270apzpvTjTe3Gm9+JGr8aZ3oszvRdnei/O9F5zoLfDTO/Fmd6LM70XN3o1zvReHPSvWweAvUqSJEmSnAlu9Gqc6b0403vNjV4NM70aZ3ovzvRenOm9ONN7caNX40zvxZneizO9F2d6rznQ22Gm9+JM78WZ3osbvRpnei8O+tetA8BeJUmSJEnOBDd6Nc70XpzpveZGr4aNXo0zvRdnei/O9F6c6b240atxpvfiTO/Fmd6LM73a3OjVMNN7cab34kzvxY1ejTO9Fwf969YBYK+SJEmSJOeDM70XZ3ovzvRec6NXw0avxpneizO9F2d6L870Xtzo1TjTe3Gm9+JM78WNXm1u9GqY6b0403txpvfiRq/Gmd6Lg/78dvJeOgDsVZIkSZLkfHCm9+JM78WZ3mtu9GrY6NU403txpvfiTO/FmV6NM70XZ3ovzvRenOm9uNGrzY1eDTO9F2d6L870Xg+u83eefMzu4o/ubdfeOgDsVZIkSZLkfHCm9+JM78WZ3mtu9GrY6NU403txpvfiTO/FjV6NM70XZ3ovzvRenOm9uNGrzY1eDTO9159M8099epuee/KxLeNM7zU3erW9dQDYqyRJkiTJ+eBM78WZ3oszvdfc6NWw0atxpvfiTO/Fmd6LG70aZ3ovzvRenOm9ONN7caOX+sLv/dYf9/nf/e3NuvPEZzaLM70XN3o1zvRec6NX21sHgKtKkiRJkuRtnOm9ONN7cab3mhu9HWZ6L870XpzpvTjTe3GjV+NM78WZ3osz/ep99Uu33+qLn354s97a5TeLM70XZ3ovzvRe3OjVONN7zY1ebW/7HgB+/hd/dpfmH5skSZIkybHhTO/Fmd6LM73XHOjtMNN7cab34kzvxZneixu9Gmf6tfrDL31qdO/Lv79Zb6/zG8SZXo0zvRdnei/O9F6c6b240atxpveaG73a3m5xrDeaf2ySJEmSJMeGM70XZ3ovzvRec6C3w0zvxZneizO9F2f6VXr5S4+yl5765JZxpvfiTO/Fmd6LG70aZ3ovzvRenOm9ONN7caNX40zvNTd6tb11AEiSJEmSZCec6b0403txpveaA70dZnovzvT79NWnPntFrzz9yGZxplfjTO/Fmd6LM70XZ3ovbvRqnOm9ONN7cab34kzvxY1ejTO919zo1fbWASBJkiRJkp1wpvfiTO/Fmd5rDvR7dPcLj75nX7/77GZxpvfiTO/FjV6NM70XZ3ovzvRenOm9uNGrcab34kzvxZneizO9Gmd6L870XnOjV9tbB4AkSZIkSXbCmd6LM/11e+XZJ3fszmcf3ixu9Gqc6b0403txpvfiRq/Gmd6LM70XZ3ovzvRe3OjVONN7cab34kzvxY1ejTO9F2d6r7nRq+2tA0CSJEmSJLt547XN4kzvxZlejTO9F2d6L870XpzpvbjRq3Gm9+JM78WZ3oszvRc3ejXO9F6c6b0403txo1fjTO/Fmd5rbvRqe+sAkCRJkiTJbjDTe3Gm9+JGr8aZ3oszvRdnei/O9F7c6NU403txpvfiTO/FmV6NM70XZ3ovzvRenOm9uNGrcab34kzvNTd6tb11AEiSJEmSZDeY6b0403txo1fjTO/Fmd6LM70XZ3ovbvRqnOm9ONN7cab34kavxpneizO9F2d6L870Xtzo1TjTe3Gm95obvdreOgAkSZIkSbIbzPRenOm9uNGrcab34kzvxZneizO9Gmd6L870XpzpvTjTe3GjV+NM78WZ3oszvRdnei9u9Gqc6b0403vNjV5tbx0AkiRJkiTZDWZ6L870Xtzo1TjTe3Gm9+JM78WNXo0zvRdnei/O9F6c6b240atxpvfiTO/Fmd6LM70aZ3ovzvRenOm95kavtrcOAEmSJEmS7AYzvRdnei9u9Gqc6b0403txpvfiRq/Gmd6LM70XZ3ovzvRe3OjVONN7cab34kzvxY1ejTO9F2d6L870XnOjV9tbB4AkSZIkSXaDmd6LM70aZ3ovzvRenOm9ONN7caNX40zvxZneizO9F2d6L270apzpvTjTe3Gm9+JGr8aZ3oszvRdneq+50avtrQNAkiRJkiS7wUzvxY1ejTO9F2d6L870XpzpvbjRq3Gm9+JM78WZ3oszvRpnei/O9F6c6b0403txo1fjTO/Fmd6LM73X3OjV9rbRAeDnuwEkSZIkSY4dZnovbvRqnOm9ONN7cab34kzvxY1ejTO9F2d6L870Xtzo1TjTe3Gm9+JM78WZ3osbvRpnei/O9F6c6b3mRm+3nw4ASZIkSZLsBjO9Fzd6Nc70XpzpvTjTe3GmV+NM78WZ3oszvRdnei9u9Gqc6b0403txpvfiTO/FjV6NM70XZ3ovzvRec6C3208HgCRJkiRJdoOZ3osbvRpnei/O9F6c6b240atxpvfiTO/Fmd6LM70XN3o1zvRenOm9ONN7caZX40zvxZneizO9F2d6rznQ2+2nA0CSJEmSJLvBTO/FjV6NM70XZ3ovzvRe3OjVONN7cab34kzvxZneixu9Gmd6L870XpzpvbjRq3Gm9+JM78WZ3oszvdcc6O320wEgSZIkSZLdYKZX40zvxZneizO9F2d6L270apzpvTjTe3Gm9+JM78WNXo0zvRdnei/O9F7c6NU403txpvfiTO/Fmd5rDvR2++kAkCRJkiTJbrDRq3Gm9+JM78WZ3oszvRc3ejXO9F6c6b0403txplfjTO/Fmd6LM70XZ3ovbvRqnOm9ONN7cab34kz/YK/ffXrFLi7e3La9dABIkiRJkmQ32OjVONN7cab34kzvxZneixu9Gmd6L870XpzpvbjRq3Gm9+JM78WZ3oszvRc3ejXO9F6c6f+4l+88YXRvwzjTq2GjV9tLB4AkSZIkSXaDjV6NM70XZ3ovzvRenOm9uNGrcab34kzvxZneixu9Gmd6L870Xpzpvb6Amd6LG/0LX/iU12t3n9wszvRenOm9uNGrYaNX20sHgCRJkiRJdoONXo0zvRdnei/O9F6c6dU403txpvfiTO/Fmd6LG70aZ3ovzvReb6/ztx/7pN2Tn/rtLeNM78WZ3oszvRdnei9u9GrY6NX2ohwAfuK//DCbf3KSJEmSJMcFG70aZ3ovzvRenOm9uNGrcab34kzvxZneizO9Fzd6tYtvvLhdbzy7WZzpvbjRq3Gm9+JM78WZ3oszvRc3ejVs9Gp7ucWlXmr+yUmSJEmSHB3M9F6c6b0403txpvfiRq/Gmd6LM70XZ3qpi5efu3jpznbdf2HTONN7Yab34kzvxY1ejTO9F2d6L870XpzpvbjRq2GjV9tLB4AkSZIkSXaGmd6LM70XZ3ovzvRe3OjVONOv24Mv8ZtfubNZf7LLbxZnejXO9F6c6b0w03txpvfiRq/Gmd6LM70XZ3ovzvRe3OjVsNGr7aUDQJIkSZIkO8NM78WZ3oszvRdn+hWb/75OF2d6r7nRq3GjV+NM78WZ3gszvRdnei9u9Gqc6b0403txpvfiTK/Gmd4LG73aXjoAJEmSJEmyM8z0XpzpV+nim1+7pHvf2K6sgTO919zo1bjRq3Gm9+JM74WZ3oszvRc3ejXO9F6c6b0403txo1fjTO+FjV5tLx0AkiRJkiTZHX+Wa3Gm9+JM75U1cKb3mhu9Gjd6Nc70XpzpvTDTe3Gm9+JGr8aZ3oszvRdnei9u9Gqc6b3mX9lue+kAkCRJkiTJ7vizXIszvRdneq+sgTO919zo1bjRq3Gm9+JM74WZ3oszvRpnei/O9F6c6b0403txo1fjTO81/8p220sHgCRJkiRJdsef5Vqc6b0403tlDZzpveZGr8aNXo0zvRdnei/M9F7c6NU403txpvfiTO/Fmd6LG70aZ3qv+Ve22146ACRJkiRJsjv+LNfiTO/Fmd4ra+BM7zU3ejvO9F6c6b0403thpvfiRq/Gmd6LM70XZ3ovzvRe3OjVONN7zb+y3fbSASBJkiRJkt3xZ7kWZ3ovzvReWQNneq850NtxpvfiTO/Fmd4LM70XN3o1zvRenOm9ONN7caZX40zvxZnea/6V7baXDgBJkiRJkuyOP8u1ONN7cab3yho403vNgd6OM70XZ3ovzvRemOm9uNGrcab34kzvxZneixu9Gmd6L870XvOvbLe9dABIkiRJkmR3/FmuxZneizO9WvbGmd5rDvR2nOm9ONN7cab3wkzvxY1ejTO9F2d6L870Xtzo1TjTe3Gm95p/ZbvtpQNAkiRJkiS7489yLc70Xtzo1bI3zvRec6C340zvxZneizO9F2Z6Nc70XpzpvTjTe3Gm9+JGr8aZ3oszvdf8K9ttLx0AkiRJkiTZHX+Wa3Gm9+JGr5a9cab3mgO9HWd6L870XpzpvbDRq3Gm9+JM78WZ3oszvRc3ejXO9F6c6b3mX9lue+kAkCRJkiTJ7vizXIszvRc3erXsjTO92tzo1TjTe3Gm9+JM74WNXo0zvRdnei/O9F6c6b240atxpvfiTO81/8p220sHgCRJkiRJdsef5Vqc6b240atlb9zo1eZGr8aZ3oszvRdnei9s9Gqc6b0403txpvfiTK/Gmd6LM70XZ3qv+Ve22146ACRJkiRJsjv+LNfiTO/FjV4te+NGrzY3ejXO9F6c6b0403tho1fjTO/Fmd6LM70XN3o1zvRenOm9ONN7zb+y3fbSASBJkiRJkt3xZ7kWZ3o1zvRe2Rs3erW50atxpvfiTO/Fmd4LG70aZ3ovzvRenOm9uNGrcab34kzvxZnea/6V7baXDgBJkiRJkuyOP8u1uNGrcab3yt640avNjV6NM70XZ3ovzvRqmOm9ONN7cab34kzvxY1ejTO9F2d6L870Vzf/H+uJ2u4A8BPdAJIkSZIkRw8zvRc3ejXO9F7ZGzd6tbnRq3Gm9+JM78WNXg0zvRdnei/O9F6c6b240atxpn+3Lu59dd/e/MPtymU6ACRJkiRJsjvM9F7c6NU403tlDZzpveZGr8aZ3oszvRc3ejXM9F6c6b0403txpmevPve5Vbp4/d6mcab34kzvlct0AEiSJEmSZHeY6b240atxpvfKGjjTe82NXo0zvRdnei9u9GqY6b0407/dG899Zd3u3b69WZzp1eZGr8aZ3oszvVcu0wEgSZIkSZLdYab34kavxpneK2vgTO81N3o1zvRenOm9uNH/aa+/+KTS3Sc2izO9F2d6L270anOjV+NM78WZ3iuXufXf/9tPbdb8w5MkSZIkOTKY6dU403txpvfKGjjTe82NXm1s9Bcvm93frDnQ22Gm9+JM78WZ3osbvdrc6NU403txpvfKZToAJEmSJEmyO2z0apzpvTjTe2UNf77Ob+GNDeNM7zVnerW50athpvfiTO/Fmd6LG73a3OjVONN7cab3ymU6ACRJkiRJsjts9Gqc6b0403vl+HCm9+JM7zU3erW50athpvfiTO/Fmd6LG73a3OjVONN7cab3ymU6ACRJkiRJsjts9Gqc6aWS98CZ3oszvdfc6NXmRq+Gmd6LM70XZ3ovbvRqc6NX40zvxZneK5fpAJAkSZIkSZKrcab34kzvNTd6tbnRq2Gm9+JM78WZXo0zvdfc6NU403txpvfKZToAJEmSJEmS5Gqc6b0403vNjV5tbvRqmOm9ONN7caNX40zvNTd6Nc70XpzpvXKZDgBJkiRJkiS5Gmd6L870XnOjV5sbvRpmei/O9F7c6NU403vNjV6NM70XZ3qvXKYDQJIkSZIkSa7Gmd6LM73anOm95kavhpneizO9Fzd6Nc70XnOjV+NM78WZ3iuX6QCQJEmSJEmSq3Gm9+JGrzZneq+50athpvfiTO/FjV6NM73X3OjVONN7caZXC3QASJIkSZIkydU403txo1ebM73X3OjVMNN7cab34kavxpnea270apzpvbjRqwU6ACRJkiRJkuRqnOm9uNGrzZnea270apjpvTjTq3Gm9+JM7zU3ejXO9F7c6NUCHQCSJEmSJElyNc70Xtzo1eZM7zU3ejXM9F7c6NU403txpveaG70aZ3ovbvRqgQ4ASZIkSZIkuRpnei9u9GpzpveaG70aZnovbvRqnOm9ONN7zY1ejTO9Fzd6tUAHgCRJkiRJklyNM70aZ3qvOdN7zY1eDTO9Fzd6Nc70XpzpveZGr8aZ3osbvVqgA0CSJEmSJEmuxo1ejTO915zpveZGr4aZ3osbvRpnei/O9F5zo1fjTK/Gmd4r0AEgSZIkSZIkV+NGr8aZ3mvO9F5zo1fDTO/FjV6NM70XZ3qvudGrcaNX40zvFegAkCRJkiRJkqtxo1fjTO81Z3qvudGrYaZX40zvxZneizO919zo1bjRq3Gm9wp0AEiSJEmSJMnVuNGrcab3mjO919zo1bDRq3Gm9+JM78WZ3mtu9Grc6NU403sFOgAkSZIkSZLkatzo1TjTe82Z3mtu9GrY6NU403txpvfiTO81N3o1bvTXKkelA0CSJEmSJEneE2d6L870XnOm95obvRo2ejXO9F6c6b040+/S/E8nuVEdAJIkSZIkSfKeONN7cab3mjO919zo1bDRq3Gmv6L5spKYOgAkSZIkSZLkPXGm9+JM7zVneq+50b97F197Y9+S5E/deuTR39ms+YcnSZIkSZLkOHCm9+JMPzpOnOnVkmTjA8Aj3QCSJEmSJEmO0tc27ERxo1dLkg4ASZIkSZIk2QFneq8TxY1eLUk6ACRJkiRJkmQHnOm9ThQ3erUk6QCQJEmSJEmSHXCm9zpR3OjVkqQDQJIkSZIkSXbAmd7rRHGjV0uSDgBJkiRJkiTZAWd6r9PFmd4rSS4ubn33+/4eZ3qv+ecnSZIkSZLkCHCm9zpdnOm9kqQDQJIkSZIkSXbAmd7rdHGm90qSDgBJkiRJkiTZAWd6r9PFmd4rSToAJEmSJEmSZAec6b1OF2d6ryTpAJAkSZIkSZIdcKb3Ol2c6b2SpANAkiRJkiRJdsCZ3ut0cab3SpIOAEmSJEmSJNkBZ3qv08WZ3itJOgAkSZIkSZJkB5zpvU4XZ3qvJOkAkCRJkiRJkh1wpvc6XZzpvZKkA0CSJEmSJEl2wJne63RxpvdKkg4ASZIkSZIk2QFneq/TxZneK0k6ACRJkiRJkmQHnOm9Thdneq8k6QCQJEmSJEmSHXCmVztRnOm9kqQDQJIkSZIkSXbAjV7tRHGm90qSAz4AvLZGSZIkSZIkWQU3erUTxZl+95Lk+m59x9/89g99+Mc3Cxu9WpIkSZIkSVbBjV4tSbKC0z4AvDb/cZMkSZIkSZIkOQ8dAJIkSZIkSZIkOUEdAJIkSZIkSZIkOUEdAJIkSZIkSZIkOUEdAJIkSZIkSZIkOUEdAJIkSZIkSZIkOUFbHwA+tPUNIEmSJEmSJEmSc9QBIEmSJEmSJEmSE9QBIEmSJEmSJEmSE9QBIEmSJEmSJEmSE9QBIEmSJEmSJEmSE9QBIEmSJEmSJEmSE/QnB4CNbwDY6NWSJEmSJEmSJDlHHQCSJEmSJEmSJDlBHQCSJEmSJEmSJDlBHQCSJEmSJEmSJDlBHQCSJEmSJEmSJDlBHQCSJEmSJEmSJDlBHQCSJEmSJEmSJDlBHQCSJEmSJEmSJDlBx3QA+M1HP3Td5j9ukiRJkiRJkiTn4dZf+Svf9sd91z/525vFmd5r/uMmSZIkSZIkSXIeOgAkSZIkSZIkSXKCOgAkSZIkSZIkSXKCOgAkSZIkSZIkSXKCOgAkSZIkSZIkSXKCOgAkSZIkSZIkSXKCTvwA8JvdAJIkSZIkSZIkZ6kDQJIkSZIkSZIkJ6gDQJIkSZIkSZIkJ6gDQJIkSZIkSZIkJ6gDQJIkSZIkSZIkJ6gDQJIkSZIkSZIkJ+gGDgDfte0NYP4TJ0mSJEmSJElyBjoAJEmSJEmSJElygjoAJEmSJEmSJElygjoAJEmSJEmSJElygjoAJEmSJEmSJElygjoAJEmSJEmSJElygv7sALDxDYAzvdf8J06SJEmSJEmS5Ax0AEiSJEmSJEmS5AR1ADhwb757f7BtSZIkSZIkSZJjcvQHgJ/7hf96ddjNTyZu9GpJkiRJkiRJkmNy6y//pb/6Vt/5d//WZnGm98JufkpxpvdKkiRJkiRJkhyTDgBHHWd6ryRJkiRJkiTJMekAcNRxpvdKkiRJkiRJkhyTDgBHHWd6ryRJkiRJkiTJMekAcNRxpvdKkiRJkiRJkhyTDgBHHWd6ryRJkiRJkiTJMekAcNRxpvdKkiRJkiRJkhyTDgBHHWd6ryRJkiRJkiTJMekAcNRxpvdKkiRJkiRJkhyTDgBHHWd6ryRJkiRJkiTJMekAcNRxpvdKkiRJkiRJkhyTDgBHHWd6ryRJkiRJkiTJMTn9A8DPnfINgDO9V5IkSZIkSZLkmHQAOOo403slSZIkSZIkSY5JB4CjjjO9V5IkSZIkSZLkmHQAOOo403slSZIkSZIkSY5JB4CjjjO9V5IkSZIkSZLkmNzMAeA7t70BYDc/mTjTeyVJkiRJkiRJjkkHgKOOM71XkiRJkiRJkuSYdAA46jjTeyVJkiRJkiRJjkkHgOPrh//d97/VT/7Uz2zWfDhJkiRJkiRJksN2mgeAD/7Ev3mwn/nQj23W2+v8BnGmV5tvJ0mSJEmSJElywG79tW//62/1T9/3vi0bG70aZ3ovzvRe3OjV5ttJkiRJkiRJkhywPz8AbHwD4EzvxZneizO9Fzd6tfl2kiRJkiRJkiQHrAPAynGm9+JGrzbfTpIkSZIkSZLkgHUAWDnO9F7c6NXm20mSJEmSJEmSHLAOACvHmd6LG73afDtJkiRJkiRJkgPWAWDlONOrcab3mm8nSZIkSZIkSXLAOgCsHDd6Nc70XvPtJEmSJEmSJEkOWAeAleNGr8aZ3mu+nSRJkiRJkiTJAesAsHLc6NU403vNt5MkSZIkSZIkOWAdAFaOG70aZ3qv+XaSJEmSJEmSJAesA8DKcaNX40zvNd9OkiRJkiRJkuSAdQBYP870XpzpvebbSZIkSZIkSZIcsA4A68eZ3oszvdd8O0mSJEmSJEmSA9YBYP0403txpveabydJkiRJkiRJcsA6AKwfZ3ovzvRe8+0kSZIkSZIkSQ5YB4D140zvxZnea76dJEmSJEmSJMkB6wCwfpzpvTjTe823kyRJkiRJkiQ5YGdxAPjgtjcAzvRenOm95ttJkiRJkiRJkhywDgDrx5neizO913w7SZIkSZIkSZID1gFg/TjTe3Gm95pvJ0mSJEmSJElywDoArB9neq+31/knn/m03Xw7SZIkSZIkSZIDdkYHgPf/8/dv07/6lz+wWZzpvebbSZIkSZIkSZIcsHkA+Bfvf/82/ePvft+Wcab34kzvxZnea76dJEmSJEmSJMkBu/Udf+M73o4zvRpnei/O9F6c6b0403vNt5MkSZIkSZIkOWAdANaPM70XZ3qv+XaSJEmSJEmSJAesA8D6cab34kzvNd9OkiRJkiRJkuSAdQBYP870XpzpvebbSZIkSZIkSZIcsA4A68eZ3oszvdp8PkmSJEmSJEmSQ9UBYP0403txo1ebzydJkiRJkiRJcqjecQDY+AbAmd6LM70XZ3ovbvRq8/kkSZIkSZIkSQ5VB4D140zvxY1ebT6fJEmSJEmSJMmh6gCwfpzpvbjRq83nkyRJkiRJkiQ5VB0A1o8zvRpneq/5fJIkSZIkSZIkh6oDwPpxo1fjTO81n0+SJEmSJEmS5FB1AFg/bvRqnOm95vNJkiRJkiRJkhyqDgDrx41ejTO913w+SZIkSZIkSZJD1QFg/bjRq3Gm95rPJ0mSJEmSJElyqDoArB83ejXO9F7z+SRJkiRJkiRJDlUHACXO9F6c6b3m80mSJEmSJEmSHKoOAEqc6b0403vN55MkSZIkSZIkOVQdAJQ403txpveazydJkiRJkiRJcqg6AChxpvfiTO81n0+SJEmSJEmS5FB1AFDiTO/Fmf7tPvv47XX7+sUbmzWfapIkSZIkSZLkOs79APAfPvBjRj//sx/ZLM70XpzpveZTTZIkSZIkSZJcx04HgB/8gX9t9O8/8J+2jDO9F2d6L870XpzpveZTTZIkSZIkSZJcx61/+A/+/oNxpvfiRq/Gmd6LM70XZ3ovzvRe86kmSZIkSZIkSa6jA4ASZ3ovzvRenOm95lNNkiRJkiRJklxHBwAlzvRenOm9ONN7zaeaJEmSJEmSJLmODgBKnOm9ONN7caZXm681SZIkSZIkSbKzDgBKnOm9ONN7caNXm681SZIkSZIkSbKzmzwA/OC2NwDO9F6c6b0403txo1ebrzVJkiRJkiRJsrMOAEqc6b0403txo1ebrzVJkiRJkiRJsrMOAEqc6b0403txo1ebrzVJkiRJkiRJsrMOAEqc6b0403txo1ebrzVJkiRJkiRJsrMOAEqc6b0406txpvearzVJkiRJkiRJsrMOAEqc6b240atxpvearzVJkiRJkiRJsrN5ANj4BsCZ3oszvRdnei9u9Gqc6b3ma02SJEmSJEmS7KwDgBJnei9u9Gqc6b3ma02SJEmSJEmS7KwDgBJnei9u9Gqc6b3ma02SJEmSJEmS7KwDgBJnei9u9Gqc6b3ma02SJEmSJEmS7KwDgBJnejXO9F6c6b3ma02SJEny/9uzn1fbz7OMw/u/c6AdigYzLIKIlRgcBHHiIIJt04oWBTss1WJFFBtpoLb+KFKqgoQGKYGmTTAmbRTaHhPT2qOLbrL3eu7s07PWOfd3r/2u6+IzaiGc9X736H4AAOChOQBUyo2+Ws70vXKm7zX/WlnX99/+j0Ob/wkAAAAAYJ8DQKXc6KvlTN8rZ/pe86+Vo7xzb7typu81fycAAAAAsM8BoFJu9NVypu+VM32v+dfKUXKm75Uzfa/5OwEAAACAfQ4AlXKjr5Yz/QO699/3H6Xvfe/tzZp/rRwlZ/peOdP3mr8TAAAAANjnAPA+/f0XX3zEvvvdH21ZzvS9cqbvNf9aOUrO9L1ypu81fycAAAAAsO/4A8AHf/EXHr3nPvLhzcqZvlrO9L1ypu+VM32v+dfKUXKm75Uzfa/5OwEAAACAfRcf+JmfGuVM3ytn+l650VfLmb5XzvS9cqbvNf9aOUrO9L1ypu81fycAAAAAsM8BoFXO9L1ypu+VM32v+dfKUXKm75Uzfa/5OwEAAACAfQ4ArXKm75Uzfa+c6XvNv1aOkjN9r5zpe83fCQAAAADscwBolTN9r5zpe+VM32v+tXKUnOl75Uzfa/5OAAAAAGCfA0CrnOl75UzfK2f6XvOvlaPkTN8rZ/pe83cCAAAAAPvO6ADw3LY3gJzpe+VM3ytn+l7zr5Wj5EzfK2f6XvN3AgAAAAD7HABa5UzfK2f6XjnT95p/rRwlZ/peOdNXmz8VAAAAALjGAaBVzvS9cqbvlTN9r/nXylFypu+VG321+VMBAAAAgGscAFrlTN8rZ/peOdNXm3+wHC5n+l650VebPxUAAAAAuMYBoFXO9L1ypu+VG321+QfL4XKm75UbfbX5UwEAAACAaxwAWuVM3ytn+l650Vebf7AcLmf6XrnRV5s/FQAAAAC45pYPAB/c9gaQM32vnOl75UzfKzf6avMPlsPlTN8rN/pq86cCAAAAANc4ALTKmb5XzvS9cqOvNv9gOVzO9NVypu81fyoAAAAAcI0DQKuc6XvlTN8rN/pq8w+Ww+VGXy1n+l7zpwIAAAAA1zgAtMqZvlfO9NVypu81/2A5XG701XKm7zV/KgAAAABwjQNAq5zpe+VGXy1n+l7zD5bD5UZfLWf6XvOnAgAAAADXOAC0ypm+V2701XKm7zX/YDlcbvTVcqZ/lO7/4P6DAgAAAABu9j4HgI1vADnT98qZvlfO9L1yo6+WM32v+QfL6cuZvhcAAAAAcDMHgFY50/fKjb5azvS95h8spy9n+l4AAAAAwM0cAFrlTN8rN/pDO8j/bhh3T870vQAAAACAmzkAHNAP3r3/8C0sZ/pe3D050/cCAAAAAG72mA8Az/zabx/aV/7htc3Kmb7XwnKm78XdkzN9LwAAAADgZhcf+OmfzXKm75Uzfa+c6XstLGf6Xtw9OdP3AgAAAABu5gDQamE50/fi7smZvhcAAAAAcDMHgFYLy5m+F3dPzvS9AAAAAICbOQC0WljO9L24e3Km7wUAAAAA3MwBoNiqcqbvxd2TM30vAAAAAOBmDgDFVpUzfS/unpzpewEAAAAAN3MAKLaqnOl7cffkTN8LAAAAALiZA0CxVeVM34u7J2f6XgAAAADAzRwAiq0qZ/pe3D050/cCAAAAAG7mAFBsVTnT9+LuyZm+FwAAAABws/M6AHxl2xvAqnKm78XdkzN9LwAAAADgZg4AxVaVM30v7p6c6XsBAAAAADdzACi2qpzpe3H35ExfDQAAAAC4gQNAsVXlTN+Luyc3+moAAAAAwA0cAIqtKmf6atwxudFXAwAAAABu4ABQbFW50VfjjsmNvhoAAAAAcIPbPwA8s+0NIGf6XqvKjb4ad0xu9I89AAAAAOAhOAAUW1Vu9NUAAAAAADiCA0CxVeVGXw0AAAAAgCM4ABQDAAAAAIDb4gDwqAEAAAAAwAna4gDw2qtvPrj5jwIAAAAAAB7NxUd+59n3LWf6XvMfBQAAAAAAPBoHAAAAAAAAWJADAAAAAAAALMgBAAAAAAAAFuQAAAAAAAAAC3IAAAAAAACABTkAAAAAAADAghwAAAAAAABgQQ4AAAAAANTtvOcAABJ1SURBVACwIAcAAAAAAABYkAMAAAAAAAAsyAEAAAAAAAAW5AAAAAAAAAALcgAAAAAAAIAFOQAAAAAAAMCCHAAAAAAAAGBBDgAAAAAAALAgBwAAAAAAAFiQAwAAAAAAACzIAQAAAAAAABbkAFDx5luv/rj5fwAAAAAAwCZu7QDw6hv/9l5vfPuVLXtvnd+g+d4AAAAAALCJi0/80e+/b9cH+g3Kmb5XzvS95nsDAAAAAMAmHAC6zfcGAAAAAIBNOAB0m+8NAAAAAACbcADoNt8bAAAAAAA24QDQbb43AAAAAABs4sYDwMY3gJzpe+VM32u+NwAAAAAAbMIBoNt8bwAAAAAA2IQDQLf53gAAAAAAsAkHgG7zvQEAAAAAYBMOAN3mewMAAAAAwCYcALrN9wYAAAAAgE04AHSb7w0AAAAAAJtwAOg23xsAAAAAADbhANBtvjcAAAAAAGzCAaDbfG8AAAAAANiEA0C9+eQAAAAAANDnAFBvPjkAAAAAAPQ5ANSbTw4AAAAAAH0OAPXmkwMAAAAAQJ8DQL355AAAAAAA0OcAUG8+OQAAAAAA9J3WAeCfvvqP2/Rf//mtzZpPDgAAAAAAfRd/8qnP3dTnn/+rzcqNvlrO9L3mkwMAAAAAQJ8DQL355AAAAAAA0OcAUG8+OQAAAAAA9DkA1JtPDgAAAAAAfQ4A9eaTAwAAAABA36kcAD6/7Q0gZ/pe88kBAAAAAKDPAaDefHIAAAAAAOhzAKg3nxwAAAAAAPocAOrNJwcAAAAAgD4HgHrzyQEAAAAAoM8BoN58cgAAAAAA6HvQAWDjG0DO9L1ypu81nxwAAAAAAPocAOrNJwcAAAAAgD4HgHrzyQEAAAAAoM8BoN58cgAAAAAA6HMAqDefHAAAAAAA+hwA6s0nBwAAAACAPgeAevPJAQAAAACgzwGg3nxyAAAAAADocwCoN58cAAAAAAD6HADqzScHAAAAAIC+O3AAeOnFrz/2fvTDt7dsvjoAAAAAAJRdvPHa/Qf08kvf2ayc6XvlRl9tvjoAAAAAAJQ5AGzRfHUAAAAAAChzANii+eoAAAAAAFDmALBF89UBAAAAAKDsTA8AL217A5ivDgAAAAAAZQ4AWzRfHQAAAAAAyhwAtmi+OgAAAAAAlDkAbNF8dQAAAAAAKHMA2KL56gAAAAAAUOYAsEXz1QEAAAAAoOyEDgAvb3sDyJm+13x1AAAAAAAocwDYovnqAAAAAABQ5gCwRfPVAQAAAACgzAFgi+arAwAAAABAmQPAFs1XBwAAAACAMgeALZqvDgAAAAAAZT/hALDxDSBn+l450/earw4AAAAAAGUOAFs0Xx0AAAAAAMocALZovjoAAAAAAJQ5AGzRfHUAAAAAAChzANii+eoAAAAAAFB2Vw8Ab/z7W4/YfAkAAAAAAFjIxfwfwrvvblfO9L3m7wQAAAAAgIU4AAAAAAAAwIIcAAAAAAAAYEEOAAAAAAAAsCAHAAAAAAAAWJADAAAAAAAALMgBAAAAAAAAFuQAAAAAAAAAC3IAAAAAAACABTkAAAAAAADAgs73APCGGwAAAAAAAOtyAAAAAAAAgAU5AAAAAAAAwIIcAAAAAAAAYEEOAAAAAAAAsCAHAAAAAAAAWNBpHQDe3fYGMH8qAAAAAACswgEAAAAAAAAW5AAAAAAAAAALcgAAAAAAAIAFOQAAAAAAAMCCVjsA5H/wAQEAAAAAwKp+8gHg/917Z7typu8FAAAAAACrcgAAAAAAAIAFOQAAAAAAAMCCHAAAAAAAAGBBDgAAAAAAALAgBwAAAAAAAFiQAwAAAAAAACzIAQAAAAAAABbkAAAAAAAAAAtyAAAAAAAAgAU5AAAAAAAAwIIcAAAAAAAAYEEOAAAAAAAAsCAHAAAAAAAAWJADAAAAAAAALOisDwDvugEAAAAAALAoBwAAAAAAAFiQAwAAAAAAACzIAQAAAAAAABbkAAAAAAAAAAtyAAAAAAAAgAWd3AHgXuEGAAAAAAAA5+byAHDvBw/qtW+/tWX7/0IAAAAAAOBgFzn3Z7nRV5v/RgAAAAAA4EAOAAAAAAAAsCAHAAAAAAAAWJADAAAAAAAALOihDgAb3wDmvxEAAAAAADiQAwAAAAAAACzIAQAAAAAAABbkAAAAAAAAAAtyAAAAAAAAgAU5AAAAAAAAwIIcAAAAAAAAYEEOAAAAAAAAsCAHAAAAAAAAWJADAAAAAAAALMgBAAAAAAAAFuQAAAAAAAAAC3IAAAAAAACABTkAAAAAAADAghwAAAAAAABgQQ4AAAAAAACwoPM9APz1lz/x4+7ff33DAAAAAABgCw86AHzxy3/7Xp/+89/drPem+W2Kjb4aAAAAAABs4eL6yv+AcqbvlRt9tdjoqwEAAAAAwBYcABwAAAAAAABYkAOAAwAAAAAAAAtyAHAAAAAAAABgQad4APj0tjeA2OirAQAAAADAFhwAHAAAAAAAAFiQA4ADAAAAAAAAC3IAcAAAAAAAAGBBDgAOAAAAAAAALOhhDwAb3wBypu8VG301AAAAAADYggOAAwAAAAAAAAtyAHAAAAAAAABgQQ4ADgAAAAAAACzIAcABAAAAAACABTkAOAAAAAAAALAgBwAHAAAAAAAAFuQA4AAAAAAAAMCCHAAcAAAAAAAAWJADgAMAAAAAAAALcgDY+ADw+vwCAAAAAABQ4ACwdwD4vU/+Vrv5BQAAAAAAoODgA8ATP/fzG/TLv/JLm5UbfbX5BQAAAAAAoODiYx//+EOWM32vnOl75UZfbX4BAAAAAAAocABwAAAAAAAAYEEOAA4AAAAAAAAsyAFgV870veYXAAAAAACAAgeAXTnT95pfAAAAAAAAChwAduVM32t+AQAAAAAAKHAA2JUzfa/5BQAAAAAAoMABYFfO9L3mFwAAAAAAgAIHgF050/eaXwAAAAAAAApO9ADwxLY3gJzpe80vAAAAAAAABQ4Au3Km7zW/AAAAAAAAFDgA7MqZvtf8AgAAAAAAUOAAsCtn+l7zCwAAAAAAQIEDwK6c6XvNLwAAAAAAAAUOALtypu81vwAAAAAAABQccADY+AaQM32vnOl7zS8AAAAAAAAFDgC7cqbvNb8AAAAAAAAUOADsypm+1/wCAAAAAABQ4ACwK2f6XvMLAAAAAABAgQPArpzpe80vAAAAAAAABQ4Au3Kmv95zH/3YY+w7997csvnBAQAAAAA4D4/nAPDkE08+9p760FOblTN9r9zoq80PDgAAAADAebh46leffvhypu+VM32vnOl75UZfbX5wAAAAAADOgwPArpzpe+VGX21+cAAAAAAAzoMDwK6c6XvlRl9tfnAAAAAAAM6DA8CunOmr5Uzfa35wAAAAAADOgwPArtzoq+VM32t+cAAAAAAAzoMDwK7c6KvlTN9rfnAAAAAAAM6DA8Cu3Oir5Uzfa35wAAAAAADOgwPArtzoq+VM32t+cAAAAAAAzoMDwK7c6KvlTN9rfnAAAAAAAM6DA8BlOdP3ypm+1/zgAAAAAACcBweAy3Km75Uzfa/5wQEAAAAAOA8OAJflTN8rZ/pe84MDAAAAAHAeHAAuy5m+V870veYHBwAAAADgPDgAXJYzfa+c6XvNDw4AAAAAwHk43QPAk9veAHKm75Uzfa/5wQEAAAAAOA8OAJflTN8rZ/pe84MDAAAAAHAeHAAuy5m+V870veYHBwAAAADgPDgAXJYzfa+c6XvNDw4AAAAAwHlwALgsZ/peOdP3mh/87H3hSy8c0Svf+sZmzX8xAAAAAMBRHAAuy5m+V870veYHL/vuvR9uVs70vXKm7zXfFAAAAADgKIcdADa+AeRM3ytn+gf3x5/57NG9+PWvbtb84GU50/fKmb5XzvS95psCAAAAAByleAB4+kO/+Yh99MOf3Kyc6XvlTN9rfvCynOl75UzfK2f6XvNNAQAAAACOcvHMr//GQeVM3ytn+l450/fKmb7X/OBlOdP3ypm+V870veabAgAAAAAcxQHgspzpe+VM32t+8LKc6XvlTN8rZ/pe800BAAAAAI7iAHBZzvS9cqavNr95U870vXKm75Uzfa/5pgAAAAAAR3EAuCxn+l650Veb37wpZ/peOdP3ypm+13xTAAAAAICjOABcljN9r9zoq81v3pQzfa+c6XvlTN9rvikAAAAAwFEcAC7Lmb5XbvTV5jdvypm+V870vXKm7zXfFAAAAADgKA4Al+VM3ys3+mrzmzflTN8rZ/peOdNXm88KAAAAAHA4B4DLcqbvlRt9tfnNm3Km75Uzfa/c6KvNZwUAAAAAOJwDwGU501fLmb7X/OZNOdP3ypm+V2701eazAgAAAAAczgHgstzoq+VM32t+86ac6XvlTN8rN/pq81kBAAAAAA7nAHBZbvTVcqbvNb95U870vXKm75UbfbX5rAAAAAAAh3MAuCw3+mo50/ea37wpZ/peOdP3yo2+2nxWAAAAAIDDOQBclht9tZzpe81v3pQzfa+c6avlTN9rPisAAAAAwOEcAC7Ljb5azvS95jdvypm+V2701XKm7zWfFQAAAADgcA4AV+VM3ytn+l7zmzflTN8rN/pqOdP3ms8KAAAAAHA4B4CrcqbvlTN9r/nNm3Km75UbfbWc6XvNZwUAAAAAOJwDwFU50/fKmb7X/OZNOdP3yo2+Ws70veazAgAAAAAczgHgqpzpe+VM32t+86ac6XvlRl8tZ/pe81kBAAAAAA7nAHBVzvS9cqbvNb95U8701XKmP7pXXv7+g5s/FQAAAADgtDkAXJUzfa+c6XvNb970+qubljN9r/lTAQAAAABO20kfAJ7e9gaQM/2h/cEffuoh+7PPfWaz5jdvyo2+Ws70veZPBQAAAAA4bbdwAPjLv/i7h+9Lf/Mvm5Uzfa+c6XvNb96UG321nOl7zZ8KAAAAAHDaLp599rmDyo2+Ws70vXKm75Uzfa/5zZtyo6+WM32v+VMBAAAAAE6bA8BVOdP3ypm+1/zmTbnRV8uZvtf8qQAAAAAAp80B4Kqc6XvlTN9rfvOynOl75Uzfa/5OAAAAAIDT5gBwVc70vXKm7zW/eVnO9L1ypu81fycAAAAAwGk7+ADw7LY3gJzpe+VM3ytn+l7zm5flTN8rZ/pe83cCAAAAAJw2B4CrcqbvlTN9r/nNy3Km75Uzfa/5OwEAAAAATpsDwFU50/fKmb7X/OZlOdP3ypm+1/ydAAAAAACnzQHgqpzpe+VM32t+87Kc6XvlTN9r/k4AAAAAgNPmAHBVzvS9cqavNj97U870vXKm7zV/JwAAAADAaXMAuCpn+l650Vebn70pZ/peOdP3mr8TAAAAAOC0OQBclTN9r9zoq83P3pQzfa+c6XvN3wkAAAAAcNocAK7Kmb5XbvTV5mdvypm+V870vebvBAAAAAA4bQ4AV+VM3ys3+mrzszflTN8rZ/pe83cCAAAAAJw2B4CrcqbvlRt9tfnZm3Km75Uzfa/5OwEAAAAATpsDwFU501fLmb7X/OxNOdP3ypm+1/ydAAAAAACnzQHgqtzoq+VM32t+9qac6XvlTN9r/k4AAAAAgNPmAHBVbvTVcqbvNT97U870vXKm7zV/JwAAAADAaXMAuCo3+mo50/ean70pZ/peOdP3mr8TAAAAAOC0OQBclRt9tZzpe83P3pQzfa+c6R9v87cBAAAAANwdDgB75UzfK2f6XvOzPz7v/GgGAAAAAMApcADYK2f6R+8Lz//r+/bZz/7pZuVM3wsAAAAAgFNwKgeAr730zfftm9/4ny3Lmb5XzvS9cqbvBQAAAADAKbh44fl/PrSc6XvlRl8tZ/peOdP3ypm+FwAAAAAAp8ABYK+c6XvlTN8rZ/peAAAAAACcAgeAvXKm75Uzfa+c6XsBAAAAAHAKTv0A8LVtbwA50/fKmb5XzvS9AAAAAAA4BQ4Ae+VM3ytn+l450/cCAAAAAOAUOADslTN9r5zpe+VM3wsAAAAAgFPgALBXzvS9cqbvlTN9LwAAAAAAToEDwF450/fKmb5XzvTVAAAAAAC4dQ4Ae+VM3ytn+l650VcDAAAAAODWHXMAeGHbG0DO9L1ypu+VM32v3OirAQAAAABw6xwA9sqZvlfO9L1yo68GAAAAAMCtcwDYK2f6XjnT98qNvhoAAAAAALfOAWCvnOl75UzfKzf6agAAAAAA3DoHgL1ypu+VM321nOl7AQAAAABw6xwA9sqZvldu9NVypu8FAAAAAMCtcwDYK2f6XrnRV8uZvhcAAAAAALfOAWCvnOl75UZfLWf6XgAAAAAA3DoHgL1ypu+VG321nOl7AQAAAABw6/4PjmgTKiGZY20AAAAASUVORK5CYII=", - "fileSize": "234 kB" - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "NASA14": [ - { - "startTime": 1676891420248, - "executionTime": 1533, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "date": "2019-05-05", - "explanation": "This is not a solar eclipse. Pictured here is a busy vista of moons and rings taken at Saturn. The large circular object in the center of the image is Titan, the largest moon of Saturn and one of the most intriguing objects in the entire Solar System. The dark spot in the center is the main solid part of the moon. The bright surrounding ring is atmospheric haze above Titan, gas that is scattering sunlight to a camera operating onboard the robotic Cassini spacecraft. Cutting horizontally across the image are the rings of Saturn, seen nearly edge on. At the lower right of Titan is Enceladus, a small moon of Saturn. Since the image was taken pointing nearly at the Sun, the surfaces of Titan and Enceladus appear in silhouette, and the rings of Saturn appear similar to a photographic negative. Now if you look really really closely at Enceladus, you can see a hint of icy jets shooting out toward the bottom of the image. It is these jets that inspired future proposals to land on Enceladus, burrow into the ice, and search for signs of extraterrestrial life.", - "hdurl": "https://apod.nasa.gov/apod/image/1905/TitanBusy_Cassini_1080.jpg", - "media_type": "image", - "service_version": "v1", - "title": "Saturn, Titan, Rings, and Haze", - "url": "https://apod.nasa.gov/apod/image/1905/TitanBusy_Cassini_1080.jpg" - }, - "binary": { - "data": { - "mimeType": "image/jpeg", - "fileType": "image", - "fileExtension": "jpg", - "data": "/9j/4AAQSkZJRgABAgAAZABkAAD//gASQWRvYmUgSW1hZ2VSZWFkef/sABFEdWNreQABAAQAAAA8AAD/7gAOQWRvYmUAZMAAAAAB/9sAhAAGBAQEBQQGBQUGCQYFBgkLCAYGCAsMCgoLCgoMEAwMDAwMDBAMDg8QDw4MExMUFBMTHBsbGxwfHx8fHx8fHx8fAQcHBw0MDRgQEBgaFREVGh8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx//wAARCAJ8BDgDAREAAhEBAxEB/8QAkQABAQEAAgMBAAAAAAAAAAAAAAECAwUEBgcIAQEAAAAAAAAAAAAAAAAAAAAAEAEAAQMBBAYFBwgHBgMIAwEAARECAwQhEgUGMUFRExQHYXGR0RWBIjJSkhYXocHhQoJTg5OxI0NEVEVVYnLSM3MINDVG8aLiYyQ2VifwoyUYEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwD8qAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsASCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoKCSCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoEggAAKACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtAAQAAAAFAoCAAsAAUAoCAoFAAQAAAFoBQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQQAFoCAAsASCAAAAAsASCAAsAoAICAoKCSACAAAsASCAAAAAAAAAoIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwBIEAAgALAEggAAAALAEggALAKACAgKCgAkggAALAEggAAAAAAAALAEggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAKCAgAAALAAIACwCgAAyADQAJIIACwCgAgIACwCgAAyACwBIIAAAACwACAAsAoJIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgSBAEggAKCgAgIAAACwACAAsAoAAMgAsAoJIIACwCgAgICgoAAAMgAsAoJIIAACwCggIACwCgkggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBIEASCAsQCgAAgIAC0AoBQAEABYBQAAZBaAAoJIIACwCgAgICgoAAAMgAsAoJIIAACwCggIACwCgAlAQAAFgCgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0AoACAAAAAAAAAoEwBAEggLAKAACAgALAKACAgALAKAACUBQAASQQAFgFABAQFBQAAAZABYBQQCgIACwCggIACwCgAgIAACwBIIAAACgUBAAAAAAAAAAAAAAWgFAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgASQQAAAFBAAAAUFABJBAWAUAAEBAAWAUAEBAAWAUAAAAAAEkEBaAAoAAJQFAAAABKAgLAKAADIALAKCAgALAKACAgAALAEggAAKBAAIAAAAAAAAAAAACgQBIIAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAkggAAALAEgQCAAoKACSCAsAoAAICAAsAoAICAAsAoAAEdAICgAkggNAAAAAAAAAAAAyCwCgAAyACwCggIACwCgAgIAACwBIIAACwCggIAAAAAAAAAAAACwCgkggAAALAKDIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAKAAACSCAAAsAoJIIACgoAEAlwEAoAAICAAsAoAAAMgsAoAAAAAAAAGzsAAAAAAAAAAAAAAAAAAAABAQAFgFABAQAAFgCQQAAAFgAEAABYBQQEABYAkEAABYBQAQEAABYBQZAAAAAAAAAAAAAABQKAgAAAAAAAAKBQCgFAJBAWAUAAAAEoACAsAoJIIACgoAAAAAAAAJQCgKAAAACUBQAAWgFAKAUBnaBtBQUEkACAWgFAQAAAAACegEgFAAAAAABAQAFgFABAQAAFgCQQAAAFgAEAABYBQQEABYAABAAWAUAEBAAAAUEAAAAAAAAAAAAAABYBQZAAAAAAAABYBQAASgFAKAoAAAAAJIICwCggFAQFBQAAAAAAAAAAAAIAoBQCgFAKAtAAAAJBIgFBKAoFASgLQAACgJQCgFAAKASCAoAAAAAAAJQCgKAACAgAALAEggAAALAAIAACwCggIACwCgAlAQFgFAABAQAAFgEAAAAAAAAAAAAAABYBQSgIAAAAAAACwCgAAAAAAAAAAAkwCAsAoAICAoKAAAAAAAAAACAoEAoAAAAFAAAAWAKAlAAAAAWgIAAAAACUBQSgFAKAAAUAAAAAAAAABAQAAFgCQQAAAFgAEAABYBQQEABYBQAAZBYBQAAQEAABYBAAAAAAAAAAAAAAAWAUEAkEAAAAAABYBQAAAAAAAAAAASQQFgFAABkGgAAAI6QAAAAAAASk1BZAgFAAABYAkEAABYAAkEAABYABJjaAAAAAAAAABIJAEdIKCSAAAAAAAAADIAALAEggAAALAAIAACwCgAyACwCgAAyCwCgAAyAAACwCAAAAAAAAAAA0DIAALAKDIAALAAIDQJIEAoAAAAAAAAAAAAJIICwCgAAAAAAAAoIBAKACAoAAAAAALAAAAAFAKAAAAAAAAAgAALAEggAAHWB1gAAAkgAgLIAAAAAAAAJIEASCAAAAsAAgAALAKADINAAAAAyCwCgAAkggAALAIAAAADQMgAAAA0DIALAKAACSCAsAAgNAkgQCwCT0goAAAAAAAAAAAMgsAoAAAAAAAAKAAAAAAACwAABQFoBEbQWI2gUA3QKAsxsBIgCYAiAKAAkggAAAAJIAEAoIAAAAAAAACSAAAAAAAAAAACSCAAAAsAoAAJIEAoAAAAAAAAAJIEAoJIIAACwCAAAAA0DIALAFAKAoJQCgAAKACAUAABAaBAAUAAAAAAAAAAAAAEoCgAAAAAAAtIoBQAAAAAAAFAABYgGt0Fi2ewHJbgvnogG40mX6oNxocv1QXwOX6sgxOkyR+qDM6e7rigMzimOoEnHIM7sQBQGZtBJgGQWAKAUBAAKAAAgALAFAAQAAAACgFAKAgAAAAAAAAJQCgFAKAAoAAIACgAAAAAAAAnWBcBAKADIALAAIC0AoBQCgKCUAoACgAAAAgFAUAAAAEBAaAAAAAAAAAAAAAAAAAAAAAoBQCgFAKAoAAAAAFASoNUABQWI20gHPj0uW/ZFsg7DS8Fz30+bO30A7jScr337ZsB2+m5OuuiP6ufYDtMHJEz+oDzMfIkzSNwHN+H11Pog4svl7k6sVfkB1+q8v81tf6mnyA6bV8l57ImYxz7AdLq+XNTir/Vz7AdXm0GWzpsmKA8abLo6YBmbZpt2AxSsAzNoICgAlAAQAACgFAAAJBAAAAAAAASgFAKAAUAAAAAAAAAAAAAAAAAAAAAAABAWdoJQFABkAFgFBKAAoAAAAAAAAAAAAAAAAAAICA0AAAAAAAAAAAAAAAAAAABAKAABHSAAAABQCgLAAFAWkgsQDnw6bJk+jEg7XS8Ksik39PRQHfaHhNszEW21B7Pw3gn0a2/KDvsHD9Jgj+sm2z1zAOS/i/AtLsv1FtY6omoPGv565dxT9Le9QMfibwKyaRZMx2g5sPmhwPrskHY6XzF5dyTS6/dB3Oj5m5f1cRu6nHNeq7ZIOw8FwzV2Vs3L4nrtoDrOIcmaXLEzbZSvXQHpfHOQ5t3ptsmY9EA9F4tyvlwzNLZioPXdVw7Ph6YkHhXWzE7QccwDNNoE0BIgEAABAAAAAAJBAKAAAUAoAAAAACUBQSgAAAAFAAAAAKAUkAAAAAAAAAAAAAAAAEpIICwCgAAAAAAAAAAAAAAAAAAAAAAyDQAAAAAAAAAAAAAAAAALAJIEAoAAAAAAAKAACgoNWW3Tdu9oPO0+ijpydHUDtNJp5vpbjt2doPZ+D8v33UvvikUrMz0UB2mo4rwPhVnzr4uydkUnaDoeIeYue6uPSWRjtjokHrut5n4rqbvn6i6YnpiAdffrst30r5mZ7ZBx9/M9MgRqLq+gGo1E9Ug3bqckTXeiAc+LieeyY3csx6qwDu+Gc68Z0V0XYtTdSP1ZmoPfOAecutw7uPW2Rls6wfR+Dc3cr8fsiN+MWW7ZuXTEVn5QXjnl/o9fgnLpbqddY2wD5HzNyjquH5brM+KZt7aA9H1/CLYtm6zZPYDp8mK+yaXdQOKbQYmASdgJQAEkAAAEAAAkEBQSQWAAAQAAAAAAAEkAAAFBJAAAjpBY6QASQAAAAAAAAAI6ASAUAAE6wUEkCAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAUAACOkAAAAAAFgCQQAFApUDdBqIBvHim+6kQDstLpdykRbv3yD2PhPLWr1F1t19tLeuJ6gd7mx8G4Lirmutuyx0WQD1ji/Omq1ETi08ziwxspbskHreXU5MszN8zdM7doOKb5BnekF3pA3gN4DeBd8Fi8G7b56pBzW574pSegHnaPimfT3xfjyXWXRNYmJ6AfSOTvNzifDcluLU5Jz6eI+jcD6/o9Tyxztw6mHLZZqJikWXdNQfMudPLXifCb78lmGb8ddl0RsoD5rxDhld6Jspf1wDodRpb8d1JigPHutpIMTAMgkwCTFAAAAQEAAAABJBYAABN0AAAAAAAEkCAUAAAAAAEBQSQIBQAAASQAAAUEkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQaAAAAAAAAAAAAAgFAAAAAAAAABYAAAAABQa6gax4775iLQdro9FdddFmP5189IPfOXuT7bMVuo1UfR+dMz0Acxc26Xh+OdNw+IuyRsm+AfO9dxHU6vNdkz3zddPpB4UzXb1ggAAAAAAALWAKg3Eg3bfToB5GHUTbPSD2Pl7mbX8L1OPLpc02XY7omsTMA/RnIXmfwnmfS2cK49bb3l1u7Zlmk1n5QdT5j+T82W38Q4Xbv4bqzE29FPkB8L4vwfJhyX4c1tMls0ifSD1rU6a6y/duil0A8a6yYnoBibQYmJBJgCQQAAEkEAAAAAAABAAAAAAAAAAAAAAAAAAASQIBQAAAASQAAUEkACAUEAAAAgAAAAAAAAAAAAAAAAAAAAAAEoCgAAAAAUAoBQCgFAKAAQCgAAAAAAAAAsAAdoAALANRbFAatsmaR2g7XQaK+ZtttjevumltvXUH03lLlLDpcPi9XEVpWd7oB1nOfONttt2h0E0st2TfaD5vnzTkum6ZrXaDx52gAAAAAAAAAUAoCg1AN23A58eS6J6aA7zg/Fs+mz2X48k23W7ax1eoH6T8oPNXT6vDj4Txu6MmHJSyL7+qsUB5/mx5PYc+nu4lwqyL8V8b9t1np2g/NPGeDZcGS7Dltm3JZM1mYpOwHrWfDNt10T0x0A8a60HHMAzIMzGwEoBQAEoBQCgFAQAAAACgIAAAAAAAAAAAAAAABFQAKAAAAAAAAlAKAoFASQIBQSgFAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoCgAAAAAlAUAAAAAACgALQEBYAAgFoBQFiAaiJ9YPO0eCt0XzHR9GPSD6XyJyp390azURSz6XR0A8vn3mnHpcEcO0cxEUpfMdIPk2pz3ZL7rrpnaDxrrqzXoBkAAAAAAAAAAAAGomuwFiQclt20Hk4ckxNAezcB4pk02ay626Y3JiekH6z8mvMTBxnQW8F4jfF9+7SyZ6PVtB6x54eVG7F3FOH4/6uszfER0dYPzRxXh02XXTNu7dbMxdHZQHRZLKA4LrQcV0AyABQGaASAAADILQAEAAAoCAAAAAAAAAAAAAAAsSCAAAAAAAAAAAAAUAoAAACUAoCxAIAAAAAAAAACVBQAAAAKAUAAAAoBQCgAAFAKAoAAAAAAAAAFAAAAWgEglAUEoCwCgAoANWwDn0+K6++IjaD2/lPgN/EdbjstiZstmJun5QfVOYNZpuXeB9xjpblm2npB8O4xrsmq1N+W+a3Td+QHVX3AxPSCAAAAAAAAAAtAKAUAt2SC9YNWztBzWXbQdjpM11s1jsB9E5F5kz8P1+DNiv3LrZidnbAP2LwDiWi5t5YtvzRF85Ld3LZ2XU2SD8uecXIOTgPG811lkxp80zMTTZtB8b12ljHl3e3oB12SyayDgutBxyCAAlAJiQTqAABKAASCAAAAAlAAAKAUAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAACAAAAAAAAAAUAAAAAgFABJAAgFAABJAgFAAAAAAAAAABYABAAIBqQQAAAAFgFABd0G7Y6IB2vDdLF98RH0pnYD7jyDwDHw7hXi81sRMxvV/KD575hcwXa3X5LImdyyZiAehZZ3pmag4LgZAAAAAAAAAABQUAAAGrQclvUDysGSYugHsPCNXOPJZNaU2g/SnkPzf3Wr8BlyTOPPSLYmdkTOwH0jzZ5Qxcw8t6i62yLtTgtm626m2QfizmHheTT5suO+KX45mPYD1bNZET8gPFvtBwXQDIAAAMgAAAAkggAAAAAEggKABIIAAAAAAAAAAABAKCAAAsASCAAAAAAAAAAAgAAAAKACSABAKAACSBEVBaAAAAAAAAAAAAAAAAsASCAAAAsAAAAAAAAAAsAoALaCxG0HPhx70xaD3nkjg067imLHMTNttKxAPrvOOqt4Ny/bp7Ji2brKU+QH574nqbs2a6+7pmZoDq8k7QYBJBAAAAAAAAAAUFAgFA3QUGonoB5GKdsA7XQ5Ii6AfTfL/i1+l1+PJbNKTbPskH7F4Hr8fFODafUzNYy493LH+1Sk/kB+WPPXk+OE8wZ8uKyY0+bbZPr2g+Ia7BNuSY7Adbks2yDx7o20BiYBkAAEuBIBQASQAAAAAAASQQAAACQSAUACgJMUAABQASQWAAAAAAAAAASQAAAAAAAAKAlAKAsQC0gCgJtAoCUBYjaC0AoBQEmAIgFnoBnaCgoFAKAUAoBQCgFAAQAFoBQAACgFAKAUAABaAUBAWAKAUAoBQFABYjaCg3baDzuH4ouyxMxUH3Dye4F86dVfb1VrPqB13m/xab9bOGJ+bbFIoD49qLpun1A8S8GQQCgEggLQCgFAKAUAoBQCOkGqARAKAADVsA58fSDz9JO2Ae58s59zNbt64oD9ceT3FJ1fAJwXXb1+Kd6InqkHUf9wHLtvEOXLNfbZE34Z+d27AfkDjOm3M0zMdM7QdBltpdIPFvt21BxTUEoCUAkEkEABNoFAAAAKAUAAABKAUAoBQCYBKAtAKAASCUAoAABQCAAAAWgEggAAAAFAKAUAoBQCgFAJgCgFAUAAAAEoBQFBANoAKAAACUAoCgAAUAAAAoBugboFAAAKAUBQSgFAKAUBQNoFAKARALQCgFAKARsBY6QWgOWyK0B3PCMFb7Yp0zs+UH6Y5A4bboeWpzzH9nWs+oHxDzC1s6ji2aa1isg9DzTtmQcF0AwAABQEoCgAAQC0AoBQE3QUFiAWgIC0BY2A5rO0Hm6adsA9p4HdMZI+QH6a8i9fPiJwV2ZIp7IB9Q5w4dbxDljXaabazuTMesH4d5v0M6fW5sc9Nl8wD0zPZSZB4eSOkHDMAgMyCAlAKAUAAAmKyCboG6CgAk9IIAAAAACSBHSDQJtAAoCTAAFAKAAAAAUBQSQAAAKAUA2gbQANoAAAAN7sgbsgbsgbsgbsglPQC7sgbsgbsgbsgbsgbvoA3ZA3ZA3ZA3ZA3ZA3ZA3ZA3ZA3Z7AN2ewFp6ATdkDdkDdnsAi2ewF3ZAoCbsgbs9gG7PYBuyC0BAWgFPQBT0AUAoCU9AFPQC0nsAiJ7AWnoAp6AKegCnoAp6AIjaDVAcuOJrGwHtPK+l77W6ayn0r4gH6fy4I0PJl10bJnHSPYD8xc05Zya/LM9NZB6xljpBwTEglAKAUAoBQCgFAKARAAALQCgFAKARALQFBd3aDktgHmafpgHsvBp/rIn0wD9BeSupus4rpqfrXf0wD9B57O8xZcc7Yvtm2Y9MwD8Wea3Do0vMeuxRFIjJIPlmqt2zMA8DJbQHBMAwBNsyCUp0gkwCbsgbsgUAoBTaBQCgFAQAAAADYAABMAlAAXYABsBJoACgAkgUAoBQF2AbASQAKAUBdgIAAAAAAAADy/DX9kgeGu7AJ019OiQI01/ZIHhr+wDw14L4a4EnTXVA8Nf2ATpro6gPD3dgHhruwDw13YB4a7sA8Pd2AeGu7ATw93YC+Gu7AScEx0geHuBfD3x1Adzf2Anh7gO4kDuJA7i7qioHcX9gHcXgz4e7skDuLgO5u7AXuLuwE7i4DuLuyQXuZ7JAjF6AXuZ7AJxTHTAJ3XoA7uOwE7uQO6nsBYxyB3cgd3IHdT2Ad1IHdSCxi7YBe69ANW4p7AclmOYugHvPIGn73i+jt6fnwD9J854u45KpGydz8wPynx6P/qr5ntkHQZLI2g4Zsr0QCbgG56AO7nsAiyZmkdIG5IL3c9gHdz2Ad3PYB3c9gJ3c9gG5INbgJuAbgG6CxYC7gJubQb3YBqLYB5ent2wD2Lg8fPiI9APu/k5MxxXSf70A/SUxS6sdE3A/JPntpO65s1dYpN0yD4jrbaXSDrckQDimwGNwE3J7ATdA3QN2AN0EmynSBugbsAbgG7AG4CbgG4BuAbgG4CbgG4BuwBuwBNuwE3YA3QWLYAm0E3QN0F3QN2ASbYBYsBdwE3YA3ANwE3AN0DdA3QNwDcA3QN0DdA3YA3YA3YA3YA3YB9pnVcgz/wCno/myB3/IMx/5BT+LIJOTy/n/ACKfkyyCRd5fT08Du/m3A1E+XXXwO/5Mt1QX/wDXH+iZv50gbvlp/o2f+bHvA3PLOdnwfPH8SPeB3Hlj/pWoj+JHvAnT+WM/5Xqf5ke8E8L5XT08M1Uftx7wPBeVn+nar+Z+kDwPlZP9w1cft/pA+GeVfVpNZH7Vs/0yB8L8rP8AC6yPVNvvA+E+Vc/2Gt9tvvA+EeVf7jXe233gfBfKn6muj5bfeBHAvKi7q1/tt94LHAfKiemdfFPRbP5wJ5e8purJron0xb7wYnl3yrmdmbXey33gn3a8rZ6dRrY+S33gv3W8rP8AF677NvvBmeVfK+uzWa2n+7b7wT7p+WE/37WR67bZ/OB90PLGejiGrj9iAX7neWf+pav7Ee8D7leWn+qar7FoJPJPlrTZxfURP/TkGJ5I8ueri+f7Egn3H8vZ6OMZo9dkgfcXy/8A9ayx68c+4Go5A8vrunjt8fwp9wNfh55fz/6hu/lT7gajy65BnZ94roj/AKU+4Fu8teQqb0cyT8uKfcDjny45HmP/ALi9uO6P6IBJ8tuS56OY7flsv9wJ+GfJ3/5HZ9i/3Afhhyl/+SY/sX+4D8L+Vp6OZcVPTZf7gPws5Z6uZcPy23e4Enyr5b6uZcFfTbd7gT8KOAT0cyaf7N3uA/Cbgf8A+Sab2Xe4D8JODdXMek9l3uAjyj4X1cx6T/3o/MB+EHD56OYtJPyz7gPwe0PVzBo6+ufzwCfg5p+rmDRe2Aclvk7bE1jjmin9qAez8m+XUaDi2nyXcW0mSLZikW5LQfbuduC4tVypbhs1mC2ZtiKzfFOgH534l5U582e66OJ6O2s9eW33g6vJ5O6us04popr1d5b7wY/BvXdXEtH/ADLfeB+DXEp6OIaP+db7wI8mOLz0a7Rz6e+t94Nfgpxr/G6Of41vvA/BLj/+K0cx/wBa33gk+SfMHVqNJP8AGt94Mz5Jcxz0ZdJ/Nx+8GfwS5l6r9LP8XH7wT8E+aemumr6MuP3gT5K819mn+TJZ7wZnyV5rp9HBPo7yz3gz+CnN/wCrhwz/ABLPeB+CvN8dGnxz+3Z7wZnyY5widmltmfRfZ7wZu8medK/+Dj5LrPeBPk3zrHToax67Z/OCfg7znG3wE/Ju/mkE/CDnX/TrvaDP4R87f6beCx5Sc7f6Zl+QD8JudY6eF5fZMg5cfldznZMTPC83yWyDtuH+X3NeK+N/hueNv1ZB9k8p+XOLabiWnnPpsmG3HdE3TdbIPvf68TPRE7PaD81ee3AOMazmrNk0ulyZonbW2ybo6O2AfE9XyNzPkvm6OG5qf9O73A8OfL/mef8ALc/yY7vcDju5A5nj/LtR/Lu9wOOeQ+Zbenh2f+Xd7gZnkbmLr4fn/l3e4GZ5K5gj/L8/8ufcDP3O4/16DN/Ln3AzPKHHIn/wOb+XPuBLuUuNR/cs38ufcDM8r8Yjp0eb+XIMzyzxX/CZfsSDP3b4nHTpcv2JBmeXuJf4bL8tkgzPL+v69Nk+xIJ8C10f3fJ9iQJ4JrY/sb/sSDE8H1UdOG+v+7IHwjUx/ZXfLbIMzwnU1/5d0fsyCfCtT9Sfsgnw3N9SfsyCfDc/1ZAnhuaP1ZBPh+XrtkDwGTskDwOTsBPBZPSCToruuATwU9gHgbuwF8Dd2AeDu+qDPg7vqgeEujqA8Jd2AeDv6oBfCZOwE8Jd2SCeEu7JBY0t3YB4W7sAnS3U6AZ8Nf2AeFu+rIHhr+wDw1/YCTp746gTw9/YC+Gv7APD3dgHh7uwDw93YB4e7sB7d3mf99AG/qf31vtA39T+9tn5QO81XVlt9oL3mr/eW+0De1f17faB3mr+tb7QWMms+tb7QO81vbb7QO81vVNvtA7zXf7PtA77XdlvtA77XfVt9oHfa76kT8oEZ9dH6n5QPEa76gHitf8AUkDxOs+pIHi9ZH9lIEazW/upAnWaz91d8gHjdX+7uA8bqf3d3sBPH6j91d7AXx+frx3+wCeIZo/s7/YCfEsv7u72AvxPJ+7u9gJ8Un93+SQX4r/s/kkD4pX9WfkgD4pEdNt3sA+K2dl3sBfilnZIHxXH6fYB8UxgvxXF2QB8VxeiAT4rh+tAL8Uw/WgD4ph+tALHE8PbAL8TwdsAfEsHbEgvxLB2wB8Rw/WBfiOPtBY4hinpmAXx+HtA8fh6pBfH4+2AajX4vrA5cXFIx3RdZfSY6KSDsMvNmszYO5vzXTbGym9PvB108Qsunbdt9YMzrbPrflBPHWfXn2gnjY+vPtBqNd/tz7ZBfHz+8n2yB8Qu/e3fan3g1HEbv3t32p94L8Rv/e3fan3gfEb/AN/d9qfeCxxPNEbM9/27veC/FNR/iL/t3e8Fjiuor/4i+P27veDXxbVf4rJ9u73gvxjWf4rL9u73gfGNd/i8v27veDUcb4hHRrMsft3e8FjjvEo6Nbm+TJd7wat4/wAU6tbnif8AqT7wa+8PF/8AH5/5k+8GreY+NR/f8/8AMn3g195+ORNI4hqIjs7yfeDdvNHHo6OJaiP2594N2828wdHxLP8Abn3g8jFzfx+KT8Rz/akHsPAPM/j3DNTZl+IZKR012/0g+kY/+4fF4Cm9ZfrIikXdzPT9sHzHmPzG5i4lr7892vyW781pZG7ER6qyDobuceYdtOI5o29oJbzrzJHRxHNXt2Av365oj/McvsgGvv7zT/qOX2W+4Go5+5pj/MMn2bfcC/iDzVH9/u+W233AseYfNcf36fsWe4GvxE5qp/46Zn/cs9wL+I3Ncf3z/wByz3AseZPNEf3qz+VZ7gX8SuZ/8Rjn093Z7gWPMrmf99in14rPcC/iVzLG2cmGfROKz3Av4mcxV6cE/wAGz3A1HmXzD9XTfyLAWPMzj362LST/AALfeC/iXxqm3T6OY/6FvvBY8y+Lf4PRT68FvvBfxL4j18O0M/wY94JPmPq5+lw3Q/yY94M/iHnu/wAq4f8Ayf0gn3/umfncI0E/wf0gsc+4+vgmgn+FPvBY5903XwLQT/Dn3g39/tBSk8uaCf2Jj84J9+uE/rct6D2SCffbgs/S5a0P5QT748vT9LlnRfJUFjm7lif/AEvpJ7aTMA196+Up6eVtN8kyC/enkufpcq4PkukD7yciT9LlbF9qQT7w+X8/S5Xs/m/oA+O+XM9PLGz0Zf0Anxjy0n/0zdHbu5f/AIQT4n5Xz9LlzLHqy/8AwgeO8qp6eX88fxY/4QTxHlLd/kWp/mR/wgveeUU7J4Lqrf2o9wM3R5RT0cJ1fr3o9wOOcHlHP+Xay31THuA8H5Qz06TWxHrgD4d5PT04dZb7AbjhXkxPTOtt+SAajgfkrdG3U6yz0btQS7l3yWn6Ot1kfw6/ngGY5Z8nJn/zLVx68Vfzgk8p+T89HGNTHo7n9IH3N8obo2cdz2/wv0gz9x/Ki7o4/mt/hfpA+4PlbOyOY7o9N2Ok/wBILHl15ZXfR5oj5ccgT5aeXM/R5psj12TT+kHxzxWT6wL4q/6wEavJH6wL4zJH6wHjcv1gPHZ/rSB47P8AWBqNfnp9IF8fqPrAfENR9YD4jqO0F+J6ntBqOKZ/SB8Vz9s+0D4tqe2faDUcX1Edc+0F+M6j0+0D4zqO2faC/GtR2z7QWON5/T7QWOOZuuvtBfjmTtn2gfHcnbPtBr49f2yCxx67tkFjjsz+tILHHJjrBfjs9v5IBv45P1gWOOR2gvxmyev8kAscYsnqifXEAvxa3stBY4rj+rZ+QFjieP6lgHxHFM/8uwGvH4evHYB47B14rZ9UARq9PMbcMeyAXxOm/dQC9/pP3MAd9oZ6cQHe8Pn+yAroZ/svygtOHTO3HMQBucOnZuzHprIHdcNnt9sgsYOHTsrMfLIEabh8zMb07PTIL4LQ9V8+0CNBpOnvJp6wWOHabqvu9sA5LOE48lIsvvm7srAO0s5E4zdg76zDknH070bf6Adbl4LmxzNt/eW3RNJrAOC7hV3Xkvj5AYnhtJ26iY9dsgk6C7ot1NvrmKf0gRw/JMUt1Vu91dG0E+HaqdsZ7fVsBI4drOrLbILPD+IdV9oM+B4nH1Z+UDwfFI/VtBnw/FI/s4n1Ak4+Ix04vYDM+Pj+yuBmcutj+yuBPF6qOnHcCeOz9dkx7QT4hk7PygRxG/rgGviM9gLHEo64BqOIwC/EYqDUcRgG7eIxXpBv4l1RINRxOY6bp9oN/FJnpukGviNY6aQDinXR0b2wE8b2XbQTxl/1gPHXgRrb+oGvGXztnpA8df1gTrrqAnju2sg14+6eukAeP9ILGuntBY1s9vsBfHemQXx0Asa2AXxsSB4y2enaC+LtnZQDxVvZAHio7QXxUU6QXxNvbIE6m3tBY1NvaB4m3tBe/jtBfEekF76J6ZA77skDvvSB3oLGUF76e0Cc0z0yC97s6QTvZ+sDXez9afaB3npA730gRlnqkF76f0gnfT2yC976QXv57ZA7+QO/AnNUDvY64gDvI64j2AsZIp0UA7y3sA37Z2UgHzjfA3wO8A7yQXvJ7QO8uBd+4DfkDfkDfkDvAN+fSC95IJ3k+kFjJMgm9NekF35A7yQN/wBNAXfntqCd5dALGSZBd8DfBN6OmoJvwBvgm9IEX3A1F4E5Jrs6AWL7gN6/tBqJv7QWLrgarm6gaidTUHLb33XX5AL+/rG7F1eoGrZ1sdcg5rPGdd0A5rbssfSmActt+OJ+dWfUDOecU2z3Vt0ZOraDx8PjLZ/rJnd+QHJTV95W26Is7AeTE46bY29cgzdtmls0j1SDUUiNu38gJO2KRFfQCWW3x+rM/JIN91k6rJ/KDePFqq/Rv2dG7WAexcL4Vzlq8U26ONTdi7Kzug8PV8L47p8t1motusyR01n84OCMXEbZ25d313QDlxzrLfparFH+9tB5WLVYLYiNTqcWSI6Yizer/QBx7Xct6nhlmLh+km3iEfTz2xNtvyQD1y2zUzSbone9AOSzHqq9FwOaMWs6ouByWYtfHTMwDmxY9bF1brtgPK/rI6ZA3p+tEeuQXftjbN9vtAnNh68loOO7U6OPpX2A4r9bwyPpXWT8gOC/WcG6dyLp9AOv1Go4ddP9XZT0QDw778Nfm2zAOOboBIqDW2oNREg5LbJBZtnsBmYu9IJu5fSBHe16wWYvntkCLb+yQXdv9ILuZfSCxZk6ag1u5J/9oLbbkiemgNVvj9aAbi+eu6Ab73HEUpUHFddbWaRSAZmJnoAi2/qBqIyVBql4LS4D50AsbwNfOArcC7QXaCxUFpILESBSQa+f2gsbwNRFwLG8C0uBfnA1tApcCxFwL84CkgtJApILSQIiYBdoLX0Ab0Ab3oAis9QLMT2Am3sApPYDNuPJM13gctJ6wWkgTbIPnvc5Pqz7AO4yfVn2AvcZfqT7APD5fqSC+GzfUkDwuo+pINeD1P7uQXwep+pIL4LVfUAjQaqf1AX4dqvqA18O1XYB8N1f1QWOGaqeoFjhWqnqBqOE6qZBfg+pBfg2p7JBY4LqadAL8E1Eg1HA889oNRwLN6fYB8CyekGvgN3ZINRwG7sBr4F6AI4Ft/SDXwL0flBqOB2ej2gscGx+gGo4Rj7IBqOFYo7IBfheKNu9HsBqOHYY/Wt9gJGh037ywF8JpY/tLagvh9L15LfaBODSR/a2/JILNmip/wA2KesCI0H7yPaBTh8frwBv8Pj9cGozcP7aeoCdRw6J2zWOygMzquHR6fkkCNbw/wBPq3QXx2i6rbqf7sgRxHSW9Ft/2QX4ppuq2+f2Y/PAEcWw/Uu9lsfmAni2P6l/5AI4tHViye2AW3ik12Yb9u2Z3p/MDz9LzRxfBZNuC/LZHRSMl0bPaDxs/FtXmvm7LjvyXTtm66+6f6ZBwzr8u3+oj5agxOv1HVgsn1xUDx+tj6OK2PkgEniPEJjbbH5ATx/EqdMewGZ1vE/rx7ASdVxSZ/5uwCcvEZ/tZBiZ4hPTlkE7vWz05bgJwaqenJdIJ4XN133T6ASdFknpun2geA7ZmQX4d7AWOHej2A18PjskF+Hz2SCxw/ttBY0H+yDkt0H+yDls4dP1Qc1nDu20HNbwuZisW19QMzwu/o3egGLuHZIjokGJ0F/VFfSDF2iydcAkaO+ZpSag14HJ2SDPgruwF8DcB4G4DwM9gL4CeyAI0Xq9gNRop7APAyCxopgFjRyC+DnsA8HPYC+DgF8FPVbWAWNF2xQCNHESC+F29AL4T/ZBfCx2AeF9AEaWewGvCXdO6C+Fu+qC+Gu7AI0131QWdNd9UCNNd1xQF8JIHhZBrwt3YB4W7s2AeFmOkF8N6Y9oHhvTHtBfDTAHho7Y9oEaf0x7QXuLY6ZiPlBO6x9d0e0F7nB9ePaB3WP60Au5iiPpwCUw/XqCxbi6rvzgUxfWn2ARZinoi6fkkFph6qz8kgsW29Vt32ZBe7/+XfP7Mg13F/TGDJP7Mg9X723/AA0Ad7PVpooBGW/q00Ave5erTQCd9m/w8Ave6j9xAL3uo/cQBOXVdWGI9AEZdZP9lEfIB3ms/dx7AXf1v7uPYB3uv+rb7ATf4j2R7AXe4h/s+wCJ4hPXEeqAKcQ+tHsApxH60ewE3OI/X/IC91xCdu+B3Ov/AHnsAnBr/wB5IHh+IT/aTQDwmu/eSB4PW/vbgPA6uenJdUCNBquvJcC/D9RP693tA+G6j69/tBfheftv9oHwvN23e0D4TknprPrmQPhF3X/TIHweZ2e8D4NP/wDKg18Gu9IHwf0SBHBq9QLHBvRAL8F29AL8Fj6oLHB4+rALPBo+r+QCODx9X8gNRwe2Nu7+QF+EW9n5AX4Tb2R7APhHoBY4TFOgFjhNoLHCbewF+FWgscKs7Pyg3bwuyvR+UHl6LgsZ8sY7ab09EUmf6AezT5W8ZnR+Ks0+S6yla24r/wCmgPXtRy/lwzu5LJibZpNYmP6QeNfwzFHTMAzPD8XbHtgGfh+Ltj2wB4HDHXb7YBPB4O232gRosPbAL4LD2wC+Cw9oLGjwxsqC+DxekCNFj9PsBrwVnZP2Z9wL4Kz6s/Zn3AsaGPqXfYn3A1Gg/wDl3/Yu9wLHDb+rDkn9i73A5I4Xnno0+X+Xd7gX4PqZ/u+X+Xf7gbt4Nq56NLln+Hd7gc2PgOuu6NHm9fd3+4HmYOV+J3z83RZpr/8ALv8AcDvOG+X3HNRfbbbo8tsz22XW/mB9E5d8g9dqLIz66cOLF0xZdN298uwHt/4G8uxp5sjFinUU+nM3Ur7AfIud/LPifCeIX4tNoLs1u2k4bLp/LQHqOTkzmSZ2cI1UxTpnHMgx9x+Z/wBXhGp9P9XMf0ARyNzTM/8AlGomezcn84NfcLmqf8nzx+wC/cDm2enhGaPaCx5ec4f6Vlp6Qajy65un/K7/AGg3HltzjP8Alsx+1HvBqPLPnCf8v29k32+8Go8sOcJ6dDbH8S33gseVvN0/3XDH8W33g3HlZzZ0Th09vonLZ7wa/CzmuOm3TRXtzWe8Gvwp5onpnR2+vNj94LHlRzFEVnLoo9eaz3gseVXH5/vOgj+Nj94LPlZxqPpa/QW+rLj94J+F/EY+lxTh8evLZX+kCPLPVx/nHD7e3+tt/MB+HF8fS49w+P4sUBfw8xR9LmLQR6rwPw+0MfS5l0MeqYA+4fCo+lzVoo/a/QCTyPwGPpc2aOPln3Afcvlf9bm7S+yZ/pgE+5/J0fS5v0/ppbPuA+6vI0dPNuCfVZPuBPu35fR9Lm6yf2P0AfAPLaPpc119Vk+4E+DeV9v0uaL5/wB2yQJ4b5UW9PMue70W2SCTpPKKOnmDVT6rJBO68nrfpcb1k+q2QSvkzbtnimuv/Zt94HiPJSOnW6+fVbb7wPHeSdvTqOIXeqkf0SCfFvJKP1uIXfLHvA+PeSNv9jr7v2o94H3k8kLf7lrrv2/0gfezyTt+jwrWXeu+PeB98/Ji2f8AyPU3emcke8Ennvyet6OXc138Wn9EgfiJ5S2/R5YyT68wH4l+Vtv0eVLp9eYGvxU8srfo8oWz68sgk+bnl3b9Dk7HHryzIMz5xckR9Hk/Tz6Zvr/SDM+dHKkRS3lHSU6omQT8beAR9DlPQR64r+YCfPThlv0OVeH+z9AH4+Yo+hy1w639j9AJP/cDmjZby9w2PTOK2Z9tAZn/ALg+I/2fBOGWdv8AVRH9EAz/AP8AQ3Hon5vCuG2+rF+gHDHlnzTMVjh0/Ldb7wX8NeaafO0ER6N633gn4b8yT06K2PXktgFjy25l6tHZH8W0Gvw35jjp0mOJ/wCraBHlzzD14MUfxbQI8ueO9eHBH8a0D8OuNfU08fxbQX8O+NR0eHj+LaC/h3xjpm/S+qctoL+HnFOvLo4/jQBHl7xGenU6OP49vuBqPL7XdE6zQx/Hj3Afh9quviGgj0d9HuBfuBm6+J8Pt9eaPcBHIF3Xxbh0envv0A19wrY6eM8O/nfoBJ5GxR08c4d/M/QDP3J0sTt49w6P4n6AajkvQU28f4fH7dfcDF3KHC7ds8waD2z7wY+63B46eYdD7Z94H3Z4HH0uYdF8lfeC/drl6PpcyaKPVX3gRy7yx18zaSI9U+8G7eX+Uo6eZ9LHyTP5wbjgHJcdPNOnj9kEngXI3XzVh+Sz9IM/BuQo6eaMXyY5/wCIF+FeX8dPM9tPRin3gk8N8uYn/wC5/wD+qfeCeC8to6eZbv2cP6QZ8P5ZxO3mPJPqw/pBJs8sbf8A1Bln+D+kGf8A9YR/nuaf4X6QXvfK6P8AO9RPqxxQE8V5Wf6xqZ/YgCdZ5V9fFNVd6rIBPiPlTGzx+rn9mAPinlRH971k/JAHxbymj+31k/JAHxrynjbv62fYCTx7ym+rrbqeqASeYvKaNnc62fXMR+YD7z+U0bPC6yf249wH3q8p7f7lq5/iR/wgfezypjb8N1c/xI9wJPOXlVHRwvV/zI/4QPvt5V/6RqZ9eWn5gI568ronZwTUT/Fr+YF+/vlpH0eAZp9d4H4geW0fR5dv+XJILb5heXldnLl1f+pIO34L5jck49Ziuwcvxjvi6Ns3zOwH6l5L4/oeOcvYdTpLIx4YiLbsVImPUD0fzP4Nwrh1/jZ4Lh1GLJFaxMxt+QHxrX848v6bJdbPLWCadt0g6zJ5lcuWdHLGn+WZB493mpy9HRyvpa/LP5wZnza4NbE05Y0ceuJn84OP8YOFxOzlnRfLbPvAnzg0P6vLehj9mfeDP4yaeOjl/QfYn3gk+dE9XAtDH7AJ+NWe3ZHBdDH7ESCT52a3q4RoY9WOJBn8bOJxtjhmij+HAH43cYno4foo/hQCfjfzBPRpdHH8G0D8cOZY6MGkj+DaBHnjzV1Y9L8mG0Go88+b46I00fwLAajz1506r9PH8CwF/G/ne7+2wx6sNoObH5089Xf3rHHqxY/+EHmafzb56y7PGRt7MeP/AIQexcI8wud9RfbHj9tY/s7PcD7ByFqua+IZLMmp1V12ONt1LbfcD6XSLppdtt65nZt+QHjcR12PQcPzazNMRZisunb2x0A/KHPXmxzPk4nqL9NxHJjxxdNIiYiOn1A9Gz+bXPVbv/8AXzRFeq6PcDwrvNbne/8AzjUTTsu/9gOG7zP51n6XF9RT/eBxX+ZXOM/5vqPtyDhnzF5vn/N9T9uQYnzA5unp4tqf5kg47ue+aZnbxXVT6skgzfzvzRMbeKan5clwOOecuY56eJ6j+bcDM838fnp4lqP5lwMTzTxyf7/n/m3Az95uMT067PM9ve3Az94uLT/fM8/xLgZnj3Ep/vWaf4l0/ngGZ41r56dRm+3d7wZu4xrp/vGX7cgzPFNXPTmyfau94MzxLUdHfX/akEjiGo/e3/akE8fk677vtSCTr8n15+1IJOsvn9b8sgk63JSm9IJ4u/rmZA8V6ZBJ1M06QTxV3aC+KkDxVwHibqgTqbgTxN3aB4qe2QPEX9oJOov7QPEX9oHiL+0Dv7+0DxE9oHiJ7QJ1F3aCd/d2gRnup0geIu7QO/u7QTvru0Dvru0Dvp7agd9IHfT9YDvru0EnNd2gd9d2gd7d2g7b728d/wAfn/mXe8EnmjjM9Otzfbu94MzzLxf/ABmX7d3vBmeZOLz06vL9u73gk8wcTn+9Zftz7wZnjvEZ6dTln9ufeCTxviE9OoyT+3PvBmeNa/o7/JT/AHpBn4vrf31/2pBPi2t/e3/akE+J6qZ25LvbINTxPUT033T8oMzxLU/Xup65BPiGef17vbIJ4/N9afaB4/N2z7QPHZe2QSdbknpA8Zk6ASdVdIJ4i4DxEgeIuA8RIHiJA8RIHiJA8TcB4i4E7+4Cc9wJ4i4Dv7gO/uA7+4Dv7gO/kDxE9oHf3Ad/IHf3Ad/IJOaZA764Dv7u2QO+u7ZA764DvpAjLIL3s9AHeSDfebdsg5ceTaDs+HamceWJiaA/SH/b9z5bps88N1N3zMsxFtZ2bZB+geN8I03F+HZdDm+jfEzju9fQD8w+YnJOo4drstl+Om2ZrHRug+U8R0F9mSYmNgOkz4d2ZB4l9vZ8oOKekGZ6QSb5BN70gb89oG96QN4E35Bd6QWLru2QarIN2VBy22zM9APJw45ntB2Wl0szMUB7Pwnhd190enoB9X5G5Qy6jNji22szSuzYD79wbhOHhujsw2U36fOmgPPiOqPYD5N5486WaLQXcJ0+T+svj59O30g/KPG9bOW+6ZmszO0HrmfLtmQeNffUHHvgzN/pBN+QSbgZ3oA3wN8E357QN4DfA3wN8E3oBd+QTeA3wN8DfkE3wXfkE3gSb/SBEwC70Am+Bvgb4G+Bvgb4G+BvgbwG8Bvgb4G8BvAbwG8BvUBO8gDekDeA3gXeA3wTvIA3gKwBWAKgb89oG/6QTfA3gXfBN4DfA3gIuA3wN+QN+QN+QN6QN4DfA35A35A35A35A3gN6QN6QN6QN6QN6QN6QN6QN6QN+QN4DeA3gN4DeA3gN4DeA3gKgVAqC1A3gN4DeA3gN4Fi4F3gK+kFidoObHdtB5eC+YmsA9t5W45n0OtxZ8V1LrbomabOiQfs/wAs+c9PzHwLHG/E6rFbEXRXbNAdhznylpePcPu+ZHi7OieivrB+ZeceTtRotVkx32TbdbWlYB874hwy6yZjdkHS59JfbMxMeoHh5MNAcF1tAccwDNJApILFsgbsgUkGotkGoxyDktxyDmswyDy8OmmabAdnpdBdMx80HsXCuDXZL7fmz7AfTeT+TsuozY4iytfQD75yzy7g4VpLPmR30xG3s2A7uZiImQdTzTzBpuA8Hza7PdFt0RMYrZ6ZmmyQfj7n/mzUcV4nqNRffN2/fM2+oHzrW55urMg6nLdWZBwXTAOObgSoM19ILM7AZqCTIJUCoFQKgVAqBUCoFQSZAqBUCoFQKgVAmQSoGwDYBsAmgFQKgVAqBUCoFQKgVAqCVAqBUCsgu8BvAVAqBUCoFQKyCVkFrIMb0gtZArIFZArIFZArIFQKyBWQKgVAqBvAbwFZA3gKgVBYmQJmQSoFQKgVAqBUFAABKgVAqCgUABKgVBQUEqBUCoLUAFoBQCgALUCoLEg5LJ2g8nFfNQdhpM02X2zXrB9W8rfMDPwLimK6L5jFN1u9FeoH6/4DxzRca4fj1ulyRdN1kb8R1TQHVc4cl6Tj2luui2LdZFtYnquB+dub+RNXo82Sy/FNsxM0rsB874hwXJjm6tu2OmAdFqNBNs9APAy6W7sB41+mp1A4+4nsBO6kCMc9gL3U9gLGGQbtxT2A5bdPM9QOfFpJnqB5uDQ3TT5oO30nCrrqfNB7Rwjl3JkuiItB9N5S5Cz6i/HE456YrsB9p4By1pOFYbY3InLMVm6nR6wdzWLq3x0T0dvsBw63WYNHpcmo1F0WYrLZmZnYD8x+cXmVfxnW3YNPfPhcdbbYrs/ID4jxHW3ZL7pmdgOk1GSQeHfdM7QcUyDE7QZBAJkEBJkCoFAAKglQKgbwG8BUEqAAAAACVAqBAKCVBagkgAAAAAAAAAAVAqBUCoAAAJUCoKABUCoJWoJUEqBUFiQWoFQKgVgCsAVgCoFQKgkyBEwC9QIC1AqBUCoFQKgVAqBWAASoFQKgsAAAlQWoG0AFgCoFQUEBQQDaC1AqCxIKAADUA1bO0HLZdQHlYsk1gHbcO1nd3xMbJ7QfbvKLzU1PBtTjwajJN2mu2bt07AfqHhfFdHxPQ49Xpb4ux3bYi2dtsg8bj3LfDeNaeceoxx3nVkptB8W508rNVo8mS+zFv4ds23RFf6AfK+K8rZcUzvY6fID1vVcFutmY3Zr6gdbm4ZdH6s7AeJfoJ7JBw3aKY2Az4OYAjRyDcaOQc9mhmeqQeVh4ddNNkg7DTcKuunZbIO74dwDJfT5vtB7nwLkzLmm35n5AfV+U/LeIi3Jnsi22nTIPpOg4bpNBgjFp7Itnru6wdbzjzdwzlfhF/ENZ86bp3cGCPpZLwfAuO/8AcLzfmzX+FyYtJjiu7GOK3U6qyD1LjPnVzlxLS36XV62cmG76UUpP5AfOuJcUyZbpms0mszUHSajUVmag6/LkmQcN1wOOZBmu0EmQSoIABIIC1BnaCgVBJAAAAABKgVAqCgkggKBUEBQJBAKgAAAAAAAAAAAAAAVAkEBagVAqBIJAIAABAKAACSABAKAACSADXUCAAAAAAAAAkg11AgAALAAEggALAAAAANAkgQCgAAAQDQAANARIN2yDmx5JqDy8GeYmAdvw/iF2K62LpmsbYmAfZ/K/zZ1fBc2PFnyTfgmYiYma0gH6c4BzJwzjuktzaTNF90xW+yOoHZ5MdmS2bL7YyWT+pMA9Q5h8t+FcS38mmtjFln9WY2A+Wcx+VWv0kzTDNK/St6JgHonEeTNTivmO6n2A6XUcs5ba/wBXNQeBk5dyVrNntBwzwDJH6tAW3gGSn0QctnL2Sf1QebpuWc10/wDLkHbaLlDNfMf1cg9p4TyDqL77aYpmoPf+X/LDJMW3ZMVI7ZB9D4Tytw7h0RW22++3bE06JB3PzYiLbYiI9AEbZB+cf+43mPJfzHj4bE0x6HFSLa7Juvjer+UHwPWa2YumIurHR7OkHW5NZM12g8bNmmba1B4eXJMg8bJIMSDAM9YJIIACSAAAACSAAAAAACSCAAA0CSCAAAAAASCAoAAAAAAAEgQAAACSAAAAAAAACAAAAAoIAAAACggAAEAoAJIAEAs9QAAAAAAAAALAEggAALAAAAAAALAKAAABALAKACwDUSDdtwObHftgHl4csRIO00XEL7Ltl1JiQfSOSPMnifBs9t2PL8yKfNB+k+S/NnhHHMGLHqL4x6maRN1Qe+2X4r7N7HfF9s9F8TUFvttvimS3fj0g6jXcqcE1293mDcuu67Aeua7yp4bkmZw3x6pB0ep8n75rNm7dAOuyeUWrj+zr6oqDNvlHq/3U+ygPL0/lJm/Wx0B3Gj8p7MdO9m2PUDvtDyBwnTxG/wDOmOoHe6XhPD9LEdzhisdcg8yZmeyI7IBAXbTbHzOua0B6nzX5jcE5fw3x3tuXPFaUmOkH5O8yuap4/wAczcQnZdlrMx6tn5gfPNVlmbprNAeLZjy5r922Pm9N0+gGNXltie7s2W27AeFfeDimQZABmQZAABJBJAgFBAAAAAAASQQAAAACQQAAAAAAAAAAACAUEBQJAgCQQAAAAAAAAAAEAAAAAqAAAAABUAAAACoKCSABAKAACAVBrqBIAAAAAAAAABYAAAAABYBQAAAIBQagEBQUFiQclt1JBzWZAeRizT0z0yDsdPrL7JiYupQHsXB+Y9Vpcll+LLNl1vpB9e5J88OJ8P3MWpyzfj6Jm7aD7Zy55pcu8YxWxOaMWWaV20is9oPb8Oo0+ey27DlsyRPRuyDfRGydvqBegDentArIAJQCu0F6OuPVTaBffZZZM5LotiNtbppQHrPHfMHlzhFl036m3LksitLZ2V9IPjvOvntqtTF+HQX7mKJ/V2VB8Y47zRrNdluyZ803127ZqD1fVa26/bWoPH8Vhtsmb8dt89twPD1PEc11u5ZMWY/q27Adfdf0xXZ0yDF0gyCAkTIMyCAASDNZAAAqAAACSBUCoFQQAAEqCglQAAAAAAAAAAAAAAKgAVAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAKgAAAVBQASQAWJAAAAAAAAAABYAAAAABQKgoAJMgsSBUGomgALUCAWAUG7ZByW3zHWDnx5p7ekHl4dTuyDsdNxK+yYmLvkB3vDuY8+CYusyzZPomYB71wDza47w/c3c902W9VZB9I4H/3CZpiLdZbvRFImoPdOH+dnLepiO9jcr00n3g7zB5k8rZorGfd9dJ/oB5tnO3LN8VjVxHrBZ5z5YiNuttB4mfzE5WwxMzqYu9UwDptd5zcr6WsWTvzHbPuB6fxr/uEw2W3W6KyLZ7YrIPnPMPnNxvX3T/XXWxPXWY/oB6DxTmrV6q6b8uW6+6eisg6LU8TvvrWaV7Adfm1Uz1g8W/UTMyDgyZZmOkHjX3TM7ZBx3AxIAFdgM1oDMglQUEmeoEAAAABKgVAqCAAAVAqCVABaggAAAAAAAAAAAAAAAAAAHUAAAACTIESCgAAASCVAAAAAAAAAAAAAAAAAAAAAAAqBUAAAFqAAAAAAAAACwABUAAAAAFqBUDpAgFAqDVQAWJBYkCoLEgsTIOSLqA5LckxIOezNNAeRZqpjrB5mLiF0UmJpT0g83FxfJE/SmgPMxcdvt2bfaDzMPMuotj5uS+PVcDybebNdHRnv+1ILdzbrp/vF/wBoHj5eZ9VdXezXXV7ZB4eXjmW6PpT7QeJk4pku66R1g8TLrr7o+kDxcmqmY6ZBwX6gHj35pkHFdkkGJumQYmQYmQSoJIMyCAVBAQAAAAEqBUAEAAAABJAAAAAAAAAAAAAAAAAAAAAAAA6gAAAKgkgQCgAAVBJAgAAAAAAAAAAAAAAACAI6QAAAAAAAAAAAUAAAAAAAACAUEBQAAAAAAWAUAAFBKyCxINQCgsSC2gtdoNRMg3F8g3F3pByW5KA3bmoDkt1Mg5I1XpBqNX/tAvi5+sDPi5nrBmdT6QZnPHaDiuz9gOOc1Z6QYuyyDjm+QTekEr2glQYuBmsgVkAEkEABAAAAQAEAAAAAABJAAAAAAAAAAAAAAAAAAAAAAAAAAABJAAgFAABJAoBHSAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAkg1HQCAAAsAAAAVAqCwCgAAAQCxILUCoLEg1Eg1UFiQbiQa3gXeA7ygHegRlBe9A70E70E7wGZvBmbgKgzUCoEzUEqDMyDIAJMgkyBUAAAEkEAAqAAAAAACAAAAAAAAAAAAAAAAAAkgQCgAAAAkgAAoJIAAAAALFs3RWOoE29YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCSABAKCAsAAAAAAAsAAAgKAACwCgAAAQCgoANROwFi4Fi4Fi4Gt4E3gN4Fi4DeA3gN4E3gK1ABJBAAKgm8BNwJWAZBAKwCTIAAAICAAAAAAAAAgAAAAAAAJIAEAoAAJIAAAKCSAAACgAkgAAAoJIAAAAAAAAAIBAKAAAAAAAAAAAAB1gAAAAAlQUAAAAACoAAAFQAAWAAAAAAAKgVAAqCwAAC1BQAAIBQKgoALAFQWoLUErILUFiQKgVBaglQWJAqCVAqCVBNgE0BJkEqCVBKgAAgFQUEBAAAAAAAAAQAAAAEqCgAkgAAVAqCgkgAAAoJIAAAFQKgAAAAVAAAAAAABJABQSgAKAAAAAAAAAAAAAAAAACAgNAAAAAAAAAAAAAQCglQUAAAAAAAFgAAAFqBUAFAqCgoFQStQKgQCgtQAAKgAu8BUCoG8CSBUEAqB0gkggFQAAQCoIC1BAAAAKgAVAABJkAAAACQQFABJAAkAACoAAAAFQAAAAAAAAAAAASoFQUACASoHSBQCoFQKgVAqCglQKgVABQAAAAAAAAAAQEBoAAAAAAAAAAAACAJABQAAAAAAAWAAAAAAWAKgtQWoJUAEioANRMAVgFBQQAEqCglQWAJAAABJ6QSoAAAAIBIIAAAAABIIC1BAWAKgk9IAAAAIAC1AqCSABIAAAIACgAAAAAAAAAAAAAAkgQCglQInYCAsAAgAAAANAyAACwCgAAgKAAAAAACAgNAAAAAAAAAAAAAAAAoAAAAAAALAAAAAAAAANAAzM7QWJBQAAIkFmQSoLUACsgAVAqBUEqBUAAAAAAEkEAABQQAACQQAAAAAAAAEkAAAAAAAAAAEkCAUAAAAAAAAAAAAAAEkCAAQAAAFgEAAAABoGQAAWAUAGQAWAUAAAAAEBAaAAABAW0AAAAAAAAAAAFABJAgFAAABYAAAAAAkEBQAAAAAAaAAAA3gN6eroBQSQAAAAAAAAAQEAAAA3gAAAJBAAAAAAAASQAAAAAAIBOsFAAAAAAAAAAAAABOsFkCAS4FABJAgAEAAABYBAAAAAAAAAWAUAGQAAWAUAEkEBYABAaAAAAAAAAAAAAAAAAAAAAgFAAABYAkEAAAAAABQAAAAAAUAEABoAAAAAAEkAAAAGQWAAJBAAUCQQCAAAAAAAAASQAAAAASQIAkEAAABYBQAASQIBQAZABYBQAAZAABYABAAAAWAQAAAAAAAAAFqCgyAACwCgAkggLAAIDQJUCAUACNoAAAAAAAAAAAAAAEAoAAAAFQAAAAAAAWoFQIAkCoAAEyBAAALUCoFQKgVAqBUEAAAABAKgsASCAAvUCVAAAAAABJAmQKgVAAAABKgVAAgCQQAAAFgFBKgVBAWAUEBAAWAUAEnYCAAAsAAgAAALAIAAAAAAAAAAC1BAAAWAUAEkEBQKggNAkgAVAqCxsAAAAAAAAAAABKgAoAFQKgoFQAAAAAAAAAAAAKgAtQKggLAAAAAAAAAAAAAFQKggALAEggAAAAAAAJUCoEgAAAAAAgIAACwBIIAAACwACAAAsAoICAAsAoAJIIAACwCgyAAACwCAAAAAAAAAAAAAAAsAoJUAEAAABoEkEABaAoAAAAAAAAAAAMgsAoAAALUEkCAUAAAAAAAAAAAAAAAFgACoAFQAAAKgAAASCAAAAsAAgAAAAAFQASQAAAAAAAAQEAABYAkEAAABYABAAAWAUEBAAWAUAEBAAAWAUEBAAAWAQAAAAAAAAAAAAAAFgFBkAAAAAGgSQQFgFAAAAAAAAAAAABkFgFAAAAAAgFAAAAAAAAABYAkEAAABYAkEBQQFgACQQFAAAkEAAAAAAAAAAAkEBQSQAAAAAAAAQEAABYAkEAAABYABAAAWAUEBAAWAUAAGQAAWAAQAAAFgEAAAAAAAAAAAAAAAAAAAAAAAAAAAABQUEkCAUAAAAAAGQWAUAAAAAAAAAACAUAEBQAAAAAAAAAAAAWAAJBAAAWAASAAAAAAAAAASQAAAAAAQEABYBQAQEAABYAkEAAABYABAAAWAUEBAAAWAJBAAAAWAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBQSQIBQAAAAAZABYBQSQQAGgAAAI6QAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAEkCAWQQAAAAAAAEkCAUEBAAWAUAEBAAAWAJBAAAAWAAQAAFgFBAQAAAAAAAFgFBAQAAAFgEAAAAAAAAAAAAAAAAAAAAAAAAABQKAgKBMgAQCgAAAAgIACwBIHSCAAoKAAAAAAAAABE7AKgVAqBUFAAAAAAAAAAAAA6wJAABKgVAAAqAAAAAAAACSBAKCAgALAKACAgAALAEggAAALAAIAACgVAqCAAAAAAAAsASBUEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQKggLUCQQFgFAABKgVAqCAAsASBAIACgoAAAAAAAAAEdAAAAAFQKgVBaglQKgoAFQSoLUAACm0CoAJUAAAAAAAAAAAAEqABAKCAgALAKACAgAALAEggAAALAFQQAAAAAAAAAAAAAFgCQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAFABJBAAAAWAJBAAAUFAAAAAAAABAAUAAAAAAAAAFqBUEkACAUACAASQAAAI6QJAABAAUAAEBAAWAUEBAAWAUAEBAAAWAJBAAAAAAAAAAAAapAICAAAAAAsASCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ACSCAAAAAAAAAoKAACSCgAAAgIACwCgAAAAAAAAkAdYLIAAAAAAAAAAAAAAMgAsAoJIIAACwCggIACwCgAgIAACwBIIAAAAAAAAAAADQMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoEgQBIICwCgAAgIACwCgAgIACwCgAAAAAAAAAAAAgICgoAAAMgAsAoJIIAACwCggIACwCgAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgSCAoICwCgAAgIACwCgAgIACwCgAAlQUAAEAqBUAFABAQFqACgAAyACwCgkggAAALUCoIACwCgAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC1ABAAAWJoCgAAgIACwCgAgIACwCgAAyCgoAJIIACwCgAgIC0ABQAAZABYAAqCAAAAAAAAtQKgVAqCAAAAAAAAAAAAAAAAAtAQAAAAAAAAAAAAAA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", - "fileName": "TitanBusy_Cassini_1080.jpg", - "fileSize": "23.4 kB" - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "NASA13": [ - { - "startTime": 1676891421782, - "executionTime": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "date": "2019-05-05", - "explanation": "This is not a solar eclipse. Pictured here is a busy vista of moons and rings taken at Saturn. The large circular object in the center of the image is Titan, the largest moon of Saturn and one of the most intriguing objects in the entire Solar System. The dark spot in the center is the main solid part of the moon. The bright surrounding ring is atmospheric haze above Titan, gas that is scattering sunlight to a camera operating onboard the robotic Cassini spacecraft. Cutting horizontally across the image are the rings of Saturn, seen nearly edge on. At the lower right of Titan is Enceladus, a small moon of Saturn. Since the image was taken pointing nearly at the Sun, the surfaces of Titan and Enceladus appear in silhouette, and the rings of Saturn appear similar to a photographic negative. Now if you look really really closely at Enceladus, you can see a hint of icy jets shooting out toward the bottom of the image. It is these jets that inspired future proposals to land on Enceladus, burrow into the ice, and search for signs of extraterrestrial life.", - "hdurl": "https://apod.nasa.gov/apod/image/1905/TitanBusy_Cassini_1080.jpg", - "media_type": "image", - "service_version": "v1", - "title": "Saturn, Titan, Rings, and Haze", - "url": "https://apod.nasa.gov/apod/image/1905/TitanBusy_Cassini_1080.jpg" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "NASA1": [ - { - "startTime": 1676891421783, - "executionTime": 1052, - "source": [ - { - "previousNode": "NASA" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "links": { - "object": true - }, - "id": "2000433", - "neo_reference_id": "2000433", - "name": "433 Eros (A898 PA)", - "name_limited": "Eros", - "designation": "433", - "nasa_jpl_url": "http://ssd.jpl.nasa.gov/sbdb.cgi?sstr=2000433", - "absolute_magnitude_h": 10.31, - "estimated_diameter": { - "object": true - }, - "is_potentially_hazardous_asteroid": false, - "orbital_data": { - "object": true - }, - "is_sentry_object": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "NASA2": [ - { - "startTime": 1676891422835, - "executionTime": 1487, - "source": [ - { - "previousNode": "NASA1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "links": { - "object": true - }, - "id": "3404768", - "neo_reference_id": "3404768", - "name": "(2008 EE5)", - "nasa_jpl_url": "http://ssd.jpl.nasa.gov/sbdb.cgi?sstr=3404768", - "absolute_magnitude_h": 19.71, - "estimated_diameter": { - "object": true - }, - "is_potentially_hazardous_asteroid": true, - "close_approach_data": [ - "json array" - ], - "is_sentry_object": false - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "links": { - "object": true - }, - "id": "3775203", - "neo_reference_id": "3775203", - "name": "(2017 LW)", - "nasa_jpl_url": "http://ssd.jpl.nasa.gov/sbdb.cgi?sstr=3775203", - "absolute_magnitude_h": 25.4, - "estimated_diameter": { - "object": true - }, - "is_potentially_hazardous_asteroid": false, - "close_approach_data": [ - "json array" - ], - "is_sentry_object": false - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "links": { - "object": true - }, - "id": "3776070", - "neo_reference_id": "3776070", - "name": "(2017 MB4)", - "nasa_jpl_url": "http://ssd.jpl.nasa.gov/sbdb.cgi?sstr=3776070", - "absolute_magnitude_h": 22.5, - "estimated_diameter": { - "object": true - }, - "is_potentially_hazardous_asteroid": false, - "close_approach_data": [ - "json array" - ], - "is_sentry_object": false - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "links": { - "object": true - }, - "id": "3781896", - "neo_reference_id": "3781896", - "name": "(2017 SN16)", - "nasa_jpl_url": "http://ssd.jpl.nasa.gov/sbdb.cgi?sstr=3781896", - "absolute_magnitude_h": 23.3, - "estimated_diameter": { - "object": true - }, - "is_potentially_hazardous_asteroid": false, - "close_approach_data": [ - "json array" - ], - "is_sentry_object": false - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "links": { - "object": true - }, - "id": "3827141", - "neo_reference_id": "3827141", - "name": "(2018 QS1)", - "nasa_jpl_url": "http://ssd.jpl.nasa.gov/sbdb.cgi?sstr=3827141", - "absolute_magnitude_h": 27.6, - "estimated_diameter": { - "object": true - }, - "is_potentially_hazardous_asteroid": false, - "close_approach_data": [ - "json array" - ], - "is_sentry_object": false - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "links": { - "object": true - }, - "id": "3843318", - "neo_reference_id": "3843318", - "name": "(2019 NC7)", - "nasa_jpl_url": "http://ssd.jpl.nasa.gov/sbdb.cgi?sstr=3843318", - "absolute_magnitude_h": 22.12, - "estimated_diameter": { - "object": true - }, - "is_potentially_hazardous_asteroid": false, - "close_approach_data": [ - "json array" - ], - "is_sentry_object": false - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "links": { - "object": true - }, - "id": "54049890", - "neo_reference_id": "54049890", - "name": "(2020 PC)", - "nasa_jpl_url": "http://ssd.jpl.nasa.gov/sbdb.cgi?sstr=54049890", - "absolute_magnitude_h": 28, - "estimated_diameter": { - "object": true - }, - "is_potentially_hazardous_asteroid": false, - "close_approach_data": [ - "json array" - ], - "is_sentry_object": false - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "links": { - "object": true - }, - "id": "54050981", - "neo_reference_id": "54050981", - "name": "(2020 PC1)", - "nasa_jpl_url": "http://ssd.jpl.nasa.gov/sbdb.cgi?sstr=54050981", - "absolute_magnitude_h": 25.3, - "estimated_diameter": { - "object": true - }, - "is_potentially_hazardous_asteroid": false, - "close_approach_data": [ - "json array" - ], - "is_sentry_object": false - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "links": { - "object": true - }, - "id": "54051038", - "neo_reference_id": "54051038", - "name": "(2020 PL2)", - "nasa_jpl_url": "http://ssd.jpl.nasa.gov/sbdb.cgi?sstr=54051038", - "absolute_magnitude_h": 23.06, - "estimated_diameter": { - "object": true - }, - "is_potentially_hazardous_asteroid": false, - "close_approach_data": [ - "json array" - ], - "is_sentry_object": false - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "links": { - "object": true - }, - "id": "54051142", - "neo_reference_id": "54051142", - "name": "(2020 PX5)", - "nasa_jpl_url": "http://ssd.jpl.nasa.gov/sbdb.cgi?sstr=54051142", - "absolute_magnitude_h": 29.56, - "estimated_diameter": { - "object": true - }, - "is_potentially_hazardous_asteroid": false, - "close_approach_data": [ - "json array" - ], - "is_sentry_object": false - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "links": { - "object": true - }, - "id": "54051158", - "neo_reference_id": "54051158", - "name": "(2020 PA6)", - "nasa_jpl_url": "http://ssd.jpl.nasa.gov/sbdb.cgi?sstr=54051158", - "absolute_magnitude_h": 22.75, - "estimated_diameter": { - "object": true - }, - "is_potentially_hazardous_asteroid": false, - "close_approach_data": [ - "json array" - ], - "is_sentry_object": false - }, - "pairedItem": { - "item": 0 - } - }, - { - "json": { - "links": { - "object": true - }, - "id": "54192746", - "neo_reference_id": "54192746", - "name": "(2021 RQ2)", - "nasa_jpl_url": "http://ssd.jpl.nasa.gov/sbdb.cgi?sstr=54192746", - "absolute_magnitude_h": 29.54, - "estimated_diameter": { - "object": true - }, - "is_potentially_hazardous_asteroid": false, - "close_approach_data": [ - "json array" - ], - "is_sentry_object": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "NASA2" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2023-02-20T11:09:57.881Z", - "stoppedAt": "2023-02-20T11:10:24.325Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/81-snapshot.json b/test-workflows/snapshots/81-snapshot.json deleted file mode 100644 index ce49774b8a8..00000000000 --- a/test-workflows/snapshots/81-snapshot.json +++ /dev/null @@ -1,197 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747344011096, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Phantombuster": [ - { - "startTime": 1747344011096, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 62, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "8756817235927468", - "name": "Email Extractor", - "createdAt": 1614591862755, - "scriptOrgName": "phantombuster", - "scriptId": "6774", - "script": "Email Extractor.js", - "branch": "master", - "environment": "release", - "manifest": { - "object": true - }, - "lastEndType": "finished", - "lastEndedAt": 1747343954267, - "lastExitCode": 0, - "nbContainersRunning": 0, - "runningTime": { - "object": true - }, - "launchType": "manually", - "s3Folder": "UKSkFmaigVohTti7pkwW0A" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Phantombuster1": [ - { - "startTime": 1747344011158, - "executionIndex": 2, - "source": [ - { - "previousNode": "Phantombuster" - } - ], - "hints": [], - "executionTime": 73, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "8756817235927468", - "scriptOrgName": "phantombuster", - "scriptId": "6774", - "script": "Email Extractor.js", - "branch": "master", - "environment": "release", - "argument": "{\n\t\"urls\": [\n\t\t\"https://n8n.io/\"\n\t],\n\t\"timeToWait\": 5000,\n\t\"pagesPerLaunch\": 1,\n\t\"onlyGetOneEmail\": false\n}", - "code": { - "object": true - }, - "launchType": "manually", - "nbLaunches": 2262, - "s3Folder": "UKSkFmaigVohTti7pkwW0A", - "orgS3Folder": "sTTpLenO2iY", - "updatedAt": 1614591972895, - "name": "Email Extractor", - "fileMgmt": "mix", - "lastEndType": "finished" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Phantombuster2": [ - { - "startTime": 1747344011231, - "executionIndex": 3, - "source": [ - { - "previousNode": "Phantombuster1" - } - ], - "hints": [], - "executionTime": 599, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "containerId": "670158012016736" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Phantombuster3": [ - { - "startTime": 1747344011830, - "executionIndex": 4, - "source": [ - { - "previousNode": "Phantombuster2" - } - ], - "hints": [], - "executionTime": 60, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "containerId": "670158012016736", - "status": "running", - "output": "", - "outputPos": 0, - "isAgentRunning": false, - "canSoftAbort": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Phantombuster3" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:11.096Z", - "stoppedAt": "2025-05-15T21:20:11.890Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/83-snapshot.json b/test-workflows/snapshots/83-snapshot.json deleted file mode 100644 index de0fc024565..00000000000 --- a/test-workflows/snapshots/83-snapshot.json +++ /dev/null @@ -1,933 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747344011255, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "RSS Feed Read": [ - { - "startTime": 1747344011255, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 444, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "title": "Bolto", - "link": "https://www.producthunt.com/posts/bolto-3", - "pubDate": "2025-03-11T23:04:40.000Z", - "author": "Garry Tan", - "content": "

\n Find, interview, and hire engineers with AI\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/941021", - "isoDate": "2025-03-11T23:04:40.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Flowise", - "link": "https://www.producthunt.com/posts/flowise", - "pubDate": "2025-05-13T08:49:36.000Z", - "author": "Garry Tan", - "content": "

\n Build AI agents, visually\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/964762", - "isoDate": "2025-05-13T08:49:36.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Tolt", - "link": "https://www.producthunt.com/posts/tolt", - "pubDate": "2024-09-19T10:10:07.000Z", - "author": "Daniel", - "content": "

\n All-in-one affiliate marketing software for SaaS startups\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/490699", - "isoDate": "2024-09-19T10:10:07.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "HubSpot Meeting Scheduler in Email", - "link": "https://www.producthunt.com/posts/hubspot-meeting-scheduler-in-email", - "pubDate": "2025-05-14T10:33:26.000Z", - "author": "Zeeshan Akhtar", - "content": "

\n More meetings. Less drop-offs.\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/965345", - "isoDate": "2025-05-14T10:33:26.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "1Stroke", - "link": "https://www.producthunt.com/posts/1stroke", - "pubDate": "2025-05-12T17:02:24.000Z", - "author": "Mo-Acen", - "content": "

\n Right click and reply with AI\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/964508", - "isoDate": "2025-05-12T17:02:24.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "OpenMemory MCP", - "link": "https://www.producthunt.com/posts/openmemory-mcp", - "pubDate": "2025-05-14T10:06:56.000Z", - "author": "Zac Zuo", - "content": "

\n Your private, local memory layer for all AI tools\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/965334", - "isoDate": "2025-05-14T10:06:56.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "PhraseClip", - "link": "https://www.producthunt.com/posts/phraseclip", - "pubDate": "2025-05-14T18:48:55.000Z", - "author": "Maciej", - "content": "

\n Improve your vocabulary as you browse the web\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/965516", - "isoDate": "2025-05-14T18:48:55.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Mukh.1", - "link": "https://www.producthunt.com/posts/mukh-1", - "pubDate": "2025-05-14T19:17:30.000Z", - "author": "Farrukh Anwaar", - "content": "

\n Automate work with AI agents\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/965528", - "isoDate": "2025-05-14T19:17:30.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Friendzone", - "link": "https://www.producthunt.com/posts/friendzone-2", - "pubDate": "2025-05-14T15:01:49.000Z", - "author": "Jan FrΓΌchtl", - "content": "

\n Privacy-first second brain for relationships\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/965471", - "isoDate": "2025-05-14T15:01:49.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Museboard", - "link": "https://www.producthunt.com/posts/museboard", - "pubDate": "2025-05-14T19:28:59.000Z", - "author": "Sage Causie", - "content": "

\n Moodboarding made simpleβ€”for creators, by a creator\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/965531", - "isoDate": "2025-05-14T19:28:59.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Files Magic AI ", - "link": "https://www.producthunt.com/posts/files-magic-ai", - "pubDate": "2025-05-08T14:10:38.000Z", - "author": "Gowtham V", - "content": "

\n AI based Files organization for macOS\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/962798", - "isoDate": "2025-05-08T14:10:38.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Granola 2.0", - "link": "https://www.producthunt.com/posts/granola-2-0", - "pubDate": "2025-05-14T19:39:09.000Z", - "author": "Chris Messina", - "content": "

\n A second brain for your team\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/965535", - "isoDate": "2025-05-14T19:39:09.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Plakar", - "link": "https://www.producthunt.com/posts/plakar", - "pubDate": "2025-05-08T04:28:26.000Z", - "author": "Victor Coisne", - "content": "

\n Effortless open source backup platform\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/962548", - "isoDate": "2025-05-08T04:28:26.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Material 3 Expressive", - "link": "https://www.producthunt.com/posts/material-3-expressive", - "pubDate": "2025-05-14T07:04:45.000Z", - "author": "Ankit Sharma", - "content": "

\n Build more engaging, easy-to-use products\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/965231", - "isoDate": "2025-05-14T07:04:45.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Phala Cloud", - "link": "https://www.producthunt.com/posts/phala-cloud", - "pubDate": "2025-05-14T00:27:59.000Z", - "author": "Marvin Tong", - "content": "

\n Zero-trust cloud for safe AGI\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/965089", - "isoDate": "2025-05-14T00:27:59.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "RustScan", - "link": "https://www.producthunt.com/posts/rustscan", - "pubDate": "2025-05-14T08:38:01.000Z", - "author": "Rishabh Kumar", - "content": "

\n Fast and developer-friendly Rust contract security scanner\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/965281", - "isoDate": "2025-05-14T08:38:01.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Joyn", - "link": "https://www.producthunt.com/posts/joyn-4", - "pubDate": "2025-05-13T01:35:25.000Z", - "author": "Larissa Licha", - "content": "

\n Align product teams with the people closest to customers\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/964623", - "isoDate": "2025-05-13T01:35:25.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "PixVerse V4.5", - "link": "https://www.producthunt.com/posts/pixverse-v4-5", - "pubDate": "2025-05-14T10:32:34.000Z", - "author": "Zac Zuo", - "content": "

\n Cinematic AI video with pro camera controls & fusion\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/965344", - "isoDate": "2025-05-14T10:32:34.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Macrodata Refinement Application", - "link": "https://www.producthunt.com/posts/macrodata-refinement-application", - "pubDate": "2025-05-14T15:55:33.000Z", - "author": "Louie Garofalo", - "content": "

\n Uncover hidden emotions with Macrodata Refinement\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/965484", - "isoDate": "2025-05-14T15:55:33.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Opusense", - "link": "https://www.producthunt.com/posts/opusense", - "pubDate": "2025-05-13T17:51:22.000Z", - "author": "Garry Tan", - "content": "

\n AI-generated reports for site inspections\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/964981", - "isoDate": "2025-05-13T17:51:22.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Dolphin AI", - "link": "https://www.producthunt.com/posts/dolphin-ai", - "pubDate": "2025-05-11T18:56:18.000Z", - "author": "Ilai Szpiezak", - "content": "

\n Track customer requests from calls on autopilot\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/964114", - "isoDate": "2025-05-11T18:56:18.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Sahha Insights API", - "link": "https://www.producthunt.com/posts/sahha-insights-api", - "pubDate": "2025-05-01T04:53:53.000Z", - "author": "Aleks Dahlberg", - "content": "

\n Reveal the patterns in your users' lives that matter most\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/959879", - "isoDate": "2025-05-01T04:53:53.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Ad Tracker for AdMob", - "link": "https://www.producthunt.com/posts/ad-tracker-for-admob", - "pubDate": "2025-05-13T14:21:40.000Z", - "author": "D:Zero", - "content": "

\n A clean, reliable AdMob analytics app\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/964905", - "isoDate": "2025-05-13T14:21:40.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "NotionApps 2.0", - "link": "https://www.producthunt.com/posts/notionapps-2-0", - "pubDate": "2024-10-24T13:46:19.000Z", - "author": "Kevin William David", - "content": "

\n Build web apps & portals from Notion without coding\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/534081", - "isoDate": "2024-10-24T13:46:19.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Gadget", - "link": "https://www.producthunt.com/posts/gadget-3", - "pubDate": "2025-04-21T20:57:16.000Z", - "author": "Robleh Jama", - "content": "

\n The fastest way to build and scale apps with AI\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/956117", - "isoDate": "2025-04-21T20:57:16.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Tokenomy.ai", - "link": "https://www.producthunt.com/posts/tokenomy-ai", - "pubDate": "2025-05-09T21:46:09.000Z", - "author": "Mahesh Lambe", - "content": "

\n See your LLM token bill before you hit send.\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/963421", - "isoDate": "2025-05-09T21:46:09.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Better Off 2.0", - "link": "https://www.producthunt.com/posts/better-off-2-0", - "pubDate": "2025-05-13T18:05:26.000Z", - "author": "Danielle Juncal", - "content": "

\n Build your online will or trust for free\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/964984", - "isoDate": "2025-05-13T18:05:26.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Airbnb Services and Experiences", - "link": "https://www.producthunt.com/posts/airbnb-services-and-experiences", - "pubDate": "2025-05-13T20:46:46.000Z", - "author": "Chris Messina", - "content": "

\n Now you can Airbnb more than an Airbnb\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/965062", - "isoDate": "2025-05-13T20:46:46.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "One Click Deploy", - "link": "https://www.producthunt.com/posts/one-click-deploy", - "pubDate": "2025-05-13T20:40:49.000Z", - "author": "Ella", - "content": "

\n Deploy your LiveKit Voice AI agents instantly\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/965061", - "isoDate": "2025-05-13T20:40:49.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "SafeTrigger", - "link": "https://www.producthunt.com/posts/safetrigger", - "pubDate": "2025-04-24T20:10:53.000Z", - "author": "Mateusz PiΓ³rowski", - "content": "

\n Zero-knowledge vault - secure files, share on your terms\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/957531", - "isoDate": "2025-04-24T20:10:53.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Life, The Human Network", - "link": "https://www.producthunt.com/posts/life-the-human-network", - "pubDate": "2025-05-13T11:49:40.000Z", - "author": "Julien Belmont", - "content": "

\n What social networks always should have been\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/964847", - "isoDate": "2025-05-13T11:49:40.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Timesible", - "link": "https://www.producthunt.com/posts/timesible", - "pubDate": "2025-05-06T14:13:58.000Z", - "author": "Amine Barchid", - "content": "

\n From Task to Invoice, without switching tools\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/961881", - "isoDate": "2025-05-06T14:13:58.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Basin MCP", - "link": "https://www.producthunt.com/posts/basin-mcp", - "pubDate": "2025-05-13T13:36:38.000Z", - "author": "Henry Lee", - "content": "

\n Stop your Cursor / Windsurf from hallucinating w/ a MCP tool\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/964885", - "isoDate": "2025-05-13T13:36:38.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Kazu Navi (γ‹γšγƒŠγƒ“)", - "link": "https://www.producthunt.com/posts/kazu-navi", - "pubDate": "2025-05-02T09:14:00.000Z", - "author": "Daniel RamΓ³n Robertson", - "content": "

\n Learn Japanese with clarity, context, and confidence\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/960308", - "isoDate": "2025-05-02T09:14:00.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Unitor", - "link": "https://www.producthunt.com/posts/unitor", - "pubDate": "2025-05-13T04:04:20.000Z", - "author": "Jiva", - "content": "

\n Quickly compare unit prices while shopping smarter.\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/964654", - "isoDate": "2025-05-13T04:04:20.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Document Parser by Contextual AI", - "link": "https://www.producthunt.com/posts/document-parser-by-contextual-ai", - "pubDate": "2025-05-13T07:04:45.000Z", - "author": "Jay Chen", - "content": "

\n Multimodal document parser designed for RAG systems\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/964719", - "isoDate": "2025-05-13T07:04:45.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Shadow", - "link": "https://www.producthunt.com/posts/shadow-269237dc-c19b-45da-baf7-13cec35e4430", - "pubDate": "2025-03-05T11:01:25.000Z", - "author": "Ben Lang", - "content": "

\n Meet once, stay aheadβ€”Shadow helps you follow through\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/938521", - "isoDate": "2025-03-05T11:01:25.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Generated Assets", - "link": "https://www.producthunt.com/posts/generated-assets", - "pubDate": "2025-05-13T17:00:20.000Z", - "author": "Michael Thomas", - "content": "

\n Turn any idea into an investable index with AI\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/964967", - "isoDate": "2025-05-13T17:00:20.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "TikTok AI Alive", - "link": "https://www.producthunt.com/posts/tiktok-ai-alive", - "pubDate": "2025-05-14T02:54:37.000Z", - "author": "Zac Zuo", - "content": "

\n Bringing your photos to life on TikTok Stories\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/965115", - "isoDate": "2025-05-14T02:54:37.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "GMSSH", - "link": "https://www.producthunt.com/posts/gmssh", - "pubDate": "2025-05-13T07:23:25.000Z", - "author": "JasperChen", - "content": "

\n Enable everyone to manage servers simply and efficiently\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/964727", - "isoDate": "2025-05-13T07:23:25.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Webifier.io", - "link": "https://www.producthunt.com/posts/webifier-io-2", - "pubDate": "2025-05-05T06:58:35.000Z", - "author": "Ali Bockerwey", - "content": "

\n Generate beautiful React websites with AI\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/961225", - "isoDate": "2025-05-05T06:58:35.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Nayla", - "link": "https://www.producthunt.com/posts/nayla", - "pubDate": "2025-05-13T06:45:25.000Z", - "author": "Yannick", - "content": "

\n The all-in-one AI browser & workspace that works for you\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/964704", - "isoDate": "2025-05-13T06:45:25.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Zoho Forms", - "link": "https://www.producthunt.com/posts/zoho-forms", - "pubDate": "2025-05-05T06:02:04.000Z", - "author": "Shobana Sruthi Mohan", - "content": "

\n One form builder. Endless possibilities for every business. \n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/961212", - "isoDate": "2025-05-05T06:02:04.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "AppearOnAI ", - "link": "https://www.producthunt.com/posts/appearonai", - "pubDate": "2025-05-10T18:17:12.000Z", - "author": "Chris Messina", - "content": "

\n Get recommended by ChatGPT, Gemini, and Claude\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/963753", - "isoDate": "2025-05-10T18:17:12.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Asendia AI", - "link": "https://www.producthunt.com/posts/asendia-ai-2", - "pubDate": "2025-05-08T02:48:51.000Z", - "author": "Rihab Lajmi", - "content": "

\n Land your dream job 10x faster with Sarah, your AI job agent\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/962527", - "isoDate": "2025-05-08T02:48:51.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "CoLaunchly", - "link": "https://www.producthunt.com/posts/colaunchly", - "pubDate": "2025-04-30T07:39:29.000Z", - "author": "Alex Cloudstar", - "content": "

\n Launch your app faster. With zero guesswork\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/959493", - "isoDate": "2025-04-30T07:39:29.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Probo", - "link": "https://www.producthunt.com/posts/probo", - "pubDate": "2025-04-14T16:19:02.000Z", - "author": "Garry Tan", - "content": "

\n Compliance for Startups to get SOC2/ISO27001/HIPAA in a week\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/953388", - "isoDate": "2025-04-14T16:19:02.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Zetta", - "link": "https://www.producthunt.com/posts/zetta-2", - "pubDate": "2025-05-10T19:22:28.000Z", - "author": "Tyler Hanson", - "content": "

\n Automated business intelligence platform\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/963766", - "isoDate": "2025-05-10T19:22:28.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "Xogot", - "link": "https://www.producthunt.com/posts/xogot", - "pubDate": "2025-05-12T14:11:10.000Z", - "author": "Joseph Hill", - "content": "

\n Godot-powered game dev for iPad\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/964449", - "isoDate": "2025-05-12T14:11:10.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - }, - { - "json": { - "title": "RADiCAL", - "link": "https://www.producthunt.com/posts/radical-3", - "pubDate": "2025-05-12T16:22:25.000Z", - "author": "Alice Gardner", - "content": "

\n AI motion capture meets 3D storytelling\n

\n

\n Discussion\n |\n Link\n

\n", - "contentSnippet": "Discussion\n |\n Link", - "id": "tag:www.producthunt.com,2005:Post/964497", - "isoDate": "2025-05-12T16:22:25.000Z" - }, - "pairedItem": [ - { - "item": 0 - } - ] - } - ] - ] - } - } - ], - "Function": [ - { - "startTime": 1747344011699, - "executionIndex": 2, - "source": [ - { - "previousNode": "RSS Feed Read" - } - ], - "hints": [], - "executionTime": 2, - "executionStatus": "success", - "data": { - "main": [ - [] - ] - } - } - ] - }, - "lastNodeExecuted": "Function" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:11.255Z", - "stoppedAt": "2025-05-15T21:20:11.701Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/84-snapshot.json b/test-workflows/snapshots/84-snapshot.json deleted file mode 100644 index f5884c6efb3..00000000000 --- a/test-workflows/snapshots/84-snapshot.json +++ /dev/null @@ -1,425 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747344011379, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Matrix1": [ - { - "startTime": 1747344011379, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 689, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "room_id": "!ypfCPlfKrBrGazVcnF:matrix.org" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Matrix": [ - { - "startTime": 1747344012068, - "executionIndex": 2, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 94, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "user_id": "@nodeqa:matrix.org", - "is_guest": false, - "device_id": "PLEEGTGUHF" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Matrix6": [ - { - "startTime": 1747344012162, - "executionIndex": 3, - "source": [ - { - "previousNode": "Matrix1" - } - ], - "hints": [], - "executionTime": 212, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "event_id": "$kVxYRJWbL1iz3wDwRbwnLqRml0tzD1IlASrt_zIXCcg" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Matrix5": [ - { - "startTime": 1747344012374, - "executionIndex": 4, - "source": [ - { - "previousNode": "Matrix1" - } - ], - "hints": [], - "executionTime": 89, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "content": { - "object": true - }, - "origin_server_ts": 1747344011660, - "room_id": "!ypfCPlfKrBrGazVcnF:matrix.org", - "sender": "@nodeqa:matrix.org", - "state_key": "@nodeqa:matrix.org", - "type": "m.room.member", - "unsigned": { - "object": true - }, - "event_id": "$Xd9yYLKJvQ2FjGwigm8WTvS-hKU9AJgGnzFxfCUmmf8", - "user_id": "@nodeqa:matrix.org", - "age": 836 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Read Binary File": [ - { - "startTime": 1747344012463, - "executionIndex": 5, - "source": [ - { - "previousNode": "Matrix1" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "room_id": "!ypfCPlfKrBrGazVcnF:matrix.org" - }, - "binary": { - "data": { - "mimeType": "image/png", - "fileType": "image", - "fileExtension": "png", - "data": "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", - "directory": "/tmp", - "fileName": "n8n-logo.png", - "fileSize": "2.67 kB" - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Matrix7": [ - { - "startTime": 1747344012464, - "executionIndex": 6, - "source": [ - { - "previousNode": "Matrix6" - } - ], - "hints": [], - "executionTime": 175, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "content": { - "object": true - }, - "origin_server_ts": 1747344012300, - "room_id": "!ypfCPlfKrBrGazVcnF:matrix.org", - "sender": "@nodeqa:matrix.org", - "type": "m.room.message", - "unsigned": { - "object": true - }, - "event_id": "$kVxYRJWbL1iz3wDwRbwnLqRml0tzD1IlASrt_zIXCcg", - "user_id": "@nodeqa:matrix.org", - "age": 360 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Matrix8": [ - { - "startTime": 1747344012639, - "executionIndex": 7, - "source": [ - { - "previousNode": "Read Binary File" - } - ], - "hints": [], - "executionTime": 642, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "event_id": "$oiL2HmdbP5xQNk-XvDlULVgqsI2dB4bY40qU0GFpFtY" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Matrix2": [ - { - "startTime": 1747344013281, - "executionIndex": 8, - "source": [ - { - "previousNode": "Matrix7" - } - ], - "hints": [], - "executionTime": 427, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Matrix9": [ - { - "startTime": 1747344013708, - "executionIndex": 9, - "source": [ - { - "previousNode": "Matrix8" - } - ], - "hints": [], - "executionTime": 335, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "content": { - "object": true - }, - "origin_server_ts": 1747344013157, - "room_id": "!ypfCPlfKrBrGazVcnF:matrix.org", - "sender": "@nodeqa:matrix.org", - "type": "m.room.message", - "unsigned": { - "object": true - }, - "event_id": "$oiL2HmdbP5xQNk-XvDlULVgqsI2dB4bY40qU0GFpFtY", - "user_id": "@nodeqa:matrix.org", - "age": 910 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Matrix3": [ - { - "startTime": 1747344014043, - "executionIndex": 10, - "source": [ - { - "previousNode": "Matrix2" - } - ], - "hints": [], - "executionTime": 299, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Merge": [ - { - "startTime": 1747344014342, - "executionIndex": 11, - "source": [ - { - "previousNode": "Matrix3" - }, - { - "previousNode": "Matrix9" - } - ], - "hints": [], - "executionTime": 2, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Matrix4": [ - { - "startTime": 1747344014344, - "executionIndex": 12, - "source": [ - { - "previousNode": "Merge" - } - ], - "hints": [], - "executionTime": 279, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Matrix4" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:11.378Z", - "stoppedAt": "2025-05-15T21:20:14.623Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/86-snapshot.json b/test-workflows/snapshots/86-snapshot.json deleted file mode 100644 index 643cdfe69b0..00000000000 --- a/test-workflows/snapshots/86-snapshot.json +++ /dev/null @@ -1,875 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "hints": [], - "startTime": 1738078278998, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign": [ - { - "hints": [], - "startTime": 1738078278998, - "executionTime": 4838, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "email": "fake1738078279000@gmail.com", - "cdate": "2025-01-28T09:31:23-06:00", - "udate": "2025-01-28T09:31:23-06:00", - "phone": "", - "orgid": "0", - "orgname": "", - "links": { - "object": true - }, - "id": "6713", - "organization": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign9": [ - { - "hints": [], - "startTime": 1738078283837, - "executionTime": 642, - "source": [ - { - "previousNode": "ActiveCampaign" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "Name1738078283838", - "createdTimestamp": "2025-01-28T09:31:24-06:00", - "updatedTimestamp": "2025-01-28T09:31:24-06:00", - "owner": "1", - "links": { - "object": true - }, - "fields": [ - "json array" - ], - "id": "2126" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign14": [ - { - "hints": [], - "startTime": 1738078284479, - "executionTime": 528, - "source": [ - { - "previousNode": "ActiveCampaign9" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "contact": "6713", - "account": "2126", - "createdTimestamp": "2025-01-28T09:31:24-06:00", - "updatedTimestamp": "2025-01-28T09:31:24-06:00", - "links": { - "object": true - }, - "id": "1829" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign15": [ - { - "hints": [], - "startTime": 1738078285007, - "executionTime": 897, - "source": [ - { - "previousNode": "ActiveCampaign14" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "account": "2126", - "contact": "6713", - "jobTitle": "TestJobTitle", - "createdTimestamp": "2025-01-28T09:31:24-06:00", - "updatedTimestamp": "2025-01-28T09:31:25-06:00", - "links": { - "object": true - }, - "id": "1829" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign16": [ - { - "hints": [], - "startTime": 1738078285905, - "executionTime": 786, - "source": [ - { - "previousNode": "ActiveCampaign15" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign10": [ - { - "hints": [], - "startTime": 1738078286691, - "executionTime": 763, - "source": [ - { - "previousNode": "ActiveCampaign16" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "updatedName1738078286699", - "accountUrl": "", - "createdTimestamp": "2025-01-28T09:31:24-06:00", - "updatedTimestamp": "2025-01-28T09:31:27-06:00", - "owner": "1", - "links": { - "object": true - }, - "fields": [ - "json array" - ], - "id": "2126" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign11": [ - { - "hints": [], - "startTime": 1738078287455, - "executionTime": 490, - "source": [ - { - "previousNode": "ActiveCampaign10" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "account": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign12": [ - { - "hints": [], - "startTime": 1738078287945, - "executionTime": 563, - "source": [ - { - "previousNode": "ActiveCampaign11" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "Name1621002658600", - "accountUrl": { - "object": true - }, - "createdTimestamp": "2021-05-14T09:32:11-05:00", - "updatedTimestamp": "2021-08-24T02:34:13-05:00", - "owner": "1", - "contactCount": "0", - "dealCount": "0", - "links": { - "object": true - }, - "id": "48" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign13": [ - { - "hints": [], - "startTime": 1738078288509, - "executionTime": 594, - "source": [ - { - "previousNode": "ActiveCampaign12" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign5": [ - { - "hints": [], - "startTime": 1738078289104, - "executionTime": 719, - "source": [ - { - "previousNode": "ActiveCampaign13" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "success": true - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign7": [ - { - "hints": [], - "startTime": 1738078289824, - "executionTime": 720, - "source": [ - { - "previousNode": "ActiveCampaign13" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "contact": "6713", - "tag": "1", - "cdate": "2025-01-28T09:31:30-06:00", - "links": { - "object": true - }, - "id": "3852" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign6": [ - { - "hints": [], - "startTime": 1738078290545, - "executionTime": 700, - "source": [ - { - "previousNode": "ActiveCampaign5" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "cdate": "2025-01-28T09:31:23-06:00", - "email": "fake1738078279000@gmail.com", - "phone": "", - "firstName": "", - "lastName": "", - "orgid": "0", - "orgname": "", - "segmentio_id": "", - "bounced_hard": "0", - "bounced_soft": "0", - "bounced_date": { - "object": true - }, - "ip": "0", - "ua": "", - "hash": "8b0ad1fff5a956cf672dbcccc12b71f1", - "socialdata_lastcheck": { - "object": true - }, - "email_local": "", - "email_domain": "gmail.com", - "sentcnt": "0", - "rating_tstamp": { - "object": true - }, - "gravatar": "0", - "deleted": "0", - "anonymized": "0", - "adate": { - "object": true - }, - "udate": "2025-01-28T09:31:31-06:00", - "edate": { - "object": true - }, - "deleted_at": { - "object": true - }, - "created_utc_timestamp": "2025-01-28 09:31:23", - "updated_utc_timestamp": "2025-01-28 09:31:31", - "created_timestamp": "2025-01-28 09:31:23", - "updated_timestamp": "2025-01-28 09:31:31", - "created_by": "0", - "updated_by": "0", - "mpp_tracking": "0", - "last_click_date": { - "object": true - }, - "last_open_date": { - "object": true - }, - "last_mpp_open_date": { - "object": true - }, - "best_send_hour": "0", - "links": { - "object": true - }, - "id": "6713", - "organization": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign8": [ - { - "hints": [], - "startTime": 1738078291245, - "executionTime": 732, - "source": [ - { - "previousNode": "ActiveCampaign7" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign1": [ - { - "hints": [], - "startTime": 1738078291977, - "executionTime": 673, - "source": [ - { - "previousNode": "ActiveCampaign8" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "cdate": "2025-01-28T09:31:23-06:00", - "email": "updatedFake1738078291981@gmail.com", - "phone": "", - "firstName": "", - "lastName": "", - "orgid": "0", - "orgname": "", - "segmentio_id": "", - "bounced_hard": "0", - "bounced_soft": "0", - "bounced_date": { - "object": true - }, - "ip": "0", - "ua": "", - "hash": "8b0ad1fff5a956cf672dbcccc12b71f1", - "socialdata_lastcheck": { - "object": true - }, - "email_local": "", - "email_domain": "gmail.com", - "sentcnt": "0", - "rating_tstamp": { - "object": true - }, - "gravatar": "0", - "deleted": "0", - "anonymized": "0", - "adate": { - "object": true - }, - "udate": "2025-01-28T09:31:32-06:00", - "edate": { - "object": true - }, - "deleted_at": { - "object": true - }, - "created_utc_timestamp": "2025-01-28 09:31:23", - "updated_utc_timestamp": "2025-01-28 09:31:32", - "created_timestamp": "2025-01-28 09:31:23", - "updated_timestamp": "2025-01-28 09:31:32", - "created_by": "0", - "updated_by": "0", - "mpp_tracking": "0", - "best_send_hour": "0", - "links": { - "object": true - }, - "id": "6713", - "organization": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign2": [ - { - "hints": [], - "startTime": 1738078292650, - "executionTime": 566, - "source": [ - { - "previousNode": "ActiveCampaign1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "contactAutomations": [ - "json array" - ], - "contactLists": [ - "json array" - ], - "deals": [ - "json array" - ], - "fieldValues": [ - "json array" - ], - "geoIps": [ - "json array" - ], - "accountContacts": [ - "json array" - ], - "contact": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign3": [ - { - "hints": [], - "startTime": 1738078293216, - "executionTime": 489, - "source": [ - { - "previousNode": "ActiveCampaign2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "cdate": "2021-04-14T05:59:52-05:00", - "email": "a@a.com", - "phone": "", - "firstName": "", - "lastName": "", - "orgid": "0", - "orgname": "", - "segmentio_id": "", - "bounced_hard": "0", - "bounced_soft": "0", - "bounced_date": { - "object": true - }, - "ip": "0", - "ua": { - "object": true - }, - "hash": "54a85e50b2a7bf141297a326bd157ca9", - "socialdata_lastcheck": { - "object": true - }, - "email_local": "", - "email_domain": "a.com", - "sentcnt": "0", - "rating_tstamp": { - "object": true - }, - "gravatar": "0", - "deleted": "0", - "anonymized": "0", - "adate": { - "object": true - }, - "udate": "2021-04-14T05:59:52-05:00", - "edate": { - "object": true - }, - "deleted_at": { - "object": true - }, - "created_utc_timestamp": "2021-04-14 05:59:52", - "updated_utc_timestamp": "2022-06-02 20:44:36", - "created_timestamp": "2021-04-14 05:59:52", - "updated_timestamp": "2022-06-02 20:44:36", - "created_by": { - "object": true - }, - "updated_by": { - "object": true - }, - "mpp_tracking": "0", - "last_click_date": { - "object": true - }, - "last_open_date": { - "object": true - }, - "last_mpp_open_date": { - "object": true - }, - "best_send_hour": { - "object": true - }, - "scoreValues": [ - "json array" - ], - "accountContacts": [ - "json array" - ], - "links": { - "object": true - }, - "id": "97", - "organization": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Merge": [ - { - "hints": [], - "startTime": 1738078293705, - "executionTime": 1, - "source": [ - { - "previousNode": "ActiveCampaign3" - }, - { - "previousNode": "ActiveCampaign6" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "cdate": "2021-04-14T05:59:52-05:00", - "email": "a@a.com", - "phone": "", - "firstName": "", - "lastName": "", - "orgid": "0", - "orgname": "", - "segmentio_id": "", - "bounced_hard": "0", - "bounced_soft": "0", - "bounced_date": { - "object": true - }, - "ip": "0", - "ua": { - "object": true - }, - "hash": "54a85e50b2a7bf141297a326bd157ca9", - "socialdata_lastcheck": { - "object": true - }, - "email_local": "", - "email_domain": "a.com", - "sentcnt": "0", - "rating_tstamp": { - "object": true - }, - "gravatar": "0", - "deleted": "0", - "anonymized": "0", - "adate": { - "object": true - }, - "udate": "2021-04-14T05:59:52-05:00", - "edate": { - "object": true - }, - "deleted_at": { - "object": true - }, - "created_utc_timestamp": "2021-04-14 05:59:52", - "updated_utc_timestamp": "2022-06-02 20:44:36", - "created_timestamp": "2021-04-14 05:59:52", - "updated_timestamp": "2022-06-02 20:44:36", - "created_by": { - "object": true - }, - "updated_by": { - "object": true - }, - "mpp_tracking": "0", - "last_click_date": { - "object": true - }, - "last_open_date": { - "object": true - }, - "last_mpp_open_date": { - "object": true - }, - "best_send_hour": { - "object": true - }, - "scoreValues": [ - "json array" - ], - "accountContacts": [ - "json array" - ], - "links": { - "object": true - }, - "id": "97", - "organization": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign4": [ - { - "hints": [], - "startTime": 1738078293706, - "executionTime": 796, - "source": [ - { - "previousNode": "Merge" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "ActiveCampaign4" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-01-28T15:31:18.996Z", - "stoppedAt": "2025-01-28T15:31:34.502Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/87-snapshot.json b/test-workflows/snapshots/87-snapshot.json deleted file mode 100644 index 54a4046a1ba..00000000000 --- a/test-workflows/snapshots/87-snapshot.json +++ /dev/null @@ -1,829 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "hints": [], - "startTime": 1738078283500, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign": [ - { - "hints": [], - "startTime": 1738078283500, - "executionTime": 1276, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "connection": { - "object": true - }, - "meta": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign5": [ - { - "hints": [], - "startTime": 1738078284777, - "executionTime": 947, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "email": "fake1738078284778@gmail.com", - "cdate": "2025-01-28T09:31:25-06:00", - "udate": "2025-01-28T09:31:25-06:00", - "phone": "", - "orgid": "0", - "orgname": "", - "links": { - "object": true - }, - "id": "6714", - "organization": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign8": [ - { - "hints": [], - "startTime": 1738078285724, - "executionTime": 657, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "stringid": "testlist", - "userid": "1", - "name": "TestList", - "cdate": "2021-03-02T10:30:17-06:00", - "p_use_tracking": "1", - "p_use_analytics_read": "0", - "p_use_analytics_link": "0", - "p_use_twitter": "0", - "p_use_facebook": "0", - "p_embed_image": "1", - "p_use_captcha": "1", - "send_last_broadcast": "0", - "private": "0", - "analytics_domains": { - "object": true - }, - "analytics_source": "", - "analytics_ua": "", - "twitter_token": "", - "twitter_token_secret": "", - "facebook_session": { - "object": true - }, - "carboncopy": { - "object": true - }, - "subscription_notify": { - "object": true - }, - "unsubscription_notify": { - "object": true - }, - "require_name": "0", - "get_unsubscribe_reason": "0", - "to_name": "Subscriber", - "optinoptout": "1", - "sender_name": "", - "sender_addr1": "", - "sender_addr2": "", - "sender_city": "", - "sender_state": "", - "sender_zip": "", - "sender_country": "", - "sender_phone": "", - "sender_url": "https://n8n1612344344.activehosted.com", - "sender_reminder": "You are receiving these emails because you are subscribed to our updates.", - "fulladdress": "", - "optinmessageid": "0", - "optoutconf": "0", - "deletestamp": { - "object": true - }, - "udate": { - "object": true - }, - "created_timestamp": "2021-03-02 10:30:17", - "updated_timestamp": "2021-03-02 10:30:17", - "created_by": { - "object": true - }, - "updated_by": { - "object": true - }, - "channel": "email", - "description": { - "object": true - }, - "non_deleted_subscribers": "4", - "active_subscribers": "2", - "links": { - "object": true - }, - "id": "1", - "user": "1" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign9": [ - { - "hints": [], - "startTime": 1738078286381, - "executionTime": 717, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "tag": "Tag1738078286384", - "tagType": "contact", - "cdate": "2025-01-28T09:31:27-06:00", - "links": { - "object": true - }, - "id": "1991" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign1": [ - { - "hints": [], - "startTime": 1738078287099, - "executionTime": 930, - "source": [ - { - "previousNode": "ActiveCampaign" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "connection": { - "object": true - }, - "meta": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign7": [ - { - "hints": [], - "startTime": 1738078288029, - "executionTime": 777, - "source": [ - { - "previousNode": "ActiveCampaign5" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "contacts": [ - "json array" - ], - "dealGroups": [ - "json array" - ], - "dealStages": [ - "json array" - ], - "deal": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign10": [ - { - "hints": [], - "startTime": 1738078288806, - "executionTime": 585, - "source": [ - { - "previousNode": "ActiveCampaign9" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "tagType": "contact", - "tag": "Tag1738078286384", - "description": "", - "subscriber_count": "0", - "cdate": "2025-01-28T09:31:27-06:00", - "created_timestamp": "2025-01-28 09:31:27", - "updated_timestamp": "2025-01-28 09:31:27", - "created_by": { - "object": true - }, - "updated_by": { - "object": true - }, - "deleted": "0", - "links": { - "object": true - }, - "id": "1991" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign2": [ - { - "hints": [], - "startTime": 1738078289392, - "executionTime": 529, - "source": [ - { - "previousNode": "ActiveCampaign1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "connection": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign14": [ - { - "hints": [], - "startTime": 1738078289922, - "executionTime": 686, - "source": [ - { - "previousNode": "ActiveCampaign7" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "dealStages": [ - "json array" - ], - "deal": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign11": [ - { - "hints": [], - "startTime": 1738078290609, - "executionTime": 602, - "source": [ - { - "previousNode": "ActiveCampaign10" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "tag": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign3": [ - { - "hints": [], - "startTime": 1738078291212, - "executionTime": 476, - "source": [ - { - "previousNode": "ActiveCampaign2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "service": "n8n", - "externalid": "1621002648800", - "name": "Name1621002648800", - "isInternal": "0", - "connectionType": "ecommerce", - "status": "1", - "syncStatus": "0", - "sync_request_time": { - "object": true - }, - "sync_start_time": { - "object": true - }, - "lastSync": { - "object": true - }, - "logoUrl": "https://n8n.io/_nuxt/img/df5be1c.png", - "linkUrl": "https://n8n.io/", - "credentialExpiration": { - "object": true - }, - "cdate": "2021-05-14T09:31:09-05:00", - "udate": "2021-05-14T09:31:09-05:00", - "disconnectDate": { - "object": true - }, - "listId": { - "object": true - }, - "planTier": { - "object": true - }, - "links": { - "object": true - }, - "id": "92", - "serviceName": "n8n" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign15": [ - { - "hints": [], - "startTime": 1738078291689, - "executionTime": 704, - "source": [ - { - "previousNode": "ActiveCampaign14" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "deal": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign12": [ - { - "hints": [], - "startTime": 1738078292393, - "executionTime": 464, - "source": [ - { - "previousNode": "ActiveCampaign11" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "tagType": "contact", - "tag": "TestTag", - "description": "", - "subscriber_count": "2", - "cdate": "2021-03-02T10:29:14-06:00", - "created_timestamp": "2021-03-02 10:29:14", - "updated_timestamp": "2025-01-28 09:31:31", - "created_by": { - "object": true - }, - "updated_by": { - "object": true - }, - "deleted": "0", - "links": { - "object": true - }, - "id": "1" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign4": [ - { - "hints": [], - "startTime": 1738078292858, - "executionTime": 966, - "source": [ - { - "previousNode": "ActiveCampaign3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "meta": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign16": [ - { - "hints": [], - "startTime": 1738078293824, - "executionTime": 681, - "source": [ - { - "previousNode": "ActiveCampaign15" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "deals": [ - "json array" - ], - "note": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign13": [ - { - "hints": [], - "startTime": 1738078294505, - "executionTime": 631, - "source": [ - { - "previousNode": "ActiveCampaign12" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign17": [ - { - "hints": [], - "startTime": 1738078295137, - "executionTime": 616, - "source": [ - { - "previousNode": "ActiveCampaign16" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "users": [ - "json array" - ], - "deals": [ - "json array" - ], - "note": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign18": [ - { - "hints": [], - "startTime": 1738078295754, - "executionTime": 613, - "source": [ - { - "previousNode": "ActiveCampaign17" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "hash": "069b44df", - "owner": "1", - "contact": "6714", - "organization": { - "object": true - }, - "group": "1", - "stage": "1", - "title": "Title1738078288034", - "description": "", - "percent": "0", - "cdate": "2025-01-28T09:31:28-06:00", - "mdate": "2025-01-28T09:31:34-06:00", - "nextdate": { - "object": true - }, - "nexttaskid": "0", - "value": "201", - "currency": "usd", - "winProbability": { - "object": true - }, - "winProbabilityMdate": { - "object": true - }, - "status": "0", - "activitycount": "4", - "nextdealid": "1780", - "edate": { - "object": true - }, - "links": { - "object": true - }, - "id": "1780", - "isDisabled": false, - "nextTask": { - "object": true - }, - "account": { - "object": true - }, - "customerAccount": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign19": [ - { - "hints": [], - "startTime": 1738078296367, - "executionTime": 732, - "source": [ - { - "previousNode": "ActiveCampaign18" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign6": [ - { - "hints": [], - "startTime": 1738078297099, - "executionTime": 713, - "source": [ - { - "previousNode": "ActiveCampaign19" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "ActiveCampaign6" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-01-28T15:31:23.497Z", - "stoppedAt": "2025-01-28T15:31:37.813Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/88-snapshot.json b/test-workflows/snapshots/88-snapshot.json deleted file mode 100644 index 5516ee3eb1f..00000000000 --- a/test-workflows/snapshots/88-snapshot.json +++ /dev/null @@ -1,704 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "hints": [], - "startTime": 1738078289583, - "executionTime": 0, - "source": [], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign": [ - { - "hints": [], - "startTime": 1738078289583, - "executionTime": 1168, - "source": [ - { - "previousNode": "Start" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "connection": { - "object": true - }, - "meta": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign1": [ - { - "hints": [], - "startTime": 1738078290752, - "executionTime": 722, - "source": [ - { - "previousNode": "ActiveCampaign" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "connections": [ - "json array" - ], - "ecomCustomer": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign7": [ - { - "hints": [], - "startTime": 1738078291475, - "executionTime": 731, - "source": [ - { - "previousNode": "ActiveCampaign1" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "connections": [ - "json array" - ], - "ecomOrderProducts": [ - "json array" - ], - "ecomOrder": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign12": [ - { - "hints": [], - "startTime": 1738078292207, - "executionTime": 495, - "source": [ - { - "previousNode": "ActiveCampaign7" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "ecomOrderProduct": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign13": [ - { - "hints": [], - "startTime": 1738078292703, - "executionTime": 514, - "source": [ - { - "previousNode": "ActiveCampaign12" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "ecomOrderProducts": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign14": [ - { - "hints": [], - "startTime": 1738078293218, - "executionTime": 639, - "source": [ - { - "previousNode": "ActiveCampaign13" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "orderid": "112", - "connectionid": "636", - "externalid": "ProductId1644891804797", - "sku": "", - "name": "Product1644891804797", - "description": { - "object": true - }, - "price": "101", - "quantity": "1", - "category": "Test", - "imageUrl": "", - "productUrl": "", - "createdDate": "2022-02-14T20:23:25-06:00", - "updatedDate": "2022-02-14T20:23:25-06:00", - "tags": { - "object": true - }, - "isOnSale": { - "object": true - }, - "brand": { - "object": true - }, - "averageRating": { - "object": true - }, - "tstamp": "2022-02-14T20:23:25-06:00", - "links": { - "object": true - }, - "id": "110", - "ecomOrder": "112" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign8": [ - { - "hints": [], - "startTime": 1738078293858, - "executionTime": 529, - "source": [ - { - "previousNode": "ActiveCampaign14" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "ecomOrderProducts": [ - "json array" - ], - "contactConversions": [ - "json array" - ], - "ecomOrder": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign9": [ - { - "hints": [], - "startTime": 1738078294387, - "executionTime": 824, - "source": [ - { - "previousNode": "ActiveCampaign8" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "ecomOrder": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign10": [ - { - "hints": [], - "startTime": 1738078295211, - "executionTime": 481, - "source": [ - { - "previousNode": "ActiveCampaign9" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "customerid": "3", - "connectionid": "6", - "state": "1", - "source": "0", - "externalid": "externalOrderId1614707598654", - "externalcheckoutid": { - "object": true - }, - "orderNumber": "", - "email": "customerEmail1614707598651@gmail.com", - "totalPrice": "201", - "discountAmount": { - "object": true - }, - "shippingAmount": { - "object": true - }, - "taxAmount": { - "object": true - }, - "totalProducts": "0", - "currency": "EUR", - "shippingMethod": "", - "orderUrl": "", - "externalCreatedDate": "2021-03-02T11:48:16-06:00", - "externalUpdatedDate": { - "object": true - }, - "abandonedDate": { - "object": true - }, - "createdDate": "2021-03-02T11:53:19-06:00", - "updatedDate": "2021-03-02T11:54:15-06:00", - "orderDate": "2021-03-02T11:48:16-06:00", - "tstamp": "2021-03-02T11:54:15-06:00", - "links": { - "object": true - }, - "id": "2", - "connection": "6", - "customer": "3" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign11": [ - { - "hints": [], - "startTime": 1738078295693, - "executionTime": 565, - "source": [ - { - "previousNode": "ActiveCampaign10" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign2": [ - { - "hints": [], - "startTime": 1738078296259, - "executionTime": 588, - "source": [ - { - "previousNode": "ActiveCampaign11" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "ecomCustomer": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign3": [ - { - "hints": [], - "startTime": 1738078296847, - "executionTime": 536, - "source": [ - { - "previousNode": "ActiveCampaign2" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "ecomCustomer": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign4": [ - { - "hints": [], - "startTime": 1738078297384, - "executionTime": 628, - "source": [ - { - "previousNode": "ActiveCampaign3" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "connectionid": "6", - "externalid": "", - "email": "deleted+10@example.com", - "totalRevenue": "201", - "totalOrders": "1", - "totalProducts": "0", - "avgRevenuePerOrder": "201", - "avgProductCategory": "", - "tstamp": "2021-05-14T20:06:40-05:00", - "acceptsMarketing": "0", - "sms_marketing_state": { - "object": true - }, - "sms_opt_in_level": { - "object": true - }, - "sms_consent_updated_at": { - "object": true - }, - "links": { - "object": true - }, - "id": "3", - "connection": "6" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign15": [ - { - "hints": [], - "startTime": 1738078298013, - "executionTime": 552, - "source": [ - { - "previousNode": "ActiveCampaign4" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "cdate": "2025-01-28T09:31:31-06:00", - "email": "fake1738078290762@gmail.com", - "phone": "", - "firstName": "", - "lastName": "", - "orgid": "0", - "orgname": "", - "segmentio_id": "", - "bounced_hard": "0", - "bounced_soft": "0", - "bounced_date": { - "object": true - }, - "ip": "0", - "ua": { - "object": true - }, - "hash": "3df37e90a2290eed6f0c840247d4d46a", - "socialdata_lastcheck": { - "object": true - }, - "email_local": "", - "email_domain": "gmail.com", - "sentcnt": "0", - "rating_tstamp": { - "object": true - }, - "gravatar": "0", - "deleted": "0", - "anonymized": "0", - "adate": { - "object": true - }, - "udate": "2025-01-28T09:31:31-06:00", - "edate": { - "object": true - }, - "deleted_at": { - "object": true - }, - "created_utc_timestamp": "2025-01-28 09:31:31", - "updated_utc_timestamp": "2025-01-28 09:31:31", - "created_timestamp": "2025-01-28 09:31:31", - "updated_timestamp": "2025-01-28 09:31:31", - "created_by": { - "object": true - }, - "updated_by": { - "object": true - }, - "mpp_tracking": "0", - "last_click_date": { - "object": true - }, - "last_open_date": { - "object": true - }, - "last_mpp_open_date": { - "object": true - }, - "best_send_hour": { - "object": true - }, - "scoreValues": [ - "json array" - ], - "accountContacts": [ - "json array" - ], - "links": { - "object": true - }, - "id": "6715", - "organization": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign16": [ - { - "hints": [], - "startTime": 1738078298566, - "executionTime": 663, - "source": [ - { - "previousNode": "ActiveCampaign15" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign5": [ - { - "hints": [], - "startTime": 1738078299229, - "executionTime": 564, - "source": [ - { - "previousNode": "ActiveCampaign16" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "ActiveCampaign6": [ - { - "hints": [], - "startTime": 1738078299794, - "executionTime": 1189, - "source": [ - { - "previousNode": "ActiveCampaign5" - } - ], - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "meta": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "ActiveCampaign6" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-01-28T15:31:29.580Z", - "stoppedAt": "2025-01-28T15:31:40.984Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/90-snapshot.json b/test-workflows/snapshots/90-snapshot.json deleted file mode 100644 index d3ecaa1b68c..00000000000 --- a/test-workflows/snapshots/90-snapshot.json +++ /dev/null @@ -1,241 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747344011734, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Date & Time": [ - { - "startTime": 1747344011734, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": "03/03/2021" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Date & Time1": [ - { - "startTime": 1747344011734, - "executionIndex": 2, - "source": [ - { - "previousNode": "Date & Time" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": "2021/03/03" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Date & Time2": [ - { - "startTime": 1747344011735, - "executionIndex": 3, - "source": [ - { - "previousNode": "Date & Time1" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": "March 03 2021" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Date & Time3": [ - { - "startTime": 1747344011735, - "executionIndex": 4, - "source": [ - { - "previousNode": "Date & Time2" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": "03-03-2021" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Date & Time4": [ - { - "startTime": 1747344011735, - "executionIndex": 5, - "source": [ - { - "previousNode": "Date & Time3" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": "2021-03-03" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Date & Time5": [ - { - "startTime": 1747344011735, - "executionIndex": 6, - "source": [ - { - "previousNode": "Date & Time4" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": "1614764492" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Function": [ - { - "startTime": 1747344011735, - "executionIndex": 7, - "source": [ - { - "previousNode": "Date & Time5" - } - ], - "hints": [], - "executionTime": 2, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": "1614764492" - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Function" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:11.734Z", - "stoppedAt": "2025-05-15T21:20:11.737Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/91-snapshot.json b/test-workflows/snapshots/91-snapshot.json deleted file mode 100644 index 161a6af0daf..00000000000 --- a/test-workflows/snapshots/91-snapshot.json +++ /dev/null @@ -1,229 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747344011746, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "FunctionItem": [ - { - "startTime": 1747344011746, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 3, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": "\n\n\n\n
\"background
\"background
\"background

\n\t\t\t\t\t\tExtendable workflow automation\n\t\t\t\t\t

\"n8n
\n\t\tGithub\n\t
\"Play

\n\t\t\t\t\t\tWatch how simple it is to design a\n\t\t\t\t\t\tTypeform +\n\t\t\t\t\t\tGoogle Sheets +\n\t\t\t\t\t\tSlack workflow\n\t\t\t\t\t

Open icon

Open

\n\t\t\t\t\t\tThanks to our fair-code license, run n8n locally, or the cloud.\n\t\t\t\t\t\tDecide who gets access and where your data is stored.\n\t\t\t\t\t

Extendable icon

Extendable

\n\t\t\t\t\t\tEasy to augment with custom functions logic, and apps with minimal\n\t\t\t\t\t\tengineering effort.\n\t\t\t\t\t

Powerful icon

Powerful

\n\t\t\t\t\t\tn8n's node based editor lets you map anything to everything and go\n\t\t\t\t\t\tbeyond basic ETL.\n\t\t\t\t\t

What can I do with n8n?

Sync data between 150+ apps

\n\t\t\t\t\t\t\tMove and transform data between different apps and databases without getting caught up in API docs and troubleshooting CORS errors.\n\t\t\t\t\t\t

Design powerful workflows

Create custom integrations

\n\t\t\t\t\t\t\tSee what else you can do with n8n! Visit our\n\t\t\t\t\t\t\tMedium publication

How to get started?

\n\t\t\t\t\t\tCLI\n\t\t\t\t\t

\n\t\tClick to copy\n\t
\n\t\tClick to copy\n\t

\n\t\t\t\t\t\tDocker\n\t\t\t\t\t

\n\t\tClick to copy\n\t
\n\t\t\t\t\t\t\t\tn8n.cloud - our hosted offering is now in early access\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\tGet updates from n8n\n\t\t\t\t\t

Subscribe to our newsletter

\n\t\tBy submitting your email address you agree to your personal data being\n\t\tstored and used to provide you with information and commercial offers\n\t\tabout n8n.\n\t

\n
\n\n" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "HTML Extract": [ - { - "startTime": 1747344011749, - "executionIndex": 2, - "source": [ - { - "previousNode": "FunctionItem" - } - ], - "hints": [], - "executionTime": 13, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "extracted": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Move Binary Data": [ - { - "startTime": 1747344011762, - "executionIndex": 3, - "source": [ - { - "previousNode": "FunctionItem" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - }, - "binary": { - "data": { - "mimeType": "application/json", - "fileType": "json", - "fileExtension": "json", - "data": "PCFkb2N0eXBlIGh0bWw+CjxodG1sIGRhdGEtbi1oZWFkLXNzcj4KCjxib2R5ID4KPGRpdiBkYXRhLXNlcnZlci1yZW5kZXJlZD0idHJ1ZSIgaWQ9Il9fbnV4dCI+PCEtLS0tPjxkaXYgaWQ9Il9fbGF5b3V0Ij48ZGl2IGNsYXNzPSJsYXlvdXQtZnVsbC1wYWdlIj48aGVhZGVyIGNsYXNzPSJlbC1oZWFkZXIgaGVhZGVyIiBzdHlsZT0iaGVpZ2h0OmF1dG87Ij48IS0tLS0+IDxkaXYgY2xhc3M9ImNvbnRlbnQtd3JhcHBlciI+PGRpdiBjbGFzcz0iZWwtcm93Ij48ZGl2IGNsYXNzPSJlbC1jb2wgZWwtY29sLTI0IGVsLWNvbC14cy0xNiBlbC1jb2wtc20tMTYgZWwtY29sLW1kLTUgZWwtY29sLWxnLTYiPjxhIGhyZWY9Ii8iIGFyaWEtY3VycmVudD0icGFnZSIgY2xhc3M9Im51eHQtbGluay1leGFjdC1hY3RpdmUgbnV4dC1saW5rLWFjdGl2ZSI+PHN2ZyB3aWR0aD0iMTI0cHgiIGhlaWdodD0iMjhweCIgdmlld0JveD0iMCAwIDEyNCAyOCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48dGl0bGU+bjg8L3RpdGxlPiA8ZyBpZD0ibmF2LW1lbnUtKFYxKSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgaWQ9Im5hdi1tZW51LSh2MSkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMjAuMDAwMDAwLCAtMTE2LjAwMDAwMCkiIGZpbGwtcnVsZT0ibm9uemVybyI+PGcgaWQ9Im44IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAuMDAwMDAwLCAxMTYuMDAwMDAwKSI+PHBhdGggZD0iTTQ4LjczODQ5MDYsMC4xOTAxODg2NzkgQzQ2LjE1NzczNTgsMC4xOTAxODg2NzkgNDMuOTg2NDE1MSwxLjk2NzkyNDUzIDQzLjM3MzU4NDksNC4zNjExMzIwOCBMMzUuNjUyNDUyOCw0LjM2MTEzMjA4IEMzMi42MjI2NDE1LDQuMzYxMTMyMDggMzAuMTU4MTEzMiw2LjgyNTY2MDM4IDMwLjE1ODExMzIsOS44NTU0NzE3IEMzMC4xNTgxMTMyLDExLjM2OTA1NjYgMjguOTI3MTY5OCwxMi42MDI2NDE1IDI3LjQxMDk0MzQsMTIuNjAyNjQxNSBMMjYuMzA5NDM0LDEyLjYwMjY0MTUgQzI1LjY5NjYwMzgsMTAuMjA5NDM0IDIzLjUyNzkyNDUsOC40MzE2OTgxMSAyMC45NDQ1MjgzLDguNDMxNjk4MTEgQzE4LjM2Mzc3MzYsOC40MzE2OTgxMSAxNi4xOTI0NTI4LDEwLjIwOTQzNCAxNS41Nzk2MjI2LDEyLjYwMjY0MTUgTDExLjE2ODMwMTksMTIuNjAyNjQxNSBDMTAuNTU1NDcxNywxMC4yMDk0MzQgOC4zODY3OTI0NSw4LjQzMTY5ODExIDUuODAzMzk2MjMsOC40MzE2OTgxMSBDMi43NDcxNjk4MSw4LjQzMTY5ODExIDAuMjU4ODY3OTI1LDEwLjkxNzM1ODUgMC4yNTg4Njc5MjUsMTMuOTc2MjI2NCBDMC4yNTg4Njc5MjUsMTcuMDMyNDUyOCAyLjc0NDUyODMsMTkuNTIwNzU0NyA1LjgwMzM5NjIzLDE5LjUyMDc1NDcgQzguMzg0MTUwOTQsMTkuNTIwNzU0NyAxMC41NTU0NzE3LDE3Ljc0MzAxODkgMTEuMTY4MzAxOSwxNS4zNDk4MTEzIEwxNS41ODQ5MDU3LDE1LjM0OTgxMTMgQzE2LjE5NzczNTgsMTcuNzQzMDE4OSAxOC4zNjY0MTUxLDE5LjUyMDc1NDcgMjAuOTQ5ODExMywxOS41MjA3NTQ3IEMyMy41MTQ3MTcsMTkuNTIwNzU0NyAyNS42NzAxODg3LDE3Ljc2OTQzNCAyNi4zMDE1MDk0LDE1LjQgTDI3LjQxMzU4NDksMTUuNCBDMjguOTI3MTY5OCwxNS40IDMwLjE2MDc1NDcsMTYuNjMwOTQzNCAzMC4xNjA3NTQ3LDE4LjE0NzE2OTggQzMwLjE2MDc1NDcsMjEuMTc2OTgxMSAzMi42MjUyODMsMjMuNjQxNTA5NCAzNS42NTUwOTQzLDIzLjY0MTUwOTQgTDM3LjQ1Mzk2MjMsMjMuNjQxNTA5NCBDMzguMDY2NzkyNSwyNi4wMzQ3MTcgNDAuMjM1NDcxNywyNy44MTI0NTI4IDQyLjgxODg2NzksMjcuODEyNDUyOCBDNDUuODc1MDk0MywyNy44MTI0NTI4IDQ4LjM2MzM5NjIsMjUuMzI2NzkyNSA0OC4zNjMzOTYyLDIyLjI2NzkyNDUgQzQ4LjM2MzM5NjIsMTkuMjExNjk4MSA0NS44Nzc3MzU4LDE2LjcyMzM5NjIgNDIuODE4ODY3OSwxNi43MjMzOTYyIEM0MC4yMzgxMTMyLDE2LjcyMzM5NjIgMzguMDY2NzkyNSwxOC41MDExMzIxIDM3LjQ1Mzk2MjMsMjAuODk0MzM5NiBMMzUuNjU1MDk0MywyMC44OTQzMzk2IEMzNC4xNDE1MDk0LDIwLjg5NDMzOTYgMzIuOTA3OTI0NSwxOS42NjMzOTYyIDMyLjkwNzkyNDUsMTguMTQ3MTY5OCBDMzIuOTA3OTI0NSwxNi40OTM1ODQ5IDMyLjE2ODMwMTksMTUuMDA5MDU2NiAzMS4wMDg2NzkyLDE0LjAwMjY0MTUgQzMyLjE3MDk0MzQsMTIuOTkzNTg0OSAzMi45MDc5MjQ1LDExLjUxMTY5ODEgMzIuOTA3OTI0NSw5Ljg1ODExMzIxIEMzMi45MDc5MjQ1LDguMzQ0NTI4MyAzNC4xMzg4Njc5LDcuMTEwOTQzNCAzNS42NTUwOTQzLDcuMTEwOTQzNCBMNDMuMzc2MjI2NCw3LjExMDk0MzQgQzQzLjk4OTA1NjYsOS41MDQxNTA5NCA0Ni4xNTc3MzU4LDExLjI4MTg4NjggNDguNzQxMTMyMSwxMS4yODE4ODY4IEM1MS43OTczNTg1LDExLjI4MTg4NjggNTQuMjg1NjYwNCw4Ljc5NjIyNjQyIDU0LjI4NTY2MDQsNS43MzczNTg0OSBDNTQuMjgzMDE4OSwyLjY3ODQ5MDU3IDUxLjc5NDcxNywwLjE5MDE4ODY3OSA0OC43Mzg0OTA2LDAuMTkwMTg4Njc5IFogTTUuODA4Njc5MjUsMTYuNzcwOTQzNCBDNC4yNjYwMzc3NCwxNi43NzA5NDM0IDMuMDExMzIwNzUsMTUuNTE2MjI2NCAzLjAxMTMyMDc1LDEzLjk3MzU4NDkgQzMuMDExMzIwNzUsMTIuNDMwOTQzNCA0LjI2NjAzNzc0LDExLjE3NjIyNjQgNS44MDg2NzkyNSwxMS4xNzYyMjY0IEM3LjM1MTMyMDc1LDExLjE3NjIyNjQgOC42MDYwMzc3NCwxMi40MzA5NDM0IDguNjA2MDM3NzQsMTMuOTczNTg0OSBDOC42MDYwMzc3NCwxNS41MTYyMjY0IDcuMzUxMzIwNzUsMTYuNzcwOTQzNCA1LjgwODY3OTI1LDE2Ljc3MDk0MzQgWiBNMjAuOTQ5ODExMywxNi43NzA5NDM0IEMxOS40MDcxNjk4LDE2Ljc3MDk0MzQgMTguMTUyNDUyOCwxNS41MTYyMjY0IDE4LjE1MjQ1MjgsMTMuOTczNTg0OSBDMTguMTUyNDUyOCwxMi40MzA5NDM0IDE5LjQwNzE2OTgsMTEuMTc2MjI2NCAyMC45NDk4MTEzLDExLjE3NjIyNjQgQzIyLjQ5MjQ1MjgsMTEuMTc2MjI2NCAyMy43NDcxNjk4LDEyLjQzMDk0MzQgMjMuNzQ3MTY5OCwxMy45NzM1ODQ5IEMyMy43NDcxNjk4LDE1LjUxNjIyNjQgMjIuNDkyNDUyOCwxNi43NzA5NDM0IDIwLjk0OTgxMTMsMTYuNzcwOTQzNCBaIE00Mi44MTYyMjY0LDE5LjQ2NzkyNDUgQzQ0LjM1ODg2NzksMTkuNDY3OTI0NSA0NS42MTM1ODQ5LDIwLjcyMjY0MTUgNDUuNjEzNTg0OSwyMi4yNjUyODMgQzQ1LjYxMzU4NDksMjMuODA3OTI0NSA0NC4zNTg4Njc5LDI1LjA2MjY0MTUgNDIuODE2MjI2NCwyNS4wNjI2NDE1IEM0MS4yNzM1ODQ5LDI1LjA2MjY0MTUgNDAuMDE4ODY3OSwyMy44MDc5MjQ1IDQwLjAxODg2NzksMjIuMjY1MjgzIEM0MC4wMjE1MDk0LDIwLjcyMjY0MTUgNDEuMjc2MjI2NCwxOS40Njc5MjQ1IDQyLjgxNjIyNjQsMTkuNDY3OTI0NSBaIE00OC43Mzg0OTA2LDguNTMyMDc1NDcgQzQ3LjE5NTg0OTEsOC41MzIwNzU0NyA0NS45NDExMzIxLDcuMjc3MzU4NDkgNDUuOTQxMTMyMSw1LjczNDcxNjk4IEM0NS45NDExMzIxLDQuMTkyMDc1NDcgNDcuMTk1ODQ5MSwyLjkzNzM1ODQ5IDQ4LjczODQ5MDYsMi45MzczNTg0OSBDNTAuMjgxMTMyMSwyLjkzNzM1ODQ5IDUxLjUzNTg0OTEsNC4xOTIwNzU0NyA1MS41MzU4NDkxLDUuNzM0NzE2OTggQzUxLjUzNTg0OTEsNy4yNzczNTg0OSA1MC4yODExMzIxLDguNTMyMDc1NDcgNDguNzM4NDkwNiw4LjUzMjA3NTQ3IFoiIGlkPSJTaGFwZSIgZmlsbD0iI0ZGNkQ1QSI+PC9wYXRoPiA8ZyBpZD0iR3JvdXAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDU2LjUyODMwMiwgNS41NDcxNzApIiBmaWxsPSIjMzg0RDVCIj48cGF0aCBkPSJNMS41Nzk2MjI2NCw3LjA5NzczNTg1IEMxLjU3OTYyMjY0LDYuNzY0OTA1NjYgMS40MDI2NDE1MSw2LjYwOTA1NjYgMS4wOTA5NDM0LDYuNjA5MDU2NiBMMC4xNzk2MjI2NDIsNi42MDkwNTY2IEwwLjE3OTYyMjY0Miw0Ljc2NTI4MzAyIEwyLjI0NzkyNDUzLDQuNzY1MjgzMDIgQzMuMjA0MTUwOTQsNC43NjUyODMwMiAzLjY3MTY5ODExLDUuMTg3OTI0NTMgMy42NzE2OTgxMSw2LjAwOTQzMzk2IEwzLjY3MTY5ODExLDYuNDMyMDc1NDcgQzMuNjcxNjk4MTEsNi43ODg2NzkyNSAzLjYyNjc5MjQ1LDcuMDc2NjAzNzcgMy42MjY3OTI0NSw3LjA3NjYwMzc3IEwzLjY3MTY5ODExLDcuMDc2NjAzNzcgQzQuMTE1NDcxNyw2LjA5OTI0NTI4IDUuNDQ5NDMzOTYsNC40OTg0OTA1NyA3Ljg5NTQ3MTcsNC40OTg0OTA1NyBDMTAuNTYzMzk2Miw0LjQ5ODQ5MDU3IDExLjc2MjY0MTUsNS45NDMzOTYyMyAxMS43NjI2NDE1LDguODA5NDMzOTYgTDExLjc2MjY0MTUsMTMuNjc3NzM1OCBDMTEuNzYyNjQxNSwxNC4wMTA1NjYgMTEuOTM5NjIyNiwxNC4xNjY0MTUxIDEyLjI1MTMyMDgsMTQuMTY2NDE1MSBMMTMuMTYyNjQxNSwxNC4xNjY0MTUxIEwxMy4xNjI2NDE1LDE2LjAxMDE4ODcgTDExLjAyODMwMTksMTYuMDEwMTg4NyBDMTAuMDI3MTY5OCwxNi4wMTAxODg3IDkuNjA0NTI4MywxNS41ODc1NDcyIDkuNjA0NTI4MywxNC41ODY0MTUxIEw5LjYwNDUyODMsOS4yOTgxMTMyMSBDOS42MDQ1MjgzLDcuNzE4NDkwNTcgOS4yOTI4MzAxOSw2LjQ3NDMzOTYyIDcuNDkzOTYyMjYsNi40NzQzMzk2MiBDNS43NjExMzIwOCw2LjQ3NDMzOTYyIDQuMzgyMjY0MTUsNy42MDc1NDcxNyAzLjkzODQ5MDU3LDkuMjMyMDc1NDcgQzMuNzgyNjQxNTEsOS42NzU4NDkwNiAzLjczNzczNTg1LDEwLjE4ODMwMTkgMy43Mzc3MzU4NSwxMC43NDMwMTg5IEwzLjczNzczNTg1LDE2LjAxMDE4ODcgTDEuNTgyMjY0MTUsMTYuMDEwMTg4NyBMMS41ODIyNjQxNSw3LjA5NzczNTg1IEwxLjU3OTYyMjY0LDcuMDk3NzM1ODUgWiIgaWQ9IlBhdGgiPjwvcGF0aD4gPHBhdGggZD0iTTE3LjY2OTA1NjYsNy40OTY2MDM3NyBMMTcuNjY5MDU2Niw3LjQ1MTY5ODExIEMxNy42NjkwNTY2LDcuNDUxNjk4MTEgMTUuNzM1NDcxNyw2LjQyOTQzMzk2IDE1LjczNTQ3MTcsNC4yNTAxODg2OCBDMTUuNzM1NDcxNywyLjA3MDk0MzQgMTcuNDY4MzAxOSwwLjA1MDE4ODY3OTIgMjAuNjI0OTA1NywwLjA1MDE4ODY3OTIgQzIzLjYyNTY2MDQsMC4wNTAxODg2NzkyIDI1LjUzODExMzIsMS44NTE2OTgxMSAyNS41MzgxMTMyLDQuMjk1MDk0MzQgQzI1LjUzODExMzIsNi42MDY0MTUwOSAyMy42NDk0MzQsOC4wMzAxODg2OCAyMy42NDk0MzQsOC4wMzAxODg2OCBMMjMuNjQ5NDM0LDguMDc1MDk0MzQgQzI1LjA3MzIwNzUsOC44OTY2MDM3NyAyNS45ODQ1MjgzLDkuOTg3NTQ3MTcgMjUuOTg0NTI4MywxMS42NzU0NzE3IEMyNS45ODQ1MjgzLDE0LjEyMTUwOTQgMjMuNzYzMDE4OSwxNi4yNzY5ODExIDIwLjU2MTUwOTQsMTYuMjc2OTgxMSBDMTcuNjA1NjYwNCwxNi4yNzY5ODExIDE1LjA5MzU4MjksMTQuNDMzMjA3NSAxNS4wOTM1ODI5LDExLjUxOTYyMjYgQzE1LjA5MDk0MzQsOC45NDE1MDk0MyAxNy42NjkwNTY2LDcuNDk2NjAzNzcgMTcuNjY5MDU2Niw3LjQ5NjYwMzc3IFogTTIwLjU1ODg2NzksMTQuMjUzNTg0OSBDMjIuMjA0NTI4MywxNC4yNTM1ODQ5IDIzLjczNjYwMzgsMTMuMTY1MjgzIDIzLjczNjYwMzgsMTEuNjA5NDM0IEMyMy43MzY2MDM4LDEwLjIzMDU2NiAyMi41NTg0OTA2LDkuNjMwOTQzNCAyMS4wOTI0NTI4LDkuMDMxMzIwNzUgQzIwLjQ5MjgzMDIsOC43ODU2NjAzOCAxOS42NDc1NDcyLDguNDUyODMwMTkgMTkuNDcwNTY2LDguNDUyODMwMTkgQzE4LjkxNTg0OTEsOC40NTI4MzAxOSAxNy4zMzYyMjY0LDkuNzQxODg2NzkgMTcuMzM2MjI2NCwxMS40MDg2NzkyIEMxNy4zMzYyMjY0LDEzLjE2NTI4MyAxOC44NDcxNjk4LDE0LjI1MzU4NDkgMjAuNTU4ODY3OSwxNC4yNTM1ODQ5IFogTTIxLjcxNTg0OTEsNy4xNCBDMjIuMjQ5NDM0LDcuMTQgMjMuMzgyNjQxNSw1LjgyNzE2OTgxIDIzLjM4MjY0MTUsNC40MjcxNjk4MSBDMjMuMzgyNjQxNSwyLjk4MjI2NDE1IDIyLjIyNTY2MDQsMi4wNzA5NDM0IDIwLjYyNzU0NzIsMi4wNzA5NDM0IEMxOC45MTU4NDkxLDIuMDcwOTQzNCAxNy45MTQ3MTcsMy4wNDgzMDE4OSAxNy45MTQ3MTcsNC4yOTI0NTI4MyBDMTcuOTE0NzE3LDUuNjcxMzIwNzUgMTkuMDkyODMwMiw2LjIwNDkwNTY2IDIwLjQ5MjgzMDIsNi43NTk2MjI2NCBDMjAuODA0NTI4Myw2Ljg5Njk4MTEzIDIxLjQ0OTA1NjYsNy4xNCAyMS43MTU4NDkxLDcuMTQgWiIgaWQ9IlNoYXBlIj48L3BhdGg+IDxwYXRoIGQ9Ik0yOS40MDUyODMsNy4wOTc3MzU4NSBDMjkuNDA1MjgzLDYuNzY0OTA1NjYgMjkuMjI4MzAxOSw2LjYwOTA1NjYgMjguOTE2NjAzOCw2LjYwOTA1NjYgTDI4LjAwNTI4Myw2LjYwOTA1NjYgTDI4LjAwNTI4Myw0Ljc2NTI4MzAyIEwzMC4wNzM1ODQ5LDQuNzY1MjgzMDIgQzMxLjAyOTgxMTMsNC43NjUyODMwMiAzMS40OTczNTg1LDUuMTg3OTI0NTMgMzEuNDk3MzU4NSw2LjAwOTQzMzk2IEwzMS40OTczNTg1LDYuNDMyMDc1NDcgQzMxLjQ5NzM1ODUsNi43ODg2NzkyNSAzMS40NTI0NTI4LDcuMDc2NjAzNzcgMzEuNDUyNDUyOCw3LjA3NjYwMzc3IEwzMS40OTczNTg1LDcuMDc2NjAzNzcgQzMxLjk0MTEzMjEsNi4wOTkyNDUyOCAzMy4yNzUwOTQzLDQuNDk4NDkwNTcgMzUuNzIxMTMyMSw0LjQ5ODQ5MDU3IEMzOC4zODkwNTY2LDQuNDk4NDkwNTcgMzkuNTg4MzAxOSw1Ljk0MzM5NjIzIDM5LjU4ODMwMTksOC44MDk0MzM5NiBMMzkuNTg4MzAxOSwxMy42Nzc3MzU4IEMzOS41ODgzMDE5LDE0LjAxMDU2NiAzOS43NjUyODMsMTQuMTY2NDE1MSA0MC4wNzY5ODExLDE0LjE2NjQxNTEgTDQwLjk4ODMwMTksMTQuMTY2NDE1MSBMNDAuOTg4MzAxOSwxNi4wMTAxODg3IEwzOC44NTM5NjIzLDE2LjAxMDE4ODcgQzM3Ljg1MjgzMDIsMTYuMDEwMTg4NyAzNy40MzAxODg3LDE1LjU4NzU0NzIgMzcuNDMwMTg4NywxNC41ODY0MTUxIEwzNy40MzAxODg3LDkuMjk4MTEzMjEgQzM3LjQzMDE4ODcsNy43MTg0OTA1NyAzNy4xMTg0OTA2LDYuNDc0MzM5NjIgMzUuMzE5NjIyNiw2LjQ3NDMzOTYyIEMzMy41ODY3OTI1LDYuNDc0MzM5NjIgMzIuMjA3OTI0NSw3LjYwNzU0NzE3IDMxLjc2NDE1MDksOS4yMzIwNzU0NyBDMzEuNjA4MzAxOSw5LjY3NTg0OTA2IDMxLjU2MzM5NjIsMTAuMTg4MzAxOSAzMS41NjMzOTYyLDEwLjc0MzAxODkgTDMxLjU2MzM5NjIsMTYuMDEwMTg4NyBMMjkuNDA3OTI0NSwxNi4wMTAxODg3IEwyOS40MDc5MjQ1LDcuMDk3NzM1ODUgTDI5LjQwNTI4Myw3LjA5NzczNTg1IFoiIGlkPSJQYXRoIj48L3BhdGg+IDxwb2x5Z29uIGlkPSJQYXRoIiBwb2ludHM9IjQzLjU0IDEzLjcyIDQ1Ljc0MDM3NzQgMTMuNzIgNDUuNzQwMzc3NCAxNi4wMTAxODg3IDQzLjU0IDE2LjAxMDE4ODciPjwvcG9seWdvbj4gPHBhdGggZD0iTTQ4LjcxNzM1ODUsNy4wOTc3MzU4NSBDNDguNzE3MzU4NSw2Ljc2NDkwNTY2IDQ4LjU0MDM3NzQsNi42MDkwNTY2IDQ4LjIyODY3OTIsNi42MDkwNTY2IEw0Ny4zMTczNTg1LDYuNjA5MDU2NiBMNDcuMzE3MzU4NSw0Ljc2NTI4MzAyIEw0OS40Mjc5MjQ1LDQuNzY1MjgzMDIgQzUwLjQyOTA1NjYsNC43NjUyODMwMiA1MC44NTE2OTgxLDUuMTg3OTI0NTMgNTAuODUxNjk4MSw2LjE4OTA1NjYgTDUwLjg1MTY5ODEsMTMuNjgwMzc3NCBDNTAuODUxNjk4MSwxNC4wMTMyMDc1IDUxLjAyODY3OTIsMTQuMTY5MDU2NiA1MS4zNDAzNzc0LDE0LjE2OTA1NjYgTDUyLjI1MTY5ODEsMTQuMTY5MDU2NiBMNTIuMjUxNjk4MSwxNi4wMTI4MzAyIEw1MC4xNDExMzIxLDE2LjAxMjgzMDIgQzQ5LjE0LDE2LjAxMjgzMDIgNDguNzE3MzU4NSwxNS41OTAxODg3IDQ4LjcxNzM1ODUsMTQuNTg5MDU2NiBMNDguNzE3MzU4NSw3LjA5NzczNTg1IFoiIGlkPSJQYXRoIj48L3BhdGg+IDxwYXRoIGQ9Ik02MC4yMzE2OTgxLDQuNDk1ODQ5MDYgQzYzLjU4OTA1NjYsNC40OTU4NDkwNiA2Ni4yOTkyNDUzLDYuOTYzMDE4ODcgNjYuMjk5MjQ1MywxMC4zNjUyODMgQzY2LjI5OTI0NTMsMTMuNzg4Njc5MiA2My41ODY0MTUxLDE2LjI3Njk4MTEgNjAuMjMxNjk4MSwxNi4yNzY5ODExIEM1Ni44NzQzMzk2LDE2LjI3Njk4MTEgNTQuMTg1MjgzLDEzLjc4NjAzNzcgNTQuMTg1MjgzLDEwLjM2NTI4MyBDNTQuMTg1MjgzLDYuOTYzMDE4ODcgNTYuODc0MzM5Niw0LjQ5NTg0OTA2IDYwLjIzMTY5ODEsNC40OTU4NDkwNiBaIE02MC4yMzE2OTgxLDE0LjQwOTQzNCBDNjIuMzY2MDM3NywxNC40MDk0MzQgNjQuMDk4ODY3OSwxMi43MTg4Njc5IDY0LjA5ODg2NzksMTAuMzYyNjQxNSBDNjQuMDk4ODY3OSw4LjAyNzU0NzE3IDYyLjM2NjAzNzcsNi4zNjA3NTQ3MiA2MC4yMzE2OTgxLDYuMzYwNzU0NzIgQzU4LjEyMTEzMjEsNi4zNjA3NTQ3MiA1Ni4zODU2NjA0LDguMDI3NTQ3MTcgNTYuMzg1NjYwNCwxMC4zNjI2NDE1IEM1Ni4zODU2NjA0LDEyLjcyMTUwOTQgNTguMTE4NDkwNiwxNC40MDk0MzQgNjAuMjMxNjk4MSwxNC40MDk0MzQgWiIgaWQ9IlNoYXBlIj48L3BhdGg+PC9nPiA8cGF0aCBkPSJNMTA2LjIzMDk0Myw5LjYzODg2NzkyIEMxMDUuMTI0MTUxLDkuNjM4ODY3OTIgMTA0LjIyMzM5Niw4LjczODExMzIxIDEwNC4yMjMzOTYsNy42MzEzMjA3NSBDMTA0LjIyMzM5Niw2LjUyNDUyODMgMTA1LjEyNDE1MSw1LjYyMzc3MzU4IDEwNi4yMzA5NDMsNS42MjM3NzM1OCBDMTA3LjMzNzczNiw1LjYyMzc3MzU4IDEwOC4yMzg0OTEsNi41MjQ1MjgzIDEwOC4yMzg0OTEsNy42MzEzMjA3NSBDMTA4LjIzODQ5MSw4LjczODExMzIxIDEwNy4zMzc3MzYsOS42Mzg4Njc5MiAxMDYuMjMwOTQzLDkuNjM4ODY3OTIgWiBNMTA2LjIzMDk0Myw2LjU4NzkyNDUzIEMxMDUuNjU3NzM2LDYuNTg3OTI0NTMgMTA1LjE5MDE4OSw3LjA1NTQ3MTcgMTA1LjE5MDE4OSw3LjYyODY3OTI1IEMxMDUuMTkwMTg5LDguMjAxODg2NzkgMTA1LjY1NzczNiw4LjY2OTQzMzk2IDEwNi4yMzA5NDMsOC42Njk0MzM5NiBDMTA2LjgwNDE1MSw4LjY2OTQzMzk2IDEwNy4yNzE2OTgsOC4yMDE4ODY3OSAxMDcuMjcxNjk4LDcuNjI4Njc5MjUgQzEwNy4yNzE2OTgsNy4wNTU0NzE3IDEwNi44MDQxNTEsNi41ODc5MjQ1MyAxMDYuMjMwOTQzLDYuNTg3OTI0NTMgWiIgaWQ9IlNoYXBlIiBmaWxsPSIjRkY2RDVBIj48L3BhdGg+PC9nPjwvZz48L2c+PC9zdmc+PC9hPjwvZGl2PiA8ZGl2IGNsYXNzPSJoaWRkZW4tc20tYW5kLWRvd24gZWwtY29sIGVsLWNvbC0yNCBlbC1jb2wtbWQtMTkgZWwtY29sLWxnLTE4Ij48dWwgcm9sZT0ibWVudWJhciIgbW9kZT0iaG9yaXpvbnRhbCIgY2xhc3M9ImRlZmF1bHQtbWVudSBlbC1tZW51LS1ob3Jpem9udGFsIGVsLW1lbnUiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ij48bGkgcm9sZT0ibWVudWl0ZW0iIGFyaWEtaGFzcG9wdXA9InRydWUiIGNsYXNzPSJuYXZpZ2F0aW9uLWl0ZW0gZWwtc3VibWVudSI+PGRpdiBjbGFzcz0iZWwtc3VibWVudV9fdGl0bGUiIHN0eWxlPSJib3JkZXItYm90dG9tLWNvbG9yOnRyYW5zcGFyZW50O2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZmZmOyI+UHJvZHVjdDxpIGNsYXNzPSJlbC1zdWJtZW51X19pY29uLWFycm93IGVsLWljb24tYXJyb3ctZG93biI+PC9pPjwvZGl2PjxkaXYgY2xhc3M9ImVsLW1lbnUtLWhvcml6b250YWwiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij48dWwgcm9sZT0ibWVudSIgY2xhc3M9ImVsLW1lbnUgZWwtbWVudS0tcG9wdXAgZWwtbWVudS0tcG9wdXAtIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojZmZmOyI+IDxsaSByb2xlPSJtZW51aXRlbSIgdGFiaW5kZXg9Ii0xIiBjbGFzcz0iZWwtbWVudS1pdGVtIiBzdHlsZT0iY29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ij48YSBocmVmPSJodHRwczovL2RvY3MubjhuLmlvL2dldHRpbmctc3RhcnRlZC9xdWlja3N0YXJ0Lmh0bWwiIHRhcmdldD0iX2JsYW5rIj5RdWlja3N0YXJ0PC9hPjwvbGk+IDxsaSByb2xlPSJtZW51aXRlbSIgdGFiaW5kZXg9Ii0xIiBjbGFzcz0iZWwtbWVudS1pdGVtIiBzdHlsZT0iY29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ij48YSBocmVmPSIvaW50ZWdyYXRpb25zIj5BcHBzICZhbXA7IG5vZGVzPC9hPjwvbGk+IDxsaSByb2xlPSJtZW51aXRlbSIgdGFiaW5kZXg9Ii0xIiBjbGFzcz0iZWwtbWVudS1pdGVtIiBzdHlsZT0iY29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ij48YSBocmVmPSIvd29ya2Zsb3dzIj5Xb3JrZmxvd3M8L2E+PC9saT4gPGRpdiBjbGFzcz0iZHJvcGRvd24tbWVudS1kaXZpZGVyIj48L2Rpdj4gPGxpIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiIGNsYXNzPSJlbC1tZW51LWl0ZW0iIHN0eWxlPSJjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZmZjsiPjxhIGhyZWY9Imh0dHBzOi8vZG9jcy5uOG4uaW8vIiB0YXJnZXQ9Il9ibGFuayI+RG9jczwvYT48L2xpPiA8bGkgcm9sZT0ibWVudWl0ZW0iIHRhYmluZGV4PSItMSIgY2xhc3M9ImVsLW1lbnUtaXRlbSIgc3R5bGU9ImNvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZmZmOyI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL244bi1pby9uOG4iIHRhcmdldD0iX2JsYW5rIj5HaXRodWI8L2E+PC9saT48L3VsPjwvZGl2PjwvbGk+IDxsaSByb2xlPSJtZW51aXRlbSIgYXJpYS1oYXNwb3B1cD0idHJ1ZSIgY2xhc3M9Im5hdmlnYXRpb24taXRlbSBlbC1zdWJtZW51Ij48ZGl2IGNsYXNzPSJlbC1zdWJtZW51X190aXRsZSIgc3R5bGU9ImJvcmRlci1ib3R0b20tY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ij5Db21tdW5pdHk8aSBjbGFzcz0iZWwtc3VibWVudV9faWNvbi1hcnJvdyBlbC1pY29uLWFycm93LWRvd24iPjwvaT48L2Rpdj48ZGl2IGNsYXNzPSJlbC1tZW51LS1ob3Jpem9udGFsIiBzdHlsZT0iZGlzcGxheTpub25lOyI+PHVsIHJvbGU9Im1lbnUiIGNsYXNzPSJlbC1tZW51IGVsLW1lbnUtLXBvcHVwIGVsLW1lbnUtLXBvcHVwLSIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6I2ZmZjsiPiA8bGkgcm9sZT0ibWVudWl0ZW0iIHRhYmluZGV4PSItMSIgY2xhc3M9ImVsLW1lbnUtaXRlbSIgc3R5bGU9ImNvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZmZmOyI+PGEgaHJlZj0iaHR0cHM6Ly9jb21tdW5pdHkubjhuLmlvIiB0YXJnZXQ9Il9ibGFuayI+Rm9ydW08L2E+PC9saT4gPGxpIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiIGNsYXNzPSJlbC1tZW51LWl0ZW0iIHN0eWxlPSJjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZmZjsiPjxhIGhyZWY9Imh0dHBzOi8vbWVkaXVtLmNvbS9uOG4taW8vIiB0YXJnZXQ9Il9ibGFuayI+QmxvZzwvYT48L2xpPiA8bGkgcm9sZT0ibWVudWl0ZW0iIHRhYmluZGV4PSItMSIgY2xhc3M9ImVsLW1lbnUtaXRlbSIgc3R5bGU9ImNvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZmZmOyI+PGEgaHJlZj0iaHR0cHM6Ly9kb2NzLm44bi5pby9yZWZlcmVuY2UvY29udHJpYnV0aW5nLmh0bWwiIHRhcmdldD0iX2JsYW5rIj4KCQkJCUNvbnRyaWJ1dGUKCQkJPC9hPjwvbGk+PC91bD48L2Rpdj48L2xpPiA8bGkgcm9sZT0ibWVudWl0ZW0iIHRhYmluZGV4PSItMSIgY2xhc3M9ImVsLW1lbnUtaXRlbSBuYXZpZ2F0aW9uLWl0ZW0iIHN0eWxlPSJjb2xvcjojMzMzO2JvcmRlci1ib3R0b20tY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1jb2xvcjojZmZmOyI+PGEgaHJlZj0iaHR0cHM6Ly9uOG4uY2xvdWQiIHRhcmdldD0iX2JsYW5rIj5uOG4uY2xvdWQ8L2E+PC9saT4gPGxpIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiIGNsYXNzPSJlbC1tZW51LWl0ZW0gdXNlci1tZW51IiBzdHlsZT0iY29sb3I6IzMzMztib3JkZXItYm90dG9tLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtY29sb3I6I2ZmZjsiPjxhIGhyZWY9Ii9sb2dpbiIgdGl0bGU9IkxvZ2luIj48YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImVsLWJ1dHRvbiBlbC1idXR0b24tLXNlY29uZGFyeSBlbC1idXR0b24tLXNtYWxsIGlzLXJvdW5kIj48IS0tLS0+PCEtLS0tPjxzcGFuPjxzcGFuPlNpZ24gaW48L3NwYW4+PC9zcGFuPjwvYnV0dG9uPjwvYT4gPGEgaHJlZj0iL3JlZ2lzdGVyIiB0aXRsZT0iUmVnaXN0ZXIiPjxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iZWwtYnV0dG9uIGVsLWJ1dHRvbi0tcHJpbWFyeSBlbC1idXR0b24tLXNtYWxsIGlzLXJvdW5kIj48IS0tLS0+PCEtLS0tPjxzcGFuPjxzcGFuPlJlZ2lzdGVyPC9zcGFuPjwvc3Bhbj48L2J1dHRvbj48L2E+PC9saT48L3VsPjwvZGl2PiA8ZGl2IGNsYXNzPSJtZW51LXRvZ2dsZSBoaWRkZW4tbWQtYW5kLXVwIGVsLWNvbCBlbC1jb2wtMjQgZWwtY29sLXhzLTggZWwtY29sLXNtLTgiPjxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iZWwtYnV0dG9uIGVsLWJ1dHRvbi0tZGVmYXVsdCBlbC1idXR0b24tLW1lZGl1bSI+PCEtLS0tPjwhLS0tLT48c3Bhbj48c3ZnIGFyaWEtaGlkZGVuPSJ0cnVlIiBmb2N1c2FibGU9ImZhbHNlIiBkYXRhLXByZWZpeD0iZmFzIiBkYXRhLWljb249ImJhcnMiIHJvbGU9ImltZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNDQ4IDUxMiIgY2xhc3M9InN2Zy1pbmxpbmUtLWZhIGZhLWJhcnMgZmEtdy0xNCI+PHBhdGggZmlsbD0iY3VycmVudENvbG9yIiBkPSJNMTYgMTMyaDQxNmM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2Vjc2YzAtOC44MzctNy4xNjMtMTYtMTYtMTZIMTZDNy4xNjMgNjAgMCA2Ny4xNjMgMCA3NnY0MGMwIDguODM3IDcuMTYzIDE2IDE2IDE2em0wIDE2MGg0MTZjOC44MzcgMCAxNi03LjE2MyAxNi0xNnYtNDBjMC04LjgzNy03LjE2My0xNi0xNi0xNkgxNmMtOC44MzcgMC0xNiA3LjE2My0xNiAxNnY0MGMwIDguODM3IDcuMTYzIDE2IDE2IDE2em0wIDE2MGg0MTZjOC44MzcgMCAxNi03LjE2MyAxNi0xNnYtNDBjMC04LjgzNy03LjE2My0xNi0xNi0xNkgxNmMtOC44MzcgMC0xNiA3LjE2My0xNiAxNnY0MGMwIDguODM3IDcuMTYzIDE2IDE2IDE2eiI+PC9wYXRoPjwvc3ZnPjwvc3Bhbj48L2J1dHRvbj48L2Rpdj4gPGRpdiBjbGFzcz0iaGlkZGVuLW1kLWFuZC11cCBlbC1jb2wgZWwtY29sLTI0IGVsLWNvbC1zbS0yNCI+PGRpdiBzdHlsZT0iZGlzcGxheTpub25lOyI+PGRpdiBjbGFzcz0ibWVudS1jb250YWluZXIiPjx1bCByb2xlPSJtZW51YmFyIiBtb2RlPSJ2ZXJ0aWNhbCIgY2xhc3M9ImRlZmF1bHQtbWVudSBlbC1tZW51IiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojZmZmOyI+PGxpIHJvbGU9Im1lbnVpdGVtIiBhcmlhLWhhc3BvcHVwPSJ0cnVlIiBjbGFzcz0ibmF2aWdhdGlvbi1pdGVtIGVsLXN1Ym1lbnUiPjxkaXYgY2xhc3M9ImVsLXN1Ym1lbnVfX3RpdGxlIiBzdHlsZT0icGFkZGluZy1sZWZ0OjIwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ij5Qcm9kdWN0PGkgY2xhc3M9ImVsLXN1Ym1lbnVfX2ljb24tYXJyb3cgZWwtaWNvbi1hcnJvdy1kb3duIj48L2k+PC9kaXY+PHVsIHJvbGU9Im1lbnUiIGNsYXNzPSJlbC1tZW51IGVsLW1lbnUtLWlubGluZSIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6I2ZmZjtkaXNwbGF5Om5vbmU7Ij4gPGxpIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiIGNsYXNzPSJlbC1tZW51LWl0ZW0iIHN0eWxlPSJwYWRkaW5nLWxlZnQ6NDBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZmZjsiPjxhIGhyZWY9Imh0dHBzOi8vZG9jcy5uOG4uaW8vZ2V0dGluZy1zdGFydGVkL3F1aWNrc3RhcnQuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlF1aWNrc3RhcnQ8L2E+PC9saT4gPGxpIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiIGNsYXNzPSJlbC1tZW51LWl0ZW0iIHN0eWxlPSJwYWRkaW5nLWxlZnQ6NDBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZmZjsiPjxhIGhyZWY9Ii9pbnRlZ3JhdGlvbnMiPkFwcHMgJmFtcDsgbm9kZXM8L2E+PC9saT4gPGxpIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiIGNsYXNzPSJlbC1tZW51LWl0ZW0iIHN0eWxlPSJwYWRkaW5nLWxlZnQ6NDBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZmZjsiPjxhIGhyZWY9Ii93b3JrZmxvd3MiPldvcmtmbG93czwvYT48L2xpPiA8ZGl2IGNsYXNzPSJkcm9wZG93bi1tZW51LWRpdmlkZXIiPjwvZGl2PiA8bGkgcm9sZT0ibWVudWl0ZW0iIHRhYmluZGV4PSItMSIgY2xhc3M9ImVsLW1lbnUtaXRlbSIgc3R5bGU9InBhZGRpbmctbGVmdDo0MHB4O2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZmZmOyI+PGEgaHJlZj0iaHR0cHM6Ly9kb2NzLm44bi5pby8iIHRhcmdldD0iX2JsYW5rIj5Eb2NzPC9hPjwvbGk+IDxsaSByb2xlPSJtZW51aXRlbSIgdGFiaW5kZXg9Ii0xIiBjbGFzcz0iZWwtbWVudS1pdGVtIiBzdHlsZT0icGFkZGluZy1sZWZ0OjQwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ij48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vbjhuLWlvL244biIgdGFyZ2V0PSJfYmxhbmsiPkdpdGh1YjwvYT48L2xpPjwvdWw+PC9saT4gPGxpIHJvbGU9Im1lbnVpdGVtIiBhcmlhLWhhc3BvcHVwPSJ0cnVlIiBjbGFzcz0ibmF2aWdhdGlvbi1pdGVtIGVsLXN1Ym1lbnUiPjxkaXYgY2xhc3M9ImVsLXN1Ym1lbnVfX3RpdGxlIiBzdHlsZT0icGFkZGluZy1sZWZ0OjIwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ij5Db21tdW5pdHk8aSBjbGFzcz0iZWwtc3VibWVudV9faWNvbi1hcnJvdyBlbC1pY29uLWFycm93LWRvd24iPjwvaT48L2Rpdj48dWwgcm9sZT0ibWVudSIgY2xhc3M9ImVsLW1lbnUgZWwtbWVudS0taW5saW5lIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojZmZmO2Rpc3BsYXk6bm9uZTsiPiA8bGkgcm9sZT0ibWVudWl0ZW0iIHRhYmluZGV4PSItMSIgY2xhc3M9ImVsLW1lbnUtaXRlbSIgc3R5bGU9InBhZGRpbmctbGVmdDo0MHB4O2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZmZmOyI+PGEgaHJlZj0iaHR0cHM6Ly9jb21tdW5pdHkubjhuLmlvIiB0YXJnZXQ9Il9ibGFuayI+Rm9ydW08L2E+PC9saT4gPGxpIHJvbGU9Im1lbnVpdGVtIiB0YWJpbmRleD0iLTEiIGNsYXNzPSJlbC1tZW51LWl0ZW0iIHN0eWxlPSJwYWRkaW5nLWxlZnQ6NDBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZmZjsiPjxhIGhyZWY9Imh0dHBzOi8vbWVkaXVtLmNvbS9uOG4taW8vIiB0YXJnZXQ9Il9ibGFuayI+QmxvZzwvYT48L2xpPiA8bGkgcm9sZT0ibWVudWl0ZW0iIHRhYmluZGV4PSItMSIgY2xhc3M9ImVsLW1lbnUtaXRlbSIgc3R5bGU9InBhZGRpbmctbGVmdDo0MHB4O2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZmZmOyI+PGEgaHJlZj0iaHR0cHM6Ly9kb2NzLm44bi5pby9yZWZlcmVuY2UvY29udHJpYnV0aW5nLmh0bWwiIHRhcmdldD0iX2JsYW5rIj4KCQkJCUNvbnRyaWJ1dGUKCQkJPC9hPjwvbGk+PC91bD48L2xpPiA8bGkgcm9sZT0ibWVudWl0ZW0iIHRhYmluZGV4PSItMSIgY2xhc3M9ImVsLW1lbnUtaXRlbSBuYXZpZ2F0aW9uLWl0ZW0iIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MjBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZmZjsiPjxhIGhyZWY9Imh0dHBzOi8vbjhuLmNsb3VkIiB0YXJnZXQ9Il9ibGFuayI+bjhuLmNsb3VkPC9hPjwvbGk+IDxsaSByb2xlPSJtZW51aXRlbSIgdGFiaW5kZXg9Ii0xIiBjbGFzcz0iZWwtbWVudS1pdGVtIHVzZXItbWVudSIgc3R5bGU9InBhZGRpbmctbGVmdDoyMHB4O2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZmZmOyI+PGEgaHJlZj0iL2xvZ2luIiB0aXRsZT0iTG9naW4iPjxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iZWwtYnV0dG9uIGVsLWJ1dHRvbi0tc2Vjb25kYXJ5IGVsLWJ1dHRvbi0tc21hbGwgaXMtcm91bmQiPjwhLS0tLT48IS0tLS0+PHNwYW4+PHNwYW4+U2lnbiBpbjwvc3Bhbj48L3NwYW4+PC9idXR0b24+PC9hPiA8YSBocmVmPSIvcmVnaXN0ZXIiIHRpdGxlPSJSZWdpc3RlciI+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJlbC1idXR0b24gZWwtYnV0dG9uLS1wcmltYXJ5IGVsLWJ1dHRvbi0tc21hbGwgaXMtcm91bmQiPjwhLS0tLT48IS0tLS0+PHNwYW4+PHNwYW4+UmVnaXN0ZXI8L3NwYW4+PC9zcGFuPjwvYnV0dG9uPjwvYT48L2xpPjwvdWw+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9oZWFkZXI+IDxkaXYgY2xhc3M9ImNvbnRlbnQtbWFpbiI+PG1haW4gY2xhc3M9ImVsLW1haW4iPjxzZWN0aW9uIGNsYXNzPSJwYWdlLWhvbWUiPjxkaXYgY2xhc3M9ImJhY2tncm91bmQtaW1hZ2UgYm90dG9tLWJhY2tncm91bmQtaW1hZ2UiIGRhdGEtdi03YTM3MmFkYz48aW1nIGRhdGEtc3Jjc2V0PSIvX251eHQvaW1nLzZmNzU4NTAucG5nIDF4LCAvX251eHQvaW1nLzZmNzU4NTAucG5nIDF4LCAvX251eHQvaW1nLzFkNjhiMmYucG5nIDJ4IiBhbHQ9ImJhY2tncm91bmQgaW1hZ2UiIHdpZHRoPSIxMDAlIiBkYXRhLXYtN2EzNzJhZGM+PC9kaXY+IDxkaXYgY2xhc3M9InNlY3Rpb24gaW50cm8iPjxkaXYgY2xhc3M9ImJhY2tncm91bmQtaW1hZ2UgaXMtbWlycm9yZWQiIGRhdGEtdi03YTM3MmFkYz48aW1nIGRhdGEtc3Jjc2V0PSIvX251eHQvaW1nLzA3YjQwYzMucG5nIDF4LCAvX251eHQvaW1nLzJhMDY5OGIucG5nIDJ4IiBhbHQ9ImJhY2tncm91bmQgaW1hZ2UiIHdpZHRoPSIxMDAlIiBkYXRhLXYtN2EzNzJhZGM+PC9kaXY+IDxkaXYgY2xhc3M9ImJhY2tncm91bmQtaW1hZ2UiIGRhdGEtdi03YTM3MmFkYz48aW1nIGRhdGEtc3Jjc2V0PSIvX251eHQvaW1nL2Q4MTc3MjcucG5nIDF4LCAvX251eHQvaW1nL2NkZTQwN2YucG5nIDJ4IiBhbHQ9ImJhY2tncm91bmQgaW1hZ2UiIHdpZHRoPSIxMDAlIiBkYXRhLXYtN2EzNzJhZGM+PC9kaXY+IDxkaXYgY2xhc3M9ImNvbnRlbnQtd3JhcHBlciI+PGRpdiBjbGFzcz0ibWItMSBlbC1yb3ciPjxkaXYgY2xhc3M9ImVsLWNvbCBlbC1jb2wtMjIgZWwtY29sLW9mZnNldC0xIGVsLWNvbC1tZC1vZmZzZXQtMyBlbC1jb2wtbWQtMTgiPjxoMSBjbGFzcz0iaGVhZGluZyBjZW50ZXIiPgoJCQkJCQlFeHRlbmRhYmxlIHdvcmtmbG93IGF1dG9tYXRpb24KCQkJCQk8L2gxPjwvZGl2PjwvZGl2PiA8ZGl2IGNsYXNzPSJtYi01IGVsLXJvdyI+PGRpdiBjbGFzcz0iZWwtY29sIGVsLWNvbC0yMCBlbC1jb2wtb2Zmc2V0LTIgZWwtY29sLW1kLW9mZnNldC01IGVsLWNvbC1tZC0xNCI+PGRpdiBjbGFzcz0ic3ViLWhlYWRpbmciPjxhIGhyZWY9Imh0dHBzOi8vZmFpcmNvZGUuaW8iIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0icHJpbWFyeSI+ZmFpci1jb2RlPC9hPiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vbjhuLWlvL244bi9ibG9iL21hc3Rlci9wYWNrYWdlcy9jbGkvTElDRU5TRS5tZCIgdGl0bGU9IkxpY2Vuc2UgaW5mb3JtYXRpb24iIHRhcmdldD0iX2JsYW5rIj4KCQkJCQkJCWxpY2Vuc2VkIC0gQXBhY2hlIDIuMCB3aXRoIENvbW1vbnMgQ2xhdXNlCgkJCQkJCTwvYT48L2Rpdj48L2Rpdj48L2Rpdj4gPGRpdiBjbGFzcz0idGV4dC1jZW50ZXIgbWItOCI+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJlbC1idXR0b24gZ2V0LXN0YXJ0ZWQtYnV0dG9uIGVsLWJ1dHRvbi0tcHJpbWFyeSBlbC1idXR0b24tLWxhcmdlIGlzLXJvdW5kIj48IS0tLS0+PCEtLS0tPjxzcGFuPkdldCBTdGFydGVkCgkJCQk8L3NwYW4+PC9idXR0b24+PC9kaXY+IDxkaXYgY2xhc3M9ImJhZGdlLXJvdyBlbC1yb3ciIHN0eWxlPSJtYXJnaW4tbGVmdDotMTBweDttYXJnaW4tcmlnaHQ6LTEwcHg7Ij48ZGl2IGNsYXNzPSJlbC1jb2wgZWwtY29sLTIyIGVsLWNvbC1vZmZzZXQtMSBlbC1jb2wtbWQtb2Zmc2V0LTQgZWwtY29sLW1kLTggZWwtY29sLWxnLW9mZnNldC02IGVsLWNvbC1sZy02IiBzdHlsZT0icGFkZGluZy1sZWZ0OjEwcHg7cGFkZGluZy1yaWdodDoxMHB4OyI+PGRpdiBjbGFzcz0icHJvZHVjdC1odW50LWJhZGdlIiBkYXRhLXYtZWEyNmQ1ZmE+PGEgaHJlZj0iaHR0cHM6Ly93d3cucHJvZHVjdGh1bnQuY29tL3Bvc3RzL244bj91dG1fc291cmNlPWJhZGdlLXRvcC1wb3N0LWJhZGdlJnV0bV9tZWRpdW09YmFkZ2UmdXRtX3NvdWNlPWJhZGdlLW44biIgdGFyZ2V0PSJfYmxhbmsiIGRhdGEtdi1lYTI2ZDVmYT48aW1nIHNyYz0iaHR0cHM6Ly9hcGkucHJvZHVjdGh1bnQuY29tL3dpZGdldHMvZW1iZWQtaW1hZ2UvdjEvdG9wLXBvc3QtYmFkZ2Uuc3ZnP3Bvc3RfaWQ9MTcwMzkxJnRoZW1lPWxpZ2h0JnBlcmlvZD13ZWVrbHkiIGFsdD0ibjhuIC0gRnJlZSB3b3JrZmxvdyBhdXRvbWF0aW9uIHRvb2wgfCBQcm9kdWN0IEh1bnQgRW1iZWQiIHdpZHRoPSIyNTBweCIgaGVpZ2h0PSI1NHB4IiBzdHlsZT0id2lkdGg6IDI1MHB4OyBoZWlnaHQ6IDU0cHg7IiBkYXRhLXYtZWEyNmQ1ZmE+PC9hPjwvZGl2PjwvZGl2PiA8ZGl2IGNsYXNzPSJlbC1jb2wgZWwtY29sLTIyIGVsLWNvbC1vZmZzZXQtMSBlbC1jb2wtbWQtb2Zmc2V0LTAgZWwtY29sLW1kLTggZWwtY29sLWxnLW9mZnNldC0wIGVsLWNvbC1sZy02IiBzdHlsZT0icGFkZGluZy1sZWZ0OjEwcHg7cGFkZGluZy1yaWdodDoxMHB4OyI+PGRpdiBjbGFzcz0iZ2l0aHViLWJhZGdlIj48ZGl2IGNsYXNzPSJnaXRodWItYmFkZ2VfX3RpdGxlIj4KCQlHaXRodWIKCTwvZGl2PiA8ZGl2IGNsYXNzPSJnaC1idXR0b24tY29udGFpbmVyIj48YSBjbGFzcz0iZ2gtYnV0dG9uIj48c3ZnIHZlcnNpb249IjEuMSIgd2lkdGg9IjEyIiBoZWlnaHQ9IjE2IiB2aWV3Qm94PSIwIDAgMTIgMTYiIGFyaWEtaGlkZGVuPSJ0cnVlIiBjbGFzcz0ib2N0aWNvbiBvY3RpY29uLXN5bmMgc3BpbiI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAuMjQgNy40YTQuMTUgNC4xNSAwIDAgMS0xLjIgMy42IDQuMzQ2IDQuMzQ2IDAgMCAxLTUuNDEuNTRMNC44IDEwLjQuNSA5LjhsLjYgNC4yIDEuMzEtMS4yNmMyLjM2IDEuNzQgNS43IDEuNTcgNy44NC0uNTRhNS44NzYgNS44NzYgMCAwIDAgMS43NC00LjQ2bC0xLjc1LS4zNHpNMi45NiA1YTQuMzQ2IDQuMzQ2IDAgMCAxIDUuNDEtLjU0TDcuMiA1LjZsNC4zLjYtLjYtNC4yLTEuMzEgMS4yNmMtMi4zNi0xLjc0LTUuNy0xLjU3LTcuODUuNTRDLjUgNS4wMy0uMDYgNi42NS4wMSA4LjI2bDEuNzUuMzVBNC4xNyA0LjE3IDAgMCAxIDIuOTYgNXoiPjwvcGF0aD48L3N2Zz48L2E+PC9kaXY+IDxkaXYgY2xhc3M9ImdoLWJ1dHRvbi1jb250YWluZXIiPjxhIGNsYXNzPSJnaC1idXR0b24iPjxzdmcgdmVyc2lvbj0iMS4xIiB3aWR0aD0iMTIiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxMiAxNiIgYXJpYS1oaWRkZW49InRydWUiIGNsYXNzPSJvY3RpY29uIG9jdGljb24tc3luYyBzcGluIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMC4yNCA3LjRhNC4xNSA0LjE1IDAgMCAxLTEuMiAzLjYgNC4zNDYgNC4zNDYgMCAwIDEtNS40MS41NEw0LjggMTAuNC41IDkuOGwuNiA0LjIgMS4zMS0xLjI2YzIuMzYgMS43NCA1LjcgMS41NyA3Ljg0LS41NGE1Ljg3NiA1Ljg3NiAwIDAgMCAxLjc0LTQuNDZsLTEuNzUtLjM0ek0yLjk2IDVhNC4zNDYgNC4zNDYgMCAwIDEgNS40MS0uNTRMNy4yIDUuNmw0LjMuNi0uNi00LjItMS4zMSAxLjI2Yy0yLjM2LTEuNzQtNS43LTEuNTctNy44NS41NEMuNSA1LjAzLS4wNiA2LjY1LjAxIDguMjZsMS43NS4zNUE0LjE3IDQuMTcgMCAwIDEgMi45NiA1eiI+PC9wYXRoPjwvc3ZnPjwvYT48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4gPGRpdiBjbGFzcz0ic2VjdGlvbiBoZXJvIj48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHByZXNlcnZlQXNwZWN0UmF0aW89Im5vbmUiPjxkZWZzPjxyYWRpYWxHcmFkaWVudCBpZD0iZ3JhZDEiIGN4PSI1MCUiIGN5PSI1MCUiIHI9Ijc1JSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3R5bGU9InN0b3AtY29sb3I6cmdiKDI1MywgMjUzLCAyNTUpO3N0b3Atb3BhY2l0eToxOyI+PC9zdG9wPiA8c3RvcCBvZmZzZXQ9IjQ0JSIgc3R5bGU9InN0b3AtY29sb3I6cmdiKDI1MywgMjUzLCAyNTUpO3N0b3Atb3BhY2l0eToxOyI+PC9zdG9wPiA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0eWxlPSJzdG9wLWNvbG9yOnJnYigyMzcsIDIzNiwgMjQ0KTtzdG9wLW9wYWNpdHk6MTsiPjwvc3RvcD48L3JhZGlhbEdyYWRpZW50PjwvZGVmcz4gPHBvbHlnb24gZmlsbD0idXJsKCNncmFkMSkiIHBvaW50cz0iMCwwIDUwLDE1IDEwMCwwIDEwMCwxMDAgMCwxMDAiPjwvcG9seWdvbj48L3N2Zz4gPGRpdiBjbGFzcz0iY29udGVudC13cmFwcGVyIj48ZGl2IGNsYXNzPSJlbC1yb3ciPjxkaXYgY2xhc3M9ImVsLWNvbCBlbC1jb2wtMjIgZWwtY29sLW9mZnNldC0xIGVsLWNvbC1tZC1vZmZzZXQtNCBlbC1jb2wtbWQtMTYiPjxkaXYgY2xhc3M9Imhlcm8taW1hZ2UtY29udGFpbmVyIj48ZGl2IGNsYXNzPSJoZXJvLWltYWdlLWRlY29yYXRpb24gbGVmdCI+PGltZyB3aWR0aD0iMTAwJSI+PC9kaXY+IDxkaXYgY2xhc3M9Imhlcm8taW1hZ2UtZGVjb3JhdGlvbiByaWdodCI+PGltZyB3aWR0aD0iMTAwJSI+PC9kaXY+IDwhLS0tLT4gPGRpdiBjbGFzcz0iaGVyby1pbWFnZS1vdmVybGF5Ij48ZGl2IGNsYXNzPSJoZXJvLWltYWdlLXBsYXktY29udGFpbmVyIj48aW1nIHNyYz0iL19udXh0L2ltZy85MTlkZTQ2LnN2ZyIgYWx0PSJQbGF5IGljb24iPjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PiA8ZGl2PjwvZGl2PiA8ZGl2IGNsYXNzPSJ0ZXh0LWNlbnRlciBlbC1jb2wgZWwtY29sLTIyIGVsLWNvbC1vZmZzZXQtMSBlbC1jb2wtbWQtb2Zmc2V0LTYgZWwtY29sLW1kLTEyIj48cCBjbGFzcz0idGV4dCBtdXRlZCBtdC0yIG1iLTMiPgoJCQkJCQlXYXRjaCBob3cgc2ltcGxlIGl0IGlzIHRvIGRlc2lnbiBhCgkJCQkJCTxzcGFuIGNsYXNzPSJ0ZXh0IHNlbWlib2xkIj5UeXBlZm9ybTwvc3Bhbj4gKwoJCQkJCQk8c3BhbiBjbGFzcz0idGV4dCBzZW1pYm9sZCI+R29vZ2xlIFNoZWV0czwvc3Bhbj4gKwoJCQkJCQk8c3BhbiBjbGFzcz0idGV4dCBzZW1pYm9sZCI+U2xhY2s8L3NwYW4+IHdvcmtmbG93CgkJCQkJPC9wPjwvZGl2PjwvZGl2PiA8ZGl2IGNsYXNzPSJtdC04IHBiLTUgYmVuZWZpdHMtcm93IGVsLXJvdyI+PGRpdiBjbGFzcz0iZWwtY29sIGVsLWNvbC0yMiBlbC1jb2wtb2Zmc2V0LTEgZWwtY29sLW1kLW9mZnNldC0yIGVsLWNvbC1tZC02Ij48ZGl2IGNsYXNzPSJpY29uLXRleHQtZGVzY3JpcHRpb24tY2FyZCIgZGF0YS12LWE4NmYyNTJlPjxkaXYgY2xhc3M9ImltYWdlLXdyYXBwZXIgbWItMyIgZGF0YS12LWE4NmYyNTJlPjxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBjbGFzcz0ibWF0ZXJpYWwtaWNvbiBtYXRlcmlhbC1pY29uX19wcmltYXJ5IiBzdHlsZT0id2lkdGg6NDhweDtoZWlnaHQ6NDhweDsiIGRhdGEtdi0xZGUzZGQ2OCBkYXRhLXYtYTg2ZjI1MmU+PHRpdGxlIGRhdGEtdi0xZGUzZGQ2OD5PcGVuIGljb248L3RpdGxlPiA8IS0tLS0+IDxwYXRoIGQ9Ik0xNy45LDE3LjM5QzE3LjY0LDE2LjU5IDE2Ljg5LDE2IDE2LDE2SDE1VjEzQTEsMSAwIDAsMCAxNCwxMkg4VjEwSDEwQTEsMSAwIDAsMCAxMSw5VjdIMTNBMiwyIDAgMCwwIDE1LDVWNC41OUMxNy45Myw1Ljc3IDIwLDguNjQgMjAsMTJDMjAsMTQuMDggMTkuMiwxNS45NyAxNy45LDE3LjM5TTExLDE5LjkzQzcuMDUsMTkuNDQgNCwxNi4wOCA0LDEyQzQsMTEuMzggNC4wOCwxMC43OCA0LjIxLDEwLjIxTDksMTVWMTZBMiwyIDAgMCwwIDExLDE4TTEyLDJBMTAsMTAgMCAwLDAgMiwxMkExMCwxMCAwIDAsMCAxMiwyMkExMCwxMCAwIDAsMCAyMiwxMkExMCwxMCAwIDAsMCAxMiwyWiIgZmlsbD0iIiBkYXRhLXYtMWRlM2RkNjg+PC9wYXRoPjwvc3ZnPjwvZGl2PiA8aDMgY2xhc3M9ImhlYWRpbmciIGRhdGEtdi1hODZmMjUyZT5PcGVuPC9oMz4gPHAgY2xhc3M9InRleHQgbXV0ZWQiIGRhdGEtdi1hODZmMjUyZT4KCQkJCQkJVGhhbmtzIHRvIG91ciBmYWlyLWNvZGUgbGljZW5zZSwgcnVuIG44biBsb2NhbGx5LCBvciB0aGUgY2xvdWQuCgkJCQkJCURlY2lkZSB3aG8gZ2V0cyBhY2Nlc3MgYW5kIHdoZXJlIHlvdXIgZGF0YSBpcyBzdG9yZWQuCgkJCQkJPC9wPjwvZGl2PjwvZGl2PiA8ZGl2IGNsYXNzPSJlbC1jb2wgZWwtY29sLTIyIGVsLWNvbC1vZmZzZXQtMSBlbC1jb2wtbWQtNiI+PGRpdiBjbGFzcz0iaWNvbi10ZXh0LWRlc2NyaXB0aW9uLWNhcmQiIGRhdGEtdi1hODZmMjUyZT48ZGl2IGNsYXNzPSJpbWFnZS13cmFwcGVyIG1iLTMiIGRhdGEtdi1hODZmMjUyZT48c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgY2xhc3M9Im1hdGVyaWFsLWljb24gbWF0ZXJpYWwtaWNvbl9fcHJpbWFyeSIgc3R5bGU9IndpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7IiBkYXRhLXYtMWRlM2RkNjggZGF0YS12LWE4NmYyNTJlPjx0aXRsZSBkYXRhLXYtMWRlM2RkNjg+RXh0ZW5kYWJsZSBpY29uPC90aXRsZT4gPCEtLS0tPiA8cGF0aCBkPSJNOCwzQTIsMiAwIDAsMCA2LDVWOUEyLDIgMCAwLDEgNCwxMUgzVjEzSDRBMiwyIDAgMCwxIDYsMTVWMTlBMiwyIDAgMCwwIDgsMjFIMTBWMTlIOFYxNEEyLDIgMCAwLDAgNiwxMkEyLDIgMCAwLDAgOCwxMFY1SDEwVjNNMTYsM0EyLDIgMCAwLDEgMTgsNVY5QTIsMiAwIDAsMCAyMCwxMUgyMVYxM0gyMEEyLDIgMCAwLDAgMTgsMTVWMTlBMiwyIDAgMCwxIDE2LDIxSDE0VjE5SDE2VjE0QTIsMiAwIDAsMSAxOCwxMkEyLDIgMCAwLDEgMTYsMTBWNUgxNFYzSDE2WiIgZmlsbD0iIiBkYXRhLXYtMWRlM2RkNjg+PC9wYXRoPjwvc3ZnPjwvZGl2PiA8aDMgY2xhc3M9ImhlYWRpbmciIGRhdGEtdi1hODZmMjUyZT5FeHRlbmRhYmxlPC9oMz4gPHAgY2xhc3M9InRleHQgbXV0ZWQiIGRhdGEtdi1hODZmMjUyZT4KCQkJCQkJRWFzeSB0byBhdWdtZW50IHdpdGggY3VzdG9tIGZ1bmN0aW9ucyBsb2dpYywgYW5kIGFwcHMgd2l0aCBtaW5pbWFsCgkJCQkJCWVuZ2luZWVyaW5nIGVmZm9ydC4KCQkJCQk8L3A+PC9kaXY+PC9kaXY+IDxkaXYgY2xhc3M9ImVsLWNvbCBlbC1jb2wtMjIgZWwtY29sLW9mZnNldC0xIGVsLWNvbC1tZC02Ij48ZGl2IGNsYXNzPSJpY29uLXRleHQtZGVzY3JpcHRpb24tY2FyZCIgZGF0YS12LWE4NmYyNTJlPjxkaXYgY2xhc3M9ImltYWdlLXdyYXBwZXIgbWItMyIgZGF0YS12LWE4NmYyNTJlPjxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBjbGFzcz0ibWF0ZXJpYWwtaWNvbiBtYXRlcmlhbC1pY29uX19wcmltYXJ5IiBzdHlsZT0id2lkdGg6NDhweDtoZWlnaHQ6NDhweDsiIGRhdGEtdi0xZGUzZGQ2OCBkYXRhLXYtYTg2ZjI1MmU+PHRpdGxlIGRhdGEtdi0xZGUzZGQ2OD5Qb3dlcmZ1bCBpY29uPC90aXRsZT4gPCEtLS0tPiA8cGF0aCBkPSJNMTIsMkExMCwxMCAwIDAsMCAyLDEyQTEwLDEwIDAgMCwwIDEyLDIyQTEwLDEwIDAgMCwwIDIyLDEyQTEwLDEwIDAgMCwwIDEyLDJNMTIsNEE4LDggMCAwLDEgMjAsMTJDMjAsMTQuNCAxOSwxNi41IDE3LjMsMThDMTUuOSwxNi43IDE0LDE2IDEyLDE2QzEwLDE2IDguMiwxNi43IDYuNywxOEM1LDE2LjUgNCwxNC40IDQsMTJBOCw4IDAgMCwxIDEyLDRNMTAsNkExLDEgMCAwLDAgOSw3QTEsMSAwIDAsMCAxMCw4QTEsMSAwIDAsMCAxMSw3QTEsMSAwIDAsMCAxMCw2TTE0LDZBMSwxIDAgMCwwIDEzLDdBMSwxIDAgMCwwIDE0LDhBMSwxIDAgMCwwIDE1LDdBMSwxIDAgMCwwIDE0LDZNMTcuMDksOC45NEMxNi45Niw4Ljk0IDE2Ljg0LDguOTcgMTYuNyw5TDEzLjUsMTAuMzJMMTMuMjMsMTAuNDNDMTIuNjcsMTAgMTEuOTEsOS44OCAxMS4yNSwxMC4xNUMxMC4yMywxMC41NiA5LjczLDExLjczIDEwLjE1LDEyLjc1QzEwLjU2LDEzLjc3IDExLjczLDE0LjI3IDEyLjc1LDEzLjg1QzEzLjQxLDEzLjU5IDEzLjg4LDEzIDE0LDEyLjI4TDE0LjIzLDEyLjE4TDE3LjQ1LDEwLjg4TDE3LjQ3LDEwLjg3QzE4LDEwLjY2IDE4LjIzLDEwLjA4IDE4LjAzLDkuNTZDMTcuODcsOS4xOCAxNy41LDguOTMgMTcuMDksOC45NE03LDlBMSwxIDAgMCwwIDYsMTBBMSwxIDAgMCwwIDcsMTFBMSwxIDAgMCwwIDgsMTBBMSwxIDAgMCwwIDcsOVoiIGZpbGw9IiIgZGF0YS12LTFkZTNkZDY4PjwvcGF0aD48L3N2Zz48L2Rpdj4gPGgzIGNsYXNzPSJoZWFkaW5nIiBkYXRhLXYtYTg2ZjI1MmU+UG93ZXJmdWw8L2gzPiA8cCBjbGFzcz0idGV4dCBtdXRlZCIgZGF0YS12LWE4NmYyNTJlPgoJCQkJCQluOG4ncyBub2RlIGJhc2VkIGVkaXRvciBsZXRzIHlvdSBtYXAgYW55dGhpbmcgdG8gZXZlcnl0aGluZyBhbmQgZ28KCQkJCQkJYmV5b25kIGJhc2ljIEVUTC4KCQkJCQk8L3A+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+IDxkaXYgY2xhc3M9InNlY3Rpb24gZmVhdHVyZXMiPjxkaXYgY2xhc3M9ImNvbnRlbnQtd3JhcHBlciI+PGRpdiBjbGFzcz0iZWwtcm93Ij48ZGl2IGNsYXNzPSJlbC1jb2wgZWwtY29sLTIyIGVsLWNvbC1vZmZzZXQtMSBlbC1jb2wtbWQtb2Zmc2V0LTggZWwtY29sLW1kLTgiPjxoMiBjbGFzcz0iaGVhZGluZyBjZW50ZXIiPldoYXQgY2FuIEkgZG8gd2l0aCBuOG4/PC9oMj48L2Rpdj48L2Rpdj4gPGRpdiBjbGFzcz0iZmVhdHVyZXMtcm93IGVsLXJvdyBlbC1yb3ctLWZsZXgiPjxkaXYgY2xhc3M9ImVsLWNvbCBlbC1jb2wtMjIgZWwtY29sLW9mZnNldC0xIGVsLWNvbC1tZC1vZmZzZXQtMCBlbC1jb2wtbWQtMTAiPjxkaXYgY2xhc3M9InB0LTIiPjxkaXYgZGVzY3JpcHRpb249Ik1vdmUgYW5kIHRyYW5zZm9ybSBkYXRhIGJldHdlZW4gZGlmZmVyZW50IGFwcHMgYW5kIGRhdGFiYXNlcyB3aXRob3V0IGdldHRpbmcgY2F1Z2h0IHVwIGluIEFQSSBkb2NzIGFuZCB0cm91Ymxlc2hvb3RpbmcgQ09SUyBlcnJvcnMuIiBzcmM9Ii9fbnV4dC9pbWcvMjg3MzE4Zi5wbmciIHRodW1ibmFpbFdpZHRoPSIxMDAlIiBjbGFzcz0iZWwtY2FyZCBmZWF0dXJlLWNhcmQgaXMtbmV2ZXItc2hhZG93IGlzLWFjdGl2ZSIgZGF0YS12LTkxMWQ1ODAyPjwhLS0tLT48ZGl2IGNsYXNzPSJlbC1jYXJkX19ib2R5Ij48aDMgY2xhc3M9ImhlYWRpbmciIGRhdGEtdi05MTFkNTgwMj5TeW5jIGRhdGEgYmV0d2VlbiAxNTArIGFwcHM8L2gzPiA8cCBjbGFzcz0idGV4dCBtdXRlZCBtdC0yIiBkYXRhLXYtOTExZDU4MDI+CgkJCQkJCQlNb3ZlIGFuZCB0cmFuc2Zvcm0gZGF0YSBiZXR3ZWVuIGRpZmZlcmVudCBhcHBzIGFuZCBkYXRhYmFzZXMgd2l0aG91dCBnZXR0aW5nIGNhdWdodCB1cCBpbiBBUEkgZG9jcyBhbmQgdHJvdWJsZXNob290aW5nIENPUlMgZXJyb3JzLgoJCQkJCQk8L3A+PC9kaXY+PC9kaXY+PGRpdiBkZXNjcmlwdGlvbj0iR28gYmV5b25kIEVUTDogc3RhcnQgd2l0aCBzaW1wbGUgbm8tY29kZSBmbG93cyBhbmQgYWRkIGphdmFzY3JpcHQgZnVuY3Rpb25zLCBjb25kaXRpb25hbCBsb2dpYywgb3IgY3VzdG9tIGh0dHAgcmVxdWVzdHMgaW4gYSBzbmFwLiIgc3JjPSIvX251eHQvaW1nLzJkYzNhZTAuZ2lmIiB0aHVtYm5haWxXaWR0aD0iMTAwJSIgY2xhc3M9ImVsLWNhcmQgZmVhdHVyZS1jYXJkIGlzLW5ldmVyLXNoYWRvdyIgZGF0YS12LTkxMWQ1ODAyPjwhLS0tLT48ZGl2IGNsYXNzPSJlbC1jYXJkX19ib2R5Ij48aDMgY2xhc3M9ImhlYWRpbmciIGRhdGEtdi05MTFkNTgwMj5EZXNpZ24gcG93ZXJmdWwgd29ya2Zsb3dzPC9oMz4gPCEtLS0tPjwvZGl2PjwvZGl2PjxkaXYgZGVzY3JpcHRpb249IkRlc2lnbiBiZXNwb2tlIG5vZGVzIGZvciBhIHByb3ByaWV0YXJ5IENSTSwgZW5kcG9pbnRzIGZvciB5b3VyIHByb2R1Y3QsIG9yIGFueSBvdGhlciBzb2Z0d2FyZSwgYW5kIGVtcG93ZXIgeW91ciBtYXJrZXRpbmcgYW5kIG9wcyB0ZWFtcyB0byBjcmVhdGUgdGhlaXIgb3duIHdvcmtmbG93cy4iIHNyYz0iL19udXh0L2ltZy80MjY0OWZmLmpwZyIgdGh1bWJuYWlsV2lkdGg9IjEwMCUiIGNsYXNzPSJlbC1jYXJkIGZlYXR1cmUtY2FyZCBpcy1uZXZlci1zaGFkb3ciIGRhdGEtdi05MTFkNTgwMj48IS0tLS0+PGRpdiBjbGFzcz0iZWwtY2FyZF9fYm9keSI+PGgzIGNsYXNzPSJoZWFkaW5nIiBkYXRhLXYtOTExZDU4MDI+Q3JlYXRlIGN1c3RvbSBpbnRlZ3JhdGlvbnM8L2gzPiA8IS0tLS0+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+IDxkaXYgY2xhc3M9ImltYWdlLWNvbCBlbC1jb2wgZWwtY29sLTIyIGVsLWNvbC1vZmZzZXQtMSBlbC1jb2wtbWQtb2Zmc2V0LTIgZWwtY29sLW1kLTEyIj48ZGl2IGNsYXNzPSJmZWF0dXJlLWltYWdlLWNvbnRhaW5lciI+PCEtLS0tPiA8cCBjbGFzcz0idGV4dCBtdXRlZCB0ZXh0LWNlbnRlciI+CgkJCQkJCQlTZWUgd2hhdCBlbHNlIHlvdSBjYW4gZG8gd2l0aCBuOG4hIFZpc2l0IG91cgoJCQkJCQkJPGEgaHJlZj0iaHR0cHM6Ly9tZWRpdW0uY29tL244bi1pbyIgdGFyZ2V0PSJfYmxhbmsiPk1lZGl1bSBwdWJsaWNhdGlvbjwvYT48L3A+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+IDxkaXYgY2xhc3M9InNlY3Rpb24gZ2V0LXN0YXJ0ZWQiPjxkaXYgY2xhc3M9ImNvbnRlbnQtd3JhcHBlciI+PGRpdiBjbGFzcz0iZWwtcm93Ij48ZGl2IGNsYXNzPSJlbC1jb2wgZWwtY29sLTIyIGVsLWNvbC1vZmZzZXQtMSBlbC1jb2wtbWQtb2Zmc2V0LTggZWwtY29sLW1kLTgiPjxoMiBjbGFzcz0iaGVhZGluZyBjZW50ZXIiPkhvdyB0byBnZXQgc3RhcnRlZD88L2gyPjwvZGl2PjwvZGl2PiA8ZGl2IGNsYXNzPSJnZXQtc3RhcnRlZC1yb3cgZWwtcm93IiBzdHlsZT0ibWFyZ2luLWxlZnQ6LTEwcHg7bWFyZ2luLXJpZ2h0Oi0xMHB4OyI+PGRpdiBjbGFzcz0iZWwtY29sIGVsLWNvbC0yNCBlbC1jb2wtbWQtMTIiIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDtwYWRkaW5nLXJpZ2h0OjEwcHg7Ij48aDMgY2xhc3M9ImhlYWRpbmcgY2VudGVyIG1iLTIiPgoJCQkJCQlDTEkKCQkJCQk8L2gzPiA8ZGl2IGNsYXNzPSJleGVjdXRpb24tY29kZSBjbGktbnB4Ij48ZGl2IGNsYXNzPSJjbGljay10by1jb3B5IGNsaWNrYWJsZSI+CgkJQ2xpY2sgdG8gY29weQoJPC9kaXY+IDwhLS0tLT48L2Rpdj4gPGRpdiBjbGFzcz0iZXhlY3V0aW9uLWNvZGUgY2xpLW5wbS1pbnN0YWxsIj48ZGl2IGNsYXNzPSJjbGljay10by1jb3B5IGNsaWNrYWJsZSI+CgkJQ2xpY2sgdG8gY29weQoJPC9kaXY+IDwhLS0tLT48L2Rpdj4gPGRpdiBjbGFzcz0idGV4dC1jZW50ZXIiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9uOG4taW8vbjhuL2Jsb2IvbWFzdGVyL3BhY2thZ2VzL2NsaS9SRUFETUUubWQiIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0ibGluay1wcmltYXJ5Ij4KCQkJCQkJCUFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgQ0xJCgkJCQkJCTwvYT48L2Rpdj48L2Rpdj4gPGRpdiBjbGFzcz0iZWwtY29sIGVsLWNvbC0yNCBlbC1jb2wtbWQtMTIiIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDtwYWRkaW5nLXJpZ2h0OjEwcHg7Ij48aDMgY2xhc3M9ImhlYWRpbmcgY2VudGVyIG1iLTIiPgoJCQkJCQlEb2NrZXIKCQkJCQk8L2gzPiA8ZGl2IGNsYXNzPSJleGVjdXRpb24tY29kZSBkb2NrZXIiPjxkaXYgY2xhc3M9ImNsaWNrLXRvLWNvcHkgY2xpY2thYmxlIj4KCQlDbGljayB0byBjb3B5Cgk8L2Rpdj4gPCEtLS0tPjwvZGl2PiA8ZGl2IGNsYXNzPSJ0ZXh0LWNlbnRlciI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL244bi1pby9uOG4vYmxvYi9tYXN0ZXIvZG9ja2VyL2ltYWdlcy9uOG4vUkVBRE1FLm1kIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9ImxpbmstcHJpbWFyeSI+CgkJCQkJCQlBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGRvY2tlciBkZXBsb3ltZW50CgkJCQkJCTwvYT48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4gPGRpdiBjbGFzcz0ic2VjdGlvbiBob3N0aW5nLWluZm8iPjxkaXYgY2xhc3M9ImNvbnRlbnQtd3JhcHBlciI+PGRpdiBjbGFzcz0iZWwtcm93Ij48ZGl2IGNsYXNzPSJlbC1jb2wgZWwtY29sLTIyIGVsLWNvbC1vZmZzZXQtMSBlbC1jb2wtbWQtb2Zmc2V0LTUgZWwtY29sLW1kLTE0Ij48ZGl2IGNsYXNzPSJlbC1jYXJkIGhvc3RpbmctaW5mby1jYXJkIGlzLW5ldmVyLXNoYWRvdyI+PCEtLS0tPjxkaXYgY2xhc3M9ImVsLWNhcmRfX2JvZHkiPjxkaXYgY2xhc3M9ImVsLXJvdyBpcy1qdXN0aWZ5LXNwYWNlLWJldHdlZW4gaXMtYWxpZ24tbWlkZGxlIGVsLXJvdy0tZmxleCI+PHNwYW4+CgkJCQkJCQkJbjhuLmNsb3VkIC0gb3VyIGhvc3RlZCBvZmZlcmluZyBpcyBub3cgaW4gZWFybHkgYWNjZXNzCgkJCQkJCQk8L3NwYW4+IDxkaXY+PGEgaHJlZj0iaHR0cHM6Ly9uOG4uY2xvdWQ/dXRtX3NvdXJjZT1uOG4uaW8mYW1wO3V0bV9tZWRpdW09d2ViJmFtcDt1dG1fY2FtcGFpZ249aG9tZXBhZ2UtY2xvdWQtY3RhIiB0YXJnZXQ9Il9ibGFuayI+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJlbC1idXR0b24gZWwtYnV0dG9uLS1kZWZhdWx0IGlzLXJvdW5kIj48IS0tLS0+PCEtLS0tPjxzcGFuPkxlYXJuIG1vcmU8L3NwYW4+PC9idXR0b24+PC9hPjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PiA8ZGl2IGNsYXNzPSJzZWN0aW9uIGNvbnRhY3QtaW5mbyBkYXJrIHB0LTggcGItOCI+PGRpdiBjbGFzcz0iY29udGVudC13cmFwcGVyIj48ZGl2IGNsYXNzPSJlbC1yb3ciPjxkaXYgY2xhc3M9ImVsLWNvbCBlbC1jb2wtMjIgZWwtY29sLW9mZnNldC0xIGVsLWNvbC1tZC05Ij48aDIgY2xhc3M9ImhlYWRpbmcgbWItMiI+CgkJCQkJCUdldCB1cGRhdGVzIGZyb20gbjhuCgkJCQkJPC9oMj48L2Rpdj48L2Rpdj4gPGRpdiBjbGFzcz0ibWItNSBlbC1yb3ciPjxkaXYgY2xhc3M9ImVsLWNvbCBlbC1jb2wtMjIgZWwtY29sLW9mZnNldC0xIGVsLWNvbC1tZC0xMSI+PGRpdiBjbGFzcz0iYnJhbmRpbmctaXRlbXMiPjxhIGhyZWY9Imh0dHBzOi8vbWVkaXVtLmNvbS9uOG4taW8iIGNsYXNzPSJicmFuZGluZy1pdGVtIiBkYXRhLXYtYTNjMTUzNGE+PGRpdiBjbGFzcz0iYnJhbmRpbmctaXRlbV9fY29udGVudCIgZGF0YS12LWEzYzE1MzRhPjxzdmcgYXJpYS1oaWRkZW49InRydWUiIGZvY3VzYWJsZT0iZmFsc2UiIGRhdGEtcHJlZml4PSJmYWIiIGRhdGEtaWNvbj0ibWVkaXVtIiByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDQ0OCA1MTIiIGNsYXNzPSJzdmctaW5saW5lLS1mYSBmYS1tZWRpdW0gZmEtdy0xNCIgZGF0YS12LWEzYzE1MzRhIGRhdGEtdi1hM2MxNTM0YT48cGF0aCBmaWxsPSJjdXJyZW50Q29sb3IiIGQ9Ik0wIDMydjQ0OGg0NDhWMzJIMHptMzcyLjIgMTA2LjFsLTI0IDIzYy0yLjEgMS42LTMuMSA0LjItMi43IDYuN3YxNjkuM2MtLjQgMi42LjYgNS4yIDIuNyA2LjdsMjMuNSAyM3Y1LjFoLTExOFYzNjdsMjQuMy0yMy42YzIuNC0yLjQgMi40LTMuMSAyLjQtNi43VjE5OS44bC02Ny42IDE3MS42aC05LjFMMTI1IDE5OS44djExNWMtLjcgNC44IDEgOS43IDQuNCAxMy4ybDMxLjYgMzguM3Y1LjFINzEuMnYtNS4xbDMxLjYtMzguM2MzLjQtMy41IDQuOS04LjQgNC4xLTEzLjJ2LTEzM2MuNC0zLjctMS03LjMtMy44LTkuOEw3NSAxMzguMVYxMzNoODcuM2w2Ny40IDE0OEwyODkgMTMzLjFoODMuMnY1eiIgZGF0YS12LWEzYzE1MzRhIGRhdGEtdi1hM2MxNTM0YT48L3BhdGg+PC9zdmc+IDxzcGFuIGRhdGEtdi1hM2MxNTM0YT5CbG9nPC9zcGFuPjwvZGl2PjwvYT48YSBocmVmPSJodHRwczovL3R3aXR0ZXIuY29tL244bl9pbyIgY2xhc3M9ImJyYW5kaW5nLWl0ZW0iIGRhdGEtdi1hM2MxNTM0YT48ZGl2IGNsYXNzPSJicmFuZGluZy1pdGVtX19jb250ZW50IiBkYXRhLXYtYTNjMTUzNGE+PHN2ZyBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9jdXNhYmxlPSJmYWxzZSIgZGF0YS1wcmVmaXg9ImZhYiIgZGF0YS1pY29uPSJ0d2l0dGVyIiByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGNsYXNzPSJzdmctaW5saW5lLS1mYSBmYS10d2l0dGVyIGZhLXctMTYiIGRhdGEtdi1hM2MxNTM0YSBkYXRhLXYtYTNjMTUzNGE+PHBhdGggZmlsbD0iY3VycmVudENvbG9yIiBkPSJNNDU5LjM3IDE1MS43MTZjLjMyNSA0LjU0OC4zMjUgOS4wOTcuMzI1IDEzLjY0NSAwIDEzOC43Mi0xMDUuNTgzIDI5OC41NTgtMjk4LjU1OCAyOTguNTU4LTU5LjQ1MiAwLTExNC42OC0xNy4yMTktMTYxLjEzNy00Ny4xMDYgOC40NDcuOTc0IDE2LjU2OCAxLjI5OSAyNS4zNCAxLjI5OSA0OS4wNTUgMCA5NC4yMTMtMTYuNTY4IDEzMC4yNzQtNDQuODMyLTQ2LjEzMi0uOTc1LTg0Ljc5Mi0zMS4xODgtOTguMTEyLTcyLjc3MiA2LjQ5OC45NzQgMTIuOTk1IDEuNjI0IDE5LjgxOCAxLjYyNCA5LjQyMSAwIDE4Ljg0My0xLjMgMjcuNjE0LTMuNTczLTQ4LjA4MS05Ljc0Ny04NC4xNDMtNTEuOTgtODQuMTQzLTEwMi45ODV2LTEuMjk5YzEzLjk2OSA3Ljc5NyAzMC4yMTQgMTIuNjcgNDcuNDMxIDEzLjMxOS0yOC4yNjQtMTguODQzLTQ2Ljc4MS01MS4wMDUtNDYuNzgxLTg3LjM5MSAwLTE5LjQ5MiA1LjE5Ny0zNy4zNiAxNC4yOTQtNTIuOTU0IDUxLjY1NSA2My42NzUgMTI5LjMgMTA1LjI1OCAyMTYuMzY1IDEwOS44MDctMS42MjQtNy43OTctMi41OTktMTUuOTE4LTIuNTk5LTI0LjA0IDAtNTcuODI4IDQ2Ljc4Mi0xMDQuOTM0IDEwNC45MzQtMTA0LjkzNCAzMC4yMTMgMCA1Ny41MDIgMTIuNjcgNzYuNjcgMzMuMTM3IDIzLjcxNS00LjU0OCA0Ni40NTYtMTMuMzIgNjYuNTk5LTI1LjM0LTcuNzk4IDI0LjM2Ni0yNC4zNjYgNDQuODMzLTQ2LjEzMiA1Ny44MjcgMjEuMTE3LTIuMjczIDQxLjU4NC04LjEyMiA2MC40MjYtMTYuMjQzLTE0LjI5MiAyMC43OTEtMzIuMTYxIDM5LjMwOC01Mi42MjggNTQuMjUzeiIgZGF0YS12LWEzYzE1MzRhIGRhdGEtdi1hM2MxNTM0YT48L3BhdGg+PC9zdmc+IDxzcGFuIGRhdGEtdi1hM2MxNTM0YT5Ud2l0dGVyPC9zcGFuPjwvZGl2PjwvYT48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vbjhuLWlvL244biIgY2xhc3M9ImJyYW5kaW5nLWl0ZW0iIGRhdGEtdi1hM2MxNTM0YT48ZGl2IGNsYXNzPSJicmFuZGluZy1pdGVtX19jb250ZW50IiBkYXRhLXYtYTNjMTUzNGE+PHN2ZyBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9jdXNhYmxlPSJmYWxzZSIgZGF0YS1wcmVmaXg9ImZhYiIgZGF0YS1pY29uPSJnaXRodWIiIHJvbGU9ImltZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNDk2IDUxMiIgY2xhc3M9InN2Zy1pbmxpbmUtLWZhIGZhLWdpdGh1YiBmYS13LTE2IiBkYXRhLXYtYTNjMTUzNGEgZGF0YS12LWEzYzE1MzRhPjxwYXRoIGZpbGw9ImN1cnJlbnRDb2xvciIgZD0iTTE2NS45IDM5Ny40YzAgMi0yLjMgMy42LTUuMiAzLjYtMy4zLjMtNS42LTEuMy01LjYtMy42IDAtMiAyLjMtMy42IDUuMi0zLjYgMy0uMyA1LjYgMS4zIDUuNiAzLjZ6bS0zMS4xLTQuNWMtLjcgMiAxLjMgNC4zIDQuMyA0LjkgMi42IDEgNS42IDAgNi4yLTJzLTEuMy00LjMtNC4zLTUuMmMtMi42LS43LTUuNS4zLTYuMiAyLjN6bTQ0LjItMS43Yy0yLjkuNy00LjkgMi42LTQuNiA0LjkuMyAyIDIuOSAzLjMgNS45IDIuNiAyLjktLjcgNC45LTIuNiA0LjYtNC42LS4zLTEuOS0zLTMuMi01LjktMi45ek0yNDQuOCA4QzEwNi4xIDggMCAxMTMuMyAwIDI1MmMwIDExMC45IDY5LjggMjA1LjggMTY5LjUgMjM5LjIgMTIuOCAyLjMgMTcuMy01LjYgMTcuMy0xMi4xIDAtNi4yLS4zLTQwLjQtLjMtNjEuNCAwIDAtNzAgMTUtODQuNy0yOS44IDAgMC0xMS40LTI5LjEtMjcuOC0zNi42IDAgMC0yMi45LTE1LjcgMS42LTE1LjQgMCAwIDI0LjkgMiAzOC42IDI1LjggMjEuOSAzOC42IDU4LjYgMjcuNSA3Mi45IDIwLjkgMi4zLTE2IDguOC0yNy4xIDE2LTMzLjctNTUuOS02LjItMTEyLjMtMTQuMy0xMTIuMy0xMTAuNSAwLTI3LjUgNy42LTQxLjMgMjMuNi01OC45LTIuNi02LjUtMTEuMS0zMy4zIDIuNi02Ny45IDIwLjktNi41IDY5IDI3IDY5IDI3IDIwLTUuNiA0MS41LTguNSA2Mi44LTguNXM0Mi44IDIuOSA2Mi44IDguNWMwIDAgNDguMS0zMy42IDY5LTI3IDEzLjcgMzQuNyA1LjIgNjEuNCAyLjYgNjcuOSAxNiAxNy43IDI1LjggMzEuNSAyNS44IDU4LjkgMCA5Ni41LTU4LjkgMTA0LjItMTE0LjggMTEwLjUgOS4yIDcuOSAxNyAyMi45IDE3IDQ2LjQgMCAzMy43LS4zIDc1LjQtLjMgODMuNiAwIDYuNSA0LjYgMTQuNCAxNy4zIDEyLjFDNDI4LjIgNDU3LjggNDk2IDM2Mi45IDQ5NiAyNTIgNDk2IDExMy4zIDM4My41IDggMjQ0LjggOHpNOTcuMiAzNTIuOWMtMS4zIDEtMSAzLjMuNyA1LjIgMS42IDEuNiAzLjkgMi4zIDUuMiAxIDEuMy0xIDEtMy4zLS43LTUuMi0xLjYtMS42LTMuOS0yLjMtNS4yLTF6bS0xMC44LTguMWMtLjcgMS4zLjMgMi45IDIuMyAzLjkgMS42IDEgMy42LjcgNC4zLS43LjctMS4zLS4zLTIuOS0yLjMtMy45LTItLjYtMy42LS4zLTQuMy43em0zMi40IDM1LjZjLTEuNiAxLjMtMSA0LjMgMS4zIDYuMiAyLjMgMi4zIDUuMiAyLjYgNi41IDEgMS4zLTEuMy43LTQuMy0xLjMtNi4yLTIuMi0yLjMtNS4yLTIuNi02LjUtMXptLTExLjQtMTQuN2MtMS42IDEtMS42IDMuNiAwIDUuOSAxLjYgMi4zIDQuMyAzLjMgNS42IDIuMyAxLjYtMS4zIDEuNi0zLjkgMC02LjItMS40LTIuMy00LTMuMy01LjYtMnoiIGRhdGEtdi1hM2MxNTM0YSBkYXRhLXYtYTNjMTUzNGE+PC9wYXRoPjwvc3ZnPiA8c3BhbiBkYXRhLXYtYTNjMTUzNGE+R2l0aHViPC9zcGFuPjwvZGl2PjwvYT48YSBocmVmPSJodHRwczovL2xpbmtlZGluLmNvbS9jb21wYW55L244biIgY2xhc3M9ImJyYW5kaW5nLWl0ZW0iIGRhdGEtdi1hM2MxNTM0YT48ZGl2IGNsYXNzPSJicmFuZGluZy1pdGVtX19jb250ZW50IiBkYXRhLXYtYTNjMTUzNGE+PHN2ZyBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9jdXNhYmxlPSJmYWxzZSIgZGF0YS1wcmVmaXg9ImZhYiIgZGF0YS1pY29uPSJsaW5rZWRpbiIgcm9sZT0iaW1nIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDggNTEyIiBjbGFzcz0ic3ZnLWlubGluZS0tZmEgZmEtbGlua2VkaW4gZmEtdy0xNCIgZGF0YS12LWEzYzE1MzRhIGRhdGEtdi1hM2MxNTM0YT48cGF0aCBmaWxsPSJjdXJyZW50Q29sb3IiIGQ9Ik00MTYgMzJIMzEuOUMxNC4zIDMyIDAgNDYuNSAwIDY0LjN2MzgzLjRDMCA0NjUuNSAxNC4zIDQ4MCAzMS45IDQ4MEg0MTZjMTcuNiAwIDMyLTE0LjUgMzItMzIuM1Y2NC4zYzAtMTcuOC0xNC40LTMyLjMtMzItMzIuM3pNMTM1LjQgNDE2SDY5VjIwMi4yaDY2LjVWNDE2em0tMzMuMi0yNDNjLTIxLjMgMC0zOC41LTE3LjMtMzguNS0zOC41UzgwLjkgOTYgMTAyLjIgOTZjMjEuMiAwIDM4LjUgMTcuMyAzOC41IDM4LjUgMCAyMS4zLTE3LjIgMzguNS0zOC41IDM4LjV6bTI4Mi4xIDI0M2gtNjYuNFYzMTJjMC0yNC44LS41LTU2LjctMzQuNS01Ni43LTM0LjYgMC0zOS45IDI3LTM5LjkgNTQuOVY0MTZoLTY2LjRWMjAyLjJoNjMuN3YyOS4yaC45YzguOS0xNi44IDMwLjYtMzQuNSA2Mi45LTM0LjUgNjcuMiAwIDc5LjcgNDQuMyA3OS43IDEwMS45VjQxNnoiIGRhdGEtdi1hM2MxNTM0YSBkYXRhLXYtYTNjMTUzNGE+PC9wYXRoPjwvc3ZnPiA8c3BhbiBkYXRhLXYtYTNjMTUzNGE+TGlua2VkSW48L3NwYW4+PC9kaXY+PC9hPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9uOG5pby8iIGNsYXNzPSJicmFuZGluZy1pdGVtIiBkYXRhLXYtYTNjMTUzNGE+PGRpdiBjbGFzcz0iYnJhbmRpbmctaXRlbV9fY29udGVudCIgZGF0YS12LWEzYzE1MzRhPjxzdmcgYXJpYS1oaWRkZW49InRydWUiIGZvY3VzYWJsZT0iZmFsc2UiIGRhdGEtcHJlZml4PSJmYWIiIGRhdGEtaWNvbj0iZmFjZWJvb2siIHJvbGU9ImltZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgY2xhc3M9InN2Zy1pbmxpbmUtLWZhIGZhLWZhY2Vib29rIGZhLXctMTYiIGRhdGEtdi1hM2MxNTM0YSBkYXRhLXYtYTNjMTUzNGE+PHBhdGggZmlsbD0iY3VycmVudENvbG9yIiBkPSJNNTA0IDI1NkM1MDQgMTE5IDM5MyA4IDI1NiA4UzggMTE5IDggMjU2YzAgMTIzLjc4IDkwLjY5IDIyNi4zOCAyMDkuMjUgMjQ1VjMyNy42OWgtNjNWMjU2aDYzdi01NC42NGMwLTYyLjE1IDM3LTk2LjQ4IDkzLjY3LTk2LjQ4IDI3LjE0IDAgNTUuNTIgNC44NCA1NS41MiA0Ljg0djYxaC0zMS4yOGMtMzAuOCAwLTQwLjQxIDE5LjEyLTQwLjQxIDM4LjczVjI1Nmg2OC43OGwtMTEgNzEuNjloLTU3Ljc4VjUwMUM0MTMuMzEgNDgyLjM4IDUwNCAzNzkuNzggNTA0IDI1NnoiIGRhdGEtdi1hM2MxNTM0YSBkYXRhLXYtYTNjMTUzNGE+PC9wYXRoPjwvc3ZnPiA8c3BhbiBkYXRhLXYtYTNjMTUzNGE+RmFjZWJvb2s8L3NwYW4+PC9kaXY+PC9hPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2MvbjhuLWlvIiBjbGFzcz0iYnJhbmRpbmctaXRlbSIgZGF0YS12LWEzYzE1MzRhPjxkaXYgY2xhc3M9ImJyYW5kaW5nLWl0ZW1fX2NvbnRlbnQiIGRhdGEtdi1hM2MxNTM0YT48c3ZnIGFyaWEtaGlkZGVuPSJ0cnVlIiBmb2N1c2FibGU9ImZhbHNlIiBkYXRhLXByZWZpeD0iZmFiIiBkYXRhLWljb249InlvdXR1YmUiIHJvbGU9ImltZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNTc2IDUxMiIgY2xhc3M9InN2Zy1pbmxpbmUtLWZhIGZhLXlvdXR1YmUgZmEtdy0xOCIgZGF0YS12LWEzYzE1MzRhIGRhdGEtdi1hM2MxNTM0YT48cGF0aCBmaWxsPSJjdXJyZW50Q29sb3IiIGQ9Ik01NDkuNjU1IDEyNC4wODNjLTYuMjgxLTIzLjY1LTI0Ljc4Ny00Mi4yNzYtNDguMjg0LTQ4LjU5N0M0NTguNzgxIDY0IDI4OCA2NCAyODggNjRTMTE3LjIyIDY0IDc0LjYyOSA3NS40ODZjLTIzLjQ5NyA2LjMyMi00Mi4wMDMgMjQuOTQ3LTQ4LjI4NCA0OC41OTctMTEuNDEyIDQyLjg2Ny0xMS40MTIgMTMyLjMwNS0xMS40MTIgMTMyLjMwNXMwIDg5LjQzOCAxMS40MTIgMTMyLjMwNWM2LjI4MSAyMy42NSAyNC43ODcgNDEuNSA0OC4yODQgNDcuODIxQzExNy4yMiA0NDggMjg4IDQ0OCAyODggNDQ4czE3MC43OCAwIDIxMy4zNzEtMTEuNDg2YzIzLjQ5Ny02LjMyMSA0Mi4wMDMtMjQuMTcxIDQ4LjI4NC00Ny44MjEgMTEuNDEyLTQyLjg2NyAxMS40MTItMTMyLjMwNSAxMS40MTItMTMyLjMwNXMwLTg5LjQzOC0xMS40MTItMTMyLjMwNXptLTMxNy41MSAyMTMuNTA4VjE3NS4xODVsMTQyLjczOSA4MS4yMDUtMTQyLjczOSA4MS4yMDF6IiBkYXRhLXYtYTNjMTUzNGEgZGF0YS12LWEzYzE1MzRhPjwvcGF0aD48L3N2Zz4gPHNwYW4gZGF0YS12LWEzYzE1MzRhPllvdVR1YmU8L3NwYW4+PC9kaXY+PC9hPjwvZGl2PjwvZGl2PjwvZGl2PiA8ZGl2IGNsYXNzPSJlbC1yb3ciPjxkaXYgY2xhc3M9ImVsLWNvbCBlbC1jb2wtMjIgZWwtY29sLW9mZnNldC0xIGVsLWNvbC1tZC05Ij48ZGl2IGNsYXNzPSJtYWlsLWNoaW1wLXN1YnNjcmliZS1mb3JtIj48aDMgY2xhc3M9ImhlYWRpbmcgbWItMiI+U3Vic2NyaWJlIHRvIG91ciBuZXdzbGV0dGVyPC9oMz4gPGRpdiBpZD0ibWNfZW1iZWRfc2lnbnVwIj48Zm9ybSBhY3Rpb249Imh0dHBzOi8vbjhuLnVzMjAubGlzdC1tYW5hZ2UuY29tL3N1YnNjcmliZS9wb3N0P3U9MmM4ODQ1ODIwYjBkOTA1M2E3YmQwZmE1ZiZpZD03MmRhMjczNDNkIiBtZXRob2Q9InBvc3QiIGlkPSJtYy1lbWJlZGRlZC1zdWJzY3JpYmUtZm9ybSIgbmFtZT0ibWMtZW1iZWRkZWQtc3Vic2NyaWJlLWZvcm0iIHRhcmdldD0iX2JsYW5rIiBub3ZhbGlkYXRlPSJub3ZhbGlkYXRlIiBjbGFzcz0idmFsaWRhdGUiPjxkaXYgY2xhc3M9Im1iLTIgZWwtcm93IiBzdHlsZT0ibWFyZ2luLWxlZnQ6LTVweDttYXJnaW4tcmlnaHQ6LTVweDsiPjxkaXYgY2xhc3M9ImVsLWNvbCBlbC1jb2wtMTQgZWwtY29sLXNtLTE2IiBzdHlsZT0icGFkZGluZy1sZWZ0OjVweDtwYWRkaW5nLXJpZ2h0OjVweDsiPjxkaXYgY2xhc3M9ImVsLWlucHV0Ij48IS0tLS0+PGlucHV0IHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBuYW1lPSJFTUFJTCIgcGxhY2Vob2xkZXI9IkVtYWlsIiBjbGFzcz0iZWwtaW5wdXRfX2lubmVyIj48IS0tLS0+PCEtLS0tPjwhLS0tLT48IS0tLS0+PC9kaXY+PC9kaXY+IDxkaXYgY2xhc3M9ImVsLWNvbCBlbC1jb2wtMTAgZWwtY29sLXNtLTgiIHN0eWxlPSJwYWRkaW5nLWxlZnQ6NXB4O3BhZGRpbmctcmlnaHQ6NXB4OyI+PGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJlbC1idXR0b24gZWwtYnV0dG9uLS1wcmltYXJ5IGlzLXJvdW5kIj48IS0tLS0+PCEtLS0tPjxzcGFuPlN1YnNjcmliZQoJCQkJCTwvc3Bhbj48L2J1dHRvbj48L2Rpdj48L2Rpdj4gPGRpdiBhcmlhLWhpZGRlbj0idHJ1ZSIgc3R5bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogLTUwMDBweDsiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJiXzJjODg0NTgyMGIwZDkwNTNhN2JkMGZhNWZfNzJkYTI3MzQzZCIgdGFiaW5kZXg9Ii0xIiB2YWx1ZT48L2Rpdj48L2Zvcm0+PC9kaXY+IDxwIGNsYXNzPSJ0ZXh0IG1pbmkgbXV0ZWQiPgoJCUJ5IHN1Ym1pdHRpbmcgeW91ciBlbWFpbCBhZGRyZXNzIHlvdSBhZ3JlZSB0byB5b3VyIHBlcnNvbmFsIGRhdGEgYmVpbmcKCQlzdG9yZWQgYW5kIHVzZWQgdG8gcHJvdmlkZSB5b3Ugd2l0aCBpbmZvcm1hdGlvbiBhbmQgY29tbWVyY2lhbCBvZmZlcnMKCQlhYm91dCBuOG4uCgk8L3A+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9zZWN0aW9uPjwvbWFpbj48L2Rpdj4gPGZvb3RlciBjbGFzcz0iZWwtZm9vdGVyIiBzdHlsZT0iaGVpZ2h0OjYwcHg7IiBkYXRhLXYtNjM2ZmNlNDY+PGRpdiBjbGFzcz0iY29udGVudC13cmFwcGVyIGVsLXJvdyIgZGF0YS12LTYzNmZjZTQ2PjxkaXYgY2xhc3M9ImxlZnQtc2lkZSBlbC1jb2wgZWwtY29sLTI0IGVsLWNvbC1zbS0yNCBlbC1jb2wtbWQtOCIgZGF0YS12LTYzNmZjZTQ2PgoJCQnDgsKpIDIwMTktMjAyMSBuOG4uaW8gQWxsIHJpZ2h0cyBSZXNlcnZlZAoJCTwvZGl2PiA8ZGl2IGNsYXNzPSJyaWdodC1zaWRlIGVsLWNvbCBlbC1jb2wtMjQgZWwtY29sLXNtLTI0IGVsLWNvbC1tZC0xNiIgZGF0YS12LTYzNmZjZTQ2PjxhIGhyZWY9Imh0dHBzOi8vbjhuLmpvaW4uY29tIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9ImxpbmstcHJpbWFyeSIgZGF0YS12LTYzNmZjZTQ2PgoJCQkJSm9icwoJCQk8L2E+IDxhIGhyZWY9Imh0dHBzOi8vbWVkaXVtLmNvbS9uOG4taW8vIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9ImxpbmstcHJpbWFyeSIgZGF0YS12LTYzNmZjZTQ2PgoJCQkJQmxvZwoJCQk8L2E+IDxhIGhyZWY9Ii9jb250YWN0IiBjbGFzcz0ibGluay1wcmltYXJ5IiBkYXRhLXYtNjM2ZmNlNDY+CgkJCQlDb250YWN0CgkJCTwvYT4gPGEgaHJlZj0iL3ByZXNzIiBjbGFzcz0ibGluay1wcmltYXJ5IiBkYXRhLXYtNjM2ZmNlNDY+CgkJCQlQcmVzcwoJCQk8L2E+IDxhIGhyZWY9Ii9pbXByZXNzdW0iIGNsYXNzPSJsaW5rLXByaW1hcnkiIGRhdGEtdi02MzZmY2U0Nj4KCQkJCUltcHJlc3N1bQoJCQk8L2E+IDxhIGhyZWY9Ii9wcml2YWN5IiBjbGFzcz0ibGluay1wcmltYXJ5IiBkYXRhLXYtNjM2ZmNlNDY+CgkJCQlQcml2YWN5CgkJCTwvYT4gPGEgaHJlZj0iL3Rlcm1zIiBjbGFzcz0ibGluay1wcmltYXJ5IiBkYXRhLXYtNjM2ZmNlNDY+CgkJCQlUZXJtcyBvZiBTZXJ2aWNlCgkJCTwvYT48L2Rpdj4gPGRpdiBjbGFzcz0ic29jaWFsLW1lZGlhIGVsLWNvbCBlbC1jb2wtMjQgZWwtY29sLXNtLTI0IGVsLWNvbC1tZC0yNCIgZGF0YS12LTYzNmZjZTQ2PgoJCQlGb2xsb3cgdXMgb24gOgoJCQk8YSBocmVmPSJodHRwczovL21lZGl1bS5jb20vbjhuLWlvIiB0YXJnZXQ9Il9ibGFuayIgZGF0YS12LTYzNmZjZTQ2PjxzdmcgYXJpYS1oaWRkZW49InRydWUiIGZvY3VzYWJsZT0iZmFsc2UiIGRhdGEtcHJlZml4PSJmYWIiIGRhdGEtaWNvbj0ibWVkaXVtIiByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDQ0OCA1MTIiIGNsYXNzPSJzdmctaW5saW5lLS1mYSBmYS1tZWRpdW0gZmEtdy0xNCIgZGF0YS12LTYzNmZjZTQ2PjxwYXRoIGZpbGw9ImN1cnJlbnRDb2xvciIgZD0iTTAgMzJ2NDQ4aDQ0OFYzMkgwem0zNzIuMiAxMDYuMWwtMjQgMjNjLTIuMSAxLjYtMy4xIDQuMi0yLjcgNi43djE2OS4zYy0uNCAyLjYuNiA1LjIgMi43IDYuN2wyMy41IDIzdjUuMWgtMTE4VjM2N2wyNC4zLTIzLjZjMi40LTIuNCAyLjQtMy4xIDIuNC02LjdWMTk5LjhsLTY3LjYgMTcxLjZoLTkuMUwxMjUgMTk5Ljh2MTE1Yy0uNyA0LjggMSA5LjcgNC40IDEzLjJsMzEuNiAzOC4zdjUuMUg3MS4ydi01LjFsMzEuNi0zOC4zYzMuNC0zLjUgNC45LTguNCA0LjEtMTMuMnYtMTMzYy40LTMuNy0xLTcuMy0zLjgtOS44TDc1IDEzOC4xVjEzM2g4Ny4zbDY3LjQgMTQ4TDI4OSAxMzMuMWg4My4ydjV6IiBkYXRhLXYtNjM2ZmNlNDY+PC9wYXRoPjwvc3ZnPgoJCQkJbjhuLWlvCgkJCTwvYT4gPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL244bi1pby9uOG4iIHRhcmdldD0iX2JsYW5rIiBkYXRhLXYtNjM2ZmNlNDY+PHN2ZyBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9jdXNhYmxlPSJmYWxzZSIgZGF0YS1wcmVmaXg9ImZhYiIgZGF0YS1pY29uPSJnaXRodWIiIHJvbGU9ImltZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNDk2IDUxMiIgY2xhc3M9InN2Zy1pbmxpbmUtLWZhIGZhLWdpdGh1YiBmYS13LTE2IiBkYXRhLXYtNjM2ZmNlNDY+PHBhdGggZmlsbD0iY3VycmVudENvbG9yIiBkPSJNMTY1LjkgMzk3LjRjMCAyLTIuMyAzLjYtNS4yIDMuNi0zLjMuMy01LjYtMS4zLTUuNi0zLjYgMC0yIDIuMy0zLjYgNS4yLTMuNiAzLS4zIDUuNiAxLjMgNS42IDMuNnptLTMxLjEtNC41Yy0uNyAyIDEuMyA0LjMgNC4zIDQuOSAyLjYgMSA1LjYgMCA2LjItMnMtMS4zLTQuMy00LjMtNS4yYy0yLjYtLjctNS41LjMtNi4yIDIuM3ptNDQuMi0xLjdjLTIuOS43LTQuOSAyLjYtNC42IDQuOS4zIDIgMi45IDMuMyA1LjkgMi42IDIuOS0uNyA0LjktMi42IDQuNi00LjYtLjMtMS45LTMtMy4yLTUuOS0yLjl6TTI0NC44IDhDMTA2LjEgOCAwIDExMy4zIDAgMjUyYzAgMTEwLjkgNjkuOCAyMDUuOCAxNjkuNSAyMzkuMiAxMi44IDIuMyAxNy4zLTUuNiAxNy4zLTEyLjEgMC02LjItLjMtNDAuNC0uMy02MS40IDAgMC03MCAxNS04NC43LTI5LjggMCAwLTExLjQtMjkuMS0yNy44LTM2LjYgMCAwLTIyLjktMTUuNyAxLjYtMTUuNCAwIDAgMjQuOSAyIDM4LjYgMjUuOCAyMS45IDM4LjYgNTguNiAyNy41IDcyLjkgMjAuOSAyLjMtMTYgOC44LTI3LjEgMTYtMzMuNy01NS45LTYuMi0xMTIuMy0xNC4zLTExMi4zLTExMC41IDAtMjcuNSA3LjYtNDEuMyAyMy42LTU4LjktMi42LTYuNS0xMS4xLTMzLjMgMi42LTY3LjkgMjAuOS02LjUgNjkgMjcgNjkgMjcgMjAtNS42IDQxLjUtOC41IDYyLjgtOC41czQyLjggMi45IDYyLjggOC41YzAgMCA0OC4xLTMzLjYgNjktMjcgMTMuNyAzNC43IDUuMiA2MS40IDIuNiA2Ny45IDE2IDE3LjcgMjUuOCAzMS41IDI1LjggNTguOSAwIDk2LjUtNTguOSAxMDQuMi0xMTQuOCAxMTAuNSA5LjIgNy45IDE3IDIyLjkgMTcgNDYuNCAwIDMzLjctLjMgNzUuNC0uMyA4My42IDAgNi41IDQuNiAxNC40IDE3LjMgMTIuMUM0MjguMiA0NTcuOCA0OTYgMzYyLjkgNDk2IDI1MiA0OTYgMTEzLjMgMzgzLjUgOCAyNDQuOCA4ek05Ny4yIDM1Mi45Yy0xLjMgMS0xIDMuMy43IDUuMiAxLjYgMS42IDMuOSAyLjMgNS4yIDEgMS4zLTEgMS0zLjMtLjctNS4yLTEuNi0xLjYtMy45LTIuMy01LjItMXptLTEwLjgtOC4xYy0uNyAxLjMuMyAyLjkgMi4zIDMuOSAxLjYgMSAzLjYuNyA0LjMtLjcuNy0xLjMtLjMtMi45LTIuMy0zLjktMi0uNi0zLjYtLjMtNC4zLjd6bTMyLjQgMzUuNmMtMS42IDEuMy0xIDQuMyAxLjMgNi4yIDIuMyAyLjMgNS4yIDIuNiA2LjUgMSAxLjMtMS4zLjctNC4zLTEuMy02LjItMi4yLTIuMy01LjItMi42LTYuNS0xem0tMTEuNC0xNC43Yy0xLjYgMS0xLjYgMy42IDAgNS45IDEuNiAyLjMgNC4zIDMuMyA1LjYgMi4zIDEuNi0xLjMgMS42LTMuOSAwLTYuMi0xLjQtMi4zLTQtMy4zLTUuNi0yeiIgZGF0YS12LTYzNmZjZTQ2PjwvcGF0aD48L3N2Zz4KCQkJCW44bi1pbwoJCQk8L2E+IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9uOG5pbyIgdGFyZ2V0PSJfYmxhbmsiIGRhdGEtdi02MzZmY2U0Nj48c3ZnIGFyaWEtaGlkZGVuPSJ0cnVlIiBmb2N1c2FibGU9ImZhbHNlIiBkYXRhLXByZWZpeD0iZmFiIiBkYXRhLWljb249ImZhY2Vib29rIiByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGNsYXNzPSJzdmctaW5saW5lLS1mYSBmYS1mYWNlYm9vayBmYS13LTE2IiBkYXRhLXYtNjM2ZmNlNDY+PHBhdGggZmlsbD0iY3VycmVudENvbG9yIiBkPSJNNTA0IDI1NkM1MDQgMTE5IDM5MyA4IDI1NiA4UzggMTE5IDggMjU2YzAgMTIzLjc4IDkwLjY5IDIyNi4zOCAyMDkuMjUgMjQ1VjMyNy42OWgtNjNWMjU2aDYzdi01NC42NGMwLTYyLjE1IDM3LTk2LjQ4IDkzLjY3LTk2LjQ4IDI3LjE0IDAgNTUuNTIgNC44NCA1NS41MiA0Ljg0djYxaC0zMS4yOGMtMzAuOCAwLTQwLjQxIDE5LjEyLTQwLjQxIDM4LjczVjI1Nmg2OC43OGwtMTEgNzEuNjloLTU3Ljc4VjUwMUM0MTMuMzEgNDgyLjM4IDUwNCAzNzkuNzggNTA0IDI1NnoiIGRhdGEtdi02MzZmY2U0Nj48L3BhdGg+PC9zdmc+CgkJCQluOG5pbwoJCQk8L2E+IDxhIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vbjhuX2lvIiB0YXJnZXQ9Il9ibGFuayIgZGF0YS12LTYzNmZjZTQ2PjxzdmcgYXJpYS1oaWRkZW49InRydWUiIGZvY3VzYWJsZT0iZmFsc2UiIGRhdGEtcHJlZml4PSJmYWIiIGRhdGEtaWNvbj0idHdpdHRlciIgcm9sZT0iaW1nIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiBjbGFzcz0ic3ZnLWlubGluZS0tZmEgZmEtdHdpdHRlciBmYS13LTE2IiBkYXRhLXYtNjM2ZmNlNDY+PHBhdGggZmlsbD0iY3VycmVudENvbG9yIiBkPSJNNDU5LjM3IDE1MS43MTZjLjMyNSA0LjU0OC4zMjUgOS4wOTcuMzI1IDEzLjY0NSAwIDEzOC43Mi0xMDUuNTgzIDI5OC41NTgtMjk4LjU1OCAyOTguNTU4LTU5LjQ1MiAwLTExNC42OC0xNy4yMTktMTYxLjEzNy00Ny4xMDYgOC40NDcuOTc0IDE2LjU2OCAxLjI5OSAyNS4zNCAxLjI5OSA0OS4wNTUgMCA5NC4yMTMtMTYuNTY4IDEzMC4yNzQtNDQuODMyLTQ2LjEzMi0uOTc1LTg0Ljc5Mi0zMS4xODgtOTguMTEyLTcyLjc3MiA2LjQ5OC45NzQgMTIuOTk1IDEuNjI0IDE5LjgxOCAxLjYyNCA5LjQyMSAwIDE4Ljg0My0xLjMgMjcuNjE0LTMuNTczLTQ4LjA4MS05Ljc0Ny04NC4xNDMtNTEuOTgtODQuMTQzLTEwMi45ODV2LTEuMjk5YzEzLjk2OSA3Ljc5NyAzMC4yMTQgMTIuNjcgNDcuNDMxIDEzLjMxOS0yOC4yNjQtMTguODQzLTQ2Ljc4MS01MS4wMDUtNDYuNzgxLTg3LjM5MSAwLTE5LjQ5MiA1LjE5Ny0zNy4zNiAxNC4yOTQtNTIuOTU0IDUxLjY1NSA2My42NzUgMTI5LjMgMTA1LjI1OCAyMTYuMzY1IDEwOS44MDctMS42MjQtNy43OTctMi41OTktMTUuOTE4LTIuNTk5LTI0LjA0IDAtNTcuODI4IDQ2Ljc4Mi0xMDQuOTM0IDEwNC45MzQtMTA0LjkzNCAzMC4yMTMgMCA1Ny41MDIgMTIuNjcgNzYuNjcgMzMuMTM3IDIzLjcxNS00LjU0OCA0Ni40NTYtMTMuMzIgNjYuNTk5LTI1LjM0LTcuNzk4IDI0LjM2Ni0yNC4zNjYgNDQuODMzLTQ2LjEzMiA1Ny44MjcgMjEuMTE3LTIuMjczIDQxLjU4NC04LjEyMiA2MC40MjYtMTYuMjQzLTE0LjI5MiAyMC43OTEtMzIuMTYxIDM5LjMwOC01Mi42MjggNTQuMjUzeiIgZGF0YS12LTYzNmZjZTQ2PjwvcGF0aD48L3N2Zz4KCQkJCW44bl9pbwoJCQk8L2E+IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21wYW55L244biIgdGFyZ2V0PSJfYmxhbmsiIGRhdGEtdi02MzZmY2U0Nj48c3ZnIGFyaWEtaGlkZGVuPSJ0cnVlIiBmb2N1c2FibGU9ImZhbHNlIiBkYXRhLXByZWZpeD0iZmFiIiBkYXRhLWljb249ImxpbmtlZGluIiByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDQ0OCA1MTIiIGNsYXNzPSJzdmctaW5saW5lLS1mYSBmYS1saW5rZWRpbiBmYS13LTE0IiBkYXRhLXYtNjM2ZmNlNDY+PHBhdGggZmlsbD0iY3VycmVudENvbG9yIiBkPSJNNDE2IDMySDMxLjlDMTQuMyAzMiAwIDQ2LjUgMCA2NC4zdjM4My40QzAgNDY1LjUgMTQuMyA0ODAgMzEuOSA0ODBINDE2YzE3LjYgMCAzMi0xNC41IDMyLTMyLjNWNjQuM2MwLTE3LjgtMTQuNC0zMi4zLTMyLTMyLjN6TTEzNS40IDQxNkg2OVYyMDIuMmg2Ni41VjQxNnptLTMzLjItMjQzYy0yMS4zIDAtMzguNS0xNy4zLTM4LjUtMzguNVM4MC45IDk2IDEwMi4yIDk2YzIxLjIgMCAzOC41IDE3LjMgMzguNSAzOC41IDAgMjEuMy0xNy4yIDM4LjUtMzguNSAzOC41em0yODIuMSAyNDNoLTY2LjRWMzEyYzAtMjQuOC0uNS01Ni43LTM0LjUtNTYuNy0zNC42IDAtMzkuOSAyNy0zOS45IDU0LjlWNDE2aC02Ni40VjIwMi4yaDYzLjd2MjkuMmguOWM4LjktMTYuOCAzMC42LTM0LjUgNjIuOS0zNC41IDY3LjIgMCA3OS43IDQ0LjMgNzkuNyAxMDEuOVY0MTZ6IiBkYXRhLXYtNjM2ZmNlNDY+PC9wYXRoPjwvc3ZnPgoJCQkJbjhuCgkJCTwvYT4gPGEgaHJlZj0iaHR0cHM6Ly93d3cueW91dHViZS5jb20vYy9uOG4taW8iIHRhcmdldD0iX2JsYW5rIiBkYXRhLXYtNjM2ZmNlNDY+PHN2ZyBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9jdXNhYmxlPSJmYWxzZSIgZGF0YS1wcmVmaXg9ImZhYiIgZGF0YS1pY29uPSJ5b3V0dWJlIiByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDU3NiA1MTIiIGNsYXNzPSJzdmctaW5saW5lLS1mYSBmYS15b3V0dWJlIGZhLXctMTgiIGRhdGEtdi02MzZmY2U0Nj48cGF0aCBmaWxsPSJjdXJyZW50Q29sb3IiIGQ9Ik01NDkuNjU1IDEyNC4wODNjLTYuMjgxLTIzLjY1LTI0Ljc4Ny00Mi4yNzYtNDguMjg0LTQ4LjU5N0M0NTguNzgxIDY0IDI4OCA2NCAyODggNjRTMTE3LjIyIDY0IDc0LjYyOSA3NS40ODZjLTIzLjQ5NyA2LjMyMi00Mi4wMDMgMjQuOTQ3LTQ4LjI4NCA0OC41OTctMTEuNDEyIDQyLjg2Ny0xMS40MTIgMTMyLjMwNS0xMS40MTIgMTMyLjMwNXMwIDg5LjQzOCAxMS40MTIgMTMyLjMwNWM2LjI4MSAyMy42NSAyNC43ODcgNDEuNSA0OC4yODQgNDcuODIxQzExNy4yMiA0NDggMjg4IDQ0OCAyODggNDQ4czE3MC43OCAwIDIxMy4zNzEtMTEuNDg2YzIzLjQ5Ny02LjMyMSA0Mi4wMDMtMjQuMTcxIDQ4LjI4NC00Ny44MjEgMTEuNDEyLTQyLjg2NyAxMS40MTItMTMyLjMwNSAxMS40MTItMTMyLjMwNXMwLTg5LjQzOC0xMS40MTItMTMyLjMwNXptLTMxNy41MSAyMTMuNTA4VjE3NS4xODVsMTQyLjczOSA4MS4yMDUtMTQyLjczOSA4MS4yMDF6IiBkYXRhLXYtNjM2ZmNlNDY+PC9wYXRoPjwvc3ZnPgoJCQkJbjhuLWlvCgkJCTwvYT48L2Rpdj48L2Rpdj48L2Zvb3Rlcj4gPGlmcmFtZSBzcmM9Imh0dHBzOi8vYXBpLm44bi5pby9odWIiIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBkYXRhLXYtMThlZDRhODE+PC9pZnJhbWU+PC9kaXY+PC9kaXY+PC9kaXY+PHNjcmlwdD53aW5kb3cuX19OVVhUX189KGZ1bmN0aW9uKGEsYil7cmV0dXJuIHtsYXlvdXQ6ImZ1bGwtcGFnZSIsZGF0YTpbe31dLGZldGNoOltdLGVycm9yOmIsc3RhdGU6e2F1dGg6e3VzZXI6YixzZXNzaW9uRXhwaXJlZDphLGlzU2V0dXA6YX0sbm9kZXM6e2xvYWRpbmc6YSxub2RlczpbXX0sd29ya2Zsb3dzOntsb2FkaW5nOmEsd29ya2Zsb3dzOltdfX0sc2VydmVyUmVuZGVyZWQ6dHJ1ZSxyb3V0ZVBhdGg6Ii8ifX0oZmFsc2UsbnVsbCkpOzwvc2NyaXB0PjxzY3JpcHQgc3JjPSIvX251eHQvNjUyZGZkNmY1MmMzMjdkNGU0OTMuanMiIGRlZmVyPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSIvX251eHQvNjFiNzkyNjE1ZGMxYWE5MWYyZjUuanMiIGRlZmVyPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSIvX251eHQvZGQ5ZWFmM2YyZGUxNDI1NzMyNjMuanMiIGRlZmVyPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSIvX251eHQvYTBhM2YyYTliNjAxN2IwNmNlZWEuanMiIGRlZmVyPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSIvX251eHQvYzU5OGUzMmJiMDYxZWJmOGEyYTEuanMiIGRlZmVyPjwvc2NyaXB0Pgo8ZGl2IGlkPSJjb25zZW50LWNvbnRhaW5lciI+PC9kaXY+CjwvYm9keT4KPC9odG1sPg==", - "fileSize": "44.2 kB" - } - } - } - ] - ] - } - } - ], - "Function": [ - { - "startTime": 1747344011762, - "executionIndex": 4, - "source": [ - { - "previousNode": "HTML Extract" - } - ], - "hints": [], - "executionTime": 2, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "extracted": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "HTML Extract1": [ - { - "startTime": 1747344011764, - "executionIndex": 5, - "source": [ - { - "previousNode": "Move Binary Data" - } - ], - "hints": [], - "executionTime": 5, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "extracted": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Function1": [ - { - "startTime": 1747344011769, - "executionIndex": 6, - "source": [ - { - "previousNode": "HTML Extract1" - } - ], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "extracted": [ - "json array" - ] - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Function1" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:11.746Z", - "stoppedAt": "2025-05-15T21:20:11.770Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/93-snapshot.json b/test-workflows/snapshots/93-snapshot.json deleted file mode 100644 index 441e9de7ad2..00000000000 --- a/test-workflows/snapshots/93-snapshot.json +++ /dev/null @@ -1,184 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747344011783, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "FunctionItem": [ - { - "startTime": 1747344011783, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "test", - "indexes": [ - "json array" - ], - "subobj": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Move Binary Data": [ - { - "startTime": 1747344011784, - "executionIndex": 2, - "source": [ - { - "previousNode": "FunctionItem" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - }, - "binary": { - "data": { - "mimeType": "application/json", - "fileType": "json", - "fileExtension": "json", - "data": "eyJuYW1lIjoidGVzdCIsImluZGV4ZXMiOlsxLDIsM10sInN1Ym9iaiI6eyJuYW1lIjoic3VidGVzdCJ9fQ==", - "fileSize": "61 B" - } - } - } - ] - ] - } - } - ], - "Move Binary Data1": [ - { - "startTime": 1747344011784, - "executionIndex": 3, - "source": [ - { - "previousNode": "Move Binary Data" - } - ], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "test", - "indexes": [ - "json array" - ], - "subobj": { - "object": true - } - }, - "pairedItem": { - "item": 0 - }, - "binary": {} - } - ] - ] - } - } - ], - "Function": [ - { - "startTime": 1747344011785, - "executionIndex": 4, - "source": [ - { - "previousNode": "Move Binary Data1" - } - ], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "test", - "indexes": [ - "json array" - ], - "subobj": { - "object": true - } - }, - "pairedItem": { - "item": 0 - }, - "binary": {}, - "index": 0 - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Function" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:11.783Z", - "stoppedAt": "2025-05-15T21:20:11.786Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/95-snapshot.json b/test-workflows/snapshots/95-snapshot.json deleted file mode 100644 index f9c5b14c36e..00000000000 --- a/test-workflows/snapshots/95-snapshot.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747344011791, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Set": [ - { - "startTime": 1747344011791, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "test" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Function": [ - { - "startTime": 1747344011791, - "executionIndex": 2, - "source": [ - { - "previousNode": "Set" - } - ], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "name": "test" - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Function" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:11.791Z", - "stoppedAt": "2025-05-15T21:20:11.792Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/96-snapshot.json b/test-workflows/snapshots/96-snapshot.json deleted file mode 100644 index 8e153f7ebd4..00000000000 --- a/test-workflows/snapshots/96-snapshot.json +++ /dev/null @@ -1,126 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747344011798, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "MessageBird": [ - { - "startTime": 1747344011798, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 145, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "payment": "prepaid", - "type": "dollars", - "amount": 0 - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "MessageBird1": [ - { - "startTime": 1747344011943, - "executionIndex": 2, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 137, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "52553d3188e047aa843be860383dfe0d", - "href": "https://rest.messagebird.com/messages/52553d3188e047aa843be860383dfe0d", - "direction": "mt", - "type": "sms", - "originator": "4930270504079", - "body": "TestMessage", - "reference": { - "object": true - }, - "validity": { - "object": true - }, - "gateway": 10, - "typeDetails": { - "object": true - }, - "datacoding": "plain", - "mclass": 1, - "scheduledDatetime": { - "object": true - }, - "createdDatetime": "2025-05-15T21:20:12+00:00", - "recipients": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "MessageBird1" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:11.798Z", - "stoppedAt": "2025-05-15T21:20:12.080Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/97-snapshot.json b/test-workflows/snapshots/97-snapshot.json deleted file mode 100644 index 987a335f779..00000000000 --- a/test-workflows/snapshots/97-snapshot.json +++ /dev/null @@ -1,551 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747344011899, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Crypto0": [ - { - "startTime": 1747344011900, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": "5877e26c078d6409fde54d508bf25721" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Crypto4": [ - { - "startTime": 1747344011900, - "executionIndex": 2, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": "3fb7c95bca84c0bf49045b4e6a279dc0" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Crypto10": [ - { - "startTime": 1747344011900, - "executionIndex": 3, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": "9d0bc120a967882743370f715dfa90789c4d9322a4faf691d1f80b306c6bd900bfcba5f62946ef88ba7e1fdd008ff3efe8545b979299b14e0e0eccd3e33b1afa11397494526e31968f13d2ac3e3deaa2bc4a27862b7025444c91ebed5f1b98d2c0390630d8eabc6a7662a9ab069cb3aab273ae1c09f20f51fa8e04af4bcccbc6" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Crypto1": [ - { - "startTime": 1747344011900, - "executionIndex": 4, - "source": [ - { - "previousNode": "Crypto0" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": "636396f02b6571e40d8fe91cba550515c0cdc0e7d314c210e00b02256375a796" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Crypto5": [ - { - "startTime": 1747344011900, - "executionIndex": 5, - "source": [ - { - "previousNode": "Crypto4" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": "a8066096944b87daa8d0459629d8f3958d35fa453c310e7370b619d0b81ce48e" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Crypto11": [ - { - "startTime": 1747344011900, - "executionIndex": 6, - "source": [ - { - "previousNode": "Crypto10" - } - ], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": "0b494c8146f7efd7aa53b418a7057a3a57317a0380c06c7d18114077a03fc6441b57ca8c03edff4ca6fdc2394d026893258b97d34bf0c5c44bc20bd264899eb1316da1e624db1455c73c9054ff732464f775b473b3ba67250ffd74ee42b1acfdf5539bf793d7002327d8d156424444624a625f8dd3f013d40a7ba7b6726186a9" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Crypto2": [ - { - "startTime": 1747344011901, - "executionIndex": 7, - "source": [ - { - "previousNode": "Crypto1" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": "c7049c8950ea211bec236edffb37cbecf2aa338443c5e048c1cbb4e2ee20eb60fa9a1d34699d7a86e7362b010bb4ffe7" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Crypto6": [ - { - "startTime": 1747344011901, - "executionIndex": 8, - "source": [ - { - "previousNode": "Crypto5" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": "08bec8212275cd79a1c6bf52cad5b31ccd46ec87c7a8a9d1c8589c816f8a7124313528040b138229e15c32c1b3c82b80" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Crypto12": [ - { - "startTime": 1747344011901, - "executionIndex": 9, - "source": [ - { - "previousNode": "Crypto11" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": "0b494c8146f7efd7aa53b418a7057a3a57317a0380c06c7d18114077a03fc6441b57ca8c03edff4ca6fdc2394d026893258b97d34bf0c5c44bc20bd264899eb1316da1e624db1455c73c9054ff732464f775b473b3ba67250ffd74ee42b1acfdf5539bf793d7002327d8d156424444624a625f8dd3f013d40a7ba7b6726186a9" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Crypto3": [ - { - "startTime": 1747344011901, - "executionIndex": 10, - "source": [ - { - "previousNode": "Crypto2" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": "a8a7eec953f1f31484a479c84982d52847de602d7f220ac3903518369a7536693d60882e5eb782599e72024fb649cc03aa0a19ebce632e9039b4f604335834af" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Crypto7": [ - { - "startTime": 1747344011901, - "executionIndex": 11, - "source": [ - { - "previousNode": "Crypto6" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": "0f53f3a374314123991b32e47159ad44e1c61d1c0e96809c1f19d54a5e955c06d5b633f376f2a8419e36ea4b63346fcb39d389714c344771140fd512ac55723a" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Crypto13": [ - { - "startTime": 1747344011901, - "executionIndex": 12, - "source": [ - { - "previousNode": "Crypto12" - } - ], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": "0b494c8146f7efd7aa53b418a7057a3a57317a0380c06c7d18114077a03fc6441b57ca8c03edff4ca6fdc2394d026893258b97d34bf0c5c44bc20bd264899eb1316da1e624db1455c73c9054ff732464f775b473b3ba67250ffd74ee42b1acfdf5539bf793d7002327d8d156424444624a625f8dd3f013d40a7ba7b6726186a9" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Function": [ - { - "startTime": 1747344011902, - "executionIndex": 13, - "source": [ - { - "previousNode": "Crypto3" - } - ], - "hints": [], - "executionTime": 2, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": "a8a7eec953f1f31484a479c84982d52847de602d7f220ac3903518369a7536693d60882e5eb782599e72024fb649cc03aa0a19ebce632e9039b4f604335834af" - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Function1": [ - { - "startTime": 1747344011904, - "executionIndex": 14, - "source": [ - { - "previousNode": "Crypto7" - } - ], - "hints": [], - "executionTime": 2, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": "0f53f3a374314123991b32e47159ad44e1c61d1c0e96809c1f19d54a5e955c06d5b633f376f2a8419e36ea4b63346fcb39d389714c344771140fd512ac55723a" - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ], - "Crypto14": [ - { - "startTime": 1747344011906, - "executionIndex": 15, - "source": [ - { - "previousNode": "Crypto13" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": "b9d0c7c4acb8ef55b5c323f82755fb420e5145bafe4de34925e86c53c9f652eb08ec0d87a9be95ca0c0d90b16dd1b55f1200d87c13e4cdb1ae902f41998314f7b85ffc82f0f1d5296119bd92e23ae685b8b59a3a4ba4b8d54db2314c077b1b238c4ac582e36b51c18c0b5474f0d68c1f42e01c08985111ded4cfd3463068d89a" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Crypto15": [ - { - "startTime": 1747344011906, - "executionIndex": 16, - "source": [ - { - "previousNode": "Crypto14" - } - ], - "hints": [], - "executionTime": 0, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": "1387958052cf887bd50925a8d44bbf8f138cdd23f51a3422028edf39ad413a1591f5ebd653c4f225298cd6857044648bcfb768113674e7bd11c632fb0fc40cfa646301934b8fcf4da9799272a737155a239e1f8db5e92a23bfa2aeabc6732f5be14078a5815fff542842efed681ac3b919f9d42bfc822b0fd611c0b22286f241" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Crypto16": [ - { - "startTime": 1747344011906, - "executionIndex": 17, - "source": [ - { - "previousNode": "Crypto15" - } - ], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": "922659a8d40b12f81080425a8676830be06f26dd8cd18cad25d02055332c94b8b9634598ef5b172ee53e53788d33c183bf0984ae3b48d792f426a601dbf2eb4771bc844bc2464de8ca5b6746bbdc2f1713a1e1d57a6970568f033e588c759e4b179b791b7fcb75d323c98cc5c6f33c3659410b159c94bc13834e81ce297ce98d" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Function2": [ - { - "startTime": 1747344011907, - "executionIndex": 18, - "source": [ - { - "previousNode": "Crypto16" - } - ], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "data": "922659a8d40b12f81080425a8676830be06f26dd8cd18cad25d02055332c94b8b9634598ef5b172ee53e53788d33c183bf0984ae3b48d792f426a601dbf2eb4771bc844bc2464de8ca5b6746bbdc2f1713a1e1d57a6970568f033e588c759e4b179b791b7fcb75d323c98cc5c6f33c3659410b159c94bc13834e81ce297ce98d" - }, - "pairedItem": { - "item": 0 - }, - "index": 0 - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Function2" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:11.899Z", - "stoppedAt": "2025-05-15T21:20:11.908Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/snapshots/98-snapshot.json b/test-workflows/snapshots/98-snapshot.json deleted file mode 100644 index 6f3a7c7d811..00000000000 --- a/test-workflows/snapshots/98-snapshot.json +++ /dev/null @@ -1,322 +0,0 @@ -{ - "data": { - "startData": {}, - "resultData": { - "runData": { - "Start": [ - { - "startTime": 1747344011917, - "executionIndex": 0, - "source": [], - "hints": [], - "executionTime": 1, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": {}, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Disqus": [ - { - "startTime": 1747344011918, - "executionIndex": 1, - "source": [ - { - "previousNode": "Start" - } - ], - "hints": [], - "executionTime": 38, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "aetBannerConfirmation": { - "object": true - }, - "founder": "252695960", - "twitterName": { - "object": true - }, - "commentsLinkOne": "1 Comment", - "guidelines": { - "object": true - }, - "disableDisqusBrandingOnPolls": false, - "commentsLinkZero": "0 Comments", - "disableDisqusBranding": false, - "id": "disqus-demo-page", - "createdAt": "2017-05-22T19:17:36.057166", - "category": "Business", - "aetBannerEnabled": false, - "aetBannerTitle": { - "object": true - }, - "raw_guidelines": { - "object": true - }, - "initialCommentCount": { - "object": true - }, - "votingType": { - "object": true - }, - "daysUnapproveNewUsers": { - "object": true - }, - "installCompleted": true, - "moderatorBadgeText": "", - "commentPolicyText": { - "object": true - }, - "aetEnabled": false, - "channel": { - "object": true - }, - "sort": 4, - "description": { - "object": true - }, - "organizationHasBadges": true, - "newPolicy": true, - "raw_description": { - "object": true - }, - "customFont": { - "object": true - }, - "language": "en", - "adsReviewStatus": 0, - "commentsPlaceholderTextEmpty": { - "object": true - }, - "daysAlive": 0, - "forumCategory": { - "object": true - }, - "linkColor": { - "object": true - }, - "colorScheme": "auto", - "pk": "5140050", - "commentsPlaceholderTextPopulated": { - "object": true - }, - "permissions": { - "object": true - }, - "commentPolicyLink": { - "object": true - }, - "aetBannerDescription": { - "object": true - }, - "favicon": { - "object": true - }, - "name": "Disqus Demo Page", - "commentsLinkMultiple": "{num} Comments", - "settings": { - "object": true - }, - "organizationId": 3883635, - "typeface": "auto", - "url": { - "object": true - }, - "daysThreadAlive": 0, - "avatar": { - "object": true - }, - "signedUrl": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Disqus1": [ - { - "startTime": 1747344011956, - "executionIndex": 2, - "source": [ - { - "previousNode": "Disqus" - } - ], - "hints": [], - "executionTime": 37, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "id": "6858940", - "forum": "disqus-demo-page", - "order": 0, - "isDefault": true, - "title": "General" - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Disqus2": [ - { - "startTime": 1747344011993, - "executionIndex": 3, - "source": [ - { - "previousNode": "Disqus1" - } - ], - "hints": [], - "executionTime": 37, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "feed": "https://disqus-demo-page.disqus.com/httpssharadrajinjekyll_theme_miloc20181009jekyll_posthtml/latest.rss", - "clean_title": "Jekyll post", - "dislikes": 0, - "likes": 0, - "message": "", - "ratingsEnabled": false, - "isSpam": false, - "isDeleted": false, - "category": "6858940", - "adsDisabled": false, - "author": "252695960", - "userScore": 0, - "id": "10287492051", - "signedLink": "https://disq.us/?url=https%3A%2F%2Fsharadraj.in%2Fjekyll-theme-milo%2Fc%2F2018%2F10%2F09%2FJekyll-post.html&key=CSxj3qucEGNA77KOdrXIIQ", - "createdAt": "2024-08-11T01:54:42", - "hasStreaming": false, - "raw_message": "", - "isClosed": false, - "link": "https://sharadraj.in/jekyll-theme-milo/c/2018/10/09/Jekyll-post.html", - "slug": "httpssharadrajinjekyll_theme_miloc20181009jekyll_posthtml", - "forum": "disqus-demo-page", - "identifiers": [ - "json array" - ], - "posts": 0, - "userSubscription": false, - "validateAllPosts": false, - "title": "Jekyll post", - "highlightedPost": { - "object": true - } - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ], - "Disqus3": [ - { - "startTime": 1747344012030, - "executionIndex": 4, - "source": [ - { - "previousNode": "Disqus2" - } - ], - "hints": [], - "executionTime": 37, - "executionStatus": "success", - "data": { - "main": [ - [ - { - "json": { - "editableUntil": "2021-02-20T11:14:59", - "dislikes": 0, - "thread": "8396245103", - "numReports": 0, - "likes": 0, - "message": "

You have done a good job with your knowledge that makes our work easy because you are providing such good information. Keep sharing this kind of knowledge with us.
buy spanish saffron online

", - "id": "5266881862", - "createdAt": "2021-02-13T11:14:59", - "author": { - "object": true - }, - "media": [ - "json array" - ], - "isSpam": false, - "isDeletedByAuthor": false, - "isHighlighted": false, - "parent": { - "object": true - }, - "isApproved": true, - "isNewUserNeedsApproval": false, - "isDeleted": false, - "isFlagged": false, - "raw_message": "You have done a good job with your knowledge that makes our work easy because you are providing such good information. Keep sharing this kind of knowledge with us.\nbuy spanish saffron online", - "isAtFlagLimit": false, - "canVote": false, - "forum": "disqus-demo-page", - "points": 0, - "moderationLabels": [ - "json array" - ], - "isEdited": false, - "sb": false - }, - "pairedItem": { - "item": 0 - } - } - ] - ] - } - } - ] - }, - "lastNodeExecuted": "Disqus3" - }, - "executionData": { - "contextData": {}, - "nodeExecutionStack": [], - "metadata": {}, - "waitingExecution": {}, - "waitingExecutionSource": {} - } - }, - "mode": "cli", - "startedAt": "2025-05-15T21:20:11.917Z", - "stoppedAt": "2025-05-15T21:20:12.067Z", - "status": "running", - "finished": true -} \ No newline at end of file diff --git a/test-workflows/workflows/1.json b/test-workflows/workflows/1.json deleted file mode 100644 index b9efe4e918f..00000000000 --- a/test-workflows/workflows/1.json +++ /dev/null @@ -1,183 +0,0 @@ -{ - "createdAt": "2021-01-21T10:32:07.628Z", - "updatedAt": "2021-06-04T10:25:41.024Z", - "id": "1", - "name": "Twitter:tweet:create:create like retweet delete search", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "0d0e09b1-87e5-4c64-acf5-9a7da0718775" - }, - { - "parameters": { - "text": "=Hello from n8n testing framework {{$evaluateExpression(Math.random())}}", - "additionalFields": {} - }, - "name": "Twitter", - "type": "n8n-nodes-base.twitter", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "twitterOAuth1Api": { - "id": "161", - "name": "Twitter API" - } - }, - "id": "e3e833e8-c567-492d-b5e9-6233e0a3890d" - }, - { - "parameters": { - "operation": "like", - "tweetId": "={{$node[\"Twitter\"].json[\"id_str\"]}}", - "additionalFields": {} - }, - "name": "Twitter1", - "type": "n8n-nodes-base.twitter", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "credentials": { - "twitterOAuth1Api": { - "id": "161", - "name": "Twitter API" - } - }, - "id": "904c5a06-bd36-4edc-abbc-d3cfd946a9f2" - }, - { - "parameters": { - "operation": "retweet", - "tweetId": "={{$node[\"Twitter\"].json[\"id_str\"]}}", - "additionalFields": {} - }, - "name": "Twitter2", - "type": "n8n-nodes-base.twitter", - "typeVersion": 1, - "position": [ - 850, - 300 - ], - "credentials": { - "twitterOAuth1Api": { - "id": "161", - "name": "Twitter API" - } - }, - "id": "fdd7b0de-c279-452e-b6be-acebea480071" - }, - { - "parameters": { - "operation": "delete", - "tweetId": "={{$node[\"Twitter\"].json[\"id_str\"]}}" - }, - "name": "Twitter3", - "type": "n8n-nodes-base.twitter", - "typeVersion": 1, - "position": [ - 1050, - 300 - ], - "credentials": { - "twitterOAuth1Api": { - "id": "161", - "name": "Twitter API" - } - }, - "id": "6dff7ba3-ba03-4cdb-9305-d80eb02d4b83" - }, - { - "parameters": { - "operation": "search", - "searchText": "@n8n_io", - "limit": 1, - "additionalFields": {} - }, - "name": "Twitter4", - "type": "n8n-nodes-base.twitter", - "typeVersion": 1, - "position": [ - 450, - 450 - ], - "credentials": { - "twitterOAuth1Api": { - "id": "161", - "name": "Twitter API" - } - }, - "notes": "IGNORED_PROPERTIES=extended_entities,retweeted_status,quoted_status_id,quoted_status_id_str,quoted_status,possibly_sensitive", - "id": "205bf8c9-afed-4a6a-b538-bb572ef14287" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Twitter", - "type": "main", - "index": 0 - }, - { - "node": "Twitter4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Twitter": { - "main": [ - [ - { - "node": "Twitter1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Twitter1": { - "main": [ - [ - { - "node": "Twitter2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Twitter2": { - "main": [ - [ - { - "node": "Twitter3", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/10.json b/test-workflows/workflows/10.json deleted file mode 100644 index f2f1baf4a0c..00000000000 --- a/test-workflows/workflows/10.json +++ /dev/null @@ -1,325 +0,0 @@ -{ - "createdAt": "2021-02-15T13:56:59.611Z", - "updatedAt": "2021-06-04T14:37:01.395Z", - "id": "10", - "name": "PagerDuty:incident:create get update getAll:incidentNote:create getAll:User:get:LogEntry:getAll get", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 240, - 260 - ], - "id": "91f3c321-72a4-4c04-8e51-ec3a7c775462" - }, - { - "parameters": { - "authentication": "oAuth2", - "title": "Test", - "serviceId": "PO5XHDI", - "email": "nodeqa@n8n.io", - "additionalFields": {} - }, - "name": "PagerDuty", - "type": "n8n-nodes-base.pagerDuty", - "typeVersion": 1, - "position": [ - 400, - 260 - ], - "credentials": { - "pagerDutyOAuth2Api": { - "id": "123", - "name": "PagerDuty OAuth2 API creds" - } - }, - "id": "92f2a4d8-4860-4edf-92e4-ea14671bad92" - }, - { - "parameters": { - "authentication": "oAuth2", - "operation": "get", - "incidentId": "={{$json[\"id\"]}}" - }, - "name": "PagerDuty1", - "type": "n8n-nodes-base.pagerDuty", - "typeVersion": 1, - "position": [ - 550, - 260 - ], - "credentials": { - "pagerDutyOAuth2Api": { - "id": "123", - "name": "PagerDuty OAuth2 API creds" - } - }, - "id": "0af4d8fa-8392-46ce-8d04-cfcb0fcff52b" - }, - { - "parameters": { - "authentication": "oAuth2", - "operation": "update", - "incidentId": "={{$json[\"id\"]}}", - "email": "nodeqa@n8n.io", - "updateFields": { - "status": "acknowledged" - } - }, - "name": "PagerDuty2", - "type": "n8n-nodes-base.pagerDuty", - "typeVersion": 1, - "position": [ - 870, - 260 - ], - "credentials": { - "pagerDutyOAuth2Api": { - "id": "123", - "name": "PagerDuty OAuth2 API creds" - } - }, - "id": "843cc5d1-4302-4d75-b78e-14479b2a5dc7" - }, - { - "parameters": { - "authentication": "oAuth2", - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "PagerDuty3", - "type": "n8n-nodes-base.pagerDuty", - "typeVersion": 1, - "position": [ - 1030, - 260 - ], - "credentials": { - "pagerDutyOAuth2Api": { - "id": "123", - "name": "PagerDuty OAuth2 API creds" - } - }, - "id": "903bd6db-f3ab-45d8-bd05-0f387a5e08bd" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "incidentNote", - "incidentId": "={{$json[\"id\"]}}", - "content": "Simple note for an incident", - "email": "nodeqa@n8n.io" - }, - "name": "PagerDuty4", - "type": "n8n-nodes-base.pagerDuty", - "typeVersion": 1, - "position": [ - 720, - 350 - ], - "credentials": { - "pagerDutyOAuth2Api": { - "id": "123", - "name": "PagerDuty OAuth2 API creds" - } - }, - "id": "37deab31-9ff9-4dd4-9f21-edcdaa13532c" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "incidentNote", - "operation": "getAll", - "incidentId": "={{$json[\"id\"]}}", - "limit": 1 - }, - "name": "PagerDuty5", - "type": "n8n-nodes-base.pagerDuty", - "typeVersion": 1, - "position": [ - 720, - 160 - ], - "credentials": { - "pagerDutyOAuth2Api": { - "id": "123", - "name": "PagerDuty OAuth2 API creds" - } - }, - "id": "e3df7b5a-1abc-4af9-b5a8-725d1339b127" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "user", - "userId": "PT0VVWO" - }, - "name": "PagerDuty6", - "type": "n8n-nodes-base.pagerDuty", - "typeVersion": 1, - "position": [ - 400, - 110 - ], - "credentials": { - "pagerDutyOAuth2Api": { - "id": "123", - "name": "PagerDuty OAuth2 API creds" - } - }, - "id": "25539887-c45a-4859-bc73-6173ef47e07e" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "logEntry", - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "PagerDuty7", - "type": "n8n-nodes-base.pagerDuty", - "typeVersion": 1, - "position": [ - 400, - 540 - ], - "credentials": { - "pagerDutyOAuth2Api": { - "id": "123", - "name": "PagerDuty OAuth2 API creds" - } - }, - "notes": "IGNORED_PROPERTIES=event_details,assignees", - "id": "7f565cd4-e409-4d23-8914-6f887457d14a" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "logEntry", - "logEntryId": "={{$node[\"PagerDuty\"].json[\"first_trigger_log_entry\"][\"id\"]}}" - }, - "name": "PagerDuty8", - "type": "n8n-nodes-base.pagerDuty", - "typeVersion": 1, - "position": [ - 730, - 540 - ], - "credentials": { - "pagerDutyOAuth2Api": { - "id": "123", - "name": "PagerDuty OAuth2 API creds" - } - }, - "id": "9bfda961-967d-43dd-8089-a3af7d26084a" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second1", - "type": "n8n-nodes-base.function", - "position": [ - 560, - 540 - ], - "typeVersion": 1, - "id": "f3501dee-890b-46c6-9306-6ebb1cc7d21f" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "PagerDuty", - "type": "main", - "index": 0 - }, - { - "node": "PagerDuty7", - "type": "main", - "index": 0 - }, - { - "node": "PagerDuty6", - "type": "main", - "index": 0 - } - ] - ] - }, - "PagerDuty": { - "main": [ - [ - { - "node": "PagerDuty1", - "type": "main", - "index": 0 - }, - { - "node": "Sleep 0.5 second1", - "type": "main", - "index": 0 - } - ] - ] - }, - "PagerDuty1": { - "main": [ - [ - { - "node": "PagerDuty4", - "type": "main", - "index": 0 - }, - { - "node": "PagerDuty5", - "type": "main", - "index": 0 - }, - { - "node": "PagerDuty2", - "type": "main", - "index": 0 - } - ] - ] - }, - "PagerDuty2": { - "main": [ - [ - { - "node": "PagerDuty3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second1": { - "main": [ - [ - { - "node": "PagerDuty8", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/101.json b/test-workflows/workflows/101.json deleted file mode 100644 index 3a645c2fe8b..00000000000 --- a/test-workflows/workflows/101.json +++ /dev/null @@ -1,120 +0,0 @@ -{ - "createdAt": "2021-03-04T09:49:58.859Z", - "updatedAt": "2021-03-04T09:49:58.859Z", - "id": "101", - "name": "RenameKeys", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "38b2e8c3-ddfe-4ef3-85d0-ddab8e8732db" - }, - { - "parameters": { - "keys": { - "key": [ - { - "currentKey": "toBeRenamed", - "newKey": "Renamed" - } - ] - } - }, - "name": "Rename Keys", - "type": "n8n-nodes-base.renameKeys", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "id": "d4b5cdcd-3bd7-46aa-ab34-f986411cfc43" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "name", - "value": "test" - }, - { - "name": "toBeRenamed", - "value": "name" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "id": "0c816bc3-19b1-41f2-ac7a-ea5f2448bac2" - }, - { - "parameters": { - "functionCode": "testData = JSON.stringify(\n{\nname: \"test\",\nRenamed: \"name\"\n}\n)\nif(JSON.stringify($node['Rename Keys'].json) !== testData){\n throw new Error('Error in rename keys node');\n}\n\nreturn items;" - }, - "name": "Function", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 850, - 300 - ], - "id": "95ab4a10-c3f3-4bad-8792-4a8dab012672" - } - ], - "connections": { - "Rename Keys": { - "main": [ - [ - { - "node": "Function", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set": { - "main": [ - [ - { - "node": "Rename Keys", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/102.json b/test-workflows/workflows/102.json deleted file mode 100644 index 9fe39c9a667..00000000000 --- a/test-workflows/workflows/102.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "createdAt": "2021-03-04T10:41:43.011Z", - "updatedAt": "2021-03-04T10:41:43.011Z", - "id": "102", - "name": "ReadBinaryFile", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "516a8267-1d35-4ec7-977b-87d0f961fe53" - }, - { - "parameters": { - "filePath": "/tmp/n8n-logo.png" - }, - "name": "Read Binary File", - "type": "n8n-nodes-base.readBinaryFile", - "typeVersion": 1, - "position": [ - 500, - 300 - ], - "notesInFlow": true, - "notes": "Read the assets/n8n-logo.png", - "id": "839c17af-2415-41c4-bf13-8815df27ca4e" - }, - { - "parameters": { - "functionCode": "testData='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';\nif(items[0].binary.data.data !== testData){\n throw new Error('Error in Read Binary File node');\n}\nreturn items;" - }, - "name": "Function", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "notesInFlow": true, - "notes": "assert the base64 value", - "id": "409eca37-f7a2-4ddc-9ae9-c4a9daeef481" - } - ], - "connections": { - "Read Binary File": { - "main": [ - [ - { - "node": "Function", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Read Binary File", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/103.json b/test-workflows/workflows/103.json deleted file mode 100644 index 77bda9f9a89..00000000000 --- a/test-workflows/workflows/103.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "createdAt": "2021-03-04T11:22:05.930Z", - "updatedAt": "2021-03-04T11:24:54.336Z", - "id": "103", - "name": "ExecuteCommand", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "596a5418-e61d-41ab-84eb-64e07630b23e" - }, - { - "parameters": { - "command": "=echo 'test' > /tmp/{{$node[\"Set\"].json[\"filename\"]}}" - }, - "name": "Execute Command", - "type": "n8n-nodes-base.executeCommand", - "typeVersion": 1, - "position": [ - 660, - 300 - ], - "notesInFlow": true, - "notes": "write file to /tmp", - "id": "9c118fb2-edad-441a-b8a8-f1c843a37bd5" - }, - { - "parameters": { - "filePath": "=/tmp/{{$node[\"Set\"].json[\"filename\"]}}" - }, - "name": "Read Binary File", - "type": "n8n-nodes-base.readBinaryFile", - "typeVersion": 1, - "position": [ - 860, - 300 - ], - "notesInFlow": true, - "notes": "read file", - "id": "af6e6941-e34e-4b5d-a236-3bccd5bd4cfd" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "filename", - "value": "=filename{{Date.now()}}" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "notesInFlow": true, - "notes": "generate filename", - "id": "8864d17b-8310-4460-810c-d43da4e967ff" - }, - { - "parameters": { - "functionCode": "testData= 'dGVzdAo='\nif($node['Execute Command'].json['exitCode']!==0 || items[0].binary.data.data !== testData){\n throw new Error('Error Execute Command in node');\n}\nreturn items;" - }, - "name": "Function", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 1050, - 300 - ], - "notesInFlow": true, - "notes": "verify file content", - "id": "0a60312c-4030-496b-ad24-3acebff5eca1" - }, - { - "parameters": { - "command": "=rm /tmp/{{$node[\"Set\"].json[\"filename\"]}}" - }, - "name": "Execute Command1", - "type": "n8n-nodes-base.executeCommand", - "typeVersion": 1, - "position": [ - 1250, - 300 - ], - "notesInFlow": true, - "notes": "remove file from /tmp", - "id": "ede3e595-c571-4155-85bd-14e39fe78049" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - }, - "Execute Command": { - "main": [ - [ - { - "node": "Read Binary File", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set": { - "main": [ - [ - { - "node": "Execute Command", - "type": "main", - "index": 0 - } - ] - ] - }, - "Read Binary File": { - "main": [ - [ - { - "node": "Function", - "type": "main", - "index": 0 - } - ] - ] - }, - "Function": { - "main": [ - [ - { - "node": "Execute Command1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/104.json b/test-workflows/workflows/104.json deleted file mode 100644 index ab361797f5a..00000000000 --- a/test-workflows/workflows/104.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "createdAt": "2021-03-04T13:14:37.236Z", - "updatedAt": "2021-06-15T14:39:01.449Z", - "id": "104", - "name": "ReadPDF", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "084e6fae-bd3c-4887-98a4-5ef671a9202c" - }, - { - "parameters": {}, - "name": "Read PDF", - "type": "n8n-nodes-base.readPDF", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "notesInFlow": true, - "notes": "Parse PDF", - "id": "c9c1692b-3979-4334-94f3-a6ba1aeb1705" - }, - { - "parameters": { - "filePath": "/tmp/04-valid.pdf" - }, - "name": "Read Binary File", - "type": "n8n-nodes-base.readBinaryFile", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "alwaysOutputData": false, - "notesInFlow": true, - "notes": "Read static pdf file from node_modules", - "id": "f725a50d-5941-4370-9925-474306645ed5" - } - ], - "connections": { - "Read Binary File": { - "main": [ - [ - { - "node": "Read PDF", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Read Binary File", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/105.json b/test-workflows/workflows/105.json deleted file mode 100644 index a388218880a..00000000000 --- a/test-workflows/workflows/105.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "createdAt": "2021-03-04T13:31:56.288Z", - "updatedAt": "2021-03-04T13:31:56.288Z", - "id": "105", - "name": "WriteBinaryFile", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "6ad9a76c-8bd9-4a23-98ad-12e9f913fb9d" - }, - { - "parameters": { - "fileName": "/tmp/test_write_binary_file.txt" - }, - "name": "Write Binary File", - "type": "n8n-nodes-base.writeBinaryFile", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "notesInFlow": true, - "notes": "Write binary file in /tmp directory", - "id": "c323f3c4-c1ca-4c7c-acbd-0387e14966ca" - }, - { - "parameters": { - "filePath": "/tmp/test_write_binary_file.txt" - }, - "name": "Read Binary File", - "type": "n8n-nodes-base.readBinaryFile", - "typeVersion": 1, - "position": [ - 850, - 300 - ], - "notesInFlow": true, - "notes": "Read file data", - "id": "19df8a14-6a25-4c6d-a891-095562ce311a" - }, - { - "parameters": { - "functionCode": "items = [\n{\njson:{},\nbinary: {\n\tdata: {\n\t\tdata: 'VGVzdCBXcml0ZSBCaW5hcnkgRmlsZSBub2Rl',\n\t\tfileExtension: 'txt', \n\t\tfileName: 'file.txt', \n\t}\n}\n}\n\n];\nreturn items;" - }, - "name": "Function", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 460, - 300 - ], - "notesInFlow": true, - "notes": "Prepare file data", - "id": "0a14fc91-53a3-4c8a-b1cb-eef0734f016a" - }, - { - "parameters": { - "functionCode": "testData ='VGVzdCBXcml0ZSBCaW5hcnkgRmlsZSBub2Rl';\n\nif(items[0].binary.data.data !== testData){\n throw new Error('Error in Write Binary File node');\n}\nreturn items;" - }, - "name": "Function1", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 1020, - 300 - ], - "notesInFlow": true, - "notes": "Verify file data", - "id": "fe251599-60cf-45df-a1fc-4c0f5b019b50" - } - ], - "connections": { - "Write Binary File": { - "main": [ - [ - { - "node": "Read Binary File", - "type": "main", - "index": 0 - } - ] - ] - }, - "Function": { - "main": [ - [ - { - "node": "Write Binary File", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Function", - "type": "main", - "index": 0 - } - ] - ] - }, - "Read Binary File": { - "main": [ - [ - { - "node": "Function1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/106.json b/test-workflows/workflows/106.json deleted file mode 100644 index 3ee3647baed..00000000000 --- a/test-workflows/workflows/106.json +++ /dev/null @@ -1,412 +0,0 @@ -{ - "createdAt": "2021-03-04T14:19:59.064Z", - "updatedAt": "2021-03-09T08:07:08.936Z", - "id": "106", - "name": "Box:Folder:create search get delete:File:upload get download copy search delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "3379cd25-f1fb-4810-84eb-1fe522062d5e" - }, - { - "parameters": { - "resource": "folder", - "name": "=Folder{{Date.now()}}", - "options": {} - }, - "name": "Box", - "type": "n8n-nodes-base.box", - "typeVersion": 1, - "position": [ - 500, - 300 - ], - "credentials": { - "boxOAuth2Api": { - "id": "77", - "name": "Box OAuth2 creds" - } - }, - "id": "61a2d115-f5ad-4d90-b2c4-98b637c72a05" - }, - { - "parameters": { - "resource": "folder", - "operation": "search", - "query": "folder", - "limit": 1, - "additionalFields": {} - }, - "name": "Box1", - "type": "n8n-nodes-base.box", - "typeVersion": 1, - "position": [ - 1850, - 300 - ], - "alwaysOutputData": true, - "credentials": { - "boxOAuth2Api": { - "id": "77", - "name": "Box OAuth2 creds" - } - }, - "id": "38f2209f-5ba9-47c1-9e37-47561b96a816" - }, - { - "parameters": { - "resource": "folder", - "operation": "delete", - "folderId": "={{$node[\"Box\"].json[\"id\"]}}" - }, - "name": "Box2", - "type": "n8n-nodes-base.box", - "typeVersion": 1, - "position": [ - 2140, - 300 - ], - "credentials": { - "boxOAuth2Api": { - "id": "77", - "name": "Box OAuth2 creds" - } - }, - "id": "59b546b6-5bca-4154-b635-1416f756d75b" - }, - { - "parameters": { - "fileName": "=logo{{Date.now()}}.png", - "binaryData": true, - "parentId": "={{$node[\"Box\"].json[\"id\"]}}" - }, - "name": "Box3", - "type": "n8n-nodes-base.box", - "typeVersion": 1, - "position": [ - 800, - 400 - ], - "credentials": { - "boxOAuth2Api": { - "id": "77", - "name": "Box OAuth2 creds" - } - }, - "id": "1b9d07ed-78e2-4436-9034-a3c4930d182f" - }, - { - "parameters": { - "filePath": "/tmp/n8n-screenshot.png" - }, - "name": "Read Binary File", - "type": "n8n-nodes-base.readBinaryFile", - "typeVersion": 1, - "position": [ - 650, - 400 - ], - "id": "a2ddf065-8352-4de3-826b-1577e54a6166" - }, - { - "parameters": { - "operation": "get", - "fileId": "={{$node[\"Box3\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Box4", - "type": "n8n-nodes-base.box", - "typeVersion": 1, - "position": [ - 950, - 400 - ], - "credentials": { - "boxOAuth2Api": { - "id": "77", - "name": "Box OAuth2 creds" - } - }, - "id": "aabe943e-f257-4db2-896f-1bc5ddf9f0cd" - }, - { - "parameters": { - "operation": "download", - "fileId": "={{$node[\"Box3\"].json[\"id\"]}}" - }, - "name": "Box5", - "type": "n8n-nodes-base.box", - "typeVersion": 1, - "position": [ - 1100, - 400 - ], - "credentials": { - "boxOAuth2Api": { - "id": "77", - "name": "Box OAuth2 creds" - } - }, - "id": "fb9625be-a0c9-421e-acfb-fa4451e6c0c4" - }, - { - "parameters": { - "operation": "copy", - "fileId": "={{$node[\"Box3\"].json[\"id\"]}}", - "parentId": "={{$node[\"Box\"].json[\"id\"]}}", - "additionalFields": { - "name": "=Copied-logo{{Date.now()}}.png" - } - }, - "name": "Box6", - "type": "n8n-nodes-base.box", - "typeVersion": 1, - "position": [ - 1250, - 400 - ], - "credentials": { - "boxOAuth2Api": { - "id": "77", - "name": "Box OAuth2 creds" - } - }, - "id": "e9e7997b-1eab-4244-9e52-9ea6f00dac63" - }, - { - "parameters": { - "operation": "search", - "query": "logo", - "limit": 1, - "additionalFields": { - "file_extensions": "png" - } - }, - "name": "Box7", - "type": "n8n-nodes-base.box", - "typeVersion": 1, - "position": [ - 1400, - 400 - ], - "alwaysOutputData": true, - "credentials": { - "boxOAuth2Api": { - "id": "77", - "name": "Box OAuth2 creds" - } - }, - "id": "6ed0e975-cc74-4c57-813a-39e0c954097d" - }, - { - "parameters": { - "operation": "delete", - "fileId": "={{$node[\"Box3\"].json[\"id\"]}}" - }, - "name": "Box8", - "type": "n8n-nodes-base.box", - "typeVersion": 1, - "position": [ - 1550, - 400 - ], - "credentials": { - "boxOAuth2Api": { - "id": "77", - "name": "Box OAuth2 creds" - } - }, - "id": "2cf28778-50dc-46ae-8347-6d74cca97d6e" - }, - { - "parameters": { - "operation": "delete", - "fileId": "={{$node[\"Box6\"].json[\"id\"]}}" - }, - "name": "Box10", - "type": "n8n-nodes-base.box", - "typeVersion": 1, - "position": [ - 1700, - 400 - ], - "credentials": { - "boxOAuth2Api": { - "id": "77", - "name": "Box OAuth2 creds" - } - }, - "id": "2f0e8ab1-2ad9-4613-b813-7f8d1fcbd7a0" - }, - { - "parameters": { - "resource": "folder", - "operation": "get", - "folderId": "={{$node[\"Box\"].json[\"id\"]}}" - }, - "name": "Box9", - "type": "n8n-nodes-base.box", - "typeVersion": 1, - "position": [ - 2000, - 300 - ], - "credentials": { - "boxOAuth2Api": { - "id": "77", - "name": "Box OAuth2 creds" - } - }, - "id": "fbba5280-62da-4344-a8b3-faec86d38a3a" - } - ], - "connections": { - "Box": { - "main": [ - [ - { - "node": "Read Binary File", - "type": "main", - "index": 0 - } - ] - ] - }, - "Box1": { - "main": [ - [ - { - "node": "Box9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Box3": { - "main": [ - [ - { - "node": "Box4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Read Binary File": { - "main": [ - [ - { - "node": "Box3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Box4": { - "main": [ - [ - { - "node": "Box5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Box5": { - "main": [ - [ - { - "node": "Box6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Box6": { - "main": [ - [ - { - "node": "Box7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Box7": { - "main": [ - [ - { - "node": "Box8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Box8": { - "main": [ - [ - { - "node": "Box10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Box10": { - "main": [ - [ - { - "node": "Box1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Box", - "type": "main", - "index": 0 - } - ] - ] - }, - "Box9": { - "main": [ - [ - { - "node": "Box2", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/107.json b/test-workflows/workflows/107.json deleted file mode 100644 index 2536dba28e4..00000000000 --- a/test-workflows/workflows/107.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "createdAt": "2021-03-04T15:21:38.969Z", - "updatedAt": "2021-03-04T15:27:37.666Z", - "id": "107", - "name": "ReadBinaryFiles", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 300, - 300 - ], - "id": "3da902a3-83e2-4bc5-9961-6ad791e512ef" - }, - { - "parameters": { - "functionCode": "item1TestData='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';\nitem2TestData='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';\nif(items[0].binary.data.data !== item1TestData ||\n items[1].binary.data.data !== item2TestData){\n throw new Error('Error in Read Binary File node');\n}\nreturn items;" - }, - "name": "Function", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 700, - 300 - ], - "notesInFlow": true, - "notes": "assert the files base64 values", - "id": "96e3be5b-7b04-4ffd-97fd-169a58b7dff0" - }, - { - "parameters": { - "fileSelector": "../../../assets/*.png" - }, - "name": "Read Binary Files", - "type": "n8n-nodes-base.readBinaryFiles", - "typeVersion": 1, - "position": [ - 510, - 300 - ], - "notesInFlow": true, - "notes": "Read png files under assets directory ", - "id": "a64eb0b3-7bef-4d62-8a26-c5f2030efe63" - } - ], - "connections": { - "Read Binary Files": { - "main": [ - [ - { - "node": "Function", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Read Binary Files", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/108.json b/test-workflows/workflows/108.json deleted file mode 100644 index b62130af62f..00000000000 --- a/test-workflows/workflows/108.json +++ /dev/null @@ -1,1080 +0,0 @@ -{ - "createdAt": "2021-03-04T16:23:06.210Z", - "updatedAt": "2021-03-04T17:33:16.605Z", - "id": "108", - "name": "Merge:append keepKeyMatches mergeByIndex(leftjoin,innerjoin,outerjoin) mergeByKey(ifBlank,always,ifMissing) Multiplex passThrough removeKeyMatches", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 120, - 1510 - ], - "id": "05049327-2f4e-4009-94d1-13c946fdf5ba" - }, - { - "parameters": {}, - "name": "Merge", - "type": "n8n-nodes-base.merge", - "typeVersion": 1, - "position": [ - 580, - 300 - ], - "id": "21ee0629-efde-4030-9a2e-6ffe5d135aab" - }, - { - "parameters": { - "values": { - "boolean": [ - { - "name": "value1", - "value": true - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 430, - 220 - ], - "id": "76be9855-6e08-4898-a92f-a715ccd2d9f6" - }, - { - "parameters": { - "values": { - "boolean": [], - "number": [ - { - "name": "value2", - "value": 5 - } - ] - }, - "options": {} - }, - "name": "Set1", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 430, - 370 - ], - "id": "49c669ce-c9d0-44ff-aabe-fc8c43b6fa5b" - }, - { - "parameters": { - "functionCode": "testData= JSON.stringify([{value1:true},{value2:5}]);\n\nif(JSON.stringify(items.map(item => item.json)) !== testData){\n throw new Error('Error in Merge node : append');\n}\nreturn items;" - }, - "name": "Function", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 780, - 300 - ], - "notesInFlow": true, - "notes": "Verify merge operation", - "id": "ee84e437-1a43-46e2-8d28-49af7bd7050b" - }, - { - "parameters": { - "mode": "keepKeyMatches", - "propertyName1": "prop3", - "propertyName2": "prop4" - }, - "name": "Merge1", - "type": "n8n-nodes-base.merge", - "typeVersion": 1, - "position": [ - 580, - 580 - ], - "id": "76c2f8bd-920e-46d5-8ccd-c1abb9f9b107" - }, - { - "parameters": { - "values": { - "boolean": [], - "number": [ - { - "name": "prop1", - "value": 1 - }, - { - "name": "prop3", - "value": -1 - } - ] - }, - "options": {} - }, - "name": "Set2", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 430, - 500 - ], - "id": "80630a5a-6b50-4a96-8860-4ee0a44eb6d7" - }, - { - "parameters": { - "values": { - "boolean": [], - "number": [ - { - "name": "prop2", - "value": 2 - }, - { - "name": "prop4", - "value": -1 - } - ] - }, - "options": {} - }, - "name": "Set3", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 430, - 650 - ], - "id": "c711f26f-fa32-4d45-96df-64a94bda847f" - }, - { - "parameters": { - "functionCode": "testData= JSON.stringify({prop1:1,prop3:-1});\n\nif(JSON.stringify(items[0].json) !== testData){\n throw new Error('Error in Merge node : keepKeyMatches');\n}\nreturn items;" - }, - "name": "Function1", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 780, - 580 - ], - "notesInFlow": true, - "notes": "Verify merge operation", - "id": "f14b2693-ef6c-452e-8e9a-bbb0a9854108" - }, - { - "parameters": { - "mode": "mergeByIndex", - "join": "inner" - }, - "name": "Merge2", - "type": "n8n-nodes-base.merge", - "typeVersion": 1, - "position": [ - 600, - 900 - ], - "id": "fabcb606-0623-4637-aea2-02348c9f8395" - }, - { - "parameters": { - "functionCode": "testData= JSON.stringify([{title:'Input2item1'},{title:'Input2item2'},{title:'Input2item3'}]);\n\nif(JSON.stringify(items.map(item => item.json)) !== testData){\n throw new Error('Error in Merge node : mergeByIndex: innerjoin');\n}\nreturn items;" - }, - "name": "Function2", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 750, - 900 - ], - "notesInFlow": true, - "notes": "Verify mergeByIndex operation", - "id": "52c35538-f039-4a65-9ee0-0f8b19783e39" - }, - { - "parameters": { - "mode": "mergeByIndex" - }, - "name": "Merge3", - "type": "n8n-nodes-base.merge", - "typeVersion": 1, - "position": [ - 600, - 750 - ], - "id": "a027b711-4a82-4d5c-b181-ef9c9a8f4c96" - }, - { - "parameters": { - "functionCode": "testData= JSON.stringify([{title:'Input2item1'},{title:'Input2item2'},{title:'Input2item3'}]);\n\nif(JSON.stringify(items.map(item => item.json)) !== testData){\n throw new Error('Error in Merge node : mergeByIndex: leftjoin');\n}\nreturn items;" - }, - "name": "Function3", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 750, - 750 - ], - "notesInFlow": true, - "notes": "Verify mergeByIndex operation", - "id": "637ec6e5-0166-4a3a-8590-3ba8c2772e43" - }, - { - "parameters": { - "mode": "mergeByIndex", - "join": "outer" - }, - "name": "Merge4", - "type": "n8n-nodes-base.merge", - "typeVersion": 1, - "position": [ - 600, - 1050 - ], - "notesInFlow": false, - "notes": "outerjoin", - "id": "efc5cc37-9d27-4271-b767-fd9351aadaf4" - }, - { - "parameters": { - "functionCode": "testData= JSON.stringify([{title:'Input2item1'},{title:'Input2item2'},{title:'Input2item3'},{title:'Input2item4'}]);\n\nif(JSON.stringify(items.map(item => item.json)) !== testData){\n throw new Error('Error in Merge node : mergeByIndex: outerjoin');\n}\nreturn items;" - }, - "name": "Function4", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 750, - 1050 - ], - "notesInFlow": true, - "notes": "Verify mergeByIndex operation", - "id": "00e11687-bdb1-4569-95ed-f90b199b0337" - }, - { - "parameters": { - "mode": "mergeByKey", - "propertyName1": "prop3", - "propertyName2": "prop4" - }, - "name": "Merge5", - "type": "n8n-nodes-base.merge", - "typeVersion": 1, - "position": [ - 580, - 1380 - ], - "id": "87c14aaa-fd17-4d7b-8c05-337033d054b0" - }, - { - "parameters": { - "values": { - "boolean": [], - "number": [ - { - "name": "prop2", - "value": 2 - }, - { - "name": "prop3", - "value": -2 - }, - { - "name": "prop4", - "value": -3 - } - ] - }, - "options": {} - }, - "name": "Set6", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 400, - 1440 - ], - "id": "06f1417b-2461-4aa6-92fb-46749dbf07be" - }, - { - "parameters": { - "functionCode": "testData= JSON.stringify({prop1:1,prop3:-1});\n\nif(JSON.stringify(items[0].json) !== testData){\n throw new Error('Error in Merge node : keepKeyMatches');\n}\nreturn items;" - }, - "name": "Function5", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 750, - 1380 - ], - "notesInFlow": true, - "notes": "Verify mergeByKey operation", - "id": "440e0084-64d7-48cd-8418-5ea1b0f2c4d8" - }, - { - "parameters": { - "values": { - "boolean": [], - "number": [ - { - "name": "prop1", - "value": 1 - }, - { - "name": "prop3", - "value": -1 - } - ], - "string": [] - }, - "options": {} - }, - "name": "Set7", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 400, - 1290 - ], - "id": "d44ca83d-c757-49c1-b35a-1f95306c796e" - }, - { - "parameters": { - "functionCode": "testData= JSON.stringify({prop1:1,prop3:-1});\n\nif(JSON.stringify(items[0].json) !== testData){\n throw new Error('Error in Merge node : keepKeyMatches');\n}\nreturn items;" - }, - "name": "Function6", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 750, - 1230 - ], - "notesInFlow": true, - "notes": "Verify mergeByKey operation", - "id": "4f20aaa3-7f0d-4dd4-a863-6c0bb2209b36" - }, - { - "parameters": { - "mode": "mergeByKey", - "propertyName1": "prop3", - "propertyName2": "prop4", - "overwrite": "blank" - }, - "name": "Merge6", - "type": "n8n-nodes-base.merge", - "typeVersion": 1, - "position": [ - 580, - 1230 - ], - "id": "ebf52dbc-51cb-4abf-a4ee-480e2c0f546c" - }, - { - "parameters": { - "functionCode": "testData= JSON.stringify({prop1:1,prop3:-1});\n\nif(JSON.stringify(items[0].json) !== testData){\n throw new Error('Error in Merge node : keepKeyMatches');\n}\nreturn items;" - }, - "name": "Function7", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 750, - 1530 - ], - "notesInFlow": true, - "notes": "Verify mergeByKey operation", - "id": "02adb59e-bbfe-442b-a185-2addbe1d1464" - }, - { - "parameters": { - "mode": "mergeByKey", - "propertyName1": "prop3", - "propertyName2": "prop4", - "overwrite": "undefined" - }, - "name": "Merge7", - "type": "n8n-nodes-base.merge", - "typeVersion": 1, - "position": [ - 580, - 1530 - ], - "id": "75a59075-beab-4a75-98b5-b6b267d3a096" - }, - { - "parameters": { - "mode": "multiplex" - }, - "name": "Merge8", - "type": "n8n-nodes-base.merge", - "typeVersion": 1, - "position": [ - 580, - 1780 - ], - "id": "690e5bee-e4cc-4179-bdf6-f38ffbcd271d" - }, - { - "parameters": { - "values": { - "boolean": [], - "number": [ - { - "name": "prop3", - "value": 2 - }, - { - "name": "prop4", - "value": -4 - } - ] - }, - "options": {} - }, - "name": "Set8", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 430, - 1850 - ], - "id": "65fb39a2-10c6-4ad1-866a-a7771ac9c1af" - }, - { - "parameters": { - "functionCode": "testData= JSON.stringify({prop1: 1,prop2: -1,prop3: 2,prop4: -4});\n\nif(JSON.stringify(items[0].json) !== testData){\n throw new Error('Error in Merge node : multiplex');\n}\nreturn items;" - }, - "name": "Function8", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 780, - 1780 - ], - "notesInFlow": true, - "notes": "Verify multiplex operation", - "id": "fa2cc83d-1223-47cf-a7f8-a272a95014ab" - }, - { - "parameters": { - "values": { - "boolean": [], - "number": [ - { - "name": "prop1", - "value": 1 - }, - { - "name": "prop2", - "value": -1 - } - ] - }, - "options": {} - }, - "name": "Set9", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 430, - 1700 - ], - "id": "66c41d0d-cfb4-4422-94d6-3f2cf87eb5ae" - }, - { - "parameters": { - "mode": "passThrough" - }, - "name": "Merge9", - "type": "n8n-nodes-base.merge", - "typeVersion": 1, - "position": [ - 590, - 2080 - ], - "id": "449087b4-8aac-4294-a01a-af6475eb48c1" - }, - { - "parameters": { - "values": { - "boolean": [], - "number": [ - { - "name": "prop3", - "value": 2 - }, - { - "name": "prop4", - "value": -4 - } - ] - }, - "options": {} - }, - "name": "Set10", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 440, - 2150 - ], - "id": "fe7a92b3-8f2a-408b-90df-e1b5fe647027" - }, - { - "parameters": { - "functionCode": "testData= JSON.stringify({prop1: 1,prop2: -1});\n\nif(JSON.stringify(items[0].json) !== testData){\n throw new Error('Error in Merge node : passThrough');\n}\nreturn items;" - }, - "name": "Function9", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 790, - 2080 - ], - "notesInFlow": true, - "notes": "Verify passThrough operation", - "id": "c3faf934-98ee-4bad-9326-567ad3aca34b" - }, - { - "parameters": { - "values": { - "boolean": [], - "number": [ - { - "name": "prop1", - "value": 1 - }, - { - "name": "prop2", - "value": -1 - } - ] - }, - "options": {} - }, - "name": "Set11", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 440, - 2000 - ], - "id": "48d50540-eb21-470a-9a32-5a57093ebf54" - }, - { - "parameters": { - "mode": "removeKeyMatches", - "propertyName1": "prop1", - "propertyName2": "prop3" - }, - "name": "Merge10", - "type": "n8n-nodes-base.merge", - "typeVersion": 1, - "position": [ - 600, - 2380 - ], - "id": "8fa6f5b0-9f8f-4ff4-b15e-feaef0f92c61" - }, - { - "parameters": { - "values": { - "boolean": [], - "number": [ - { - "name": "prop3", - "value": 2 - }, - { - "name": "prop4", - "value": -4 - } - ] - }, - "options": {} - }, - "name": "Set12", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 450, - 2450 - ], - "id": "acf521b5-df53-43ff-a046-80f656dbe90b" - }, - { - "parameters": { - "values": { - "boolean": [], - "number": [ - { - "name": "prop1", - "value": 1 - }, - { - "name": "prop2", - "value": -1 - } - ] - }, - "options": {} - }, - "name": "Set13", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 450, - 2300 - ], - "id": "0310f05a-f0e6-4383-aa2a-1602dc8979e2" - }, - { - "parameters": { - "functionCode": "testData= JSON.stringify({prop1: 1,prop2: -1});\n\nif(JSON.stringify(items[0].json) !== testData){\n throw new Error('Error in Merge node : removeKeyMatches');\n}\nreturn items;" - }, - "name": "Function10", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 800, - 2380 - ], - "notesInFlow": true, - "notes": "Verify removeKeyMatches operation", - "id": "e56612ad-6b5a-4f1e-9d5c-feacc7960269" - }, - { - "parameters": { - "functionCode": "items = [{\n json:{\n title:'Input1item1'\n }\n},{\n json:{\n title:'Input1item2'\n }\n},{\n json:{\n title:'Input1item3'\n }\n}]\nreturn items;" - }, - "name": "Function11", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 430, - 810 - ], - "notesInFlow": true, - "notes": "Input 1", - "id": "96b68b9c-10fd-4d22-8836-0babe8295c53" - }, - { - "parameters": { - "functionCode": "items = [{\n json:{\n title:'Input2item1'\n }\n},{\n json:{\n title:'Input2item2'\n }\n},{\n json:{\n title:'Input2item3'\n }\n},{\n json:{\n title:'Input2item4'\n }\n}]\nreturn items;" - }, - "name": "Function12", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 430, - 960 - ], - "notesInFlow": true, - "notes": "Input 2", - "id": "b1382fe4-f188-44da-aeec-cfebab259efe" - } - ], - "connections": { - "Merge": { - "main": [ - [ - { - "node": "Function", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set1": { - "main": [ - [ - { - "node": "Merge", - "type": "main", - "index": 1 - } - ] - ] - }, - "Set": { - "main": [ - [ - { - "node": "Merge", - "type": "main", - "index": 0 - } - ] - ] - }, - "Merge1": { - "main": [ - [ - { - "node": "Function1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set2": { - "main": [ - [ - { - "node": "Merge1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set3": { - "main": [ - [ - { - "node": "Merge1", - "type": "main", - "index": 1 - } - ] - ] - }, - "Merge2": { - "main": [ - [ - { - "node": "Function2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Merge3": { - "main": [ - [ - { - "node": "Function3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Merge4": { - "main": [ - [ - { - "node": "Function4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Merge5": { - "main": [ - [ - { - "node": "Function5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set6": { - "main": [ - [ - { - "node": "Merge5", - "type": "main", - "index": 1 - }, - { - "node": "Merge6", - "type": "main", - "index": 1 - }, - { - "node": "Merge7", - "type": "main", - "index": 1 - } - ] - ] - }, - "Set7": { - "main": [ - [ - { - "node": "Merge5", - "type": "main", - "index": 0 - }, - { - "node": "Merge6", - "type": "main", - "index": 0 - }, - { - "node": "Merge7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Merge6": { - "main": [ - [ - { - "node": "Function6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Merge7": { - "main": [ - [ - { - "node": "Function7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Merge8": { - "main": [ - [ - { - "node": "Function8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set8": { - "main": [ - [ - { - "node": "Merge8", - "type": "main", - "index": 1 - } - ] - ] - }, - "Set9": { - "main": [ - [ - { - "node": "Merge8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Merge9": { - "main": [ - [ - { - "node": "Function9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set10": { - "main": [ - [ - { - "node": "Merge9", - "type": "main", - "index": 1 - } - ] - ] - }, - "Set11": { - "main": [ - [ - { - "node": "Merge9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Merge10": { - "main": [ - [ - { - "node": "Function10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set12": { - "main": [ - [ - { - "node": "Merge10", - "type": "main", - "index": 1 - } - ] - ] - }, - "Set13": { - "main": [ - [ - { - "node": "Merge10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - }, - { - "node": "Set1", - "type": "main", - "index": 0 - }, - { - "node": "Set2", - "type": "main", - "index": 0 - }, - { - "node": "Set3", - "type": "main", - "index": 0 - }, - { - "node": "Set7", - "type": "main", - "index": 0 - }, - { - "node": "Set6", - "type": "main", - "index": 0 - }, - { - "node": "Set9", - "type": "main", - "index": 0 - }, - { - "node": "Set8", - "type": "main", - "index": 0 - }, - { - "node": "Set11", - "type": "main", - "index": 0 - }, - { - "node": "Set10", - "type": "main", - "index": 0 - }, - { - "node": "Set13", - "type": "main", - "index": 0 - }, - { - "node": "Set12", - "type": "main", - "index": 0 - }, - { - "node": "Function11", - "type": "main", - "index": 0 - }, - { - "node": "Function12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Function11": { - "main": [ - [ - { - "node": "Merge3", - "type": "main", - "index": 0 - }, - { - "node": "Merge2", - "type": "main", - "index": 0 - }, - { - "node": "Merge4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Function12": { - "main": [ - [ - { - "node": "Merge3", - "type": "main", - "index": 1 - }, - { - "node": "Merge2", - "type": "main", - "index": 1 - }, - { - "node": "Merge4", - "type": "main", - "index": 1 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/109.json b/test-workflows/workflows/109.json deleted file mode 100644 index 2703443d216..00000000000 --- a/test-workflows/workflows/109.json +++ /dev/null @@ -1,310 +0,0 @@ -{ - "createdAt": "2021-03-09T08:21:50.403Z", - "updatedAt": "2021-07-14T13:48:45.782Z", - "id": "109", - "name": "Customerio:Campaign:get getMettrics geAll:Customer:upsert delete:Event:track trackAnonymous:Segment:add remove", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "61b889fc-0c5f-4bfc-b477-a22d4f8ad97e" - }, - { - "parameters": { - "resource": "campaign", - "campaignId": 1 - }, - "name": "CustomerIo", - "type": "n8n-nodes-base.customerIo", - "typeVersion": 1, - "position": [ - 450, - 200 - ], - "credentials": { - "customerIoApi": { - "id": "78", - "name": "Customer.io creds" - } - }, - "notes": "IGNORED_PROPERTIES=trigger_segment_ids", - "id": "2a946a7a-e22f-4ec4-af11-ff6213d5244a" - }, - { - "parameters": { - "resource": "campaign", - "operation": "getMetrics", - "campaignId": 1, - "period": "months", - "additionalFields": {} - }, - "name": "CustomerIo1", - "type": "n8n-nodes-base.customerIo", - "typeVersion": 1, - "position": [ - 600, - 200 - ], - "credentials": { - "customerIoApi": { - "id": "78", - "name": "Customer.io creds" - } - }, - "id": "0c8e6559-217d-4e55-a13f-2cf3ecf9559c" - }, - { - "parameters": { - "resource": "campaign", - "operation": "getAll" - }, - "name": "CustomerIo2", - "type": "n8n-nodes-base.customerIo", - "typeVersion": 1, - "position": [ - 750, - 200 - ], - "credentials": { - "customerIoApi": { - "id": "78", - "name": "Customer.io creds" - } - }, - "notes": "IGNORED_PROPERTIES=trigger_segment_ids", - "id": "b704d6b5-e1ac-4cee-ba74-cab476884a9b" - }, - { - "parameters": { - "id": "=customer{{Date.now()}}", - "additionalFields": { - "email": "=fakeemail{{Date.now()}}@gmail.com" - } - }, - "name": "CustomerIo3", - "type": "n8n-nodes-base.customerIo", - "typeVersion": 1, - "position": [ - 450, - 450 - ], - "credentials": { - "customerIoApi": { - "id": "78", - "name": "Customer.io creds" - } - }, - "id": "2be9fc9b-a1c2-4ddb-ac93-a8cfd3a9d80c" - }, - { - "parameters": { - "operation": "delete", - "id": "={{$node[\"CustomerIo3\"].json[\"id\"]}}" - }, - "name": "CustomerIo4", - "type": "n8n-nodes-base.customerIo", - "typeVersion": 1, - "position": [ - 950, - 450 - ], - "credentials": { - "customerIoApi": { - "id": "78", - "name": "Customer.io creds" - } - }, - "id": "d285c006-5edc-40c7-a932-3e648bd899ba" - }, - { - "parameters": { - "resource": "event", - "customerId": "={{$node[\"CustomerIo3\"].json[\"id\"]}}", - "eventName": "Click", - "additionalFields": {} - }, - "name": "CustomerIo5", - "type": "n8n-nodes-base.customerIo", - "typeVersion": 1, - "position": [ - 600, - 550 - ], - "credentials": { - "customerIoApi": { - "id": "78", - "name": "Customer.io creds" - } - }, - "id": "05605b9b-d0a9-48df-bab5-a6b2794333e1" - }, - { - "parameters": { - "resource": "event", - "operation": "trackAnonymous", - "eventName": "Click", - "additionalFields": {} - }, - "name": "CustomerIo6", - "type": "n8n-nodes-base.customerIo", - "typeVersion": 1, - "position": [ - 750, - 550 - ], - "credentials": { - "customerIoApi": { - "id": "78", - "name": "Customer.io creds" - } - }, - "id": "505b79eb-bd8c-4951-b0fd-72b9d2a02449" - }, - { - "parameters": { - "resource": "segment", - "segmentId": 10, - "customerIds": "={{$node[\"CustomerIo3\"].json[\"id\"]}}" - }, - "name": "CustomerIo7", - "type": "n8n-nodes-base.customerIo", - "typeVersion": 1, - "position": [ - 600, - 400 - ], - "credentials": { - "customerIoApi": { - "id": "78", - "name": "Customer.io creds" - } - }, - "id": "81151093-ae55-43fe-88da-db9ac4655406" - }, - { - "parameters": { - "resource": "segment", - "operation": "remove", - "segmentId": 10, - "customerIds": "={{$node[\"CustomerIo3\"].json[\"id\"]}}" - }, - "name": "CustomerIo8", - "type": "n8n-nodes-base.customerIo", - "typeVersion": 1, - "position": [ - 750, - 400 - ], - "credentials": { - "customerIoApi": { - "id": "78", - "name": "Customer.io creds" - } - }, - "id": "13d89387-b408-41f3-b22c-8dccb11134ea" - } - ], - "connections": { - "CustomerIo": { - "main": [ - [ - { - "node": "CustomerIo1", - "type": "main", - "index": 0 - } - ] - ] - }, - "CustomerIo1": { - "main": [ - [ - { - "node": "CustomerIo2", - "type": "main", - "index": 0 - } - ] - ] - }, - "CustomerIo3": { - "main": [ - [ - { - "node": "CustomerIo5", - "type": "main", - "index": 0 - }, - { - "node": "CustomerIo7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "CustomerIo", - "type": "main", - "index": 0 - }, - { - "node": "CustomerIo3", - "type": "main", - "index": 0 - } - ] - ] - }, - "CustomerIo5": { - "main": [ - [ - { - "node": "CustomerIo6", - "type": "main", - "index": 0 - } - ] - ] - }, - "CustomerIo7": { - "main": [ - [ - { - "node": "CustomerIo8", - "type": "main", - "index": 0 - } - ] - ] - }, - "CustomerIo8": { - "main": [ - [ - { - "node": "CustomerIo4", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/11.json b/test-workflows/workflows/11.json deleted file mode 100644 index e1bc4ebc34e..00000000000 --- a/test-workflows/workflows/11.json +++ /dev/null @@ -1,433 +0,0 @@ -{ - "createdAt": "2021-02-15T16:15:47.074Z", - "updatedAt": "2021-06-04T14:24:35.242Z", - "id": "11", - "name": "Mailchimp:Member:getall get create update delete:Member Tag:create delete:ListGroup:getAll:Campaign:getAll get replicate delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 160, - 300 - ], - "id": "d8d987a3-cc5c-4ec0-b011-7bc16e31ca08" - }, - { - "parameters": { - "operation": "getAll", - "list": "eb9ad4be19", - "limit": 1, - "options": {} - }, - "name": "Mailchimp1", - "type": "n8n-nodes-base.mailchimp", - "typeVersion": 1, - "position": [ - 430, - 300 - ], - "credentials": { - "mailchimpApi": { - "id": "29", - "name": "Mailchimp creds" - } - }, - "id": "320b1a49-4754-426d-92ea-e01b24a9f4c6" - }, - { - "parameters": { - "operation": "get", - "list": "eb9ad4be19", - "email": "nodeqa@n8n.io", - "options": {} - }, - "name": "Mailchimp", - "type": "n8n-nodes-base.mailchimp", - "typeVersion": 1, - "position": [ - 590, - 300 - ], - "credentials": { - "mailchimpApi": { - "id": "29", - "name": "Mailchimp creds" - } - }, - "id": "1abaa505-82e8-47c0-89f1-b66c9f9f3d22" - }, - { - "parameters": { - "operation": "update", - "list": "eb9ad4be19", - "email": "={{$json[\"email_address\"]}}", - "updateFields": { - "emailType": "html" - } - }, - "name": "Mailchimp2", - "type": "n8n-nodes-base.mailchimp", - "typeVersion": 1, - "position": [ - 780, - 300 - ], - "credentials": { - "mailchimpApi": { - "id": "29", - "name": "Mailchimp creds" - } - }, - "id": "54452790-7916-4f94-9e9a-91e0e87a5267" - }, - { - "parameters": { - "resource": "memberTag", - "list": "eb9ad4be19", - "email": "nodeqa@n8n.io", - "tags": [ - "n8n" - ], - "options": {} - }, - "name": "Mailchimp4", - "type": "n8n-nodes-base.mailchimp", - "typeVersion": 1, - "position": [ - 790, - 140 - ], - "credentials": { - "mailchimpApi": { - "id": "29", - "name": "Mailchimp creds" - } - }, - "notes": "CAP_RESULTS_LENGTH=1", - "id": "f6b3215e-4628-4118-b994-e3f568f0dd61" - }, - { - "parameters": { - "resource": "memberTag", - "operation": "delete", - "list": "eb9ad4be19", - "email": "nodeqa@n8n.io", - "tags": [ - "n8n" - ], - "options": {} - }, - "name": "Mailchimp5", - "type": "n8n-nodes-base.mailchimp", - "typeVersion": 1, - "position": [ - 970, - 140 - ], - "credentials": { - "mailchimpApi": { - "id": "29", - "name": "Mailchimp creds" - } - }, - "notes": "CAP_RESULTS_LENGTH=1", - "id": "9e1dafb8-8afd-4b0d-9623-65b5fb6c1322" - }, - { - "parameters": { - "list": "eb9ad4be19", - "email": "={{$json[\"email\"]}}", - "status": "subscribed", - "options": {} - }, - "name": "Mailchimp3", - "type": "n8n-nodes-base.mailchimp", - "typeVersion": 1, - "position": [ - 570, - 450 - ], - "credentials": { - "mailchimpApi": { - "id": "29", - "name": "Mailchimp creds" - } - }, - "id": "197d2f33-acf1-433f-bf88-c44e076539c5" - }, - { - "parameters": { - "functionCode": "items = [{\n json:{\n email: `test${Date.now().toString().substr(5)}@gmail.com`\n }\n}\n]\nreturn items;" - }, - "name": "Function", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 430, - 450 - ], - "notesInFlow": true, - "notes": "Generate fake email", - "id": "9173b153-2d71-41c5-88d3-34a73d187e1b" - }, - { - "parameters": { - "operation": "delete", - "list": "eb9ad4be19", - "email": "={{$json[\"email_address\"]}}" - }, - "name": "Mailchimp6", - "type": "n8n-nodes-base.mailchimp", - "typeVersion": 1, - "position": [ - 730, - 450 - ], - "credentials": { - "mailchimpApi": { - "id": "29", - "name": "Mailchimp creds" - } - }, - "id": "60e1eb5b-1725-4b11-a22f-27317dcbee60" - }, - { - "parameters": { - "resource": "listGroup", - "list": "eb9ad4be19", - "groupCategory": "2adbc0d543", - "limit": 1 - }, - "name": "Mailchimp7", - "type": "n8n-nodes-base.mailchimp", - "typeVersion": 1, - "position": [ - 430, - 140 - ], - "credentials": { - "mailchimpApi": { - "id": "29", - "name": "Mailchimp creds" - } - }, - "id": "57698c39-732e-43ab-b29b-abc24eeab04b" - }, - { - "parameters": { - "resource": "campaign", - "limit": 1, - "options": {} - }, - "name": "Mailchimp8", - "type": "n8n-nodes-base.mailchimp", - "typeVersion": 1, - "position": [ - 430, - 610 - ], - "credentials": { - "mailchimpApi": { - "id": "29", - "name": "Mailchimp creds" - } - }, - "id": "b24cf3d7-b5bf-4386-af74-f1b20fec54f0" - }, - { - "parameters": { - "resource": "campaign", - "operation": "get", - "campaignId": "={{$node[\"Mailchimp8\"].json[\"id\"]}}" - }, - "name": "Mailchimp9", - "type": "n8n-nodes-base.mailchimp", - "typeVersion": 1, - "position": [ - 580, - 610 - ], - "credentials": { - "mailchimpApi": { - "id": "29", - "name": "Mailchimp creds" - } - }, - "id": "3a7e9e1a-f070-4c89-9f27-77e9338afca5" - }, - { - "parameters": { - "resource": "campaign", - "operation": "replicate", - "campaignId": "={{$node[\"Mailchimp8\"].json[\"id\"]}}" - }, - "name": "Mailchimp10", - "type": "n8n-nodes-base.mailchimp", - "typeVersion": 1, - "position": [ - 720, - 610 - ], - "credentials": { - "mailchimpApi": { - "id": "29", - "name": "Mailchimp creds" - } - }, - "id": "3c7ab34b-7762-4c36-aeb1-2c51e9a27c88" - }, - { - "parameters": { - "resource": "campaign", - "operation": "delete", - "campaignId": "={{$node[\"Mailchimp10\"].json[\"id\"]}}" - }, - "name": "Mailchimp11", - "type": "n8n-nodes-base.mailchimp", - "typeVersion": 1, - "position": [ - 870, - 610 - ], - "credentials": { - "mailchimpApi": { - "id": "29", - "name": "Mailchimp creds" - } - }, - "id": "34e5824a-841b-4890-b5d9-7d72faa17bfc" - } - ], - "connections": { - "Mailchimp1": { - "main": [ - [ - { - "node": "Mailchimp", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mailchimp": { - "main": [ - [ - { - "node": "Mailchimp2", - "type": "main", - "index": 0 - }, - { - "node": "Mailchimp4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Mailchimp1", - "type": "main", - "index": 0 - }, - { - "node": "Function", - "type": "main", - "index": 0 - }, - { - "node": "Mailchimp7", - "type": "main", - "index": 0 - }, - { - "node": "Mailchimp8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mailchimp4": { - "main": [ - [ - { - "node": "Mailchimp5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Function": { - "main": [ - [ - { - "node": "Mailchimp3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mailchimp3": { - "main": [ - [ - { - "node": "Mailchimp6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mailchimp8": { - "main": [ - [ - { - "node": "Mailchimp9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mailchimp9": { - "main": [ - [ - { - "node": "Mailchimp10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mailchimp10": { - "main": [ - [ - { - "node": "Mailchimp11", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/110.json b/test-workflows/workflows/110.json deleted file mode 100644 index bc4a44daf63..00000000000 --- a/test-workflows/workflows/110.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "createdAt": "2021-03-09T09:32:25.259Z", - "updatedAt": "2021-03-09T09:32:25.259Z", - "id": "110", - "name": "GraphQL", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "9d428026-3835-4357-a2a2-07ec644a11fa" - }, - { - "parameters": { - "requestMethod": "GET", - "endpoint": "https://countries.trevorblades.com/", - "query": "query{\n country(code:\"DE\"){\n name,code,capital,currency\n }\n}" - }, - "name": "GraphQL", - "type": "n8n-nodes-base.graphql", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "id": "f74bf4cd-1dcf-4103-bd16-ac5e8c9eaa4a" - }, - { - "parameters": { - "functionCode": "testData = JSON.stringify({ country: { name: \"Germany\", code: \"DE\", capital: \"Berlin\", currency: \"EUR\" } })\n\nif(JSON.stringify($node['GraphQL'].json.data) !== testData){\n throw new Error('Error in GraphQL node');\n}\nreturn items;" - }, - "name": "Function", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "id": "238509ad-714e-420a-a521-5b2e9d973c38" - } - ], - "connections": { - "GraphQL": { - "main": [ - [ - { - "node": "Function", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "GraphQL", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/111.json b/test-workflows/workflows/111.json deleted file mode 100644 index 0d337801a44..00000000000 --- a/test-workflows/workflows/111.json +++ /dev/null @@ -1,148 +0,0 @@ -{ - "createdAt": "2021-03-09T10:08:44.018Z", - "updatedAt": "2021-10-27T11:17:13.078Z", - "id": "111", - "name": "Spreadsheet File", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "cbe7cbcd-cf83-498b-8f42-0ebff7d279ed" - }, - { - "parameters": { - "operation": "toFile", - "fileFormat": "html", - "options": {} - }, - "name": "Spreadsheet File", - "type": "n8n-nodes-base.spreadsheetFile", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "id": "d591ad7b-d116-405a-8866-a4d5c6a4624b" - }, - { - "parameters": { - "options": {} - }, - "name": "Spreadsheet File1", - "type": "n8n-nodes-base.spreadsheetFile", - "typeVersion": 1, - "position": [ - 800, - 450 - ], - "id": "88b9ed84-42da-4a23-a7df-c5b83487dab1" - }, - { - "parameters": { - "functionCode": "items=[\n {\n json:{\n names:['test1','test12','test13','test14']\n }\n },\n {\n json:{\n names:['test2','test22','test23','test24']\n }\n },\n {\n json:{\n names:['test3','test32','test33','test34']\n }\n },\n {\n json:{\n names:['test4','test42','test43','test44']\n }\n },\n]\nreturn items;" - }, - "name": "Function", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 500, - 300 - ], - "id": "1df49508-7816-408e-8aed-7ba7452d3a1f" - }, - { - "parameters": { - "functionCode": "testData='PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiLz48dGl0bGU+U2hlZXRKUyBUYWJsZSBFeHBvcnQ8L3RpdGxlPjwvaGVhZD48Ym9keT48dGFibGU+PHRyPjx0ZCBkYXRhLXQ9InMiIGRhdGEtdj0ibmFtZXMuMCIgaWQ9InNqcy1BMSI+bmFtZXMuMDwvdGQ+PHRkIGRhdGEtdD0icyIgZGF0YS12PSJuYW1lcy4xIiBpZD0ic2pzLUIxIj5uYW1lcy4xPC90ZD48dGQgZGF0YS10PSJzIiBkYXRhLXY9Im5hbWVzLjIiIGlkPSJzanMtQzEiPm5hbWVzLjI8L3RkPjx0ZCBkYXRhLXQ9InMiIGRhdGEtdj0ibmFtZXMuMyIgaWQ9InNqcy1EMSI+bmFtZXMuMzwvdGQ+PC90cj48dHI+PHRkIGRhdGEtdD0icyIgZGF0YS12PSJ0ZXN0MSIgaWQ9InNqcy1BMiI+dGVzdDE8L3RkPjx0ZCBkYXRhLXQ9InMiIGRhdGEtdj0idGVzdDEyIiBpZD0ic2pzLUIyIj50ZXN0MTI8L3RkPjx0ZCBkYXRhLXQ9InMiIGRhdGEtdj0idGVzdDEzIiBpZD0ic2pzLUMyIj50ZXN0MTM8L3RkPjx0ZCBkYXRhLXQ9InMiIGRhdGEtdj0idGVzdDE0IiBpZD0ic2pzLUQyIj50ZXN0MTQ8L3RkPjwvdHI+PHRyPjx0ZCBkYXRhLXQ9InMiIGRhdGEtdj0idGVzdDIiIGlkPSJzanMtQTMiPnRlc3QyPC90ZD48dGQgZGF0YS10PSJzIiBkYXRhLXY9InRlc3QyMiIgaWQ9InNqcy1CMyI+dGVzdDIyPC90ZD48dGQgZGF0YS10PSJzIiBkYXRhLXY9InRlc3QyMyIgaWQ9InNqcy1DMyI+dGVzdDIzPC90ZD48dGQgZGF0YS10PSJzIiBkYXRhLXY9InRlc3QyNCIgaWQ9InNqcy1EMyI+dGVzdDI0PC90ZD48L3RyPjx0cj48dGQgZGF0YS10PSJzIiBkYXRhLXY9InRlc3QzIiBpZD0ic2pzLUE0Ij50ZXN0MzwvdGQ+PHRkIGRhdGEtdD0icyIgZGF0YS12PSJ0ZXN0MzIiIGlkPSJzanMtQjQiPnRlc3QzMjwvdGQ+PHRkIGRhdGEtdD0icyIgZGF0YS12PSJ0ZXN0MzMiIGlkPSJzanMtQzQiPnRlc3QzMzwvdGQ+PHRkIGRhdGEtdD0icyIgZGF0YS12PSJ0ZXN0MzQiIGlkPSJzanMtRDQiPnRlc3QzNDwvdGQ+PC90cj48dHI+PHRkIGRhdGEtdD0icyIgZGF0YS12PSJ0ZXN0NCIgaWQ9InNqcy1BNSI+dGVzdDQ8L3RkPjx0ZCBkYXRhLXQ9InMiIGRhdGEtdj0idGVzdDQyIiBpZD0ic2pzLUI1Ij50ZXN0NDI8L3RkPjx0ZCBkYXRhLXQ9InMiIGRhdGEtdj0idGVzdDQzIiBpZD0ic2pzLUM1Ij50ZXN0NDM8L3RkPjx0ZCBkYXRhLXQ9InMiIGRhdGEtdj0idGVzdDQ0IiBpZD0ic2pzLUQ1Ij50ZXN0NDQ8L3RkPjwvdHI+PC90YWJsZT48L2JvZHk+PC9odG1sPg==';\nif(testData !== items[0].binary.data.data){\n throw new Error('Error in Spreadsheet File node (write to file)');\n}\nreturn items;" - }, - "name": "Function1", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 800, - 300 - ], - "notesInFlow": true, - "notes": "Verify write to file", - "id": "64f7019d-5fa8-456e-a640-084cd57f3ec0" - }, - { - "parameters": { - "functionCode": "testData = JSON.stringify(\n[\n{\n\"names.0\": \"test1\",\n\"names.1\": \"test12\",\n\"names.2\": \"test13\",\n\"names.3\": \"test14\"\n},\n{\n\"names.0\": \"test2\",\n\"names.1\": \"test22\",\n\"names.2\": \"test23\",\n\"names.3\": \"test24\"\n},\n{\n\"names.0\": \"test3\",\n\"names.1\": \"test32\",\n\"names.2\": \"test33\",\n\"names.3\": \"test34\"\n},\n{\n\"names.0\": \"test4\",\n\"names.1\": \"test42\",\n\"names.2\": \"test43\",\n\"names.3\": \"test44\"\n}\n]);\n\nif(testData !== JSON.stringify(items.map(item => item.json))){\n throw new Error('Error in Spreadsheet File node (read file)');\n}\nreturn items;" - }, - "name": "Function2", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 950, - 450 - ], - "notes": "verify read file", - "id": "a5eb9e0e-922f-4156-b586-90c42bcde889" - } - ], - "connections": { - "Spreadsheet File": { - "main": [ - [ - { - "node": "Function1", - "type": "main", - "index": 0 - }, - { - "node": "Spreadsheet File1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Function": { - "main": [ - [ - { - "node": "Spreadsheet File", - "type": "main", - "index": 0 - } - ] - ] - }, - "Spreadsheet File1": { - "main": [ - [ - { - "node": "Function2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Function", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/112.json b/test-workflows/workflows/112.json deleted file mode 100644 index 8bda7f78352..00000000000 --- a/test-workflows/workflows/112.json +++ /dev/null @@ -1,210 +0,0 @@ -{ - "createdAt": "2021-03-09T14:05:33.799Z", - "updatedAt": "2021-03-09T14:15:46.076Z", - "id": "112", - "name": "Rabbitmq:queue:exchange", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "ee0f6961-37a7-486d-9d75-f73aa8708750" - }, - { - "parameters": { - "queue": "=SimpleQueue", - "sendInputData": false, - "message": "=Message{{Date.now()}}", - "options": { - "autoDelete": true, - "durable": false - } - }, - "name": "RabbitMQ", - "type": "n8n-nodes-base.rabbitmq", - "typeVersion": 1, - "position": [ - 500, - 200 - ], - "credentials": { - "rabbitmq": { - "id": "79", - "name": "RabbitMQ creds" - } - }, - "id": "3b3b66f0-91ab-4a41-a2ab-fec7ce0e36e4" - }, - { - "parameters": { - "mode": "exchange", - "exchange": "FanoutExchange", - "routingKey": "test", - "sendInputData": false, - "message": "=FanoutMessage{{Date.now()}}", - "options": { - "durable": false - } - }, - "name": "RabbitMQ1", - "type": "n8n-nodes-base.rabbitmq", - "typeVersion": 1, - "position": [ - 500, - 350 - ], - "credentials": { - "rabbitmq": { - "id": "79", - "name": "RabbitMQ creds" - } - }, - "id": "f4bb81a0-f6c2-4194-b8ec-0fe6f2350384" - }, - { - "parameters": { - "mode": "exchange", - "exchange": "DirectExchange", - "exchangeType": "direct", - "routingKey": "test", - "sendInputData": false, - "message": "=DirectMessage{{Date.now()}}", - "options": { - "durable": false - } - }, - "name": "RabbitMQ2", - "type": "n8n-nodes-base.rabbitmq", - "typeVersion": 1, - "position": [ - 650, - 350 - ], - "credentials": { - "rabbitmq": { - "id": "79", - "name": "RabbitMQ creds" - } - }, - "id": "ecd77a9f-6523-445d-a7b1-e1585c652c55" - }, - { - "parameters": { - "mode": "exchange", - "exchange": "TopicExchange", - "exchangeType": "topic", - "routingKey": "test", - "sendInputData": false, - "message": "=TopicMessage{{Date.now()}}", - "options": { - "durable": false - } - }, - "name": "RabbitMQ3", - "type": "n8n-nodes-base.rabbitmq", - "typeVersion": 1, - "position": [ - 800, - 350 - ], - "credentials": { - "rabbitmq": { - "id": "79", - "name": "RabbitMQ creds" - } - }, - "id": "bd8becb0-8c2b-4516-b375-ac005bfe9a18" - }, - { - "parameters": { - "mode": "exchange", - "exchange": "HeadersExchange", - "exchangeType": "headers", - "routingKey": "test", - "sendInputData": false, - "message": "=HeadersMessage{{Date.now()}}", - "options": { - "durable": false - } - }, - "name": "RabbitMQ4", - "type": "n8n-nodes-base.rabbitmq", - "typeVersion": 1, - "position": [ - 950, - 350 - ], - "credentials": { - "rabbitmq": { - "id": "79", - "name": "RabbitMQ creds" - } - }, - "id": "abdcf5b6-21ef-40da-b58d-3a2f9ad3b676" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "RabbitMQ", - "type": "main", - "index": 0 - }, - { - "node": "RabbitMQ1", - "type": "main", - "index": 0 - } - ] - ] - }, - "RabbitMQ1": { - "main": [ - [ - { - "node": "RabbitMQ2", - "type": "main", - "index": 0 - } - ] - ] - }, - "RabbitMQ2": { - "main": [ - [ - { - "node": "RabbitMQ3", - "type": "main", - "index": 0 - } - ] - ] - }, - "RabbitMQ3": { - "main": [ - [ - { - "node": "RabbitMQ4", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/113.json b/test-workflows/workflows/113.json deleted file mode 100644 index 93f56a7f9c4..00000000000 --- a/test-workflows/workflows/113.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "createdAt": "2021-03-09T14:26:06.900Z", - "updatedAt": "2021-03-09T17:25:17.607Z", - "id": "113", - "name": "AMQP", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "cb0c801c-e74c-43a6-9b4d-6e3c2b265f22" - }, - { - "parameters": { - "sink": "AMQPQueue", - "headerParametersJson": "{}", - "options": { - "reconnect": true, - "reconnectLimit": 5 - } - }, - "name": "AMQP Sender", - "type": "n8n-nodes-base.amqp", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "credentials": { - "amqp": { - "id": "80", - "name": "AMQP creds" - } - }, - "id": "7d7a98e3-27b0-49bf-8c68-a525895d0b8c" - }, - { - "parameters": { - "keepOnlySet": true, - "values": { - "string": [ - { - "name": "message", - "value": "=AMQPMessage{{Date.now()}}" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "id": "951c5927-93e8-4efb-924a-e6516679017c" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - }, - "AMQP Sender": { - "main": [ - [] - ] - }, - "Set": { - "main": [ - [ - { - "node": "AMQP Sender", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/114.json b/test-workflows/workflows/114.json deleted file mode 100644 index 41783821424..00000000000 --- a/test-workflows/workflows/114.json +++ /dev/null @@ -1,618 +0,0 @@ -{ - "createdAt": "2021-03-09T20:05:11.480Z", - "updatedAt": "2021-03-22T10:44:13.980Z", - "id": "114", - "name": "Monday:Board:create get getAll archive:BoardColumn:create getAll:BoardGroup:create delete getAll:BoardItem:create addUpdate changeColumnValue get getAll getByColumnValue move delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 200, - 300 - ], - "id": "f7c60ae7-b68c-4251-9778-4d7a1f033285" - }, - { - "parameters": { - "name": "=Board{{Date.now()}}", - "kind": "private", - "additionalFields": {} - }, - "name": "Monday.com", - "type": "n8n-nodes-base.mondayCom", - "typeVersion": 1, - "position": [ - 440, - 280 - ], - "credentials": { - "mondayComApi": { - "id": "113", - "name": "Monday.com API creds" - } - }, - "id": "839f14d0-14de-40e9-81c8-08810b6edf70" - }, - { - "parameters": { - "operation": "get", - "boardId": "={{$node[\"Monday.com\"].json[\"id\"]}}" - }, - "name": "Monday.com1", - "type": "n8n-nodes-base.mondayCom", - "typeVersion": 1, - "position": [ - 600, - 280 - ], - "credentials": { - "mondayComApi": { - "id": "113", - "name": "Monday.com API creds" - } - }, - "id": "bbf1c663-e121-4d6c-9afc-a6185d15d45a" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1 - }, - "name": "Monday.com2", - "type": "n8n-nodes-base.mondayCom", - "typeVersion": 1, - "position": [ - 750, - 280 - ], - "credentials": { - "mondayComApi": { - "id": "113", - "name": "Monday.com API creds" - } - }, - "id": "19e62461-a13a-4ed5-984d-48c932f3c673" - }, - { - "parameters": { - "operation": "archive", - "boardId": "={{$node[\"Monday.com\"].json[\"id\"]}}" - }, - "name": "Monday.com3", - "type": "n8n-nodes-base.mondayCom", - "typeVersion": 1, - "position": [ - 3110, - 270 - ], - "credentials": { - "mondayComApi": { - "id": "113", - "name": "Monday.com API creds" - } - }, - "id": "1f5c07fc-54f7-47fd-9c32-5c5d58013755" - }, - { - "parameters": { - "resource": "boardColumn", - "boardId": "={{$node[\"Monday.com\"].json[\"id\"]}}", - "title": "=Column{{Date.now()}}", - "columnType": "checkbox", - "additionalFields": {} - }, - "name": "Monday.com4", - "type": "n8n-nodes-base.mondayCom", - "typeVersion": 1, - "position": [ - 900, - 0 - ], - "credentials": { - "mondayComApi": { - "id": "113", - "name": "Monday.com API creds" - } - }, - "id": "e96e4955-0dd8-45a9-90ae-b8f0b2cf4cb2" - }, - { - "parameters": { - "resource": "boardColumn", - "operation": "getAll", - "boardId": "={{$node[\"Monday.com\"].json[\"id\"]}}" - }, - "name": "Monday.com5", - "type": "n8n-nodes-base.mondayCom", - "typeVersion": 1, - "position": [ - 2850, - -50 - ], - "credentials": { - "mondayComApi": { - "id": "113", - "name": "Monday.com API creds" - } - }, - "id": "b009f62b-41a1-46f1-8796-30fa18e74c5c" - }, - { - "parameters": { - "resource": "boardGroup", - "boardId": "={{$node[\"Monday.com\"].json[\"id\"]}}", - "name": "=Group{{Date.now()}}" - }, - "name": "Monday.com6", - "type": "n8n-nodes-base.mondayCom", - "typeVersion": 1, - "position": [ - 1200, - 50 - ], - "credentials": { - "mondayComApi": { - "id": "113", - "name": "Monday.com API creds" - } - }, - "id": "530e0e10-cba4-41c8-8e8c-203f451501b2" - }, - { - "parameters": { - "resource": "boardGroup", - "operation": "delete", - "boardId": "={{$node[\"Monday.com\"].json[\"id\"]}}", - "groupId": "={{$node[\"Monday.com6\"].json[\"id\"]}}" - }, - "name": "Monday.com7", - "type": "n8n-nodes-base.mondayCom", - "typeVersion": 1, - "position": [ - 2540, - 50 - ], - "credentials": { - "mondayComApi": { - "id": "113", - "name": "Monday.com API creds" - } - }, - "id": "27c609e7-c3e6-4e4a-af47-08a9a34ce21c" - }, - { - "parameters": { - "resource": "boardGroup", - "operation": "getAll", - "boardId": "={{$node[\"Monday.com\"].json[\"id\"]}}" - }, - "name": "Monday.com8", - "type": "n8n-nodes-base.mondayCom", - "typeVersion": 1, - "position": [ - 2690, - 50 - ], - "credentials": { - "mondayComApi": { - "id": "113", - "name": "Monday.com API creds" - } - }, - "id": "405a5103-b9ce-4297-90d8-d5fa8fd5852f" - }, - { - "parameters": { - "resource": "boardItem", - "boardId": "={{$node[\"Monday.com\"].json[\"id\"]}}", - "groupId": "={{$node[\"Monday.com6\"].json[\"id\"]}}", - "name": "=Item{{Date.now()}}", - "additionalFields": {} - }, - "name": "Monday.com9", - "type": "n8n-nodes-base.mondayCom", - "typeVersion": 1, - "position": [ - 1350, - 150 - ], - "credentials": { - "mondayComApi": { - "id": "113", - "name": "Monday.com API creds" - } - }, - "id": "dc5e88cf-04a4-4858-927a-2e08c4b9ceb8" - }, - { - "parameters": { - "resource": "boardItem", - "operation": "addUpdate", - "itemId": "={{$node[\"Monday.com9\"].json[\"id\"]}}", - "value": "=Update{{Date.now()}}" - }, - "name": "Monday.com10", - "type": "n8n-nodes-base.mondayCom", - "typeVersion": 1, - "position": [ - 1500, - 150 - ], - "credentials": { - "mondayComApi": { - "id": "113", - "name": "Monday.com API creds" - } - }, - "id": "1d508527-3c1c-4c7c-a6f6-19ed2e674eb8" - }, - { - "parameters": { - "resource": "boardItem", - "operation": "changeColumnValue", - "boardId": "={{$node[\"Monday.com\"].json[\"id\"]}}", - "itemId": "={{$node[\"Monday.com9\"].json[\"id\"]}}", - "columnId": "={{$node[\"Monday.com4\"].json[\"id\"]}}", - "value": "={{JSON.stringify({\"checked\": \"true\"});}}" - }, - "name": "Monday.com11", - "type": "n8n-nodes-base.mondayCom", - "typeVersion": 1, - "position": [ - 1650, - 150 - ], - "credentials": { - "mondayComApi": { - "id": "113", - "name": "Monday.com API creds" - } - }, - "id": "f03bca62-ee0f-4598-8833-26d9ba2f83fb" - }, - { - "parameters": { - "resource": "boardItem", - "operation": "get", - "itemId": "={{$node[\"Monday.com9\"].json[\"id\"]}}" - }, - "name": "Monday.com12", - "type": "n8n-nodes-base.mondayCom", - "typeVersion": 1, - "position": [ - 1800, - 150 - ], - "credentials": { - "mondayComApi": { - "id": "113", - "name": "Monday.com API creds" - } - }, - "id": "b4a2cfef-83ea-430f-8b0c-3a7b3dafc5ed" - }, - { - "parameters": { - "resource": "boardItem", - "operation": "getAll", - "boardId": "={{$node[\"Monday.com\"].json[\"id\"]}}", - "groupId": "={{$node[\"Monday.com6\"].json[\"id\"]}}", - "limit": 1 - }, - "name": "Monday.com13", - "type": "n8n-nodes-base.mondayCom", - "typeVersion": 1, - "position": [ - 1950, - 150 - ], - "credentials": { - "mondayComApi": { - "id": "113", - "name": "Monday.com API creds" - } - }, - "id": "549dc7a6-e611-4c75-9c37-40673a79bf39" - }, - { - "parameters": { - "resource": "boardItem", - "operation": "getByColumnValue", - "boardId": "={{$node[\"Monday.com\"].json[\"id\"]}}", - "columnId": "={{$node[\"Monday.com4\"].json[\"id\"]}}", - "columnValue": "\"{\"checked\":\"true\"}\"", - "limit": 1 - }, - "name": "Monday.com14", - "type": "n8n-nodes-base.mondayCom", - "typeVersion": 1, - "position": [ - 2100, - 150 - ], - "alwaysOutputData": true, - "credentials": { - "mondayComApi": { - "id": "113", - "name": "Monday.com API creds" - } - }, - "id": "7026f1b0-8014-43ae-930d-a1c7db989163" - }, - { - "parameters": { - "resource": "boardItem", - "operation": "move", - "boardId": "={{$node[\"Monday.com\"].json[\"id\"]}}", - "itemId": "={{$node[\"Monday.com9\"].json[\"id\"]}}", - "groupId": "={{$node[\"Monday.com6\"].json[\"id\"]}}" - }, - "name": "Monday.com15", - "type": "n8n-nodes-base.mondayCom", - "typeVersion": 1, - "position": [ - 2250, - 150 - ], - "alwaysOutputData": true, - "credentials": { - "mondayComApi": { - "id": "113", - "name": "Monday.com API creds" - } - }, - "id": "596fc3f9-0d39-4f7f-864b-32a6640e7ff0" - }, - { - "parameters": { - "resource": "boardItem", - "operation": "delete", - "itemId": "={{$node[\"Monday.com9\"].json[\"id\"]}}" - }, - "name": "Monday.com16", - "type": "n8n-nodes-base.mondayCom", - "typeVersion": 1, - "position": [ - 2400, - 150 - ], - "alwaysOutputData": true, - "credentials": { - "mondayComApi": { - "id": "113", - "name": "Monday.com API creds" - } - }, - "id": "6080f346-15d2-484f-8cfa-44b93dc93213" - }, - { - "parameters": { - "mode": "wait" - }, - "name": "Merge", - "type": "n8n-nodes-base.merge", - "typeVersion": 1, - "position": [ - 2960, - 120 - ], - "id": "7ca43678-0fea-4fc4-85c5-af1dc02be4d2" - } - ], - "connections": { - "Monday.com": { - "main": [ - [ - { - "node": "Monday.com1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Monday.com1": { - "main": [ - [ - { - "node": "Monday.com2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Monday.com2": { - "main": [ - [ - { - "node": "Monday.com4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Monday.com4": { - "main": [ - [ - { - "node": "Monday.com6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Monday.com6": { - "main": [ - [ - { - "node": "Monday.com9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Monday.com7": { - "main": [ - [ - { - "node": "Monday.com8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Monday.com9": { - "main": [ - [ - { - "node": "Monday.com10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Monday.com10": { - "main": [ - [ - { - "node": "Monday.com11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Monday.com11": { - "main": [ - [ - { - "node": "Monday.com12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Monday.com12": { - "main": [ - [ - { - "node": "Monday.com13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Monday.com13": { - "main": [ - [ - { - "node": "Monday.com14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Monday.com14": { - "main": [ - [ - { - "node": "Monday.com15", - "type": "main", - "index": 0 - } - ] - ] - }, - "Monday.com15": { - "main": [ - [ - { - "node": "Monday.com16", - "type": "main", - "index": 0 - } - ] - ] - }, - "Monday.com16": { - "main": [ - [ - { - "node": "Monday.com7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Monday.com8": { - "main": [ - [ - { - "node": "Monday.com5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Monday.com5": { - "main": [ - [ - { - "node": "Merge", - "type": "main", - "index": 0 - }, - { - "node": "Merge", - "type": "main", - "index": 1 - } - ] - ] - }, - "Merge": { - "main": [ - [ - { - "node": "Monday.com3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Monday.com", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/115.json b/test-workflows/workflows/115.json deleted file mode 100644 index b3275ffb023..00000000000 --- a/test-workflows/workflows/115.json +++ /dev/null @@ -1,202 +0,0 @@ -{ - "createdAt": "2021-03-10T09:08:07.793Z", - "updatedAt": "2021-03-10T09:08:07.793Z", - "id": "115", - "name": "Cockpit:Collection:createEntry updateEntry getAllEntries:Singleton:get:Form:submit", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "768b2ddf-9888-4361-8f1e-3a4dff195e6b" - }, - { - "parameters": { - "operation": "create", - "collection": "FixedCollection", - "dataFieldsUi": { - "field": [ - { - "name": "Name", - "value": "=entry{{Date.now()}}" - } - ] - } - }, - "name": "Cockpit", - "type": "n8n-nodes-base.cockpit", - "typeVersion": 1, - "position": [ - 550, - 180 - ], - "credentials": { - "cockpitApi": { - "id": "81", - "name": "Cockpit API creds" - } - }, - "id": "a731c3d7-ffb7-493e-a3ac-9fdef8776801" - }, - { - "parameters": { - "operation": "update", - "collection": "FixedCollection", - "id": "={{$node[\"Cockpit\"].json[\"_id\"]}}", - "dataFieldsUi": { - "field": [ - { - "name": "Name", - "value": "=UpdatedEntry{{Date.now()}}" - } - ] - } - }, - "name": "Cockpit1", - "type": "n8n-nodes-base.cockpit", - "typeVersion": 1, - "position": [ - 700, - 180 - ], - "credentials": { - "cockpitApi": { - "id": "81", - "name": "Cockpit API creds" - } - }, - "id": "be0de116-a348-436c-8903-a78f2d9978f3" - }, - { - "parameters": { - "collection": "FixedCollection", - "limit": 1, - "options": {} - }, - "name": "Cockpit2", - "type": "n8n-nodes-base.cockpit", - "typeVersion": 1, - "position": [ - 850, - 180 - ], - "credentials": { - "cockpitApi": { - "id": "81", - "name": "Cockpit API creds" - } - }, - "id": "e151e242-d0a9-43d9-8003-632b4f8569ad" - }, - { - "parameters": { - "resource": "singleton", - "singleton": "FixedSingleton" - }, - "name": "Cockpit3", - "type": "n8n-nodes-base.cockpit", - "typeVersion": 1, - "position": [ - 550, - 350 - ], - "credentials": { - "cockpitApi": { - "id": "81", - "name": "Cockpit API creds" - } - }, - "id": "b1f38f40-c544-496f-bcb9-3957a755a497" - }, - { - "parameters": { - "resource": "form", - "form": "FixedForm", - "dataFieldsUi": { - "field": [ - { - "name": "name", - "value": "=name{{Date.now()}}" - }, - { - "name": "tag", - "value": "=tag{{Date.now()}}" - } - ] - } - }, - "name": "Cockpit4", - "type": "n8n-nodes-base.cockpit", - "typeVersion": 1, - "position": [ - 550, - 500 - ], - "credentials": { - "cockpitApi": { - "id": "81", - "name": "Cockpit API creds" - } - }, - "id": "9567077a-58f2-453e-8d36-35d4c68e9510" - } - ], - "connections": { - "Cockpit": { - "main": [ - [ - { - "node": "Cockpit1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Cockpit1": { - "main": [ - [ - { - "node": "Cockpit2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Cockpit", - "type": "main", - "index": 0 - }, - { - "node": "Cockpit3", - "type": "main", - "index": 0 - }, - { - "node": "Cockpit4", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/116.json b/test-workflows/workflows/116.json deleted file mode 100644 index aa2175771ab..00000000000 --- a/test-workflows/workflows/116.json +++ /dev/null @@ -1,260 +0,0 @@ -{ - "createdAt": "2021-03-10T10:32:50.903Z", - "updatedAt": "2021-03-10T10:32:50.903Z", - "id": "116", - "name": "Ghost:Post(Admin API):create update get getAll delete:Post(Content API):getAll get", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "96a1cf58-f3dc-46ea-a07a-5202bffee113" - }, - { - "parameters": { - "source": "adminApi", - "operation": "create", - "title": "=PostTitle{{Date.now()}}", - "content": "=Post Content written at {{Date.now()}}", - "additionalFields": {} - }, - "name": "Ghost", - "type": "n8n-nodes-base.ghost", - "typeVersion": 1, - "position": [ - 550, - 300 - ], - "credentials": { - "ghostAdminApi": { - "id": "83", - "name": "Ghost Admin api creds" - } - }, - "id": "6c09ea13-41e8-4704-b357-4390b14e7255" - }, - { - "parameters": { - "source": "adminApi", - "operation": "update", - "postId": "={{$node[\"Ghost\"].json[\"id\"]}}", - "updateFields": { - "title": "=UpdateTitle{{Date.now()}}" - } - }, - "name": "Ghost1", - "type": "n8n-nodes-base.ghost", - "typeVersion": 1, - "position": [ - 700, - 300 - ], - "credentials": { - "ghostAdminApi": { - "id": "83", - "name": "Ghost Admin api creds" - } - }, - "id": "57fab43f-0013-4250-bcd4-1318f9371097" - }, - { - "parameters": { - "source": "adminApi", - "by": "id", - "identifier": "={{$node[\"Ghost\"].json[\"id\"]}}", - "options": {} - }, - "name": "Ghost2", - "type": "n8n-nodes-base.ghost", - "typeVersion": 1, - "position": [ - 850, - 300 - ], - "credentials": { - "ghostAdminApi": { - "id": "83", - "name": "Ghost Admin api creds" - } - }, - "id": "e032227a-b97e-4b60-8b9e-9061c2d7e279" - }, - { - "parameters": { - "source": "adminApi", - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "Ghost3", - "type": "n8n-nodes-base.ghost", - "typeVersion": 1, - "position": [ - 1000, - 300 - ], - "credentials": { - "ghostAdminApi": { - "id": "83", - "name": "Ghost Admin api creds" - } - }, - "id": "6150282c-3d31-4387-8dbb-74730ada47aa" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "Ghost4", - "type": "n8n-nodes-base.ghost", - "typeVersion": 1, - "position": [ - 1150, - 450 - ], - "credentials": { - "ghostContentApi": { - "id": "82", - "name": "Ghost Content creds" - } - }, - "id": "488558ee-8ef5-460b-ae0e-31e74ce25d9c" - }, - { - "parameters": { - "by": "id", - "identifier": "={{$node[\"Ghost4\"].json[\"id\"]}}", - "options": {} - }, - "name": "Ghost5", - "type": "n8n-nodes-base.ghost", - "typeVersion": 1, - "position": [ - 1300, - 450 - ], - "credentials": { - "ghostContentApi": { - "id": "82", - "name": "Ghost Content creds" - } - }, - "id": "f0f53fe7-b17f-45fc-bfa5-b7db642a22a9" - }, - { - "parameters": { - "source": "adminApi", - "operation": "delete", - "postId": "={{$node[\"Ghost\"].json[\"id\"]}}" - }, - "name": "Ghost6", - "type": "n8n-nodes-base.ghost", - "typeVersion": 1, - "position": [ - 1450, - 300 - ], - "credentials": { - "ghostAdminApi": { - "id": "83", - "name": "Ghost Admin api creds" - } - }, - "id": "83c79ebf-21b0-4d8b-be7e-9e7002015990" - } - ], - "connections": { - "Ghost": { - "main": [ - [ - { - "node": "Ghost1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Ghost1": { - "main": [ - [ - { - "node": "Ghost2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Ghost2": { - "main": [ - [ - { - "node": "Ghost3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Ghost3": { - "main": [ - [ - { - "node": "Ghost4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Ghost4": { - "main": [ - [ - { - "node": "Ghost5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Ghost5": { - "main": [ - [ - { - "node": "Ghost6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Ghost", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/117.json b/test-workflows/workflows/117.json deleted file mode 100644 index e0995ce71da..00000000000 --- a/test-workflows/workflows/117.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "createdAt": "2021-03-10T11:09:19.174Z", - "updatedAt": "2021-03-10T11:09:40.674Z", - "id": "117", - "name": "Gotify:Message:create getAll delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "1d2659eb-da2b-4d7c-94f6-09d7dc99ef0d" - }, - { - "parameters": { - "message": "=Message content {{Date.now()}}", - "additionalFields": { - "title": "=Title{{Date.now()}}" - } - }, - "name": "Gotify", - "type": "n8n-nodes-base.gotify", - "typeVersion": 1, - "position": [ - 500, - 300 - ], - "credentials": { - "gotifyApi": { - "id": "84", - "name": "Gotify API creds" - } - }, - "id": "c8ae4d15-a793-4c51-a13a-5e9541079ed2" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1 - }, - "name": "Gotify1", - "type": "n8n-nodes-base.gotify", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "credentials": { - "gotifyApi": { - "id": "84", - "name": "Gotify API creds" - } - }, - "id": "9c136007-0f4a-4e13-ba09-03cd4dccbdab" - }, - { - "parameters": { - "operation": "delete", - "messageId": "={{$node[\"Gotify\"].json[\"id\"]}}" - }, - "name": "Gotify2", - "type": "n8n-nodes-base.gotify", - "typeVersion": 1, - "position": [ - 800, - 300 - ], - "credentials": { - "gotifyApi": { - "id": "84", - "name": "Gotify API creds" - } - }, - "id": "fb795089-773b-47a5-b8f5-86c52a1863d6" - } - ], - "connections": { - "Gotify": { - "main": [ - [ - { - "node": "Gotify1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Gotify1": { - "main": [ - [ - { - "node": "Gotify2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Gotify", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/118.json b/test-workflows/workflows/118.json deleted file mode 100644 index a7dbd8e88e0..00000000000 --- a/test-workflows/workflows/118.json +++ /dev/null @@ -1,240 +0,0 @@ -{ - "createdAt": "2021-03-10T13:48:09.104Z", - "updatedAt": "2021-06-02T10:31:06.860Z", - "id": "118", - "name": "Redis:info set keys get delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "bfe11af4-fb50-452c-b976-4d03d10829d2" - }, - { - "parameters": {}, - "name": "Redis", - "type": "n8n-nodes-base.redis", - "typeVersion": 1, - "position": [ - 600, - 300 - ], - "credentials": { - "redis": { - "id": "85", - "name": "Redis creds" - } - }, - "id": "d63e6bed-6d35-4f90-8a9f-11869262fd3c" - }, - { - "parameters": { - "operation": "set", - "key": "={{$node[\"Set\"].json[\"key\"]}}", - "value": "={{$node[\"Set\"].json[\"value\"]}}" - }, - "name": "Redis1", - "type": "n8n-nodes-base.redis", - "typeVersion": 1, - "position": [ - 750, - 300 - ], - "credentials": { - "redis": { - "id": "85", - "name": "Redis creds" - } - }, - "id": "de5c3f28-1d4e-4c43-92c1-d9987e472c69" - }, - { - "parameters": { - "operation": "keys", - "keyPattern": "={{$node[\"Set\"].json[\"key\"]}}" - }, - "name": "Redis2", - "type": "n8n-nodes-base.redis", - "typeVersion": 1, - "position": [ - 900, - 300 - ], - "credentials": { - "redis": { - "id": "85", - "name": "Redis creds" - } - }, - "id": "00d6c08e-263e-43db-a93f-a0bf28d0d0bd" - }, - { - "parameters": { - "operation": "get", - "propertyName": "value", - "key": "={{$node[\"Set\"].json[\"key\"]}}", - "options": {} - }, - "name": "Redis3", - "type": "n8n-nodes-base.redis", - "typeVersion": 1, - "position": [ - 1050, - 300 - ], - "credentials": { - "redis": { - "id": "85", - "name": "Redis creds" - } - }, - "id": "1ee59e47-956c-4c04-b460-0409d488ae1f" - }, - { - "parameters": { - "operation": "delete", - "key": "={{$node[\"Set\"].json[\"key\"]}}" - }, - "name": "Redis4", - "type": "n8n-nodes-base.redis", - "typeVersion": 1, - "position": [ - 1300, - 300 - ], - "credentials": { - "redis": { - "id": "85", - "name": "Redis creds" - } - }, - "id": "08580c27-446e-4b5c-a8a2-956208327019" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "key", - "value": "TestKey" - }, - { - "name": "value", - "value": "=Value{{Date.now()}}" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "id": "779cc18d-7a1a-454d-b70a-b54ae590c896" - }, - { - "parameters": { - "functionCode": "if($node['Set'].json['value'] !== $node['Redis3'].json['value'] ){\n throw new Error('Error in redis node');\n}\nreturn items;" - }, - "name": "Function", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 1300, - 450 - ], - "notesInFlow": true, - "notes": "validate the saved value", - "id": "72efc2c0-6bb3-4560-b935-9231558081a8" - } - ], - "connections": { - "Redis": { - "main": [ - [ - { - "node": "Redis1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Redis1": { - "main": [ - [ - { - "node": "Redis2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Redis2": { - "main": [ - [ - { - "node": "Redis3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Redis3": { - "main": [ - [ - { - "node": "Redis4", - "type": "main", - "index": 0 - }, - { - "node": "Function", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set": { - "main": [ - [ - { - "node": "Redis", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/119.json b/test-workflows/workflows/119.json deleted file mode 100644 index 8230fe8ec03..00000000000 --- a/test-workflows/workflows/119.json +++ /dev/null @@ -1,199 +0,0 @@ -{ - "createdAt": "2021-03-10T15:10:43.540Z", - "updatedAt": "2021-03-10T15:13:14.859Z", - "id": "119", - "name": "CrateDB:insert update executeQuery", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "e0aab098-04f4-42ce-b128-c1707e6ab085" - }, - { - "parameters": { - "table": "testtable", - "columns": "id,name" - }, - "name": "CrateDB", - "type": "n8n-nodes-base.crateDb", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "credentials": { - "crateDb": { - "id": "86", - "name": "CrateDB creds" - } - }, - "id": "51925b66-eddd-4a2c-bd53-3c93d8c4d3d9" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "name", - "value": "=Name{{Date.now()}}" - } - ], - "number": [ - { - "name": "id", - "value": "={{Math.round(Math.random()*100000)}}" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "id": "ca7b9956-a037-4efa-9bfa-769067d489b8" - }, - { - "parameters": { - "operation": "update", - "table": "testtable", - "columns": "id,name" - }, - "name": "CrateDB1", - "type": "n8n-nodes-base.crateDb", - "typeVersion": 1, - "position": [ - 1050, - 300 - ], - "credentials": { - "crateDb": { - "id": "86", - "name": "CrateDB creds" - } - }, - "id": "7f727eb3-00c1-464d-aa3b-503138386420" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "name", - "value": "=UpdatedName{{Date.now()}}" - } - ], - "number": [ - { - "name": "id", - "value": "={{$node[\"Set\"].json[\"id\"]}}" - } - ] - }, - "options": {} - }, - "name": "Set1", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 850, - 300 - ], - "id": "d8d1fb13-1756-4cff-b6f6-adbe388851f6" - }, - { - "parameters": { - "operation": "executeQuery", - "query": "=DELETE FROM \"doc\".\"testtable\" WHERE id={{$node[\"Set1\"].json[\"id\"]}};" - }, - "name": "CrateDB2", - "type": "n8n-nodes-base.crateDb", - "typeVersion": 1, - "position": [ - 1250, - 300 - ], - "credentials": { - "crateDb": { - "id": "86", - "name": "CrateDB creds" - } - }, - "id": "41bbb36e-d1b4-419a-a587-4fb9a0a4d349" - } - ], - "connections": { - "CrateDB": { - "main": [ - [ - { - "node": "Set1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set": { - "main": [ - [ - { - "node": "CrateDB", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set1": { - "main": [ - [ - { - "node": "CrateDB1", - "type": "main", - "index": 0 - } - ] - ] - }, - "CrateDB1": { - "main": [ - [ - { - "node": "CrateDB2", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/120.json b/test-workflows/workflows/120.json deleted file mode 100644 index a43e5a7d23d..00000000000 --- a/test-workflows/workflows/120.json +++ /dev/null @@ -1,230 +0,0 @@ -{ - "createdAt": "2021-03-10T15:35:11.016Z", - "updatedAt": "2021-03-10T15:36:00.949Z", - "id": "120", - "name": "MySQL:insert update executeQuery", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "5b615e13-07d6-4c71-af21-318ec21ec4a0" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "name", - "value": "=Name{{Date.now()}}" - } - ], - "number": [ - { - "name": "id", - "value": "={{Math.round(Math.random()*100000)}}" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "id": "7fb26b4f-a2aa-4cb9-aa75-8514d7095189" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "name", - "value": "=UpdatedName{{Date.now()}}" - } - ], - "number": [ - { - "name": "id", - "value": "={{$node[\"Set\"].json[\"id\"]}}" - } - ] - }, - "options": {} - }, - "name": "Set1", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 850, - 300 - ], - "id": "2494e933-9a78-418a-afe2-ada2340d2f56" - }, - { - "parameters": { - "table": "TestTable", - "columns": "id,name" - }, - "name": "MySQL", - "type": "n8n-nodes-base.mySql", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "credentials": { - "mySql": { - "id": "87", - "name": "MySQL creds" - } - }, - "id": "3a942f01-b88b-4b01-bfe6-355be41e0ce9" - }, - { - "parameters": { - "operation": "update", - "table": "TestTable", - "columns": "id,name" - }, - "name": "MySQL1", - "type": "n8n-nodes-base.mySql", - "typeVersion": 1, - "position": [ - 1050, - 300 - ], - "credentials": { - "mySql": { - "id": "87", - "name": "MySQL creds" - } - }, - "id": "6bf22c0c-7a5a-47d6-98e7-129eb92b2825" - }, - { - "parameters": { - "operation": "executeQuery", - "query": "=SELECT * FROM TestTable LIMIT 1;" - }, - "name": "MySQL2", - "type": "n8n-nodes-base.mySql", - "typeVersion": 1, - "position": [ - 1250, - 300 - ], - "credentials": { - "mySql": { - "id": "87", - "name": "MySQL creds" - } - }, - "id": "d984d201-7a77-423b-85a3-fc6a59417488" - }, - { - "parameters": { - "operation": "executeQuery", - "query": "=DELETE FROM TestTable WHERE id={{$node[\"Set1\"].json[\"id\"]}};" - }, - "name": "MySQL3", - "type": "n8n-nodes-base.mySql", - "typeVersion": 1, - "position": [ - 1450, - 300 - ], - "credentials": { - "mySql": { - "id": "87", - "name": "MySQL creds" - } - }, - "id": "c19d0fc0-2e2d-4bbf-a7dd-a2e625dc7984" - } - ], - "connections": { - "Set": { - "main": [ - [ - { - "node": "MySQL", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set1": { - "main": [ - [ - { - "node": "MySQL1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - }, - "MySQL": { - "main": [ - [ - { - "node": "Set1", - "type": "main", - "index": 0 - } - ] - ] - }, - "MySQL1": { - "main": [ - [ - { - "node": "MySQL2", - "type": "main", - "index": 0 - } - ] - ] - }, - "MySQL2": { - "main": [ - [ - { - "node": "MySQL3", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/121.json b/test-workflows/workflows/121.json deleted file mode 100644 index e6dffeffee9..00000000000 --- a/test-workflows/workflows/121.json +++ /dev/null @@ -1,463 +0,0 @@ -{ - "createdAt": "2021-03-10T16:41:57.544Z", - "updatedAt": "2021-07-14T14:15:34.356Z", - "id": "121", - "name": "Mautic:Company:create update get getAll delete:Contact:create update get getAll delete:ContactCompany:add remove", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "32f14cad-d9c6-4b95-ab68-d4826d48fabf" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "company", - "name": "=Company{{Date.now()}}", - "additionalFields": {} - }, - "name": "Mautic", - "type": "n8n-nodes-base.mautic", - "typeVersion": 1, - "position": [ - 550, - 250 - ], - "credentials": { - "mauticOAuth2Api": { - "id": "89", - "name": "Mautic OAuth2 API creds" - } - }, - "id": "d51c36e4-8d14-4d6b-9d98-a54dba80d8d9" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "company", - "operation": "update", - "companyId": "={{$node[\"Mautic\"].json[\"id\"]}}", - "updateFields": { - "name": "=UpdatedCompany{{Date.now()}}" - } - }, - "name": "Mautic1", - "type": "n8n-nodes-base.mautic", - "typeVersion": 1, - "position": [ - 700, - 250 - ], - "credentials": { - "mauticOAuth2Api": { - "id": "89", - "name": "Mautic OAuth2 API creds" - } - }, - "id": "9d20aa4c-55c2-43f1-9eb8-61aa035fa095" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "company", - "operation": "get", - "companyId": "={{$node[\"Mautic\"].json[\"id\"]}}" - }, - "name": "Mautic2", - "type": "n8n-nodes-base.mautic", - "typeVersion": 1, - "position": [ - 1300, - 250 - ], - "credentials": { - "mauticOAuth2Api": { - "id": "89", - "name": "Mautic OAuth2 API creds" - } - }, - "id": "2c32e4c1-c0f0-4119-935a-a41944fcc1f6" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "company", - "operation": "getAll", - "limit": 1, - "additionalFields": {} - }, - "name": "Mautic3", - "type": "n8n-nodes-base.mautic", - "typeVersion": 1, - "position": [ - 1450, - 250 - ], - "credentials": { - "mauticOAuth2Api": { - "id": "89", - "name": "Mautic OAuth2 API creds" - } - }, - "id": "e8aaee34-faed-4540-a153-e007360950e6" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "company", - "operation": "delete", - "companyId": "={{$node[\"Mautic\"].json[\"id\"]}}" - }, - "name": "Mautic4", - "type": "n8n-nodes-base.mautic", - "typeVersion": 1, - "position": [ - 1600, - 250 - ], - "credentials": { - "mauticOAuth2Api": { - "id": "89", - "name": "Mautic OAuth2 API creds" - } - }, - "id": "51e9562a-6ed2-474f-a166-79aadba161ce" - }, - { - "parameters": { - "authentication": "oAuth2", - "email": "=fakeemail{{Date.now()}}@gmail.com", - "firstName": "=Name{{Date.now()}}", - "lastName": "=LasName{{Date.now()}}", - "position": "=Position{{Date.now()}}", - "title": "=Title{{Date.now()}}", - "additionalFields": {}, - "options": {} - }, - "name": "Mautic5", - "type": "n8n-nodes-base.mautic", - "typeVersion": 1, - "position": [ - 550, - 400 - ], - "credentials": { - "mauticOAuth2Api": { - "id": "89", - "name": "Mautic OAuth2 API creds" - } - }, - "id": "b1254079-c7e5-4bbd-b82d-949659011b06" - }, - { - "parameters": { - "authentication": "oAuth2", - "operation": "update", - "contactId": "={{$node[\"Mautic5\"].json[\"id\"]}}", - "updateFields": { - "title": "=UpdatedTitle{{Date.now()}}" - }, - "options": {} - }, - "name": "Mautic6", - "type": "n8n-nodes-base.mautic", - "typeVersion": 1, - "position": [ - 700, - 400 - ], - "credentials": { - "mauticOAuth2Api": { - "id": "89", - "name": "Mautic OAuth2 API creds" - } - }, - "id": "a52da7e6-2d92-4e0f-a216-8ea0a40eb335" - }, - { - "parameters": { - "authentication": "oAuth2", - "operation": "get", - "contactId": "={{$node[\"Mautic5\"].json[\"id\"]}}", - "options": {} - }, - "name": "Mautic7", - "type": "n8n-nodes-base.mautic", - "typeVersion": 1, - "position": [ - 1300, - 400 - ], - "credentials": { - "mauticOAuth2Api": { - "id": "89", - "name": "Mautic OAuth2 API creds" - } - }, - "id": "f6defb20-2e74-4a39-9232-b5da5c865f0c" - }, - { - "parameters": { - "authentication": "oAuth2", - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "Mautic8", - "type": "n8n-nodes-base.mautic", - "typeVersion": 1, - "position": [ - 1450, - 400 - ], - "credentials": { - "mauticOAuth2Api": { - "id": "89", - "name": "Mautic OAuth2 API creds" - } - }, - "id": "e58f2f81-3e0c-45e4-818b-5f665ea7c539" - }, - { - "parameters": { - "authentication": "oAuth2", - "operation": "delete", - "contactId": "={{$node[\"Mautic5\"].json[\"id\"]}}", - "options": {} - }, - "name": "Mautic9", - "type": "n8n-nodes-base.mautic", - "typeVersion": 1, - "position": [ - 1600, - 400 - ], - "credentials": { - "mauticOAuth2Api": { - "id": "89", - "name": "Mautic OAuth2 API creds" - } - }, - "id": "f06c2ab6-32ee-4c50-a122-f3bad0523587" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "companyContact", - "operation": "add", - "contactId": "={{$node[\"Mautic5\"].json[\"id\"]}}", - "companyId": "={{$node[\"Mautic\"].json[\"id\"]}}" - }, - "name": "Mautic10", - "type": "n8n-nodes-base.mautic", - "typeVersion": 1, - "position": [ - 1000, - 340 - ], - "credentials": { - "mauticOAuth2Api": { - "id": "89", - "name": "Mautic OAuth2 API creds" - } - }, - "id": "fb483ebe-6c2c-4003-9808-c669f4a91274" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "companyContact", - "operation": "remove", - "contactId": "={{$node[\"Mautic5\"].json[\"id\"]}}", - "companyId": "={{$node[\"Mautic\"].json[\"id\"]}}" - }, - "name": "Mautic11", - "type": "n8n-nodes-base.mautic", - "typeVersion": 1, - "position": [ - 1150, - 340 - ], - "credentials": { - "mauticOAuth2Api": { - "id": "89", - "name": "Mautic OAuth2 API creds" - } - }, - "id": "98d7a2b6-1cc9-4887-88ca-ce5866116d63" - }, - { - "parameters": { - "mode": "wait" - }, - "name": "Merge", - "type": "n8n-nodes-base.merge", - "typeVersion": 1, - "position": [ - 850, - 340 - ], - "notesInFlow": true, - "notes": "Keep single execution", - "id": "be2a68cb-4317-4f90-8c79-fb0b30014081" - } - ], - "connections": { - "Mautic": { - "main": [ - [ - { - "node": "Mautic1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Mautic", - "type": "main", - "index": 0 - }, - { - "node": "Mautic5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mautic1": { - "main": [ - [ - { - "node": "Merge", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mautic2": { - "main": [ - [ - { - "node": "Mautic3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mautic3": { - "main": [ - [ - { - "node": "Mautic4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mautic5": { - "main": [ - [ - { - "node": "Mautic6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mautic6": { - "main": [ - [ - { - "node": "Merge", - "type": "main", - "index": 1 - } - ] - ] - }, - "Mautic7": { - "main": [ - [ - { - "node": "Mautic8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mautic8": { - "main": [ - [ - { - "node": "Mautic9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mautic10": { - "main": [ - [ - { - "node": "Mautic11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mautic11": { - "main": [ - [ - { - "node": "Mautic2", - "type": "main", - "index": 0 - }, - { - "node": "Mautic7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Merge": { - "main": [ - [ - { - "node": "Mautic10", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/122.json b/test-workflows/workflows/122.json deleted file mode 100644 index 1aec4d00968..00000000000 --- a/test-workflows/workflows/122.json +++ /dev/null @@ -1,514 +0,0 @@ -{ - "createdAt": "2021-03-11T08:54:28.548Z", - "updatedAt": "2021-05-25T12:50:39.981Z", - "id": "122", - "name": "Orbit:Member:upsert get update delete getAll lookup:Note:create update getAll:Activity:create getAll:Post:create getAll delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 410, - 200 - ], - "id": "39ef826b-4c37-4617-aacb-e2d276721e1f" - }, - { - "parameters": { - "operation": "upsert", - "workspaceId": "543", - "identityUi": { - "identityValue": { - "source": "email", - "email": "={{$node[\"Set\"].json[\"email\"]}}" - } - }, - "additionalFields": { - "name": "=Name{{Date.now()}}" - } - }, - "name": "Orbit", - "type": "n8n-nodes-base.orbit", - "typeVersion": 1, - "position": [ - 750, - 200 - ], - "credentials": { - "orbitApi": { - "id": "112", - "name": "Orbit API creds" - } - }, - "id": "b36edb18-df88-418c-8a9d-22d43bb6aa89" - }, - { - "parameters": { - "workspaceId": "543", - "memberId": "={{$node[\"Orbit\"].json[\"id\"]}}" - }, - "name": "Orbit1", - "type": "n8n-nodes-base.orbit", - "typeVersion": 1, - "position": [ - 900, - 200 - ], - "credentials": { - "orbitApi": { - "id": "112", - "name": "Orbit API creds" - } - }, - "id": "c48b87cd-09dd-414e-ae47-668b6379685e" - }, - { - "parameters": { - "operation": "getAll", - "workspaceId": "543", - "limit": 1, - "options": {} - }, - "name": "Orbit2", - "type": "n8n-nodes-base.orbit", - "typeVersion": 1, - "position": [ - 600, - 500 - ], - "credentials": { - "orbitApi": { - "id": "112", - "name": "Orbit API creds" - } - }, - "id": "0de00f28-5062-4deb-98e4-f4adf9ca657e" - }, - { - "parameters": { - "operation": "update", - "workspaceId": "543", - "memberId": "={{$node[\"Orbit\"].json[\"id\"]}}", - "updateFields": { - "name": "=Updated{{$node[\"Orbit\"].json[\"attributes\"][\"name\"]}}" - } - }, - "name": "Orbit3", - "type": "n8n-nodes-base.orbit", - "typeVersion": 1, - "position": [ - 1050, - 200 - ], - "credentials": { - "orbitApi": { - "id": "112", - "name": "Orbit API creds" - } - }, - "id": "83cbc054-9ce4-43db-9b43-6f610596069b" - }, - { - "parameters": { - "operation": "lookup", - "workspaceId": "543", - "source": "github", - "searchBy": "username", - "username": "={{$node[\"Orbit2\"].json[\"attributes\"][\"github\"]}}" - }, - "name": "Orbit4", - "type": "n8n-nodes-base.orbit", - "typeVersion": 1, - "position": [ - 750, - 500 - ], - "credentials": { - "orbitApi": { - "id": "112", - "name": "Orbit API creds" - } - }, - "id": "599f8644-eed0-414a-82cb-cccc327a2e13" - }, - { - "parameters": { - "operation": "delete", - "workspaceId": "543", - "memberId": "={{$node[\"Orbit\"].json[\"id\"]}}" - }, - "name": "Orbit5", - "type": "n8n-nodes-base.orbit", - "typeVersion": 1, - "position": [ - 1200, - 200 - ], - "credentials": { - "orbitApi": { - "id": "112", - "name": "Orbit API creds" - } - }, - "id": "03d30c2f-044c-4cf6-9d9c-f1cf39027dab" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "email", - "value": "=fake{{Date.now()}}@gmail.com" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 600, - 200 - ], - "id": "9131159f-68a7-4379-945e-2743187ae993" - }, - { - "parameters": { - "resource": "activity", - "workspaceId": "543", - "memberId": "={{$node[\"Orbit\"].json[\"id\"]}}", - "title": "=Title{{Date.now()}}", - "additionalFields": {} - }, - "name": "Orbit6", - "type": "n8n-nodes-base.orbit", - "typeVersion": 1, - "position": [ - 900, - 350 - ], - "credentials": { - "orbitApi": { - "id": "112", - "name": "Orbit API creds" - } - }, - "id": "27ac35b2-64d0-4422-a5a1-dc453af2f01d" - }, - { - "parameters": { - "resource": "activity", - "operation": "getAll", - "workspaceId": "543", - "limit": 1, - "filters": {} - }, - "name": "Orbit7", - "type": "n8n-nodes-base.orbit", - "typeVersion": 1, - "position": [ - 1050, - 350 - ], - "credentials": { - "orbitApi": { - "id": "112", - "name": "Orbit API creds" - } - }, - "id": "8f50074d-e558-4150-bc0c-c0721e071aa0" - }, - { - "parameters": { - "resource": "note", - "workspaceId": "543", - "memberId": "={{$node[\"Orbit\"].json[\"id\"]}}", - "note": "=Note{{Date.now()}}" - }, - "name": "Orbit8", - "type": "n8n-nodes-base.orbit", - "typeVersion": 1, - "position": [ - 900, - 50 - ], - "credentials": { - "orbitApi": { - "id": "112", - "name": "Orbit API creds" - } - }, - "id": "bba7efcf-70e2-48c3-940f-2233b3ab0f05" - }, - { - "parameters": { - "resource": "note", - "operation": "update", - "workspaceId": "543", - "memberId": "={{$node[\"Orbit\"].json[\"id\"]}}", - "noteId": "={{$node[\"Orbit8\"].json[\"id\"]}}", - "note": "=Updated{{$node[\"Orbit8\"].json[\"attributes\"][\"body\"]}}" - }, - "name": "Orbit9", - "type": "n8n-nodes-base.orbit", - "typeVersion": 1, - "position": [ - 1050, - 50 - ], - "credentials": { - "orbitApi": { - "id": "112", - "name": "Orbit API creds" - } - }, - "id": "a5ea5c0a-c939-4017-b355-86be07da2fcf" - }, - { - "parameters": { - "resource": "note", - "operation": "getAll", - "workspaceId": "543", - "memberId": "={{$node[\"Orbit\"].json[\"id\"]}}", - "limit": 1 - }, - "name": "Orbit10", - "type": "n8n-nodes-base.orbit", - "typeVersion": 1, - "position": [ - 1200, - 50 - ], - "credentials": { - "orbitApi": { - "id": "112", - "name": "Orbit API creds" - } - }, - "id": "e070222a-741f-4f31-a2cb-47731f3b7f75" - }, - { - "parameters": { - "resource": "post", - "workspaceId": "543", - "memberId": "={{$node[\"Orbit4\"].json[\"id\"]}}", - "url": "=https://n8n.io/blog/why-i-chose-n8n-over-zapier-in-2020?test_timestamp={{Date.now()}}", - "additionalFields": {} - }, - "name": "Orbit11", - "type": "n8n-nodes-base.orbit", - "typeVersion": 1, - "position": [ - 900, - 500 - ], - "credentials": { - "orbitApi": { - "id": "112", - "name": "Orbit API creds" - } - }, - "id": "34567405-fff1-4d1a-b652-0dcd61dedb9a" - }, - { - "parameters": { - "resource": "post", - "operation": "getAll", - "workspaceId": "543", - "limit": 1, - "filters": {} - }, - "name": "Orbit12", - "type": "n8n-nodes-base.orbit", - "typeVersion": 1, - "position": [ - 1050, - 500 - ], - "credentials": { - "orbitApi": { - "id": "112", - "name": "Orbit API creds" - } - }, - "id": "f155c381-f37e-4ec2-876c-8123213fd4ef" - }, - { - "parameters": { - "resource": "post", - "operation": "delete", - "workspaceId": "543", - "memberId": "={{$node[\"Orbit4\"].json[\"id\"]}}", - "postId": "={{$node[\"Orbit11\"].json[\"id\"]}}" - }, - "name": "Orbit13", - "type": "n8n-nodes-base.orbit", - "typeVersion": 1, - "position": [ - 1050, - 650 - ], - "credentials": { - "orbitApi": { - "id": "112", - "name": "Orbit API creds" - } - }, - "id": "f5a44540-6958-4cf0-919d-a4c9b07df59f" - } - ], - "connections": { - "Orbit": { - "main": [ - [ - { - "node": "Orbit6", - "type": "main", - "index": 0 - }, - { - "node": "Orbit8", - "type": "main", - "index": 0 - }, - { - "node": "Orbit1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Orbit1": { - "main": [ - [ - { - "node": "Orbit3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Orbit2": { - "main": [ - [ - { - "node": "Orbit4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Orbit3": { - "main": [ - [ - { - "node": "Orbit5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - }, - { - "node": "Orbit2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set": { - "main": [ - [ - { - "node": "Orbit", - "type": "main", - "index": 0 - } - ] - ] - }, - "Orbit6": { - "main": [ - [ - { - "node": "Orbit7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Orbit8": { - "main": [ - [ - { - "node": "Orbit9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Orbit9": { - "main": [ - [ - { - "node": "Orbit10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Orbit11": { - "main": [ - [ - { - "node": "Orbit12", - "type": "main", - "index": 0 - }, - { - "node": "Orbit13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Orbit4": { - "main": [ - [ - { - "node": "Orbit11", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/123.json b/test-workflows/workflows/123.json deleted file mode 100644 index e102621cce5..00000000000 --- a/test-workflows/workflows/123.json +++ /dev/null @@ -1,234 +0,0 @@ -{ - "createdAt": "2021-03-11T09:31:40.228Z", - "updatedAt": "2021-03-11T09:32:06.868Z", - "id": "123", - "name": "MongoDB:insert find update delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "a355b2f8-5354-4e3f-9409-c29de450e49c" - }, - { - "parameters": { - "operation": "insert", - "collection": "TestCollection", - "fields": "id,name,valid" - }, - "name": "MongoDB", - "type": "n8n-nodes-base.mongoDb", - "typeVersion": 1, - "position": [ - 600, - 300 - ], - "credentials": { - "mongoDb": { - "id": "90", - "name": "MongoDB creds" - } - }, - "id": "2b30fbfb-08dd-48ac-bec7-722457fec924" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "name", - "value": "=Test{{Date.now()}}" - } - ], - "number": [ - { - "name": "id", - "value": "={{Math.round(Math.random()*10000)}}" - } - ], - "boolean": [ - { - "name": "valid", - "value": "={{(Math.random()*100) > 50}}" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "notesInFlow": true, - "notes": "set document", - "id": "3a57b5c9-3f2e-43ef-a0ae-3598e1eb54b7" - }, - { - "parameters": { - "collection": "TestCollection" - }, - "name": "MongoDB1", - "type": "n8n-nodes-base.mongoDb", - "typeVersion": 1, - "position": [ - 750, - 300 - ], - "credentials": { - "mongoDb": { - "id": "90", - "name": "MongoDB creds" - } - }, - "id": "6ede4036-3685-402e-abc3-3f2a95b23cfc" - }, - { - "parameters": { - "operation": "update", - "collection": "TestCollection", - "fields": "name" - }, - "name": "MongoDB2", - "type": "n8n-nodes-base.mongoDb", - "typeVersion": 1, - "position": [ - 1050, - 300 - ], - "credentials": { - "mongoDb": { - "id": "90", - "name": "MongoDB creds" - } - }, - "id": "8299beed-7163-4a92-9f41-b8c970bc320b" - }, - { - "parameters": { - "operation": "delete", - "collection": "TestCollection" - }, - "name": "MongoDB3", - "type": "n8n-nodes-base.mongoDb", - "typeVersion": 1, - "position": [ - 1200, - 300 - ], - "credentials": { - "mongoDb": { - "id": "90", - "name": "MongoDB creds" - } - }, - "id": "f77603b7-8d36-46bc-bcc5-604b63294778" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "name", - "value": "=UpdatedName{{Date.now()}}" - } - ] - }, - "options": {} - }, - "name": "Set1", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 900, - 300 - ], - "notesInFlow": true, - "notes": "update name attribut", - "id": "d32afa6f-35a1-492f-8185-21bef87b18f0" - } - ], - "connections": { - "MongoDB": { - "main": [ - [ - { - "node": "MongoDB1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set": { - "main": [ - [ - { - "node": "MongoDB", - "type": "main", - "index": 0 - } - ] - ] - }, - "MongoDB1": { - "main": [ - [ - { - "node": "Set1", - "type": "main", - "index": 0 - } - ] - ] - }, - "MongoDB2": { - "main": [ - [ - { - "node": "MongoDB3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set1": { - "main": [ - [ - { - "node": "MongoDB2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/124.json b/test-workflows/workflows/124.json deleted file mode 100644 index e03dfb348b6..00000000000 --- a/test-workflows/workflows/124.json +++ /dev/null @@ -1,166 +0,0 @@ -{ - "createdAt": "2021-03-11T12:18:29.698Z", - "updatedAt": "2021-03-11T12:18:29.698Z", - "id": "124", - "name": "QuestDB: insert executeQuery", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "97bc2a65-cef4-47d4-b986-8bbf54f8698d" - }, - { - "parameters": { - "table": "TestTable", - "columns": "id,name" - }, - "name": "QuestDB", - "type": "n8n-nodes-base.questDb", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "credentials": { - "questDb": { - "id": "91", - "name": "QuestDB creds" - } - }, - "id": "da306e33-0ed0-4c94-b37e-2769511e28d1" - }, - { - "parameters": { - "values": { - "number": [ - { - "name": "id", - "value": "={{Math.round(Math.random()*1000)}}" - } - ], - "string": [ - { - "name": "name", - "value": "=Name{{Date.now()}}" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "notesInFlow": true, - "notes": "prepare data", - "id": "53f41164-da16-4eae-a333-09166cfffeea" - }, - { - "parameters": { - "operation": "executeQuery", - "query": "=SELECT * FROM TestTable WHERE id={{$node[\"QuestDB\"].json[\"id\"]}} LIMIT 1;" - }, - "name": "QuestDB1", - "type": "n8n-nodes-base.questDb", - "typeVersion": 1, - "position": [ - 850, - 300 - ], - "notesInFlow": true, - "credentials": { - "questDb": { - "id": "91", - "name": "QuestDB creds" - } - }, - "notes": "get data", - "id": "d40ddbdd-c531-469b-8470-06d93e4a72e2" - }, - { - "parameters": { - "operation": "executeQuery", - "query": "=TRUNCATE TABLE TestTable;" - }, - "name": "QuestDB2", - "type": "n8n-nodes-base.questDb", - "typeVersion": 1, - "position": [ - 1050, - 300 - ], - "notesInFlow": true, - "credentials": { - "questDb": { - "id": "91", - "name": "QuestDB creds" - } - }, - "notes": "delete data", - "id": "7cd8a74b-0305-4700-b9db-ddcb844aa40b" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set": { - "main": [ - [ - { - "node": "QuestDB", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuestDB": { - "main": [ - [ - { - "node": "QuestDB1", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuestDB1": { - "main": [ - [ - { - "node": "QuestDB2", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/125.json b/test-workflows/workflows/125.json deleted file mode 100644 index 2ae57db3a3f..00000000000 --- a/test-workflows/workflows/125.json +++ /dev/null @@ -1,231 +0,0 @@ -{ - "createdAt": "2021-03-11T13:25:33.615Z", - "updatedAt": "2021-11-12T13:06:28.032Z", - "id": "125", - "name": "Postgres: insert update executeQuery", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "17ac71e5-e7ee-46e2-bc71-65bcfb5d4a52" - }, - { - "parameters": { - "table": "testtable", - "columns": "id,name", - "additionalFields": {} - }, - "name": "Postgres", - "type": "n8n-nodes-base.postgres", - "typeVersion": 1, - "position": [ - 550, - 300 - ], - "credentials": { - "postgres": { - "id": "92", - "name": "Postgres creds" - } - }, - "id": "7cab0391-d473-4d74-a771-6aad35b3240f" - }, - { - "parameters": { - "values": { - "number": [ - { - "name": "id", - "value": "={{Math.round(Math.random()*1000)}}" - } - ], - "string": [ - { - "name": "name", - "value": "=Name{{Date.now()}}" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 400, - 300 - ], - "id": "b64bd579-b602-4ec5-8fcb-3e49514517a7" - }, - { - "parameters": { - "operation": "update", - "table": "testtable", - "columns": "id,name", - "additionalFields": {} - }, - "name": "Postgres1", - "type": "n8n-nodes-base.postgres", - "typeVersion": 1, - "position": [ - 850, - 300 - ], - "credentials": { - "postgres": { - "id": "92", - "name": "Postgres creds" - } - }, - "id": "9013d993-4f74-42ca-bab2-7c1536205836" - }, - { - "parameters": { - "values": { - "number": [], - "string": [ - { - "name": "name", - "value": "=UpdatedName{{Date.now()}}" - } - ] - }, - "options": {} - }, - "name": "Set1", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 700, - 300 - ], - "id": "a6b9b7f5-453f-494d-b1db-7f4745f81233" - }, - { - "parameters": { - "operation": "executeQuery", - "query": "SELECT * FROM public.testtable;", - "additionalFields": {} - }, - "name": "Postgres2", - "type": "n8n-nodes-base.postgres", - "typeVersion": 1, - "position": [ - 1000, - 300 - ], - "credentials": { - "postgres": { - "id": "92", - "name": "Postgres creds" - } - }, - "id": "63302a61-6401-43fd-a4c5-f20b9feb68b8" - }, - { - "parameters": { - "operation": "executeQuery", - "query": "=DELETE FROM public.testtable where id = $1;", - "additionalFields": { - "queryParams": "id" - } - }, - "name": "Postgres3", - "type": "n8n-nodes-base.postgres", - "typeVersion": 1, - "position": [ - 1150, - 300 - ], - "credentials": { - "postgres": { - "id": "92", - "name": "Postgres creds" - } - }, - "id": "c31b730f-f21b-4eb3-88e0-cc649984a327" - } - ], - "connections": { - "Postgres": { - "main": [ - [ - { - "node": "Set1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set": { - "main": [ - [ - { - "node": "Postgres", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set1": { - "main": [ - [ - { - "node": "Postgres1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Postgres1": { - "main": [ - [ - { - "node": "Postgres2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Postgres2": { - "main": [ - [ - { - "node": "Postgres3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/126.json b/test-workflows/workflows/126.json deleted file mode 100644 index bbd2557766d..00000000000 --- a/test-workflows/workflows/126.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "createdAt": "2021-03-11T14:51:32.026Z", - "updatedAt": "2021-03-18T10:28:03.209Z", - "id": "126", - "name": "Kafka", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "76f28c5d-1894-4d95-ab23-4e6e39bf69e9" - }, - { - "parameters": { - "topic": "=TopicTest{{Date.now()}}", - "headersUi": { - "headerValues": [] - }, - "options": { - "compression": true - } - }, - "name": "Kafka", - "type": "n8n-nodes-base.kafka", - "typeVersion": 1, - "position": [ - 710, - 300 - ], - "credentials": { - "kafka": { - "id": "93", - "name": "Kafka creds" - } - }, - "id": "9d37ab21-f676-4e88-8d71-3033d301ed62" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "input", - "value": "={{(new Date()).toISOString()}}" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 500, - 300 - ], - "id": "2d1bf06b-6d8e-4f82-b56f-7fde44b74007" - } - ], - "connections": { - "Set": { - "main": [ - [ - { - "node": "Kafka", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/127.json b/test-workflows/workflows/127.json deleted file mode 100644 index 9c684250a1f..00000000000 --- a/test-workflows/workflows/127.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "createdAt": "2021-03-11T15:40:59.286Z", - "updatedAt": "2021-05-20T09:47:21.924Z", - "id": "127", - "name": "Rundeck:Job:execute getMetadata", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "f6b07b0d-8721-49de-8c02-39987174e2c4" - }, - { - "parameters": { - "jobid": "4dc20913-c26f-4060-afe9-6bb26dfd1a10", - "arguments": { - "arguments": [ - {} - ] - } - }, - "name": "Rundeck", - "type": "n8n-nodes-base.rundeck", - "typeVersion": 1, - "position": [ - 550, - 300 - ], - "credentials": { - "rundeckApi": { - "id": "94", - "name": "Rundeck API creds" - } - }, - "id": "c1504f84-7203-426f-9eab-10ccde6bcd76" - }, - { - "parameters": { - "operation": "getMetadata", - "jobid": "4dc20913-c26f-4060-afe9-6bb26dfd1a10" - }, - "name": "Rundeck1", - "type": "n8n-nodes-base.rundeck", - "typeVersion": 1, - "position": [ - 750, - 300 - ], - "credentials": { - "rundeckApi": { - "id": "94", - "name": "Rundeck API creds" - } - }, - "id": "425b0f49-4d3b-4b5e-a4b8-0dadda512663" - } - ], - "connections": { - "Rundeck": { - "main": [ - [ - { - "node": "Rundeck1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Rundeck", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/128.json b/test-workflows/workflows/128.json deleted file mode 100644 index 20c96b06cd4..00000000000 --- a/test-workflows/workflows/128.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "createdAt": "2021-03-11T17:20:04.889Z", - "updatedAt": "2021-03-11T17:22:00.219Z", - "id": "128", - "name": "Yourls:Url:shorten stats expand", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "04b33b0d-9424-4705-955d-c4a8087c055c" - }, - { - "parameters": { - "url": "=https://n8n.io/{{Date.now()}}", - "additionalFields": { - "title": "n8n-ulr with random suffix" - } - }, - "name": "Yourls", - "type": "n8n-nodes-base.yourls", - "typeVersion": 1, - "position": [ - 500, - 300 - ], - "credentials": { - "yourlsApi": { - "id": "95", - "name": "Yourls API creds" - } - }, - "id": "d5e11a39-5fc4-4e33-b83e-9706e46c8aba" - }, - { - "parameters": { - "operation": "stats", - "shortUrl": "={{$node[\"Yourls\"].json[\"shorturl\"]}}" - }, - "name": "Yourls1", - "type": "n8n-nodes-base.yourls", - "typeVersion": 1, - "position": [ - 700, - 300 - ], - "credentials": { - "yourlsApi": { - "id": "95", - "name": "Yourls API creds" - } - }, - "id": "c3e4bb2a-977c-4f7d-88ce-4954ece456c5" - }, - { - "parameters": { - "operation": "expand", - "shortUrl": "={{$node[\"Yourls\"].json[\"shorturl\"]}}" - }, - "name": "Yourls2", - "type": "n8n-nodes-base.yourls", - "typeVersion": 1, - "position": [ - 900, - 300 - ], - "credentials": { - "yourlsApi": { - "id": "95", - "name": "Yourls API creds" - } - }, - "id": "a1126d46-f429-47e8-9a52-08549a8ed2da" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Yourls", - "type": "main", - "index": 0 - } - ] - ] - }, - "Yourls": { - "main": [ - [ - { - "node": "Yourls1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Yourls1": { - "main": [ - [ - { - "node": "Yourls2", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/129.json b/test-workflows/workflows/129.json deleted file mode 100644 index 0e5b6934061..00000000000 --- a/test-workflows/workflows/129.json +++ /dev/null @@ -1,835 +0,0 @@ -{ - "createdAt": "2021-03-12T09:33:57.650Z", - "updatedAt": "2021-05-25T14:06:03.846Z", - "id": "129", - "name": "NextCloud:NextCloud:Folder:create move copy delete list:File:upload move copy download delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 1120, - 250 - ], - "id": "4cbe8941-9b8e-4432-8592-24de1753c8aa" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "folder", - "path": "={{$node[\"Set\"].json[\"name\"]}}" - }, - "name": "Nextcloud", - "type": "n8n-nodes-base.nextCloud", - "typeVersion": 1, - "position": [ - 1470, - 250 - ], - "alwaysOutputData": true, - "credentials": { - "nextCloudOAuth2Api": { - "id": "96", - "name": "NextCloud OAuth2 API creds" - } - }, - "id": "467f1321-8b33-4fc0-9e0c-e788d3659ea0" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "folder", - "operation": "move", - "path": "=/{{$node[\"Set\"].json[\"name\"]}}", - "toPath": "=/Updated{{$node[\"Set\"].json[\"name\"]}}" - }, - "name": "Nextcloud1", - "type": "n8n-nodes-base.nextCloud", - "typeVersion": 1, - "position": [ - 1770, - 250 - ], - "credentials": { - "nextCloudOAuth2Api": { - "id": "96", - "name": "NextCloud OAuth2 API creds" - } - }, - "id": "2e715385-abea-4304-9e39-0e00443eddb0" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "name", - "value": "=Folder{{Date.now()}}" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 1270, - 250 - ], - "id": "79dabfd8-10a5-47c6-90aa-fa957f99db71" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "folder", - "operation": "copy", - "path": "=/Updated{{$node[\"Set\"].json[\"name\"]}}", - "toPath": "=/Copied{{$node[\"Set\"].json[\"name\"]}}" - }, - "name": "Nextcloud2", - "type": "n8n-nodes-base.nextCloud", - "typeVersion": 1, - "position": [ - 2070, - 250 - ], - "credentials": { - "nextCloudOAuth2Api": { - "id": "96", - "name": "NextCloud OAuth2 API creds" - } - }, - "id": "7a111975-d958-40d8-9f7c-11b7d36650ba" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "folder", - "operation": "delete", - "path": "=/Copied{{$node[\"Set\"].json[\"name\"]}}" - }, - "name": "Nextcloud3", - "type": "n8n-nodes-base.nextCloud", - "typeVersion": 1, - "position": [ - 2220, - 250 - ], - "credentials": { - "nextCloudOAuth2Api": { - "id": "96", - "name": "NextCloud OAuth2 API creds" - } - }, - "id": "b3356660-2aa2-4041-9756-629a45268e1d" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "folder", - "operation": "list", - "path": "=/Updated{{$node[\"Set\"].json[\"name\"]}}" - }, - "name": "Nextcloud4", - "type": "n8n-nodes-base.nextCloud", - "typeVersion": 1, - "position": [ - 4000, - 240 - ], - "credentials": { - "nextCloudOAuth2Api": { - "id": "96", - "name": "NextCloud OAuth2 API creds" - } - }, - "id": "87118dec-fdd8-494b-926d-5870193e456f" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "folder", - "operation": "delete", - "path": "=/Updated{{$node[\"Set\"].json[\"name\"]}}" - }, - "name": "Nextcloud5", - "type": "n8n-nodes-base.nextCloud", - "typeVersion": 1, - "position": [ - 4000, - 400 - ], - "credentials": { - "nextCloudOAuth2Api": { - "id": "96", - "name": "NextCloud OAuth2 API creds" - } - }, - "id": "83d025a2-bc96-4c24-93ab-bcf6acd1d63d" - }, - { - "parameters": { - "authentication": "oAuth2", - "path": "=/Updated{{$node[\"Set\"].json[\"name\"]}}/{{$node[\"Set1\"].json[\"name\"]}}", - "binaryDataUpload": true - }, - "name": "Nextcloud6", - "type": "n8n-nodes-base.nextCloud", - "typeVersion": 1, - "position": [ - 2820, - 300 - ], - "credentials": { - "nextCloudOAuth2Api": { - "id": "96", - "name": "NextCloud OAuth2 API creds" - } - }, - "id": "4142443d-f9d7-4efd-a43b-66d7dfc5df4e" - }, - { - "parameters": { - "keepOnlySet": true, - "values": { - "string": [ - { - "name": "name", - "value": "=File{{Date.now()}}" - } - ] - }, - "options": {} - }, - "name": "Set1", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 2520, - 300 - ], - "id": "9ca67953-2298-4400-9439-93e09a64bffe" - }, - { - "parameters": { - "filePath": "/tmp/n8n-logo.png" - }, - "name": "Read Binary File", - "type": "n8n-nodes-base.readBinaryFile", - "typeVersion": 1, - "position": [ - 2670, - 300 - ], - "id": "008eb1cf-a715-4764-8dee-ac713bd23387" - }, - { - "parameters": { - "authentication": "oAuth2", - "operation": "move", - "path": "=/Updated{{$node[\"Set\"].json[\"name\"]}}/{{$node[\"Set1\"].json[\"name\"]}}", - "toPath": "=/Updated{{$node[\"Set\"].json[\"name\"]}}/Moved{{$node[\"Set1\"].json[\"name\"]}}" - }, - "name": "Nextcloud7", - "type": "n8n-nodes-base.nextCloud", - "typeVersion": 1, - "position": [ - 3120, - 300 - ], - "credentials": { - "nextCloudOAuth2Api": { - "id": "96", - "name": "NextCloud OAuth2 API creds" - } - }, - "id": "8f2b1106-2e0c-4da7-915d-27356091ec81" - }, - { - "parameters": { - "authentication": "oAuth2", - "operation": "copy", - "path": "=/Updated{{$node[\"Set\"].json[\"name\"]}}/Moved{{$node[\"Set1\"].json[\"name\"]}}", - "toPath": "=/Updated{{$node[\"Set\"].json[\"name\"]}}/Copied{{$node[\"Set1\"].json[\"name\"]}}" - }, - "name": "Nextcloud8", - "type": "n8n-nodes-base.nextCloud", - "typeVersion": 1, - "position": [ - 3270, - 300 - ], - "credentials": { - "nextCloudOAuth2Api": { - "id": "96", - "name": "NextCloud OAuth2 API creds" - } - }, - "id": "4f8a6919-c58f-4b54-ba83-9ad4f50bc348" - }, - { - "parameters": { - "authentication": "oAuth2", - "operation": "download", - "path": "=/Updated{{$node[\"Set\"].json[\"name\"]}}/Moved{{$node[\"Set1\"].json[\"name\"]}}" - }, - "name": "Nextcloud9", - "type": "n8n-nodes-base.nextCloud", - "typeVersion": 1, - "position": [ - 3570, - 300 - ], - "credentials": { - "nextCloudOAuth2Api": { - "id": "96", - "name": "NextCloud OAuth2 API creds" - } - }, - "id": "d6c5dfb2-4bd9-4b40-98b5-adee1e9371c8" - }, - { - "parameters": { - "authentication": "oAuth2", - "operation": "delete", - "path": "=/Updated{{$node[\"Set\"].json[\"name\"]}}/Moved{{$node[\"Set1\"].json[\"name\"]}}" - }, - "name": "Nextcloud10", - "type": "n8n-nodes-base.nextCloud", - "typeVersion": 1, - "position": [ - 3720, - 300 - ], - "credentials": { - "nextCloudOAuth2Api": { - "id": "96", - "name": "NextCloud OAuth2 API creds" - } - }, - "id": "804800a7-6329-4a4d-99cf-da2dc38a9096" - }, - { - "parameters": { - "resource": "user", - "userId": "=Username{{Date.now()}}", - "email": "=email{{Date.now()}}@fakeemail.com", - "additionalFields": { - "displayName": "=Username{{Date.now()}}" - } - }, - "name": "Nextcloud11", - "type": "n8n-nodes-base.nextCloud", - "typeVersion": 1, - "position": [ - 1270, - 450 - ], - "credentials": { - "nextCloudApi": { - "id": "133", - "name": "NextCloud API creds" - } - }, - "id": "605413ab-2e1b-4ac2-801e-4a51d5d8287e" - }, - { - "parameters": { - "resource": "user", - "operation": "get", - "userId": "={{$node[\"Nextcloud11\"].json[\"id\"]}}" - }, - "name": "Nextcloud12", - "type": "n8n-nodes-base.nextCloud", - "typeVersion": 1, - "position": [ - 1570, - 450 - ], - "credentials": { - "nextCloudApi": { - "id": "133", - "name": "NextCloud API creds" - } - }, - "id": "c0134c0b-74b2-4f67-9ecf-570f052f5aa6" - }, - { - "parameters": { - "resource": "user", - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "Nextcloud13", - "type": "n8n-nodes-base.nextCloud", - "typeVersion": 1, - "position": [ - 1720, - 450 - ], - "credentials": { - "nextCloudApi": { - "id": "133", - "name": "NextCloud API creds" - } - }, - "id": "da45a102-91e0-41d7-858e-1680e7af104e" - }, - { - "parameters": { - "resource": "user", - "operation": "update", - "userId": "={{$node[\"Nextcloud11\"].json[\"id\"]}}", - "updateFields": { - "field": { - "key": "website", - "value": "http://community.n8n.io" - } - } - }, - "name": "Nextcloud14", - "type": "n8n-nodes-base.nextCloud", - "typeVersion": 1, - "position": [ - 2020, - 450 - ], - "credentials": { - "nextCloudApi": { - "id": "133", - "name": "NextCloud API creds" - } - }, - "id": "35b61a88-a9d7-4902-9f5e-b9db05ee6f1b" - }, - { - "parameters": { - "resource": "user", - "operation": "delete", - "userId": "={{$node[\"Nextcloud11\"].json[\"id\"]}}" - }, - "name": "Nextcloud15", - "type": "n8n-nodes-base.nextCloud", - "typeVersion": 1, - "position": [ - 2170, - 450 - ], - "credentials": { - "nextCloudApi": { - "id": "133", - "name": "NextCloud API creds" - } - }, - "id": "c983c376-d307-406d-8134-3469a35b7991" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds", - "type": "n8n-nodes-base.function", - "position": [ - 1420, - 450 - ], - "typeVersion": 1, - "id": "7024a28f-fb45-45ac-8fd4-af00b229fc25" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds1", - "type": "n8n-nodes-base.function", - "position": [ - 1870, - 450 - ], - "typeVersion": 1, - "id": "42756f4c-e881-4738-b350-58c1630e5975" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn [{json:{}}];" - }, - "name": "Sleep 8 Seconds2", - "type": "n8n-nodes-base.function", - "position": [ - 3860, - 240 - ], - "typeVersion": 1, - "id": "8b8ad7de-70c6-4098-bdf0-487d66827f86" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn [{json:{}}];" - }, - "name": "Sleep 8 Seconds3", - "type": "n8n-nodes-base.function", - "position": [ - 3420, - 300 - ], - "typeVersion": 1, - "id": "5398a6ef-f8ce-4e74-9f2e-6c445875f109" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn [{json:{}}];" - }, - "name": "Sleep 8 Seconds4", - "type": "n8n-nodes-base.function", - "position": [ - 2960, - 300 - ], - "typeVersion": 1, - "id": "f31b62e7-9c78-427a-b3b1-b3373cb86bb8" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn [{json:{}}];" - }, - "name": "Sleep 8 Seconds5", - "type": "n8n-nodes-base.function", - "position": [ - 2370, - 300 - ], - "typeVersion": 1, - "id": "add90777-a9c7-4c56-83b7-44b10f71bb3f" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn [{json:{}}];" - }, - "name": "Sleep 8 Seconds6", - "type": "n8n-nodes-base.function", - "position": [ - 1920, - 250 - ], - "typeVersion": 1, - "id": "3e008e1f-e966-4389-8318-91a81fb9d8a7" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn [{json:{}}];" - }, - "name": "Sleep 8 Seconds7", - "type": "n8n-nodes-base.function", - "position": [ - 1620, - 250 - ], - "typeVersion": 1, - "id": "f7461433-5a21-459c-bfbb-e57bfaae6eed" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - }, - { - "node": "Nextcloud11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Nextcloud": { - "main": [ - [ - { - "node": "Sleep 8 Seconds7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set": { - "main": [ - [ - { - "node": "Nextcloud", - "type": "main", - "index": 0 - } - ] - ] - }, - "Nextcloud1": { - "main": [ - [ - { - "node": "Sleep 8 Seconds6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Nextcloud2": { - "main": [ - [ - { - "node": "Nextcloud3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Nextcloud3": { - "main": [ - [ - { - "node": "Sleep 8 Seconds5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Nextcloud4": { - "main": [ - [] - ] - }, - "Set1": { - "main": [ - [ - { - "node": "Read Binary File", - "type": "main", - "index": 0 - } - ] - ] - }, - "Nextcloud6": { - "main": [ - [ - { - "node": "Sleep 8 Seconds4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Read Binary File": { - "main": [ - [ - { - "node": "Nextcloud6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Nextcloud7": { - "main": [ - [ - { - "node": "Nextcloud8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Nextcloud8": { - "main": [ - [ - { - "node": "Sleep 8 Seconds3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Nextcloud9": { - "main": [ - [ - { - "node": "Nextcloud10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Nextcloud10": { - "main": [ - [ - { - "node": "Sleep 8 Seconds2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Nextcloud11": { - "main": [ - [ - { - "node": "Sleep 8 Seconds", - "type": "main", - "index": 0 - } - ] - ] - }, - "Nextcloud12": { - "main": [ - [ - { - "node": "Nextcloud13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Nextcloud13": { - "main": [ - [ - { - "node": "Sleep 8 Seconds1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Nextcloud14": { - "main": [ - [ - { - "node": "Nextcloud15", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds": { - "main": [ - [ - { - "node": "Nextcloud12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds1": { - "main": [ - [ - { - "node": "Nextcloud14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds2": { - "main": [ - [ - { - "node": "Nextcloud4", - "type": "main", - "index": 0 - }, - { - "node": "Nextcloud5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds3": { - "main": [ - [ - { - "node": "Nextcloud9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds4": { - "main": [ - [ - { - "node": "Nextcloud7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds5": { - "main": [ - [ - { - "node": "Set1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds6": { - "main": [ - [ - { - "node": "Nextcloud2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds7": { - "main": [ - [ - { - "node": "Nextcloud1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/130.json b/test-workflows/workflows/130.json deleted file mode 100644 index b8a75314f2c..00000000000 --- a/test-workflows/workflows/130.json +++ /dev/null @@ -1,883 +0,0 @@ -{ - "createdAt": "2021-03-12T12:14:08.727Z", - "updatedAt": "2021-03-12T12:35:37.990Z", - "id": "130", - "name": "Wekan:Board:create get getAll delete:List:create get getAll delete:Card:create update get getAll delete:CardComment:create get getAll delete:CheckList:create get getAll delete:CheckListItem:get update delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "d1be5d3e-3071-482a-a8d0-6cd3e1784efd" - }, - { - "parameters": { - "resource": "board", - "title": "=Board{{Date.now()}}", - "owner": "E27bvzwJ5A26xfAPG", - "additionalFields": {} - }, - "name": "Wekan", - "type": "n8n-nodes-base.wekan", - "typeVersion": 1, - "position": [ - 490, - 280 - ], - "credentials": { - "wekanApi": { - "id": "97", - "name": "Wekan API creds" - } - }, - "id": "1013b4a2-232f-417c-ad61-c424a10eee2a" - }, - { - "parameters": { - "resource": "board", - "operation": "get", - "boardId": "={{$node[\"Wekan\"].json[\"_id\"]}}" - }, - "name": "Wekan1", - "type": "n8n-nodes-base.wekan", - "typeVersion": 1, - "position": [ - 650, - 280 - ], - "credentials": { - "wekanApi": { - "id": "97", - "name": "Wekan API creds" - } - }, - "id": "0bd0df50-577c-4f42-b653-a933059d5d94" - }, - { - "parameters": { - "resource": "board", - "operation": "getAll", - "IdUser": "E27bvzwJ5A26xfAPG", - "limit": 1 - }, - "name": "Wekan2", - "type": "n8n-nodes-base.wekan", - "typeVersion": 1, - "position": [ - 800, - 280 - ], - "credentials": { - "wekanApi": { - "id": "97", - "name": "Wekan API creds" - } - }, - "id": "189c8afb-3890-4755-aec7-17577b14f6e7" - }, - { - "parameters": { - "resource": "board", - "operation": "delete", - "boardId": "={{$node[\"Wekan\"].json[\"_id\"]}}" - }, - "name": "Wekan3", - "type": "n8n-nodes-base.wekan", - "typeVersion": 1, - "position": [ - 3500, - 260 - ], - "credentials": { - "wekanApi": { - "id": "97", - "name": "Wekan API creds" - } - }, - "id": "302a053a-5456-46c0-b6bf-47e3fad8d061" - }, - { - "parameters": { - "resource": "list", - "boardId": "={{$node[\"Wekan\"].json[\"_id\"]}}", - "title": "=List{{Date.now()}}" - }, - "name": "Wekan4", - "type": "n8n-nodes-base.wekan", - "typeVersion": 1, - "position": [ - 950, - 400 - ], - "credentials": { - "wekanApi": { - "id": "97", - "name": "Wekan API creds" - } - }, - "id": "901bd245-0434-43a4-9c6e-2e0d0012f25b" - }, - { - "parameters": { - "resource": "list", - "operation": "get", - "boardId": "={{$node[\"Wekan\"].json[\"_id\"]}}", - "listId": "={{$node[\"Wekan4\"].json[\"_id\"]}}" - }, - "name": "Wekan5", - "type": "n8n-nodes-base.wekan", - "typeVersion": 1, - "position": [ - 1100, - 400 - ], - "credentials": { - "wekanApi": { - "id": "97", - "name": "Wekan API creds" - } - }, - "id": "1ad2c40f-606f-468e-b304-f67ba7f09857" - }, - { - "parameters": { - "resource": "list", - "operation": "getAll", - "boardId": "={{$node[\"Wekan\"].json[\"_id\"]}}", - "limit": 1 - }, - "name": "Wekan6", - "type": "n8n-nodes-base.wekan", - "typeVersion": 1, - "position": [ - 1250, - 400 - ], - "credentials": { - "wekanApi": { - "id": "97", - "name": "Wekan API creds" - } - }, - "id": "7e0bf795-d18a-44fc-b1d0-07dc726d1b9a" - }, - { - "parameters": { - "resource": "list", - "operation": "delete", - "boardId": "={{$node[\"Wekan\"].json[\"_id\"]}}", - "listId": "={{$node[\"Wekan4\"].json[\"_id\"]}}" - }, - "name": "Wekan7", - "type": "n8n-nodes-base.wekan", - "typeVersion": 1, - "position": [ - 3350, - 400 - ], - "credentials": { - "wekanApi": { - "id": "97", - "name": "Wekan API creds" - } - }, - "id": "4dff32d6-2cfd-4cf7-a5f4-cb670c8f5283" - }, - { - "parameters": { - "boardId": "={{$node[\"Wekan\"].json[\"_id\"]}}", - "listId": "={{$node[\"Wekan4\"].json[\"_id\"]}}", - "title": "=Card{{Date.now()}}", - "swimlaneId": "CJ44cd7gPRf8qT3Xb", - "authorId": "E27bvzwJ5A26xfAPG", - "additionalFields": {} - }, - "name": "Wekan8", - "type": "n8n-nodes-base.wekan", - "typeVersion": 1, - "position": [ - 1400, - 500 - ], - "credentials": { - "wekanApi": { - "id": "97", - "name": "Wekan API creds" - } - }, - "id": "03ad5f1f-23df-431c-a98f-3fd966dcd4fa" - }, - { - "parameters": { - "operation": "update", - "boardId": "={{$node[\"Wekan\"].json[\"_id\"]}}", - "listId": "={{$node[\"Wekan4\"].json[\"_id\"]}}", - "cardId": "={{$node[\"Wekan8\"].json[\"_id\"]}}", - "updateFields": { - "title": "=UpdatedCard{{Date.now()}}" - } - }, - "name": "Wekan9", - "type": "n8n-nodes-base.wekan", - "typeVersion": 1, - "position": [ - 1550, - 500 - ], - "credentials": { - "wekanApi": { - "id": "97", - "name": "Wekan API creds" - } - }, - "id": "c0297bac-351b-4af3-ad47-1e4a3f504828" - }, - { - "parameters": { - "operation": "get", - "boardId": "={{$node[\"Wekan\"].json[\"_id\"]}}", - "listId": "={{$node[\"Wekan4\"].json[\"_id\"]}}", - "cardId": "={{$node[\"Wekan8\"].json[\"_id\"]}}" - }, - "name": "Wekan10", - "type": "n8n-nodes-base.wekan", - "typeVersion": 1, - "position": [ - 1700, - 500 - ], - "credentials": { - "wekanApi": { - "id": "97", - "name": "Wekan API creds" - } - }, - "id": "fd68635a-fbf9-4d53-a835-1dc9be3b6fa6" - }, - { - "parameters": { - "operation": "getAll", - "boardId": "={{$node[\"Wekan\"].json[\"_id\"]}}", - "fromObject": "list", - "listId": "={{$node[\"Wekan4\"].json[\"_id\"]}}", - "limit": 1 - }, - "name": "Wekan11", - "type": "n8n-nodes-base.wekan", - "typeVersion": 1, - "position": [ - 1850, - 500 - ], - "credentials": { - "wekanApi": { - "id": "97", - "name": "Wekan API creds" - } - }, - "id": "da544079-7689-423e-8990-3b886d44d040" - }, - { - "parameters": { - "operation": "delete", - "boardId": "={{$node[\"Wekan\"].json[\"_id\"]}}", - "listId": "={{$node[\"Wekan4\"].json[\"_id\"]}}", - "cardId": "={{$node[\"Wekan8\"].json[\"_id\"]}}" - }, - "name": "Wekan12", - "type": "n8n-nodes-base.wekan", - "typeVersion": 1, - "position": [ - 3220, - 500 - ], - "credentials": { - "wekanApi": { - "id": "97", - "name": "Wekan API creds" - } - }, - "id": "b33dde7e-b503-480b-9dc5-3cf6b68d3b02" - }, - { - "parameters": { - "resource": "cardComment", - "boardId": "={{$node[\"Wekan\"].json[\"_id\"]}}", - "listId": "={{$node[\"Wekan4\"].json[\"_id\"]}}", - "cardId": "={{$node[\"Wekan8\"].json[\"_id\"]}}", - "authorId": "E27bvzwJ5A26xfAPG", - "comment": "=CardComment{{Date.now()}}" - }, - "name": "Wekan13", - "type": "n8n-nodes-base.wekan", - "typeVersion": 1, - "position": [ - 2000, - 650 - ], - "credentials": { - "wekanApi": { - "id": "97", - "name": "Wekan API creds" - } - }, - "id": "56c3500d-d9d3-49db-a6cd-fe4558c901df" - }, - { - "parameters": { - "resource": "cardComment", - "operation": "get", - "boardId": "={{$node[\"Wekan\"].json[\"_id\"]}}", - "listId": "={{$node[\"Wekan4\"].json[\"_id\"]}}", - "cardId": "={{$node[\"Wekan8\"].json[\"_id\"]}}", - "commentId": "={{$node[\"Wekan13\"].json[\"_id\"]}}" - }, - "name": "Wekan14", - "type": "n8n-nodes-base.wekan", - "typeVersion": 1, - "position": [ - 2150, - 650 - ], - "credentials": { - "wekanApi": { - "id": "97", - "name": "Wekan API creds" - } - }, - "id": "995809d9-3fb6-4968-9590-c4b929e83352" - }, - { - "parameters": { - "resource": "cardComment", - "operation": "getAll", - "boardId": "={{$node[\"Wekan\"].json[\"_id\"]}}", - "listId": "={{$node[\"Wekan4\"].json[\"_id\"]}}", - "cardId": "={{$node[\"Wekan8\"].json[\"_id\"]}}", - "limit": 1 - }, - "name": "Wekan15", - "type": "n8n-nodes-base.wekan", - "typeVersion": 1, - "position": [ - 2300, - 650 - ], - "credentials": { - "wekanApi": { - "id": "97", - "name": "Wekan API creds" - } - }, - "id": "1d3d120f-17eb-4f17-9513-cf99d2bd5068" - }, - { - "parameters": { - "resource": "cardComment", - "operation": "delete", - "boardId": "={{$node[\"Wekan\"].json[\"_id\"]}}", - "listId": "={{$node[\"Wekan4\"].json[\"_id\"]}}", - "cardId": "={{$node[\"Wekan8\"].json[\"_id\"]}}", - "commentId": "={{$node[\"Wekan13\"].json[\"_id\"]}}" - }, - "name": "Wekan16", - "type": "n8n-nodes-base.wekan", - "typeVersion": 1, - "position": [ - 2450, - 650 - ], - "credentials": { - "wekanApi": { - "id": "97", - "name": "Wekan API creds" - } - }, - "id": "d0960908-6aaf-4284-a2a3-0c2bb305afd7" - }, - { - "parameters": { - "resource": "checklist", - "operation": "create", - "boardId": "={{$node[\"Wekan\"].json[\"_id\"]}}", - "listId": "={{$node[\"Wekan4\"].json[\"_id\"]}}", - "cardId": "={{$node[\"Wekan8\"].json[\"_id\"]}}", - "title": "=Checklist{{Date.now()}}", - "items": [ - "=ChecklistItem{{Date.now()}}" - ] - }, - "name": "Wekan17", - "type": "n8n-nodes-base.wekan", - "typeVersion": 1, - "position": [ - 2000, - 350 - ], - "credentials": { - "wekanApi": { - "id": "97", - "name": "Wekan API creds" - } - }, - "id": "93b5ad63-5527-49b2-8803-d91136052169" - }, - { - "parameters": { - "resource": "checklist", - "operation": "get", - "boardId": "={{$node[\"Wekan\"].json[\"_id\"]}}", - "listId": "={{$node[\"Wekan4\"].json[\"_id\"]}}", - "cardId": "={{$node[\"Wekan8\"].json[\"_id\"]}}", - "checklistId": "={{$node[\"Wekan17\"].json[\"_id\"]}}" - }, - "name": "Wekan18", - "type": "n8n-nodes-base.wekan", - "typeVersion": 1, - "position": [ - 2150, - 350 - ], - "credentials": { - "wekanApi": { - "id": "97", - "name": "Wekan API creds" - } - }, - "id": "cf310149-4468-4109-9dad-620030f49c4f" - }, - { - "parameters": { - "resource": "checklist", - "boardId": "={{$node[\"Wekan\"].json[\"_id\"]}}", - "listId": "={{$node[\"Wekan4\"].json[\"_id\"]}}", - "cardId": "={{$node[\"Wekan8\"].json[\"_id\"]}}", - "limit": 1 - }, - "name": "Wekan19", - "type": "n8n-nodes-base.wekan", - "typeVersion": 1, - "position": [ - 2300, - 350 - ], - "credentials": { - "wekanApi": { - "id": "97", - "name": "Wekan API creds" - } - }, - "id": "34c95cdf-0dd2-43d2-8635-e5cc36fcb6d8" - }, - { - "parameters": { - "resource": "checklist", - "operation": "delete", - "boardId": "={{$node[\"Wekan\"].json[\"_id\"]}}", - "listId": "={{$node[\"Wekan4\"].json[\"_id\"]}}", - "cardId": "={{$node[\"Wekan8\"].json[\"_id\"]}}", - "checklistId": "={{$node[\"Wekan17\"].json[\"_id\"]}}" - }, - "name": "Wekan20", - "type": "n8n-nodes-base.wekan", - "typeVersion": 1, - "position": [ - 2900, - 350 - ], - "credentials": { - "wekanApi": { - "id": "97", - "name": "Wekan API creds" - } - }, - "id": "e8a93285-5090-4dff-81d6-c6dea77512af" - }, - { - "parameters": { - "resource": "checklistItem", - "operation": "get", - "boardId": "={{$node[\"Wekan\"].json[\"_id\"]}}", - "listId": "={{$node[\"Wekan4\"].json[\"_id\"]}}", - "cardId": "={{$node[\"Wekan8\"].json[\"_id\"]}}", - "checklistId": "={{$node[\"Wekan17\"].json[\"_id\"]}}", - "checklistItemId": "={{$node[\"Wekan18\"].json[\"items\"][0][\"_id\"]}}" - }, - "name": "Wekan21", - "type": "n8n-nodes-base.wekan", - "typeVersion": 1, - "position": [ - 2450, - 450 - ], - "credentials": { - "wekanApi": { - "id": "97", - "name": "Wekan API creds" - } - }, - "id": "8059fe8f-a56d-4b12-9129-6bca650a56f5" - }, - { - "parameters": { - "resource": "checklistItem", - "operation": "update", - "boardId": "={{$node[\"Wekan\"].json[\"_id\"]}}", - "listId": "={{$node[\"Wekan4\"].json[\"_id\"]}}", - "cardId": "={{$node[\"Wekan8\"].json[\"_id\"]}}", - "checklistId": "={{$node[\"Wekan17\"].json[\"_id\"]}}", - "checklistItemId": "={{$node[\"Wekan18\"].json[\"items\"][0][\"_id\"]}}", - "updateFields": { - "isFinished": true - } - }, - "name": "Wekan22", - "type": "n8n-nodes-base.wekan", - "typeVersion": 1, - "position": [ - 2600, - 450 - ], - "credentials": { - "wekanApi": { - "id": "97", - "name": "Wekan API creds" - } - }, - "id": "02ca495d-50c2-4b96-b66a-287f630c95c5" - }, - { - "parameters": { - "resource": "checklistItem", - "operation": "delete", - "boardId": "={{$node[\"Wekan\"].json[\"_id\"]}}", - "listId": "={{$node[\"Wekan4\"].json[\"_id\"]}}", - "cardId": "={{$node[\"Wekan8\"].json[\"_id\"]}}", - "checklistId": "={{$node[\"Wekan17\"].json[\"_id\"]}}", - "checklistItemId": "={{$node[\"Wekan18\"].json[\"items\"][0][\"_id\"]}}" - }, - "name": "Wekan23", - "type": "n8n-nodes-base.wekan", - "typeVersion": 1, - "position": [ - 2750, - 450 - ], - "credentials": { - "wekanApi": { - "id": "97", - "name": "Wekan API creds" - } - }, - "id": "0e35867f-089c-4a95-985a-1aeafe45cd6e" - }, - { - "parameters": { - "mode": "wait" - }, - "name": "Merge", - "type": "n8n-nodes-base.merge", - "typeVersion": 1, - "position": [ - 3050, - 500 - ], - "id": "a72e478c-ae36-4775-9568-494f34ea4edc" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Wekan", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wekan": { - "main": [ - [ - { - "node": "Wekan1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wekan1": { - "main": [ - [ - { - "node": "Wekan2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wekan2": { - "main": [ - [ - { - "node": "Wekan4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wekan4": { - "main": [ - [ - { - "node": "Wekan5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wekan5": { - "main": [ - [ - { - "node": "Wekan6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wekan6": { - "main": [ - [ - { - "node": "Wekan8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wekan7": { - "main": [ - [ - { - "node": "Wekan3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wekan8": { - "main": [ - [ - { - "node": "Wekan9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wekan9": { - "main": [ - [ - { - "node": "Wekan10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wekan10": { - "main": [ - [ - { - "node": "Wekan11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wekan12": { - "main": [ - [ - { - "node": "Wekan7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wekan11": { - "main": [ - [ - { - "node": "Wekan13", - "type": "main", - "index": 0 - }, - { - "node": "Wekan17", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wekan13": { - "main": [ - [ - { - "node": "Wekan14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wekan14": { - "main": [ - [ - { - "node": "Wekan15", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wekan16": { - "main": [ - [ - { - "node": "Merge", - "type": "main", - "index": 1 - } - ] - ] - }, - "Wekan17": { - "main": [ - [ - { - "node": "Wekan18", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wekan18": { - "main": [ - [ - { - "node": "Wekan19", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wekan20": { - "main": [ - [ - { - "node": "Merge", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wekan15": { - "main": [ - [ - { - "node": "Wekan16", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wekan19": { - "main": [ - [ - { - "node": "Wekan21", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wekan21": { - "main": [ - [ - { - "node": "Wekan22", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wekan22": { - "main": [ - [ - { - "node": "Wekan23", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wekan23": { - "main": [ - [ - { - "node": "Wekan20", - "type": "main", - "index": 0 - } - ] - ] - }, - "Merge": { - "main": [ - [ - { - "node": "Wekan12", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/131.json b/test-workflows/workflows/131.json deleted file mode 100644 index fa9498f18fb..00000000000 --- a/test-workflows/workflows/131.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "createdAt": "2021-03-12T15:30:32.231Z", - "updatedAt": "2021-03-12T15:30:32.231Z", - "id": "131", - "name": "Line:Notification:send", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "b97b22de-c820-46c3-bd9a-9ccd77d9fb2f" - }, - { - "parameters": { - "message": "=Notification{{Date.now()}}", - "additionalFields": {} - }, - "name": "Line", - "type": "n8n-nodes-base.line", - "typeVersion": 1, - "position": [ - 480, - 300 - ], - "credentials": { - "lineNotifyOAuth2Api": { - "id": "99", - "name": "Line Notify OAuth2 API" - } - }, - "id": "bda3f612-99db-4f50-86ec-71f3f7e26917" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Line", - "type": "main", - "index": 0 - } - ] - ] - }, - "Line": { - "main": [ - [] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/132.json b/test-workflows/workflows/132.json deleted file mode 100644 index 4d5319b0692..00000000000 --- a/test-workflows/workflows/132.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "createdAt": "2021-03-12T15:55:16.919Z", - "updatedAt": "2021-03-12T15:55:16.919Z", - "id": "132", - "name": "Mandrill:Message:sendTemplate sendHTML", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "d6242130-9d76-4db0-8fc8-5b2cbd24b5fe" - }, - { - "parameters": { - "template": "testtemplate", - "fromEmail": "=random{{Date.now()}}@email.test", - "toEmail": "=nodeqa{{Date.now()}}@email.test", - "options": {} - }, - "name": "Mandrill", - "type": "n8n-nodes-base.mandrill", - "typeVersion": 1, - "position": [ - 500, - 250 - ], - "credentials": { - "mandrillApi": { - "id": "100", - "name": "Mandrill API creds" - } - }, - "id": "e31f6f3e-eee2-4047-90dc-acc08c80438d" - }, - { - "parameters": { - "operation": "sendHtml", - "fromEmail": "=random{{Date.now()}}@email.test", - "toEmail": "=nodeqa{{Date.now()}}@email.test", - "options": { - "html": "=

This is a the html email from n8n workflow

" - } - }, - "name": "Mandrill1", - "type": "n8n-nodes-base.mandrill", - "typeVersion": 1, - "position": [ - 500, - 400 - ], - "credentials": { - "mandrillApi": { - "id": "100", - "name": "Mandrill API creds" - } - }, - "id": "da056d97-7a2b-457d-8236-5ce62f35ab17" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Mandrill", - "type": "main", - "index": 0 - }, - { - "node": "Mandrill1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/133.json b/test-workflows/workflows/133.json deleted file mode 100644 index 45bf8e484ba..00000000000 --- a/test-workflows/workflows/133.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "createdAt": "2021-03-15T08:20:13.922Z", - "updatedAt": "2021-03-15T08:20:13.922Z", - "id": "133", - "name": "Twilio:SMS:send", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "b7004365-30c6-4792-80ca-7c9ee2eb87a4" - }, - { - "parameters": { - "from": "+15005550006", - "to": "+15005550006", - "message": "=Message{{Date.now()}}" - }, - "name": "Twilio", - "type": "n8n-nodes-base.twilio", - "typeVersion": 1, - "position": [ - 550, - 300 - ], - "credentials": { - "twilioApi": { - "id": "101", - "name": "Twilio API creds" - } - }, - "id": "6f7e0239-82e7-4b9a-85f2-39ed23ff28b8" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Twilio", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/134.json b/test-workflows/workflows/134.json deleted file mode 100644 index ebaa5560467..00000000000 --- a/test-workflows/workflows/134.json +++ /dev/null @@ -1,262 +0,0 @@ -{ - "createdAt": "2021-03-15T08:59:35.889Z", - "updatedAt": "2021-04-01T15:38:45.311Z", - "id": "134", - "name": "TravisCI:Build:trigger getAll get restart cancel", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "efbe46b1-9480-434d-b571-430942f31364" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "additionalFields": { - "order": "asc", - "sortBy": "id" - } - }, - "name": "TravisCI", - "type": "n8n-nodes-base.travisCi", - "typeVersion": 1, - "position": [ - 750, - 300 - ], - "credentials": { - "travisCiApi": { - "id": "102", - "name": "Travis API" - } - }, - "id": "d772b5ee-80af-4627-9278-034a1237da92" - }, - { - "parameters": { - "operation": "get", - "buildId": "={{$node[\"TravisCI\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "TravisCI1", - "type": "n8n-nodes-base.travisCi", - "typeVersion": 1, - "position": [ - 900, - 300 - ], - "credentials": { - "travisCiApi": { - "id": "102", - "name": "Travis API" - } - }, - "id": "df4d7fe1-85f5-4908-a609-faa41a13a9d1" - }, - { - "parameters": { - "operation": "trigger", - "slug": "nodemationqa/nodeQA", - "branch": "master", - "additionalFields": {} - }, - "name": "TravisCI2", - "type": "n8n-nodes-base.travisCi", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "travisCiApi": { - "id": "102", - "name": "Travis API" - } - }, - "id": "04e656d2-ac8b-4b4e-995b-a167be00ddd2" - }, - { - "parameters": { - "operation": "restart", - "buildId": "={{$node[\"TravisCI\"].json[\"id\"]}}" - }, - "name": "TravisCI3", - "type": "n8n-nodes-base.travisCi", - "typeVersion": 1, - "position": [ - 1200, - 300 - ], - "credentials": { - "travisCiApi": { - "id": "102", - "name": "Travis API" - } - }, - "id": "7fbaf00c-202f-4e95-9645-c8690ab5c829" - }, - { - "parameters": { - "buildId": "={{$node[\"TravisCI\"].json[\"id\"]}}" - }, - "name": "TravisCI4", - "type": "n8n-nodes-base.travisCi", - "typeVersion": 1, - "position": [ - 1500, - 300 - ], - "credentials": { - "travisCiApi": { - "id": "102", - "name": "Travis API" - } - }, - "id": "0e5565a4-d5cd-4471-aa01-740cf2f45e43" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(2000);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 2 Seconds", - "type": "n8n-nodes-base.function", - "position": [ - 600, - 300 - ], - "typeVersion": 1, - "id": "b84a023d-475e-42ac-888a-e0c43d13e10e" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(2000);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 2 Seconds1", - "type": "n8n-nodes-base.function", - "position": [ - 1050, - 300 - ], - "typeVersion": 1, - "id": "2303fc2b-2701-44b7-98ed-139094b9c457" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(2000);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 2 Seconds2", - "type": "n8n-nodes-base.function", - "position": [ - 1350, - 300 - ], - "typeVersion": 1, - "id": "3bdb67df-5473-42f6-aacb-5125ac0483b7" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "TravisCI2", - "type": "main", - "index": 0 - } - ] - ] - }, - "TravisCI": { - "main": [ - [ - { - "node": "TravisCI1", - "type": "main", - "index": 0 - } - ] - ] - }, - "TravisCI2": { - "main": [ - [ - { - "node": "Sleep 2 Seconds", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 2 Seconds": { - "main": [ - [ - { - "node": "TravisCI", - "type": "main", - "index": 0 - } - ] - ] - }, - "TravisCI1": { - "main": [ - [ - { - "node": "Sleep 2 Seconds1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 2 Seconds1": { - "main": [ - [ - { - "node": "TravisCI3", - "type": "main", - "index": 0 - } - ] - ] - }, - "TravisCI3": { - "main": [ - [ - { - "node": "Sleep 2 Seconds2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 2 Seconds2": { - "main": [ - [ - { - "node": "TravisCI4", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/135.json b/test-workflows/workflows/135.json deleted file mode 100644 index 96fb1814ccc..00000000000 --- a/test-workflows/workflows/135.json +++ /dev/null @@ -1,225 +0,0 @@ -{ - "createdAt": "2021-03-15T11:07:38.626Z", - "updatedAt": "2021-07-15T15:43:31.557Z", - "id": "135", - "name": "Cortex:Analyzer:execute:Job:report get:Responder:execute", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "746052e5-aa2d-44d8-9868-51eac17d07b2" - }, - { - "parameters": { - "analyzer": "f4abc1b633b80f45af165970793fd4fd::Abuse_Finder_3_0", - "observableType": "ip", - "observableValue": "129.178.188.205", - "tlp": 1, - "additionalFields": {} - }, - "name": "Cortex", - "type": "n8n-nodes-base.cortex", - "typeVersion": 1, - "position": [ - 490, - 300 - ], - "credentials": { - "cortexApi": { - "id": "103", - "name": "Cortex API creds" - } - }, - "id": "a020251f-8fc4-4257-8038-0092bb07209b" - }, - { - "parameters": { - "resource": "job", - "operation": "report", - "jobId": "={{$node[\"Cortex\"].json[\"_id\"]}}" - }, - "name": "Cortex1", - "type": "n8n-nodes-base.cortex", - "typeVersion": 1, - "position": [ - 640, - 300 - ], - "credentials": { - "cortexApi": { - "id": "103", - "name": "Cortex API creds" - } - }, - "id": "c32de960-141e-4fdb-8b0f-dfd08fc3b28a" - }, - { - "parameters": { - "resource": "job", - "jobId": "={{$node[\"Cortex\"].json[\"_id\"]}}" - }, - "name": "Cortex2", - "type": "n8n-nodes-base.cortex", - "typeVersion": 1, - "position": [ - 800, - 300 - ], - "credentials": { - "cortexApi": { - "id": "103", - "name": "Cortex API creds" - } - }, - "id": "c2072875-c609-4eb8-88e7-2bba3a8d0a49" - }, - { - "parameters": { - "resource": "responder", - "responder": "fbe415a38eb649eb7df174aa11a32cfe::KnowBe4_1_0", - "entityType": "case_artifact", - "parameters": { - "values": { - "dataType": "ip", - "data": "129.178.188.205", - "message": "test", - "startDate": "2021-03-23T23:00:00.000Z", - "ioc": true, - "status": "Ok" - } - } - }, - "name": "Cortex3", - "type": "n8n-nodes-base.cortex", - "typeVersion": 1, - "position": [ - 950, - 300 - ], - "credentials": { - "cortexApi": { - "id": "103", - "name": "Cortex API creds" - } - }, - "id": "47ccf815-64bd-469f-b836-6d3749cfc7cb" - }, - { - "parameters": { - "resource": "job", - "operation": "report", - "jobId": "={{$node[\"Cortex3\"].json[\"_id\"]}}" - }, - "name": "Cortex4", - "type": "n8n-nodes-base.cortex", - "typeVersion": 1, - "position": [ - 1250, - 300 - ], - "credentials": { - "cortexApi": { - "id": "103", - "name": "Cortex API creds" - } - }, - "disabled": true, - "id": "efec07a1-aa91-49e0-9c2c-3f2c222fa90f" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\nawait sleep(10000);\n// Output data\nreturn items;" - }, - "name": "Sleep 4 seconds", - "type": "n8n-nodes-base.function", - "position": [ - 1100, - 300 - ], - "typeVersion": 1, - "id": "68f7efca-c385-4642-814f-3123f7e892ee" - } - ], - "connections": { - "Cortex": { - "main": [ - [ - { - "node": "Cortex1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Cortex1": { - "main": [ - [ - { - "node": "Cortex2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Cortex2": { - "main": [ - [ - { - "node": "Cortex3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Cortex", - "type": "main", - "index": 0 - } - ] - ] - }, - "Cortex3": { - "main": [ - [ - { - "node": "Sleep 4 seconds", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 4 seconds": { - "main": [ - [ - { - "node": "Cortex4", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/136.json b/test-workflows/workflows/136.json deleted file mode 100644 index 5adee69b71c..00000000000 --- a/test-workflows/workflows/136.json +++ /dev/null @@ -1,155 +0,0 @@ -{ - "createdAt": "2021-03-15T11:39:24.637Z", - "updatedAt": "2021-03-15T11:39:24.637Z", - "id": "136", - "name": "Pushbullet:Push:create update getAll delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "c3bbbd0f-e93f-46ff-b36c-0ed72f1d207a" - }, - { - "parameters": { - "title": "=Push{{Date.now()}}", - "body": "=Body{{Date.now()}}" - }, - "name": "Pushbullet", - "type": "n8n-nodes-base.pushbullet", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "pushbulletOAuth2Api": { - "id": "104", - "name": "Pushbullet OAuth2 API creds" - } - }, - "id": "d2143ac2-b023-47b1-93ec-281bc86b446d" - }, - { - "parameters": { - "operation": "update", - "pushId": "={{$node[\"Pushbullet\"].json[\"iden\"]}}", - "dismissed": true - }, - "name": "Pushbullet1", - "type": "n8n-nodes-base.pushbullet", - "typeVersion": 1, - "position": [ - 600, - 300 - ], - "credentials": { - "pushbulletOAuth2Api": { - "id": "104", - "name": "Pushbullet OAuth2 API creds" - } - }, - "id": "bc47ad37-e9bf-4fe0-a595-7a94bc02c193" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "Pushbullet2", - "type": "n8n-nodes-base.pushbullet", - "typeVersion": 1, - "position": [ - 750, - 300 - ], - "credentials": { - "pushbulletOAuth2Api": { - "id": "104", - "name": "Pushbullet OAuth2 API creds" - } - }, - "id": "2293cc5c-1d5e-4d79-a7f4-8d48cf86beaf" - }, - { - "parameters": { - "operation": "delete", - "pushId": "={{$node[\"Pushbullet\"].json[\"iden\"]}}" - }, - "name": "Pushbullet3", - "type": "n8n-nodes-base.pushbullet", - "typeVersion": 1, - "position": [ - 900, - 300 - ], - "credentials": { - "pushbulletOAuth2Api": { - "id": "104", - "name": "Pushbullet OAuth2 API creds" - } - }, - "id": "72869e7c-e410-4115-bca9-dec16c90cb3f" - } - ], - "connections": { - "Pushbullet": { - "main": [ - [ - { - "node": "Pushbullet1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pushbullet1": { - "main": [ - [ - { - "node": "Pushbullet2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pushbullet2": { - "main": [ - [ - { - "node": "Pushbullet3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Pushbullet", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/137.json b/test-workflows/workflows/137.json deleted file mode 100644 index 91d7a6c0695..00000000000 --- a/test-workflows/workflows/137.json +++ /dev/null @@ -1,1230 +0,0 @@ -{ - "createdAt": "2021-03-16T15:47:37.279Z", - "updatedAt": "2021-05-21T09:19:02.974Z", - "id": "137", - "name": "TheHive[v3]:Alert:create update get getAll promote merge:Case:create update get getAll:Observable:create update get search getAll:Task:create update get search getAll:Log:create get getAll", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 400 - ], - "id": "ade44fe5-e6a3-407d-9a19-d236c09d053e" - }, - { - "parameters": { - "title": "=Title{{Date.now()}}", - "description": "desc", - "date": "={{(new Date()).toISOString()}}", - "tags": "test", - "type": "test", - "source": "n8n", - "sourceRef": "={{Date.now().toString()}}", - "additionalFields": {} - }, - "name": "TheHive", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "7a175f98-ba4d-4e86-8290-1961286069a3" - }, - { - "parameters": { - "operation": "update", - "id": "={{$node[\"TheHive\"].json[\"id\"]}}", - "updateFields": { - "tlp": 1 - } - }, - "name": "TheHive1", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 750, - 300 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "07153eab-082e-4c15-a3a8-0352ce78d39a" - }, - { - "parameters": { - "operation": "get", - "id": "={{$node[\"TheHive\"].json[\"id\"]}}" - }, - "name": "TheHive2", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 900, - 300 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "55e955b5-08e5-45ac-a3e9-42a2791e0e86" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "options": {}, - "filters": {} - }, - "name": "TheHive3", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1180, - 300 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "84a55d17-c067-4d5c-b199-378ef1a5e37c" - }, - { - "parameters": { - "operation": "promote", - "id": "={{$node[\"TheHive\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "TheHive4", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1330, - 300 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "0ca31228-af2d-451f-9c65-a7c8e910639d" - }, - { - "parameters": { - "operation": "merge", - "id": "={{$node[\"TheHive30\"].json[\"id\"]}}", - "caseId": "={{$node[\"TheHive29\"].json[\"id\"]}}" - }, - "name": "TheHive5", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 940, - 150 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "d11d3928-e84f-4a7b-bee0-01a6f7903741" - }, - { - "parameters": { - "resource": "case", - "operation": "create", - "title": "=Title{{Date.now()}}", - "description": "desc", - "startDate": "={{(new Date()).toISOString()}}", - "owner": "nodeqa", - "tags": "test", - "options": {} - }, - "name": "TheHive6", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 450, - 600 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "cf77cd22-62ec-461f-8685-35120833d1d8" - }, - { - "parameters": { - "resource": "case", - "operation": "update", - "id": "={{$node[\"TheHive6\"].json[\"caseId\"]}}", - "updateFields": { - "tlp": 3 - } - }, - "name": "TheHive7", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 600, - 600 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "1fceb11e-94ea-42b2-95d0-30e9357a8aa0" - }, - { - "parameters": { - "resource": "case", - "operation": "get", - "id": "={{$node[\"TheHive6\"].json[\"caseId\"]}}" - }, - "name": "TheHive8", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 910, - 600 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "52c085ae-49c1-49b9-9be5-1350d065868c" - }, - { - "parameters": { - "resource": "case", - "limit": 1, - "options": {}, - "filters": {} - }, - "name": "TheHive9", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1060, - 600 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "ecd0b218-41b2-4e43-9553-b17da8942a16" - }, - { - "parameters": { - "resource": "case", - "operation": "executeResponder", - "id": "={{$node[\"TheHive6\"].json[\"id\"]}}", - "responder": "23bc4aef9aa1c88d6624004a3d04aeae" - }, - "name": "TheHive10", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1210, - 600 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "4520dc3b-153c-4239-8e6b-814dc39a324a" - }, - { - "parameters": { - "resource": "task", - "operation": "create", - "caseId": "={{$node[\"TheHive6\"].json[\"caseId\"]}}", - "title": "=Task{{Date.now()}}", - "options": {} - }, - "name": "TheHive11", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 600, - 770 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "c0efb989-b9b1-4cf6-84f5-d30e565eb05b" - }, - { - "parameters": { - "resource": "task", - "operation": "update", - "id": "={{$node[\"TheHive11\"].json[\"id\"]}}", - "updateFields": { - "status": "InProgress" - } - }, - "name": "TheHive12", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 750, - 770 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "79a320c7-796b-4380-bbfd-af5ef73c308c" - }, - { - "parameters": { - "resource": "task", - "operation": "get", - "id": "={{$node[\"TheHive11\"].json[\"id\"]}}" - }, - "name": "TheHive13", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1050, - 770 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "7c5e1c7c-a9a2-4f67-b1d0-62ab12ea4ce9" - }, - { - "parameters": { - "resource": "task", - "operation": "search", - "limit": 1, - "options": {}, - "filters": {} - }, - "name": "TheHive14", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1370, - 770 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "a5b3618e-5c12-480c-975d-cdf58f33e121" - }, - { - "parameters": { - "resource": "log", - "operation": "create", - "taskId": "={{$node[\"TheHive11\"].json[\"id\"]}}", - "message": "=Message{{Date.now()}}", - "startDate": "={{(new Date()).toISOString()}}", - "status": "Ok", - "options": {} - }, - "name": "TheHive16", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 750, - 930 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "efeb839b-df7f-465d-9776-ad3699b8cb56" - }, - { - "parameters": { - "resource": "log", - "operation": "get", - "id": "={{$node[\"TheHive16\"].json[\"_id\"]}}" - }, - "name": "TheHive17", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1050, - 930 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "df7967a1-012c-4e20-b5e4-63fa37265bf5" - }, - { - "parameters": { - "resource": "log", - "taskId": "={{$node[\"TheHive16\"].json[\"_id\"]}}", - "limit": 1 - }, - "name": "TheHive18", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1200, - 930 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "549b23ec-1ccb-4585-b270-b2341b8b409f" - }, - { - "parameters": { - "resource": "observable", - "operation": "create", - "caseId": "={{$node[\"TheHive6\"].json[\"caseId\"]}}", - "dataType": "ip", - "data": "36.123.133.214", - "message": "test", - "startDate": "={{(new Date()).toISOString()}}", - "ioc": true, - "status": "Ok", - "options": {} - }, - "name": "TheHive19", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 600, - 450 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "86f1d7a0-f22e-46f7-b315-8aecbe4bd5dd" - }, - { - "parameters": { - "resource": "observable", - "operation": "update", - "id": "={{$node[\"TheHive19\"].json[\"_id\"]}}", - "updateFields": { - "ioc": false - } - }, - "name": "TheHive20", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 910, - 450 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "2347e027-4531-48ae-94cb-bd8dd109da0a" - }, - { - "parameters": { - "resource": "observable", - "operation": "get", - "id": "={{$node[\"TheHive19\"].json[\"_id\"]}}" - }, - "name": "TheHive21", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1060, - 450 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "e12c0ed2-ea18-4a0e-a3b1-00d2e417b025" - }, - { - "parameters": { - "resource": "observable", - "operation": "search", - "limit": 1, - "options": {}, - "filters": {} - }, - "name": "TheHive22", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1360, - 450 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "bbed23cc-38f3-4912-a6b3-bdb3e0da4932" - }, - { - "parameters": { - "resource": "observable", - "caseId": "={{$node[\"TheHive6\"].json[\"_id\"]}}", - "limit": 1, - "options": {} - }, - "name": "TheHive23", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1540, - 450 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "b8f259fc-1031-49ea-86b6-cd89fe12f939" - }, - { - "parameters": { - "operation": "executeResponder", - "id": "={{$node[\"TheHive\"].json[\"id\"]}}", - "responder": "23bc4aef9aa1c88d6624004a3d04aeae" - }, - "name": "TheHive15", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1510, - 300 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "50e0654a-f844-43d6-9b5b-eda48c2707f4" - }, - { - "parameters": { - "resource": "observable", - "operation": "executeAnalyzer", - "id": "={{$node[\"TheHive21\"].json[\"id\"]}}", - "dataType": "={{$node[\"TheHive21\"].json[\"dataType\"]}}", - "analyzers": [ - "6fdd3c9b5432f1e2094cd3b8f2347d09::cortex" - ] - }, - "name": "TheHive24", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1720, - 450 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "fe15f804-236e-4dd1-9e3c-13758a9ce53e" - }, - { - "parameters": { - "resource": "observable", - "operation": "executeResponder", - "id": "={{$node[\"TheHive21\"].json[\"id\"]}}", - "responder": "fbe415a38eb649eb7df174aa11a32cfe" - }, - "name": "TheHive25", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1880, - 450 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "9a964882-99d9-4c1e-a23b-1c45d788a9d7" - }, - { - "parameters": { - "resource": "task", - "caseId": "={{$node[\"TheHive6\"].json[\"_id\"]}}", - "limit": 1, - "options": {} - }, - "name": "TheHive26", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1520, - 770 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "67594eb3-fb0c-41c0-a972-b8f79585d9dc" - }, - { - "parameters": { - "resource": "task", - "operation": "executeResponder", - "id": "={{$node[\"TheHive11\"].json[\"id\"]}}", - "responder": "23bc4aef9aa1c88d6624004a3d04aeae" - }, - "name": "TheHive27", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1690, - 770 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "80a817e5-4922-4dea-baa6-ebb412b06178" - }, - { - "parameters": { - "resource": "log", - "operation": "executeResponder", - "id": "={{$node[\"TheHive16\"].json[\"_id\"]}}" - }, - "name": "TheHive28", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1350, - 930 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "disabled": true, - "id": "90f4e4a2-0aee-4b1e-ab19-6d3136c7db7b" - }, - { - "parameters": { - "resource": "case", - "operation": "create", - "title": "=MergingCase{{Date.now()}}", - "description": "desc", - "startDate": "={{(new Date()).toISOString()}}", - "owner": "nodeqa", - "tags": "test", - "options": {} - }, - "name": "TheHive29", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 450, - 150 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "3c2306f0-34e0-40c8-951c-64dd9482cc22" - }, - { - "parameters": { - "title": "=MergingAlert{{Date.now()}}", - "description": "desc", - "date": "={{(new Date()).toISOString()}}", - "tags": "test", - "type": "test", - "source": "n8n", - "sourceRef": "={{Date.now().toString()}}", - "additionalFields": {} - }, - "name": "TheHive30", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 790, - 150 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "66b2590c-ee6e-451f-b0b6-22200d73209f" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second", - "type": "n8n-nodes-base.function", - "position": [ - 610, - 150 - ], - "typeVersion": 1, - "id": "1a5a6ace-fef4-4fbc-b374-492dfa5ee9c9" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second1", - "type": "n8n-nodes-base.function", - "position": [ - 610, - 300 - ], - "typeVersion": 1, - "id": "1d31e404-48c8-45b1-963a-29689132bf18" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second2", - "type": "n8n-nodes-base.function", - "position": [ - 1060, - 300 - ], - "typeVersion": 1, - "id": "fd1d5353-73bb-4563-8f57-078ace5b7424" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second3", - "type": "n8n-nodes-base.function", - "position": [ - 760, - 450 - ], - "typeVersion": 1, - "id": "979b0aab-acd8-4aeb-a2d5-84516d01e436" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second4", - "type": "n8n-nodes-base.function", - "position": [ - 1210, - 450 - ], - "typeVersion": 1, - "id": "a2448c15-76d1-4611-96c1-382b8537d8e2" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second5", - "type": "n8n-nodes-base.function", - "position": [ - 750, - 600 - ], - "typeVersion": 1, - "id": "07ec5305-28c5-4f70-a4dd-81d9222131b5" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second6", - "type": "n8n-nodes-base.function", - "position": [ - 900, - 770 - ], - "typeVersion": 1, - "id": "6a220308-b57c-4a29-a103-f828564c75f5" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second7", - "type": "n8n-nodes-base.function", - "position": [ - 900, - 930 - ], - "typeVersion": 1, - "id": "3d8ce87e-fa7f-4c91-9a91-84572a4cb5b9" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second8", - "type": "n8n-nodes-base.function", - "position": [ - 1200, - 770 - ], - "typeVersion": 1, - "id": "8437d645-7789-4f5a-a2c0-217538297ead" - } - ], - "connections": { - "TheHive": { - "main": [ - [ - { - "node": "Sleep 0.5 second1", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive1": { - "main": [ - [ - { - "node": "TheHive2", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive2": { - "main": [ - [ - { - "node": "TheHive15", - "type": "main", - "index": 0 - }, - { - "node": "Sleep 0.5 second2", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive3": { - "main": [ - [ - { - "node": "TheHive4", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive6": { - "main": [ - [ - { - "node": "TheHive7", - "type": "main", - "index": 0 - }, - { - "node": "TheHive11", - "type": "main", - "index": 0 - }, - { - "node": "TheHive19", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive7": { - "main": [ - [ - { - "node": "Sleep 0.5 second5", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive8": { - "main": [ - [ - { - "node": "TheHive9", - "type": "main", - "index": 0 - }, - { - "node": "TheHive10", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive11": { - "main": [ - [ - { - "node": "TheHive12", - "type": "main", - "index": 0 - }, - { - "node": "TheHive16", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive12": { - "main": [ - [ - { - "node": "Sleep 0.5 second6", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive13": { - "main": [ - [ - { - "node": "TheHive27", - "type": "main", - "index": 0 - }, - { - "node": "Sleep 0.5 second8", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive16": { - "main": [ - [ - { - "node": "Sleep 0.5 second7", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive17": { - "main": [ - [ - { - "node": "TheHive18", - "type": "main", - "index": 0 - }, - { - "node": "TheHive28", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive19": { - "main": [ - [ - { - "node": "Sleep 0.5 second3", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive20": { - "main": [ - [ - { - "node": "TheHive21", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive21": { - "main": [ - [ - { - "node": "TheHive24", - "type": "main", - "index": 0 - }, - { - "node": "TheHive25", - "type": "main", - "index": 0 - }, - { - "node": "Sleep 0.5 second4", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive22": { - "main": [ - [ - { - "node": "TheHive23", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "TheHive6", - "type": "main", - "index": 0 - }, - { - "node": "TheHive", - "type": "main", - "index": 0 - }, - { - "node": "TheHive29", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive14": { - "main": [ - [ - { - "node": "TheHive26", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive30": { - "main": [ - [ - { - "node": "TheHive5", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive29": { - "main": [ - [ - { - "node": "Sleep 0.5 second", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second": { - "main": [ - [ - { - "node": "TheHive30", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second1": { - "main": [ - [ - { - "node": "TheHive1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second2": { - "main": [ - [ - { - "node": "TheHive3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second3": { - "main": [ - [ - { - "node": "TheHive20", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second4": { - "main": [ - [ - { - "node": "TheHive22", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second5": { - "main": [ - [ - { - "node": "TheHive8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second6": { - "main": [ - [ - { - "node": "TheHive13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second7": { - "main": [ - [ - { - "node": "TheHive17", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second8": { - "main": [ - [ - { - "node": "TheHive14", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/138.json b/test-workflows/workflows/138.json deleted file mode 100644 index 22cb7a7e4e8..00000000000 --- a/test-workflows/workflows/138.json +++ /dev/null @@ -1,1375 +0,0 @@ -{ - "createdAt": "2021-03-16T16:58:12.352Z", - "updatedAt": "2021-05-21T09:27:19.124Z", - "id": "138", - "name": "TheHive[v4]:Alert:create update get getAll promote merge:Case:create update get getAll:Observable:create update get search getAll:Task:create update get search getAll:Log:create get getAll", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "9f90439e-037b-46fd-b837-9b5c85b79e77" - }, - { - "parameters": { - "title": "=Title{{Date.now()}}", - "description": "desc", - "date": "={{(new Date()).toISOString()}}", - "tags": "test", - "type": "test", - "source": "n8n", - "sourceRef": "={{Date.now().toString()}}", - "additionalFields": {} - }, - "name": "TheHive", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 470, - 50 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "id": "aa971fff-c258-4a9b-b8ee-d02ff2f3742f" - }, - { - "parameters": { - "operation": "update", - "id": "={{$node[\"TheHive\"].json[\"id\"]}}", - "updateFields": { - "tlp": 1 - } - }, - "name": "TheHive1", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 620, - 50 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "id": "f84362fd-61df-4f44-933e-6a8f0c1190ca" - }, - { - "parameters": { - "operation": "get", - "id": "={{$node[\"TheHive\"].json[\"id\"]}}" - }, - "name": "TheHive2", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 970, - 50 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "id": "60e238b5-7826-4338-8367-9bf8a5ac1867" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "options": {}, - "filters": {} - }, - "name": "TheHive3", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1120, - 50 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "id": "4d8575f0-4d93-41bc-acb7-518e89948e3e" - }, - { - "parameters": { - "operation": "promote", - "id": "={{$node[\"TheHive\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "TheHive4", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1430, - 50 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "id": "04f0c48e-95e9-4507-b1f4-3a839118ba61" - }, - { - "parameters": { - "resource": "case", - "operation": "create", - "title": "=Title{{Date.now()}}", - "description": "desc", - "startDate": "={{(new Date()).toISOString()}}", - "owner": "nodeqa", - "tags": "test", - "options": {} - }, - "name": "TheHive6", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 470, - 350 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "id": "0b101032-87b6-4b59-9d31-b2b6622518c6" - }, - { - "parameters": { - "resource": "case", - "operation": "update", - "id": "={{$node[\"TheHive6\"].json[\"caseId\"]}}", - "updateFields": { - "tlp": 3 - } - }, - "name": "TheHive7", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 620, - 350 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "id": "7da42dc0-c2a1-438e-9e44-329dee84938e" - }, - { - "parameters": { - "resource": "case", - "operation": "get", - "id": "={{$node[\"TheHive6\"].json[\"id\"]}}" - }, - "name": "TheHive8", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 950, - 350 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "id": "07902779-ae8c-4c8d-a300-57e86244cd7d" - }, - { - "parameters": { - "resource": "case", - "limit": 1, - "options": {}, - "filters": {} - }, - "name": "TheHive9", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1100, - 350 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "id": "e45a3b35-0452-47b5-9136-521a69f1daed" - }, - { - "parameters": { - "resource": "task", - "operation": "create", - "caseId": "={{$node[\"TheHive6\"].json[\"caseId\"]}}", - "title": "=Task{{Date.now()}}", - "options": {} - }, - "name": "TheHive11", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 620, - 520 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "id": "8bd67bbf-9b6c-43fe-b88e-4575f2a4206e" - }, - { - "parameters": { - "resource": "task", - "operation": "update", - "id": "={{$node[\"TheHive11\"].json[\"id\"]}}", - "updateFields": { - "status": "InProgress" - } - }, - "name": "TheHive12", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 770, - 520 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "id": "1df94f03-a17b-47fe-8711-06e6c973c4cd" - }, - { - "parameters": { - "resource": "task", - "operation": "get", - "id": "={{$node[\"TheHive11\"].json[\"id\"]}}" - }, - "name": "TheHive13", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1080, - 520 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "id": "d766828e-f1d4-47b1-82ef-21ad8b72ac08" - }, - { - "parameters": { - "resource": "task", - "operation": "search", - "limit": 1, - "options": {}, - "filters": {} - }, - "name": "TheHive14", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1230, - 520 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "id": "ddeb0b79-5381-4151-808d-66ba52861c11" - }, - { - "parameters": { - "resource": "log", - "operation": "create", - "taskId": "={{$node[\"TheHive11\"].json[\"id\"]}}", - "message": "=Message{{Date.now()}}", - "startDate": "={{(new Date()).toISOString()}}", - "status": "Ok", - "options": {} - }, - "name": "TheHive16", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 770, - 680 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "id": "b98e4f38-08b0-4dda-949f-9a1d2f02a36e" - }, - { - "parameters": { - "resource": "log", - "operation": "get", - "id": "={{$node[\"TheHive16\"].json[\"_id\"]}}" - }, - "name": "TheHive17", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1090, - 680 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "id": "f14cd395-0d27-4342-8f42-051bdec28e09" - }, - { - "parameters": { - "resource": "log", - "taskId": "={{$node[\"TheHive16\"].json[\"_id\"]}}", - "limit": 1 - }, - "name": "TheHive18", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1240, - 680 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "id": "6f0f685c-de2f-4a5a-b221-fea2b1f9fedf" - }, - { - "parameters": { - "resource": "observable", - "operation": "create", - "caseId": "={{$node[\"TheHive6\"].json[\"caseId\"]}}", - "dataType": "ip", - "data": "36.123.133.214", - "message": "test", - "startDate": "={{(new Date()).toISOString()}}", - "ioc": true, - "status": "Ok", - "options": {} - }, - "name": "TheHive19", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 620, - 200 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "id": "93e80467-34a8-45ba-aa62-77b9b85f5091" - }, - { - "parameters": { - "resource": "observable", - "operation": "update", - "id": "={{$node[\"TheHive19\"].json[\"_id\"]}}", - "updateFields": { - "ioc": false - } - }, - "name": "TheHive20", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 940, - 200 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "id": "34ff3179-4e8b-4947-b5e2-d99a51ab3865" - }, - { - "parameters": { - "resource": "observable", - "operation": "get", - "id": "={{$node[\"TheHive19\"].json[\"_id\"]}}" - }, - "name": "TheHive21", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1090, - 200 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "id": "6292663d-fd3f-48b0-8802-fd0d9e29beb0" - }, - { - "parameters": { - "resource": "observable", - "operation": "search", - "limit": 1, - "options": {}, - "filters": {} - }, - "name": "TheHive22", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1450, - 200 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "id": "5e58213d-6a75-4304-9b10-0b1e9137d436" - }, - { - "parameters": { - "resource": "observable", - "caseId": "={{$node[\"TheHive6\"].json[\"_id\"]}}", - "limit": 1, - "options": {} - }, - "name": "TheHive23", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1600, - 200 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "id": "35a6f784-f1d4-482d-b7b1-7d1e7fe12383" - }, - { - "parameters": { - "resource": "task", - "caseId": "={{$node[\"TheHive6\"].json[\"_id\"]}}", - "limit": 1, - "options": {} - }, - "name": "TheHive26", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1520, - 520 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "id": "3af01f2d-8d05-46f6-bc4e-d299e7b36117" - }, - { - "parameters": { - "resource": "log", - "operation": "executeResponder" - }, - "name": "TheHive28", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1390, - 680 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "disabled": true, - "id": "a6c442cd-4720-45bb-bbc4-360e7aa523f7" - }, - { - "parameters": { - "operation": "count", - "filters": {} - }, - "name": "TheHive29", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1600, - 50 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "id": "129264d0-06f9-4705-8b6a-1656f3e444ac" - }, - { - "parameters": { - "resource": "observable", - "operation": "count", - "filters": {} - }, - "name": "TheHive30", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1730, - 200 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "id": "98c5ecaf-005a-4c35-ad42-42eb9b507fdf" - }, - { - "parameters": { - "resource": "case", - "operation": "count", - "filters": {} - }, - "name": "TheHive31", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1460, - 350 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "id": "fc75071b-b04c-4b46-8001-84e4be11b410" - }, - { - "parameters": { - "resource": "task", - "operation": "count", - "filters": {} - }, - "name": "TheHive32", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1650, - 520 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "id": "ab81354d-86ed-454d-8a8c-179f3bfffcac" - }, - { - "parameters": { - "operation": "merge", - "id": "={{$node[\"TheHive35\"].json[\"id\"]}}", - "caseId": "={{$node[\"TheHive34\"].json[\"id\"]}}" - }, - "name": "TheHive33", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 900, - -100 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "id": "d0348684-a348-47ad-b9bd-bb5ef60eb620" - }, - { - "parameters": { - "resource": "case", - "operation": "create", - "title": "=MergingCase{{Date.now()}}", - "description": "desc", - "startDate": "={{(new Date()).toISOString()}}", - "owner": "nodeqa", - "tags": "test", - "options": {} - }, - "name": "TheHive34", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 470, - -100 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "id": "363b6fcf-f673-485f-b50b-11a2f8274599" - }, - { - "parameters": { - "title": "=MergingAlert{{Date.now()}}", - "description": "desc", - "date": "={{(new Date()).toISOString()}}", - "tags": "test", - "type": "test", - "source": "n8n", - "sourceRef": "={{Date.now().toString()}}", - "additionalFields": {} - }, - "name": "TheHive35", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 750, - -100 - ], - "credentials": { - "theHiveApi": { - "id": "108", - "name": "The Hive API creds (v1)" - } - }, - "id": "b972bf61-8365-42f8-b1b4-bfddb2ea763c" - }, - { - "parameters": { - "operation": "executeResponder", - "id": "={{$node[\"TheHive\"].json[\"id\"]}}", - "responder": "23bc4aef9aa1c88d6624004a3d04aeae" - }, - "name": "TheHive15", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1770, - 50 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "edd53027-11e7-45df-ac58-38e84ea8e68f" - }, - { - "parameters": { - "resource": "observable", - "operation": "executeResponder", - "id": "={{$node[\"TheHive21\"].json[\"_id\"]}}", - "responder": "fbe415a38eb649eb7df174aa11a32cfe" - }, - "name": "TheHive25", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 2060, - 200 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "9cc1c6e0-7467-4143-af7a-18d0927ef266" - }, - { - "parameters": { - "resource": "observable", - "operation": "executeAnalyzer", - "id": "={{$node[\"TheHive21\"].json[\"_id\"]}}", - "dataType": "={{$node[\"TheHive21\"].json[\"dataType\"]}}", - "analyzers": [ - "6fdd3c9b5432f1e2094cd3b8f2347d09::cortex" - ] - }, - "name": "TheHive24", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1880, - 200 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "dd820c65-bf81-4ccb-9f5e-4687c69c60f9" - }, - { - "parameters": { - "resource": "case", - "operation": "executeResponder", - "id": "={{$node[\"TheHive6\"].json[\"id\"]}}", - "responder": "23bc4aef9aa1c88d6624004a3d04aeae" - }, - "name": "TheHive10", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1620, - 350 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "c28cb76f-22b4-4651-a6be-97fbed03f9a2" - }, - { - "parameters": { - "resource": "task", - "operation": "executeResponder", - "id": "={{$node[\"TheHive11\"].json[\"id\"]}}", - "responder": "23bc4aef9aa1c88d6624004a3d04aeae" - }, - "name": "TheHive27", - "type": "n8n-nodes-base.theHive", - "typeVersion": 1, - "position": [ - 1810, - 520 - ], - "credentials": { - "theHiveApi": { - "id": "107", - "name": "The Hive API creds" - } - }, - "id": "faf84c8e-59fa-4cd7-9b96-b6d41ff7fd3e" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second", - "type": "n8n-nodes-base.function", - "position": [ - 600, - -100 - ], - "typeVersion": 1, - "id": "48448770-8579-45c5-8b44-a3630182989b" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second1", - "type": "n8n-nodes-base.function", - "position": [ - 770, - 50 - ], - "typeVersion": 1, - "id": "56f919d6-ba81-41f5-80f5-f5b1f57edc6a" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second2", - "type": "n8n-nodes-base.function", - "position": [ - 780, - 200 - ], - "typeVersion": 1, - "id": "cc581b90-c49e-45dc-a74f-2058b14f54e6" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second3", - "type": "n8n-nodes-base.function", - "position": [ - 790, - 350 - ], - "typeVersion": 1, - "id": "b11a7b70-aa7a-4c94-988e-04576c28ec06" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second4", - "type": "n8n-nodes-base.function", - "position": [ - 920, - 520 - ], - "typeVersion": 1, - "id": "00e38394-b83d-4b2d-8f64-f002f3dee288" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second5", - "type": "n8n-nodes-base.function", - "position": [ - 930, - 680 - ], - "typeVersion": 1, - "id": "203e4d68-f936-4f70-88cc-162cb3754faf" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second6", - "type": "n8n-nodes-base.function", - "position": [ - 1380, - 520 - ], - "typeVersion": 1, - "id": "dc7c936c-b400-402e-af72-927ca98ac0ea" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second7", - "type": "n8n-nodes-base.function", - "position": [ - 1280, - 350 - ], - "typeVersion": 1, - "id": "733a450f-5c8b-4451-b542-afbbd1757233" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second8", - "type": "n8n-nodes-base.function", - "position": [ - 1260, - 200 - ], - "typeVersion": 1, - "id": "96ae2c59-bde3-4c79-be16-525e36e0634f" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second9", - "type": "n8n-nodes-base.function", - "position": [ - 1270, - 50 - ], - "typeVersion": 1, - "id": "53151c11-2f85-4596-920a-4770739fd32e" - } - ], - "connections": { - "TheHive": { - "main": [ - [ - { - "node": "TheHive1", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive1": { - "main": [ - [ - { - "node": "Sleep 0.5 second1", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive2": { - "main": [ - [ - { - "node": "TheHive3", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive3": { - "main": [ - [ - { - "node": "TheHive15", - "type": "main", - "index": 0 - }, - { - "node": "Sleep 0.5 second9", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive6": { - "main": [ - [ - { - "node": "TheHive7", - "type": "main", - "index": 0 - }, - { - "node": "TheHive11", - "type": "main", - "index": 0 - }, - { - "node": "TheHive19", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive7": { - "main": [ - [ - { - "node": "Sleep 0.5 second3", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive8": { - "main": [ - [ - { - "node": "TheHive9", - "type": "main", - "index": 0 - }, - { - "node": "TheHive10", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive11": { - "main": [ - [ - { - "node": "TheHive12", - "type": "main", - "index": 0 - }, - { - "node": "TheHive16", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive12": { - "main": [ - [ - { - "node": "Sleep 0.5 second4", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive13": { - "main": [ - [ - { - "node": "TheHive14", - "type": "main", - "index": 0 - }, - { - "node": "TheHive27", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive14": { - "main": [ - [ - { - "node": "Sleep 0.5 second6", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive16": { - "main": [ - [ - { - "node": "Sleep 0.5 second5", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive17": { - "main": [ - [ - { - "node": "TheHive18", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive19": { - "main": [ - [ - { - "node": "Sleep 0.5 second2", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive20": { - "main": [ - [ - { - "node": "TheHive21", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive21": { - "main": [ - [ - { - "node": "TheHive24", - "type": "main", - "index": 0 - }, - { - "node": "TheHive25", - "type": "main", - "index": 0 - }, - { - "node": "Sleep 0.5 second8", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive22": { - "main": [ - [ - { - "node": "TheHive23", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive26": { - "main": [ - [ - { - "node": "TheHive32", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "TheHive6", - "type": "main", - "index": 0 - }, - { - "node": "TheHive", - "type": "main", - "index": 0 - }, - { - "node": "TheHive34", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive4": { - "main": [ - [ - { - "node": "TheHive29", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive23": { - "main": [ - [ - { - "node": "TheHive30", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive9": { - "main": [ - [ - { - "node": "Sleep 0.5 second7", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive34": { - "main": [ - [ - { - "node": "Sleep 0.5 second", - "type": "main", - "index": 0 - } - ] - ] - }, - "TheHive35": { - "main": [ - [ - { - "node": "TheHive33", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second5": { - "main": [ - [ - { - "node": "TheHive17", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second4": { - "main": [ - [ - { - "node": "TheHive13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second3": { - "main": [ - [ - { - "node": "TheHive8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second2": { - "main": [ - [ - { - "node": "TheHive20", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second1": { - "main": [ - [ - { - "node": "TheHive2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second": { - "main": [ - [ - { - "node": "TheHive35", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second6": { - "main": [ - [ - { - "node": "TheHive26", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second7": { - "main": [ - [ - { - "node": "TheHive31", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second8": { - "main": [ - [ - { - "node": "TheHive22", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second9": { - "main": [ - [ - { - "node": "TheHive4", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/139.json b/test-workflows/workflows/139.json deleted file mode 100644 index ec72bae2155..00000000000 --- a/test-workflows/workflows/139.json +++ /dev/null @@ -1,367 +0,0 @@ -{ - "createdAt": "2021-03-19T09:20:03.334Z", - "updatedAt": "2021-03-19T09:22:57.813Z", - "id": "139", - "name": "Shopify:Product:create update get getAll delete:Order:create update get getAll delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "d841866b-3ccd-4f04-97ae-799cc649c163" - }, - { - "parameters": { - "resource": "product", - "title": "=Product{{Date.now()}}", - "additionalFields": {} - }, - "name": "Shopify", - "type": "n8n-nodes-base.shopify", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "shopifyApi": { - "id": "109", - "name": "Shopify API creds" - } - }, - "id": "84e29b73-0cc6-4793-a48b-8972fc733c16" - }, - { - "parameters": { - "resource": "product", - "operation": "update", - "productId": "={{$node[\"Shopify\"].json[\"id\"]}}", - "updateFields": { - "title": "=Updated{{$node[\"Shopify\"].json[\"title\"]}}" - } - }, - "name": "Shopify1", - "type": "n8n-nodes-base.shopify", - "typeVersion": 1, - "position": [ - 1350, - 300 - ], - "credentials": { - "shopifyApi": { - "id": "109", - "name": "Shopify API creds" - } - }, - "id": "4013bda3-f9d6-423a-a936-df538232f5e0" - }, - { - "parameters": { - "resource": "product", - "operation": "get", - "productId": "={{$node[\"Shopify\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Shopify2", - "type": "n8n-nodes-base.shopify", - "typeVersion": 1, - "position": [ - 1500, - 300 - ], - "credentials": { - "shopifyApi": { - "id": "109", - "name": "Shopify API creds" - } - }, - "id": "bbc9b837-505c-4551-9fb1-4a9da938d9f9" - }, - { - "parameters": { - "resource": "product", - "operation": "getAll", - "limit": 1, - "additionalFields": {} - }, - "name": "Shopify3", - "type": "n8n-nodes-base.shopify", - "typeVersion": 1, - "position": [ - 1650, - 300 - ], - "credentials": { - "shopifyApi": { - "id": "109", - "name": "Shopify API creds" - } - }, - "id": "e0fffb77-cbd1-47df-8f86-ef2ef89fd6c7" - }, - { - "parameters": { - "resource": "product", - "operation": "delete", - "productId": "={{$node[\"Shopify\"].json[\"id\"]}}" - }, - "name": "Shopify4", - "type": "n8n-nodes-base.shopify", - "typeVersion": 1, - "position": [ - 1800, - 300 - ], - "credentials": { - "shopifyApi": { - "id": "109", - "name": "Shopify API creds" - } - }, - "id": "61f48867-0cc6-4128-8b2b-ce4cbf60e524" - }, - { - "parameters": { - "additionalFields": { - "email": "=fake{{Date.now()}}@gmail.com", - "tags": "test,", - "test": "" - }, - "limeItemsUi": { - "lineItemValues": [ - { - "productId": "={{$node[\"Shopify\"].json[\"id\"]}}", - "title": "=Line{{Date.now()}}", - "grams": "15", - "price": "101" - } - ] - } - }, - "name": "Shopify5", - "type": "n8n-nodes-base.shopify", - "typeVersion": 1, - "position": [ - 600, - 450 - ], - "credentials": { - "shopifyApi": { - "id": "109", - "name": "Shopify API creds" - } - }, - "id": "c1a9b348-cd93-46be-88e4-ccc2a2698fdb" - }, - { - "parameters": { - "operation": "update", - "orderId": "={{$node[\"Shopify5\"].json[\"id\"]}}", - "updateFields": { - "email": "=updated{{$node[\"Shopify5\"].json[\"email\"]}}" - } - }, - "name": "Shopify6", - "type": "n8n-nodes-base.shopify", - "typeVersion": 1, - "position": [ - 750, - 450 - ], - "credentials": { - "shopifyApi": { - "id": "109", - "name": "Shopify API creds" - } - }, - "id": "e9fd5c83-7ed5-430e-b976-402027f53177" - }, - { - "parameters": { - "operation": "get", - "orderId": "={{$node[\"Shopify5\"].json[\"id\"]}}", - "options": {} - }, - "name": "Shopify7", - "type": "n8n-nodes-base.shopify", - "typeVersion": 1, - "position": [ - 900, - 450 - ], - "credentials": { - "shopifyApi": { - "id": "109", - "name": "Shopify API creds" - } - }, - "id": "9ff0060c-8878-4893-84ae-a24deba7166d" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "Shopify8", - "type": "n8n-nodes-base.shopify", - "typeVersion": 1, - "position": [ - 1050, - 450 - ], - "credentials": { - "shopifyApi": { - "id": "109", - "name": "Shopify API creds" - } - }, - "id": "5003db2b-06c5-42ca-899a-3f2e49aa0518" - }, - { - "parameters": { - "operation": "delete", - "orderId": "={{$node[\"Shopify5\"].json[\"id\"]}}" - }, - "name": "Shopify9", - "type": "n8n-nodes-base.shopify", - "typeVersion": 1, - "position": [ - 1200, - 450 - ], - "credentials": { - "shopifyApi": { - "id": "109", - "name": "Shopify API creds" - } - }, - "id": "c6677e77-ca3d-4d7f-b8e9-87d19786a845" - } - ], - "connections": { - "Shopify": { - "main": [ - [ - { - "node": "Shopify5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Shopify", - "type": "main", - "index": 0 - } - ] - ] - }, - "Shopify1": { - "main": [ - [ - { - "node": "Shopify2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Shopify2": { - "main": [ - [ - { - "node": "Shopify3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Shopify3": { - "main": [ - [ - { - "node": "Shopify4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Shopify5": { - "main": [ - [ - { - "node": "Shopify6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Shopify6": { - "main": [ - [ - { - "node": "Shopify7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Shopify7": { - "main": [ - [ - { - "node": "Shopify8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Shopify8": { - "main": [ - [ - { - "node": "Shopify9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Shopify9": { - "main": [ - [ - { - "node": "Shopify1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/140.json b/test-workflows/workflows/140.json deleted file mode 100644 index f37ee11b531..00000000000 --- a/test-workflows/workflows/140.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "createdAt": "2021-03-19T09:48:14.284Z", - "updatedAt": "2021-03-19T09:48:14.284Z", - "id": "140", - "name": "Mailgun", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "61c01ddf-4360-4d4f-8bf3-7bb5499147b3" - }, - { - "parameters": { - "fromEmail": "nodeqa@n8n.io", - "toEmail": "node8qa@gmail.com", - "subject": "=Mailgun{{Date.now()}}", - "text": "=Test text {{(new Date).toUTCString()}}" - }, - "name": "Mailgun", - "type": "n8n-nodes-base.mailgun", - "typeVersion": 1, - "position": [ - 470, - 300 - ], - "credentials": { - "mailgunApi": { - "id": "42", - "name": "Mailgun API creds" - } - }, - "id": "18d17dae-126a-44a3-9832-0bbf60320da8" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Mailgun", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/141.json b/test-workflows/workflows/141.json deleted file mode 100644 index dfa3405194f..00000000000 --- a/test-workflows/workflows/141.json +++ /dev/null @@ -1,444 +0,0 @@ -{ - "createdAt": "2021-03-19T10:44:59.685Z", - "updatedAt": "2021-05-21T10:01:36.962Z", - "id": "141", - "name": "MicrosoftExcel:Table:lookup getRows getColumns addRow:Workbook:addWorksheet getAll:Worksheet:getAll getContent", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "13273e42-d319-4d4b-8a72-4c034ed61bac" - }, - { - "parameters": { - "operation": "addWorksheet", - "workbook": "51F07A8CA9E72D69!136", - "additionalFields": { - "name": "=WorkSheet{{Date.now()}}" - } - }, - "name": "Microsoft Excel", - "type": "n8n-nodes-base.microsoftExcel", - "typeVersion": 1, - "position": [ - 500, - 300 - ], - "credentials": { - "microsoftExcelOAuth2Api": { - "id": "73", - "name": "Microsoft Excel OAuth2 creds" - } - }, - "id": "b95b3ba8-c4c8-48ff-9458-3ffdf1445f25" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "Microsoft Excel1", - "type": "n8n-nodes-base.microsoftExcel", - "typeVersion": 1, - "position": [ - 790, - 300 - ], - "credentials": { - "microsoftExcelOAuth2Api": { - "id": "73", - "name": "Microsoft Excel OAuth2 creds" - } - }, - "id": "e8bcc5f5-7348-466f-92cd-52b12f0aff5e" - }, - { - "parameters": { - "resource": "worksheet", - "operation": "getAll", - "workbook": "51F07A8CA9E72D69!136", - "limit": 1, - "filters": {} - }, - "name": "Microsoft Excel2", - "type": "n8n-nodes-base.microsoftExcel", - "typeVersion": 1, - "position": [ - 500, - 450 - ], - "alwaysOutputData": true, - "credentials": { - "microsoftExcelOAuth2Api": { - "id": "73", - "name": "Microsoft Excel OAuth2 creds" - } - }, - "id": "859d409b-f7c9-47e1-af7d-e1555c2745a9" - }, - { - "parameters": { - "resource": "worksheet", - "operation": "getContent", - "workbook": "51F07A8CA9E72D69!136", - "worksheet": "{00000000-0001-0000-0000-000000000000}", - "range": "A1:D2" - }, - "name": "Microsoft Excel3", - "type": "n8n-nodes-base.microsoftExcel", - "typeVersion": 1, - "position": [ - 790, - 450 - ], - "credentials": { - "microsoftExcelOAuth2Api": { - "id": "73", - "name": "Microsoft Excel OAuth2 creds" - } - }, - "id": "b9f51de5-c632-49bb-815a-f7fe13e8cce6" - }, - { - "parameters": { - "resource": "table", - "operation": "lookup", - "workbook": "51F07A8CA9E72D69!136", - "worksheet": "{00000000-0001-0000-0000-000000000000}", - "table": "{36FB1939-0994-4A3D-8612-14A5283A6A80}", - "lookupColumn": "t", - "lookupValue": "n", - "options": {} - }, - "name": "Microsoft Excel4", - "type": "n8n-nodes-base.microsoftExcel", - "typeVersion": 1, - "position": [ - 500, - 150 - ], - "credentials": { - "microsoftExcelOAuth2Api": { - "id": "73", - "name": "Microsoft Excel OAuth2 creds" - } - }, - "id": "fbc761ca-7add-4e72-942d-4a55366491fc" - }, - { - "parameters": { - "resource": "table", - "operation": "getRows", - "workbook": "51F07A8CA9E72D69!136", - "worksheet": "{00000000-0001-0000-0000-000000000000}", - "table": "{36FB1939-0994-4A3D-8612-14A5283A6A80}", - "limit": 1 - }, - "name": "Microsoft Excel5", - "type": "n8n-nodes-base.microsoftExcel", - "typeVersion": 1, - "position": [ - 800, - 150 - ], - "credentials": { - "microsoftExcelOAuth2Api": { - "id": "73", - "name": "Microsoft Excel OAuth2 creds" - } - }, - "id": "e0c06d78-2108-457e-955c-7abaf4b377dd" - }, - { - "parameters": { - "resource": "table", - "operation": "getColumns", - "workbook": "51F07A8CA9E72D69!136", - "worksheet": "{00000000-0001-0000-0000-000000000000}", - "table": "{36FB1939-0994-4A3D-8612-14A5283A6A80}", - "limit": 1 - }, - "name": "Microsoft Excel6", - "type": "n8n-nodes-base.microsoftExcel", - "typeVersion": 1, - "position": [ - 1100, - 150 - ], - "credentials": { - "microsoftExcelOAuth2Api": { - "id": "73", - "name": "Microsoft Excel OAuth2 creds" - } - }, - "id": "433e7bea-93de-4efc-b77b-4d039e685527" - }, - { - "parameters": { - "resource": "table", - "workbook": "51F07A8CA9E72D69!136", - "worksheet": "{00000000-0001-0000-0000-000000000000}", - "table": "{36FB1939-0994-4A3D-8612-14A5283A6A80}", - "additionalFields": {} - }, - "name": "Microsoft Excel7", - "type": "n8n-nodes-base.microsoftExcel", - "typeVersion": 1, - "position": [ - 1400, - 150 - ], - "credentials": { - "microsoftExcelOAuth2Api": { - "id": "73", - "name": "Microsoft Excel OAuth2 creds" - } - }, - "id": "5ea1e83f-a0fb-4c12-b722-63b8419fc78a" - }, - { - "parameters": { - "keepOnlySet": true, - "values": { - "string": [ - { - "name": "Column3", - "value": "={{Date.now().toString().substr(6)}}" - }, - { - "name": "Column4", - "value": "={{Date.now().toString().substr(3)}}" - } - ], - "number": [ - { - "name": "t", - "value": "={{Math.round(Math.random()*100)}}" - }, - { - "name": "e", - "value": "={{Math.round(Math.random()*100)}}" - }, - { - "name": "s", - "value": "={{Math.round(Math.random()*100)}}" - }, - { - "name": "t2", - "value": "={{Math.round(Math.random()*100)}}" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 1250, - 150 - ], - "id": "eb3f568f-c6f6-4a53-b6de-8de28f762848" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second", - "type": "n8n-nodes-base.function", - "position": [ - 650, - 450 - ], - "typeVersion": 1, - "id": "5a289dee-eba5-467f-a7b3-552d94867c0f" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second1", - "type": "n8n-nodes-base.function", - "position": [ - 650, - 300 - ], - "typeVersion": 1, - "id": "0ca0ff2b-609a-42a3-a1cf-2bbc8f127f01" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second2", - "type": "n8n-nodes-base.function", - "position": [ - 650, - 150 - ], - "typeVersion": 1, - "id": "0bb04e5a-6001-4bc1-a1dd-32b16f3f0ec0" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second3", - "type": "n8n-nodes-base.function", - "position": [ - 950, - 150 - ], - "typeVersion": 1, - "id": "9704ee84-3b4f-419c-aaa3-3e58c16b7ca9" - } - ], - "connections": { - "Microsoft Excel": { - "main": [ - [ - { - "node": "Sleep 0.8 second1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft Excel2": { - "main": [ - [ - { - "node": "Sleep 0.8 second", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Microsoft Excel", - "type": "main", - "index": 0 - }, - { - "node": "Microsoft Excel2", - "type": "main", - "index": 0 - }, - { - "node": "Microsoft Excel4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft Excel4": { - "main": [ - [ - { - "node": "Sleep 0.8 second2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft Excel5": { - "main": [ - [ - { - "node": "Sleep 0.8 second3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft Excel6": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set": { - "main": [ - [ - { - "node": "Microsoft Excel7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second": { - "main": [ - [ - { - "node": "Microsoft Excel3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second1": { - "main": [ - [ - { - "node": "Microsoft Excel1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second2": { - "main": [ - [ - { - "node": "Microsoft Excel5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second3": { - "main": [ - [ - { - "node": "Microsoft Excel6", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/142.json b/test-workflows/workflows/142.json deleted file mode 100644 index e6d7aa4c3c2..00000000000 --- a/test-workflows/workflows/142.json +++ /dev/null @@ -1,1141 +0,0 @@ -{ - "createdAt": "2021-03-19T11:16:17.356Z", - "updatedAt": "2021-05-21T10:01:38.488Z", - "id": "142", - "name": "MicrosoftOutlook:Folder:create get getAll getChildren delete:Message send getAll get getMime update delete:FolderMessage:getAll:Draft:create update get delete send:MessageAttachment:add getAll get download", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "c8853916-a370-410c-8c96-fec280e24502" - }, - { - "parameters": { - "subject": "=Subject {{Date.now()}}", - "bodyContent": "=Test {{(new Date).toUTCString()}}", - "toRecipients": "node8qa@gmail.com", - "additionalFields": {} - }, - "name": "Microsoft Outlook", - "type": "n8n-nodes-base.microsoftOutlook", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "microsoftOutlookOAuth2Api": { - "id": "72", - "name": "Microsoft Outlook OAuth2 creds" - } - }, - "id": "75eee31d-df00-4fe7-8c29-0dca953fcec5" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "additionalFields": {} - }, - "name": "Microsoft Outlook1", - "type": "n8n-nodes-base.microsoftOutlook", - "typeVersion": 1, - "position": [ - 750, - 300 - ], - "credentials": { - "microsoftOutlookOAuth2Api": { - "id": "72", - "name": "Microsoft Outlook OAuth2 creds" - } - }, - "id": "7b0b82c4-5e02-4819-a2af-748eee795377" - }, - { - "parameters": { - "operation": "get", - "messageId": "={{$node[\"Microsoft Outlook1\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Microsoft Outlook2", - "type": "n8n-nodes-base.microsoftOutlook", - "typeVersion": 1, - "position": [ - 900, - 300 - ], - "credentials": { - "microsoftOutlookOAuth2Api": { - "id": "72", - "name": "Microsoft Outlook OAuth2 creds" - } - }, - "id": "e11bc3e4-d5fc-496a-b601-939ea3edf709" - }, - { - "parameters": { - "operation": "getMime", - "messageId": "={{$node[\"Microsoft Outlook1\"].json[\"id\"]}}" - }, - "name": "Microsoft Outlook3", - "type": "n8n-nodes-base.microsoftOutlook", - "typeVersion": 1, - "position": [ - 1200, - 300 - ], - "credentials": { - "microsoftOutlookOAuth2Api": { - "id": "72", - "name": "Microsoft Outlook OAuth2 creds" - } - }, - "id": "4d18fe05-dc23-47f9-b0bf-776ea266ad94" - }, - { - "parameters": { - "operation": "update", - "messageId": "={{$node[\"Microsoft Outlook2\"].json[\"id\"]}}", - "updateFields": { - "bodyContent": "=Updated{{$node[\"Microsoft Outlook2\"].json[\"body\"][\"content\"]}}" - } - }, - "name": "Microsoft Outlook4", - "type": "n8n-nodes-base.microsoftOutlook", - "typeVersion": 1, - "position": [ - 1350, - 300 - ], - "credentials": { - "microsoftOutlookOAuth2Api": { - "id": "72", - "name": "Microsoft Outlook OAuth2 creds" - } - }, - "id": "eba271aa-7a39-45c4-b74c-79be4d600f5e" - }, - { - "parameters": { - "operation": "delete", - "messageId": "={{$node[\"Microsoft Outlook1\"].json[\"id\"]}}" - }, - "name": "Microsoft Outlook5", - "type": "n8n-nodes-base.microsoftOutlook", - "typeVersion": 1, - "position": [ - 1800, - 300 - ], - "credentials": { - "microsoftOutlookOAuth2Api": { - "id": "72", - "name": "Microsoft Outlook OAuth2 creds" - } - }, - "id": "631bf979-dfac-4acc-b038-c2efbbc4eb61" - }, - { - "parameters": { - "resource": "draft", - "subject": "=Draft{{Date.now()}}", - "bodyContent": "=draft test{{(new Date).toUTCString()}}", - "additionalFields": { - "toRecipients": " node8qa@gmail.com " - } - }, - "name": "Microsoft Outlook6", - "type": "n8n-nodes-base.microsoftOutlook", - "typeVersion": 1, - "position": [ - 450, - 500 - ], - "credentials": { - "microsoftOutlookOAuth2Api": { - "id": "72", - "name": "Microsoft Outlook OAuth2 creds" - } - }, - "id": "d52c068a-caec-4b41-8f2b-6ecb09eeff45" - }, - { - "parameters": { - "resource": "draft", - "operation": "update", - "messageId": "={{$node[\"Microsoft Outlook6\"].json[\"id\"]}}", - "updateFields": { - "bodyContent": "=Updated{{$node[\"Microsoft Outlook6\"].json[\"body\"][\"content\"]}}" - } - }, - "name": "Microsoft Outlook7", - "type": "n8n-nodes-base.microsoftOutlook", - "typeVersion": 1, - "position": [ - 600, - 500 - ], - "credentials": { - "microsoftOutlookOAuth2Api": { - "id": "72", - "name": "Microsoft Outlook OAuth2 creds" - } - }, - "id": "d9f97b7a-cd2d-476a-bc98-65c622adafae" - }, - { - "parameters": { - "resource": "draft", - "operation": "get", - "messageId": "={{$node[\"Microsoft Outlook6\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Microsoft Outlook8", - "type": "n8n-nodes-base.microsoftOutlook", - "typeVersion": 1, - "position": [ - 900, - 500 - ], - "credentials": { - "microsoftOutlookOAuth2Api": { - "id": "72", - "name": "Microsoft Outlook OAuth2 creds" - } - }, - "id": "d8668bc3-43db-4ba9-ab40-a5bd7fd0ea32" - }, - { - "parameters": { - "resource": "draft", - "operation": "delete", - "messageId": "={{$node[\"Microsoft Outlook6\"].json[\"id\"]}}" - }, - "name": "Microsoft Outlook9", - "type": "n8n-nodes-base.microsoftOutlook", - "typeVersion": 1, - "position": [ - 1050, - 500 - ], - "credentials": { - "microsoftOutlookOAuth2Api": { - "id": "72", - "name": "Microsoft Outlook OAuth2 creds" - } - }, - "id": "5c319460-5c69-4622-953a-7bcaee892d07" - }, - { - "parameters": { - "resource": "draft", - "subject": "=Draft{{Date.now()}}", - "bodyContent": "=draft test{{Date.now()}}", - "additionalFields": { - "toRecipients": " node8qa@gmail.com " - } - }, - "name": "Microsoft Outlook10", - "type": "n8n-nodes-base.microsoftOutlook", - "typeVersion": 1, - "position": [ - 1350, - 500 - ], - "credentials": { - "microsoftOutlookOAuth2Api": { - "id": "72", - "name": "Microsoft Outlook OAuth2 creds" - } - }, - "id": "4fefb565-502a-4a8d-a9a4-db2b208d7b12" - }, - { - "parameters": { - "resource": "draft", - "operation": "send", - "messageId": "={{$node[\"Microsoft Outlook10\"].json[\"id\"]}}", - "additionalFields": { - "recipients": "node8qa@gmail.com" - } - }, - "name": "Microsoft Outlook11", - "type": "n8n-nodes-base.microsoftOutlook", - "typeVersion": 1, - "position": [ - 2650, - 550 - ], - "credentials": { - "microsoftOutlookOAuth2Api": { - "id": "72", - "name": "Microsoft Outlook OAuth2 creds" - } - }, - "id": "c1d8d7e4-8d6d-4ca4-9e05-e0ad702a586d" - }, - { - "parameters": { - "operation": "delete", - "messageId": "={{$node[\"Microsoft Outlook13\"].json[\"id\"]}}" - }, - "name": "Microsoft Outlook12", - "type": "n8n-nodes-base.microsoftOutlook", - "typeVersion": 1, - "position": [ - 3100, - 550 - ], - "credentials": { - "microsoftOutlookOAuth2Api": { - "id": "72", - "name": "Microsoft Outlook OAuth2 creds" - } - }, - "id": "0e1e8c29-065e-43e2-9751-46b580640c73" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "additionalFields": {} - }, - "name": "Microsoft Outlook13", - "type": "n8n-nodes-base.microsoftOutlook", - "typeVersion": 1, - "position": [ - 2950, - 550 - ], - "credentials": { - "microsoftOutlookOAuth2Api": { - "id": "72", - "name": "Microsoft Outlook OAuth2 creds" - } - }, - "id": "c4ba0930-587d-47a4-8a4b-a3b3ba7ed3f2" - }, - { - "parameters": { - "resource": "folder", - "displayName": "=Folder{{(new Date).toUTCString()}}" - }, - "name": "Microsoft Outlook14", - "type": "n8n-nodes-base.microsoftOutlook", - "typeVersion": 1, - "position": [ - 450, - 140 - ], - "credentials": { - "microsoftOutlookOAuth2Api": { - "id": "72", - "name": "Microsoft Outlook OAuth2 creds" - } - }, - "id": "3b783dbb-0e38-4cdb-8931-a83c2e542a9e" - }, - { - "parameters": { - "resource": "folder", - "operation": "get", - "folderId": "={{$node[\"Microsoft Outlook14\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Microsoft Outlook15", - "type": "n8n-nodes-base.microsoftOutlook", - "typeVersion": 1, - "position": [ - 750, - 140 - ], - "credentials": { - "microsoftOutlookOAuth2Api": { - "id": "72", - "name": "Microsoft Outlook OAuth2 creds" - } - }, - "id": "c829334b-0ac4-4440-b3bd-537f659608f7" - }, - { - "parameters": { - "resource": "folder", - "operation": "getAll", - "limit": 1, - "additionalFields": { - "filter": "startsWith(displayName,'Folder')" - } - }, - "name": "Microsoft Outlook16", - "type": "n8n-nodes-base.microsoftOutlook", - "typeVersion": 1, - "position": [ - 900, - 140 - ], - "credentials": { - "microsoftOutlookOAuth2Api": { - "id": "72", - "name": "Microsoft Outlook OAuth2 creds" - } - }, - "id": "d446756b-e052-4869-9d2d-7d4af3c155f3" - }, - { - "parameters": { - "resource": "folder", - "operation": "getChildren", - "folderId": "={{$node[\"Microsoft Outlook14\"].json[\"id\"]}}", - "limit": 1, - "additionalFields": {} - }, - "name": "Microsoft Outlook17", - "type": "n8n-nodes-base.microsoftOutlook", - "typeVersion": 1, - "position": [ - 1200, - 140 - ], - "alwaysOutputData": true, - "credentials": { - "microsoftOutlookOAuth2Api": { - "id": "72", - "name": "Microsoft Outlook OAuth2 creds" - } - }, - "id": "8f732179-076b-4375-96ef-396c41ec4f22" - }, - { - "parameters": { - "resource": "folder", - "operation": "delete", - "folderId": "={{$node[\"Microsoft Outlook14\"].json[\"id\"]}}" - }, - "name": "Microsoft Outlook18", - "type": "n8n-nodes-base.microsoftOutlook", - "typeVersion": 1, - "position": [ - 1350, - 140 - ], - "credentials": { - "microsoftOutlookOAuth2Api": { - "id": "72", - "name": "Microsoft Outlook OAuth2 creds" - } - }, - "id": "a4b7d61c-74c1-4595-9698-6b1fa7a73842" - }, - { - "parameters": { - "resource": "folderMessage", - "operation": "getAll", - "folderId": "AQMkADAwATNiZmYAZC0zODgAZC1jYjlmLTAwAi0wMAoALgAAA7ObUbW4UV9AtQb9CKQozz8BAIHMmBimhDVHlaNbe8JltA4AAAIBCQAAAA==", - "limit": 1, - "additionalFields": {} - }, - "name": "Microsoft Outlook19", - "type": "n8n-nodes-base.microsoftOutlook", - "typeVersion": 1, - "position": [ - 1650, - 350 - ], - "credentials": { - "microsoftOutlookOAuth2Api": { - "id": "72", - "name": "Microsoft Outlook OAuth2 creds" - } - }, - "id": "891fb969-79f6-4832-a3d0-b2d938fe757a" - }, - { - "parameters": { - "resource": "messageAttachment", - "messageId": "={{$node[\"Microsoft Outlook10\"].json[\"id\"]}}", - "additionalFields": { - "fileName": "test" - } - }, - "name": "Microsoft Outlook20", - "type": "n8n-nodes-base.microsoftOutlook", - "typeVersion": 1, - "position": [ - 1750, - 650 - ], - "credentials": { - "microsoftOutlookOAuth2Api": { - "id": "72", - "name": "Microsoft Outlook OAuth2 creds" - } - }, - "id": "d7131b8a-1656-4ad0-baa0-860456471bb1" - }, - { - "parameters": { - "mode": "jsonToBinary", - "options": { - "keepSource": false - } - }, - "name": "Move Binary Data", - "type": "n8n-nodes-base.moveBinaryData", - "typeVersion": 1, - "position": [ - 1600, - 650 - ], - "id": "9f86213f-ce39-4b3e-a9e9-7327d421f7cb" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "data", - "value": "dGVzdCBmb3IgbWljcm9zb2Z0IG91dGxvb2s=" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 1450, - 650 - ], - "id": "b909a6f3-09d4-450f-be31-6c771fa96f08" - }, - { - "parameters": { - "resource": "messageAttachment", - "operation": "getAll", - "messageId": "={{$node[\"Microsoft Outlook10\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Microsoft Outlook21", - "type": "n8n-nodes-base.microsoftOutlook", - "typeVersion": 1, - "position": [ - 2050, - 650 - ], - "credentials": { - "microsoftOutlookOAuth2Api": { - "id": "72", - "name": "Microsoft Outlook OAuth2 creds" - } - }, - "id": "3b59dfb0-2204-4073-81fb-9629e95969bb" - }, - { - "parameters": { - "resource": "messageAttachment", - "operation": "get", - "messageId": "={{$node[\"Microsoft Outlook10\"].json[\"id\"]}}", - "attachmentId": "={{$node[\"Microsoft Outlook21\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Microsoft Outlook22", - "type": "n8n-nodes-base.microsoftOutlook", - "typeVersion": 1, - "position": [ - 2200, - 650 - ], - "credentials": { - "microsoftOutlookOAuth2Api": { - "id": "72", - "name": "Microsoft Outlook OAuth2 creds" - } - }, - "id": "20c4215c-8ab5-4621-872e-1799140f546d" - }, - { - "parameters": { - "resource": "messageAttachment", - "operation": "download", - "messageId": "={{$node[\"Microsoft Outlook10\"].json[\"id\"]}}", - "attachmentId": "={{$node[\"Microsoft Outlook21\"].json[\"id\"]}}" - }, - "name": "Microsoft Outlook23", - "type": "n8n-nodes-base.microsoftOutlook", - "typeVersion": 1, - "position": [ - 2490, - 650 - ], - "credentials": { - "microsoftOutlookOAuth2Api": { - "id": "72", - "name": "Microsoft Outlook OAuth2 creds" - } - }, - "id": "5118f8c3-c5e5-417e-8d38-0970f7f56414" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second", - "type": "n8n-nodes-base.function", - "position": [ - 1050, - 140 - ], - "typeVersion": 1, - "id": "94e105e3-0637-4064-8514-af332eb2827f" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second1", - "type": "n8n-nodes-base.function", - "position": [ - 610, - 140 - ], - "typeVersion": 1, - "id": "18598ace-99d1-4b66-91c7-e644a87016c5" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second2", - "type": "n8n-nodes-base.function", - "position": [ - 600, - 300 - ], - "typeVersion": 1, - "id": "ba10706c-633c-4cad-968a-f3f18e9c9920" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second3", - "type": "n8n-nodes-base.function", - "position": [ - 1050, - 300 - ], - "typeVersion": 1, - "id": "b0f039ce-0731-4f9a-ba87-bc15d53769b8" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second4", - "type": "n8n-nodes-base.function", - "position": [ - 1500, - 350 - ], - "typeVersion": 1, - "id": "418bceb9-6a77-464f-a4e1-8e1f9405e334" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second5", - "type": "n8n-nodes-base.function", - "position": [ - 2800, - 550 - ], - "typeVersion": 1, - "id": "340d3c0c-faf5-4743-8c1b-f00c6541d8ca" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second6", - "type": "n8n-nodes-base.function", - "position": [ - 2350, - 650 - ], - "typeVersion": 1, - "id": "e46a32dd-2110-4e2d-9c6e-d871edba8fe2" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second7", - "type": "n8n-nodes-base.function", - "position": [ - 1900, - 650 - ], - "typeVersion": 1, - "id": "67a411cf-4505-4c21-aa92-1936ccdb0149" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second8", - "type": "n8n-nodes-base.function", - "position": [ - 1940, - 300 - ], - "typeVersion": 1, - "id": "26cac095-afb7-41c7-85a9-44dbdf916e9f" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second9", - "type": "n8n-nodes-base.function", - "position": [ - 750, - 500 - ], - "typeVersion": 1, - "id": "e1fe7a57-75ee-4154-a288-6a4a740b7375" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second10", - "type": "n8n-nodes-base.function", - "position": [ - 1200, - 500 - ], - "typeVersion": 1, - "id": "571afdbd-30e6-45d6-9848-d9c6d71b5ba4" - } - ], - "connections": { - "Microsoft Outlook": { - "main": [ - [ - { - "node": "Sleep 0.8 second2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft Outlook1": { - "main": [ - [ - { - "node": "Microsoft Outlook2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft Outlook2": { - "main": [ - [ - { - "node": "Sleep 0.8 second3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft Outlook3": { - "main": [ - [ - { - "node": "Microsoft Outlook4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft Outlook4": { - "main": [ - [ - { - "node": "Sleep 0.8 second4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft Outlook5": { - "main": [ - [ - { - "node": "Sleep 0.8 second8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Microsoft Outlook", - "type": "main", - "index": 0 - }, - { - "node": "Microsoft Outlook14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft Outlook6": { - "main": [ - [ - { - "node": "Microsoft Outlook7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft Outlook7": { - "main": [ - [ - { - "node": "Sleep 0.8 second9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft Outlook8": { - "main": [ - [ - { - "node": "Microsoft Outlook9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft Outlook10": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft Outlook11": { - "main": [ - [ - { - "node": "Sleep 0.8 second5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft Outlook13": { - "main": [ - [ - { - "node": "Microsoft Outlook12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft Outlook9": { - "main": [ - [ - { - "node": "Sleep 0.8 second10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft Outlook14": { - "main": [ - [ - { - "node": "Sleep 0.8 second1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft Outlook15": { - "main": [ - [ - { - "node": "Microsoft Outlook16", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft Outlook16": { - "main": [ - [ - { - "node": "Sleep 0.8 second", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft Outlook17": { - "main": [ - [ - { - "node": "Microsoft Outlook18", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft Outlook19": { - "main": [ - [ - { - "node": "Microsoft Outlook5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Move Binary Data": { - "main": [ - [ - { - "node": "Microsoft Outlook20", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set": { - "main": [ - [ - { - "node": "Move Binary Data", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft Outlook20": { - "main": [ - [ - { - "node": "Sleep 0.8 second7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft Outlook21": { - "main": [ - [ - { - "node": "Microsoft Outlook22", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft Outlook22": { - "main": [ - [ - { - "node": "Sleep 0.8 second6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft Outlook23": { - "main": [ - [ - { - "node": "Microsoft Outlook11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second": { - "main": [ - [ - { - "node": "Microsoft Outlook17", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second1": { - "main": [ - [ - { - "node": "Microsoft Outlook15", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second2": { - "main": [ - [ - { - "node": "Microsoft Outlook1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second3": { - "main": [ - [ - { - "node": "Microsoft Outlook3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second4": { - "main": [ - [ - { - "node": "Microsoft Outlook19", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second5": { - "main": [ - [ - { - "node": "Microsoft Outlook13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second6": { - "main": [ - [ - { - "node": "Microsoft Outlook23", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second7": { - "main": [ - [ - { - "node": "Microsoft Outlook21", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second8": { - "main": [ - [ - { - "node": "Microsoft Outlook6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second9": { - "main": [ - [ - { - "node": "Microsoft Outlook8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second10": { - "main": [ - [ - { - "node": "Microsoft Outlook10", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/143.json b/test-workflows/workflows/143.json deleted file mode 100644 index a02b244f424..00000000000 --- a/test-workflows/workflows/143.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "createdAt": "2021-03-22T11:26:13.716Z", - "updatedAt": "2021-03-24T08:32:29.467Z", - "id": "143", - "name": "Clearbit:Company:enrich autocomplete:Person:enrich", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - -60, - 280 - ], - "id": "8033ed4d-ce87-413e-a813-6a86713e471d" - }, - { - "parameters": { - "domain": "n8n.io", - "additionalFields": { - "companyName": "n8n", - "twitter": "n8n_io" - } - }, - "name": "Clearbit", - "type": "n8n-nodes-base.clearbit", - "typeVersion": 1, - "position": [ - 150, - 200 - ], - "credentials": { - "clearbitApi": { - "id": "114", - "name": "Clearbit API creds" - } - }, - "id": "09a11c3f-55a2-4d52-8040-5c19b0656758" - }, - { - "parameters": { - "operation": "autocomplete", - "name": "n8n" - }, - "name": "Clearbit1", - "type": "n8n-nodes-base.clearbit", - "typeVersion": 1, - "position": [ - 350, - 200 - ], - "credentials": { - "clearbitApi": { - "id": "114", - "name": "Clearbit API creds" - } - }, - "id": "e71587e3-ca16-4197-b0a7-d9c33f2c82b3" - }, - { - "parameters": { - "resource": "person", - "email": "jan@n8n.io", - "additionalFields": { - "company": "n8n" - } - }, - "name": "Clearbit2", - "type": "n8n-nodes-base.clearbit", - "typeVersion": 1, - "position": [ - 150, - 350 - ], - "credentials": { - "clearbitApi": { - "id": "114", - "name": "Clearbit API creds" - } - }, - "id": "f1c59ebb-3be0-48a5-bd6b-aed005fb54ea" - } - ], - "connections": { - "Clearbit": { - "main": [ - [ - { - "node": "Clearbit1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Clearbit2", - "type": "main", - "index": 0 - }, - { - "node": "Clearbit", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/144.json b/test-workflows/workflows/144.json deleted file mode 100644 index 20293f4d28f..00000000000 --- a/test-workflows/workflows/144.json +++ /dev/null @@ -1,138 +0,0 @@ -{ - "createdAt": "2021-03-23T16:29:37.939Z", - "updatedAt": "2021-03-23T16:47:30.728Z", - "id": "144", - "name": "APITemplate.io:Account:get:Image:create:PDF:create", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "4b9021d7-c23b-4b65-be5b-8c597bfcd020" - }, - { - "parameters": { - "resource": "account" - }, - "name": "APITemplate.io", - "type": "n8n-nodes-base.apiTemplateIo", - "typeVersion": 1, - "position": [ - 450, - 150 - ], - "credentials": { - "apiTemplateIoApi": { - "id": "115", - "name": "APITemplate.io API creds" - } - }, - "id": "a66cee09-cb64-4958-a4b9-b864bca5f583" - }, - { - "parameters": { - "imageTemplateId": "43c77b2b1a93c324", - "download": true, - "overridesUi": { - "overrideValues": [ - { - "propertiesUi": { - "propertyValues": [ - { - "key": "src", - "value": "https://n8n.io/_nuxt/img/df5be1c.png" - }, - { - "key": "name", - "value": "background-image" - } - ] - } - } - ] - }, - "options": {} - }, - "name": "APITemplate.io1", - "type": "n8n-nodes-base.apiTemplateIo", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "apiTemplateIoApi": { - "id": "115", - "name": "APITemplate.io API creds" - } - }, - "id": "0ec44b99-4d88-4124-adb0-398523d1efe5" - }, - { - "parameters": { - "resource": "pdf", - "pdfTemplateId": "02777b2b1a99bac8", - "download": true, - "propertiesUi": { - "propertyValues": [ - { - "key": "name", - "value": "nodeaqa" - } - ] - }, - "options": {} - }, - "name": "APITemplate.io2", - "type": "n8n-nodes-base.apiTemplateIo", - "typeVersion": 1, - "position": [ - 450, - 450 - ], - "credentials": { - "apiTemplateIoApi": { - "id": "115", - "name": "APITemplate.io API creds" - } - }, - "id": "7a6502cc-3287-4732-b140-6b66e86987d7" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "APITemplate.io", - "type": "main", - "index": 0 - }, - { - "node": "APITemplate.io1", - "type": "main", - "index": 0 - }, - { - "node": "APITemplate.io2", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/145.json b/test-workflows/workflows/145.json deleted file mode 100644 index f522ba859b4..00000000000 --- a/test-workflows/workflows/145.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "createdAt": "2021-03-23T16:57:55.466Z", - "updatedAt": "2021-03-23T16:57:55.466Z", - "id": "145", - "name": "Peekalink:isAvailable preview", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "81f5cd1e-3133-46d5-a1e2-70790d6d338a" - }, - { - "parameters": { - "operation": "isAvailable", - "url": "https://example.com/" - }, - "name": "Peekalink", - "type": "n8n-nodes-base.peekalink", - "typeVersion": 1, - "position": [ - 550, - 250 - ], - "credentials": { - "peekalinkApi": { - "id": "116", - "name": "Peekalink API" - } - }, - "id": "a8686c14-d503-4e1f-a693-e08cf71ac65e" - }, - { - "parameters": { - "url": "https://example.com/" - }, - "name": "Peekalink1", - "type": "n8n-nodes-base.peekalink", - "typeVersion": 1, - "position": [ - 550, - 400 - ], - "credentials": { - "peekalinkApi": { - "id": "116", - "name": "Peekalink API" - } - }, - "id": "dfffa4d9-913a-4a08-89de-a1e8f6b010d4" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Peekalink1", - "type": "main", - "index": 0 - }, - { - "node": "Peekalink", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/146.json b/test-workflows/workflows/146.json deleted file mode 100644 index f865a382082..00000000000 --- a/test-workflows/workflows/146.json +++ /dev/null @@ -1,232 +0,0 @@ -{ - "createdAt": "2021-03-23T19:24:34.036Z", - "updatedAt": "2021-03-23T19:24:34.036Z", - "id": "146", - "name": "TimescaleDB:insert update executeQuery", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "22efcecd-6cad-42b4-9571-123444740429" - }, - { - "parameters": { - "table": "conditions", - "columns": "temperature,location,time" - }, - "name": "TimescaleDB", - "type": "n8n-nodes-base.timescaleDb", - "typeVersion": 1, - "position": [ - 550, - 300 - ], - "credentials": { - "timescaleDb": { - "id": "117", - "name": "TimescaleDB creds" - } - }, - "id": "e1b1c99c-bf00-4203-b879-bce0feda1963" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "location", - "value": "n8n" - }, - { - "name": "time", - "value": "={{(new Date()).toISOString()}}" - } - ], - "number": [ - { - "name": "temperature", - "value": "={{Math.random()*100}}" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 400, - 300 - ], - "id": "834fa03b-7027-435b-acb0-21ca690a6252" - }, - { - "parameters": { - "operation": "update", - "table": "conditions", - "updateKey": "temperature", - "columns": "location" - }, - "name": "TimescaleDB1", - "type": "n8n-nodes-base.timescaleDb", - "typeVersion": 1, - "position": [ - 1000, - 300 - ], - "credentials": { - "timescaleDb": { - "id": "117", - "name": "TimescaleDB creds" - } - }, - "id": "1fae6a3d-91b5-4c4d-8204-270856d7d6de" - }, - { - "parameters": { - "operation": "executeQuery", - "query": "=SELECT *\nFROM conditions\nWHERE time='{{$node[\"Set\"].json[\"time\"]}}'" - }, - "name": "TimescaleDB2", - "type": "n8n-nodes-base.timescaleDb", - "typeVersion": 1, - "position": [ - 700, - 300 - ], - "notesInFlow": true, - "credentials": { - "timescaleDb": { - "id": "117", - "name": "TimescaleDB creds" - } - }, - "notes": "Select row using query", - "id": "6e296996-47ee-446a-8784-731d7ecfc9e7" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "location", - "value": "updatedn8n" - } - ], - "number": [] - }, - "options": {} - }, - "name": "Set1", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 850, - 300 - ], - "id": "344e4ad6-aba8-4792-b846-508e61592a38" - }, - { - "parameters": { - "operation": "executeQuery", - "query": "DELETE FROM conditions;" - }, - "name": "TimescaleDB3", - "type": "n8n-nodes-base.timescaleDb", - "typeVersion": 1, - "position": [ - 1150, - 300 - ], - "credentials": { - "timescaleDb": { - "id": "117", - "name": "TimescaleDB creds" - } - }, - "id": "516e1804-3f18-4897-86e7-cf924f92b5aa" - } - ], - "connections": { - "TimescaleDB": { - "main": [ - [ - { - "node": "TimescaleDB2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set": { - "main": [ - [ - { - "node": "TimescaleDB", - "type": "main", - "index": 0 - } - ] - ] - }, - "TimescaleDB2": { - "main": [ - [ - { - "node": "Set1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set1": { - "main": [ - [ - { - "node": "TimescaleDB1", - "type": "main", - "index": 0 - } - ] - ] - }, - "TimescaleDB1": { - "main": [ - [ - { - "node": "TimescaleDB3", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/147.json b/test-workflows/workflows/147.json deleted file mode 100644 index 1f607bdf13d..00000000000 --- a/test-workflows/workflows/147.json +++ /dev/null @@ -1,447 +0,0 @@ -{ - "createdAt": "2021-03-24T08:48:20.306Z", - "updatedAt": "2021-03-24T08:55:26.613Z", - "id": "147", - "name": "Raindrop:User:get:Collection:create get update getAll delete:Bookmark:create get update getAll delete:Tag:getAll delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "953c7b03-6474-482f-84d8-1f38d7183bd3" - }, - { - "parameters": { - "resource": "user" - }, - "name": "Raindrop", - "type": "n8n-nodes-base.raindrop", - "typeVersion": 1, - "position": [ - 460, - 230 - ], - "credentials": { - "raindropOAuth2Api": { - "id": "118", - "name": "Raindrop OAuth2 API creds" - } - }, - "id": "c299bc92-d175-4684-9c2e-e7d6b730d94c" - }, - { - "parameters": { - "operation": "create", - "title": "=Collection{{Date.now()}}", - "additionalFields": { - "public": false - } - }, - "name": "Raindrop1", - "type": "n8n-nodes-base.raindrop", - "typeVersion": 1, - "position": [ - 460, - 380 - ], - "credentials": { - "raindropOAuth2Api": { - "id": "118", - "name": "Raindrop OAuth2 API creds" - } - }, - "id": "30ba40e6-5e26-4937-ae66-5a5257529c11" - }, - { - "parameters": { - "collectionId": "={{$node[\"Raindrop1\"].json[\"_id\"]}}" - }, - "name": "Raindrop2", - "type": "n8n-nodes-base.raindrop", - "typeVersion": 1, - "position": [ - 600, - 380 - ], - "credentials": { - "raindropOAuth2Api": { - "id": "118", - "name": "Raindrop OAuth2 API creds" - } - }, - "id": "7dad07a5-e3d6-450d-89bb-c769e31352ad" - }, - { - "parameters": { - "operation": "update", - "collectionId": "={{$node[\"Raindrop1\"].json[\"_id\"]}}", - "updateFields": { - "title": "=Updated{{$node[\"Raindrop1\"].json[\"title\"]}}" - } - }, - "name": "Raindrop3", - "type": "n8n-nodes-base.raindrop", - "typeVersion": 1, - "position": [ - 750, - 380 - ], - "credentials": { - "raindropOAuth2Api": { - "id": "118", - "name": "Raindrop OAuth2 API creds" - } - }, - "id": "cc020621-137d-42b4-9d89-80efcc6a2b84" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1 - }, - "name": "Raindrop4", - "type": "n8n-nodes-base.raindrop", - "typeVersion": 1, - "position": [ - 900, - 380 - ], - "credentials": { - "raindropOAuth2Api": { - "id": "118", - "name": "Raindrop OAuth2 API creds" - } - }, - "id": "142119f2-857c-4f0c-b64b-869fc06c7b95" - }, - { - "parameters": { - "operation": "delete", - "collectionId": "={{$node[\"Raindrop1\"].json[\"_id\"]}}" - }, - "name": "Raindrop5", - "type": "n8n-nodes-base.raindrop", - "typeVersion": 1, - "position": [ - 2100, - 370 - ], - "credentials": { - "raindropOAuth2Api": { - "id": "118", - "name": "Raindrop OAuth2 API creds" - } - }, - "id": "bea41e9d-700f-42a2-99b7-53ff087665b8" - }, - { - "parameters": { - "resource": "bookmark", - "operation": "create", - "collectionId": "={{$node[\"Raindrop1\"].json[\"_id\"]}}", - "link": "https://n8n.io/", - "additionalFields": { - "tags": "n8n,automation,worfklow,test", - "title": "=Bookmark{{Date.now()}}" - } - }, - "name": "Raindrop6", - "type": "n8n-nodes-base.raindrop", - "typeVersion": 1, - "position": [ - 1050, - 500 - ], - "credentials": { - "raindropOAuth2Api": { - "id": "118", - "name": "Raindrop OAuth2 API creds" - } - }, - "id": "c8a5347b-d739-4cf1-be7c-1a6039837561" - }, - { - "parameters": { - "resource": "bookmark", - "bookmarkId": "={{$node[\"Raindrop6\"].json[\"_id\"]}}" - }, - "name": "Raindrop7", - "type": "n8n-nodes-base.raindrop", - "typeVersion": 1, - "position": [ - 1200, - 500 - ], - "credentials": { - "raindropOAuth2Api": { - "id": "118", - "name": "Raindrop OAuth2 API creds" - } - }, - "id": "f37f269e-85b5-4159-85a5-34bd8401a8b4" - }, - { - "parameters": { - "resource": "bookmark", - "operation": "update", - "bookmarkId": "={{$node[\"Raindrop6\"].json[\"_id\"]}}", - "updateFields": { - "title": "=Updated{{$node[\"Raindrop6\"].json[\"title\"]}}" - } - }, - "name": "Raindrop8", - "type": "n8n-nodes-base.raindrop", - "typeVersion": 1, - "position": [ - 1350, - 500 - ], - "credentials": { - "raindropOAuth2Api": { - "id": "118", - "name": "Raindrop OAuth2 API creds" - } - }, - "id": "d715febb-1ab1-41d3-8a19-93da561c50bb" - }, - { - "parameters": { - "resource": "bookmark", - "operation": "getAll", - "collectionId": "={{$node[\"Raindrop1\"].json[\"_id\"]}}", - "limit": 1 - }, - "name": "Raindrop9", - "type": "n8n-nodes-base.raindrop", - "typeVersion": 1, - "position": [ - 1500, - 500 - ], - "credentials": { - "raindropOAuth2Api": { - "id": "118", - "name": "Raindrop OAuth2 API creds" - } - }, - "id": "847a3d9e-862b-406e-a34f-547af4ac0daa" - }, - { - "parameters": { - "resource": "bookmark", - "operation": "delete", - "bookmarkId": "={{$node[\"Raindrop6\"].json[\"_id\"]}}" - }, - "name": "Raindrop10", - "type": "n8n-nodes-base.raindrop", - "typeVersion": 1, - "position": [ - 1950, - 500 - ], - "credentials": { - "raindropOAuth2Api": { - "id": "118", - "name": "Raindrop OAuth2 API creds" - } - }, - "id": "6e9390e2-9249-481e-8345-c6f039a267b9" - }, - { - "parameters": { - "resource": "tag", - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "Raindrop11", - "type": "n8n-nodes-base.raindrop", - "typeVersion": 1, - "position": [ - 1650, - 650 - ], - "credentials": { - "raindropOAuth2Api": { - "id": "118", - "name": "Raindrop OAuth2 API creds" - } - }, - "id": "e6c67559-328b-4442-b3e8-167a3c58116a" - }, - { - "parameters": { - "resource": "tag", - "operation": "delete", - "tags": "test", - "additionalFields": {} - }, - "name": "Raindrop12", - "type": "n8n-nodes-base.raindrop", - "typeVersion": 1, - "position": [ - 1800, - 650 - ], - "credentials": { - "raindropOAuth2Api": { - "id": "118", - "name": "Raindrop OAuth2 API creds" - } - }, - "id": "4db832b9-cbce-4e45-b404-fe5f7d0e7924" - } - ], - "connections": { - "Raindrop1": { - "main": [ - [ - { - "node": "Raindrop2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Raindrop2": { - "main": [ - [ - { - "node": "Raindrop3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Raindrop3": { - "main": [ - [ - { - "node": "Raindrop4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Raindrop4": { - "main": [ - [ - { - "node": "Raindrop6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Raindrop6": { - "main": [ - [ - { - "node": "Raindrop7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Raindrop7": { - "main": [ - [ - { - "node": "Raindrop8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Raindrop8": { - "main": [ - [ - { - "node": "Raindrop9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Raindrop9": { - "main": [ - [ - { - "node": "Raindrop11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Raindrop11": { - "main": [ - [ - { - "node": "Raindrop12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Raindrop12": { - "main": [ - [ - { - "node": "Raindrop10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Raindrop10": { - "main": [ - [ - { - "node": "Raindrop5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Raindrop", - "type": "main", - "index": 0 - }, - { - "node": "Raindrop1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/148.json b/test-workflows/workflows/148.json deleted file mode 100644 index 740527f3863..00000000000 --- a/test-workflows/workflows/148.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "createdAt": "2021-03-24T09:07:34.933Z", - "updatedAt": "2021-07-29T14:07:02.141Z", - "id": "148", - "name": "Deepl:Language:translate", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "e3254a53-50f2-42df-925a-f7f4ac8d0a50" - }, - { - "parameters": { - "text": "n8n (pronounced n-eight-n) helps you to interconnect every app with an API in the world with each other to share and manipulate its data without a single line of code. It is an easy to use, user-friendly and highly customizable service.", - "translateTo": "DE", - "additionalFields": { - "splitSentences": "1", - "preserveFormatting": "0", - "formality": "default" - } - }, - "name": "DeepL", - "type": "n8n-nodes-base.deepL", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "deepLApi": { - "id": "183", - "name": "Deepl Free API creds" - } - }, - "id": "e8c6fe13-54b6-476f-a5c5-d6699874fc9e" - }, - { - "parameters": { - "functionCode": "testData ='n8n (ausgesprochen n-eight-n) hilft Ihnen, jede App mit einer API auf der Welt miteinander zu verbinden, um ihre Daten ohne eine einzige Zeile Code zu teilen und zu manipulieren. Es ist ein einfach zu bedienender, benutzerfreundlicher und hochgradig anpassbarer Dienst.'\nif(items[0].json['text'] !== testData){\n throw new Error('Problem in DeepL node')\n}\nreturn items;" - }, - "name": "Function", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "id": "2672ca93-3052-4bc7-9145-f0f25405378d" - } - ], - "connections": { - "DeepL": { - "main": [ - [ - { - "node": "Function", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "DeepL", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/149.json b/test-workflows/workflows/149.json deleted file mode 100644 index 0956dc21000..00000000000 --- a/test-workflows/workflows/149.json +++ /dev/null @@ -1,664 +0,0 @@ -{ - "createdAt": "2021-03-24T10:13:37.863Z", - "updatedAt": "2021-07-29T16:13:27.056Z", - "id": "149", - "name": "Reddit:User:get:Subreddit:get getAll:Profile:get:Post:create get getAll search delete:PostComment:create getAll reply delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "0591985b-5e87-405c-9836-f3445e04edf6" - }, - { - "parameters": { - "resource": "user", - "username": "nodeqa" - }, - "name": "Reddit", - "type": "n8n-nodes-base.reddit", - "typeVersion": 1, - "position": [ - 450, - 150 - ], - "id": "56e5318b-d8b6-4e9b-a847-29871a1671a1" - }, - { - "parameters": { - "resource": "user", - "username": "nodeqa", - "details": "comments", - "limit": 1 - }, - "name": "Reddit1", - "type": "n8n-nodes-base.reddit", - "typeVersion": 1, - "position": [ - 600, - 150 - ], - "alwaysOutputData": true, - "id": "31923945-dd5e-4fc2-8f6d-2aa45e32b06b" - }, - { - "parameters": { - "resource": "user", - "username": "nodeqa", - "details": "gilded", - "limit": 1 - }, - "name": "Reddit2", - "type": "n8n-nodes-base.reddit", - "typeVersion": 1, - "position": [ - 750, - 150 - ], - "alwaysOutputData": true, - "id": "a7954654-dc0e-44eb-9ff3-f9b5a8f2b1a0" - }, - { - "parameters": { - "resource": "user", - "username": "nodeqa", - "details": "overview", - "limit": 1 - }, - "name": "Reddit3", - "type": "n8n-nodes-base.reddit", - "typeVersion": 1, - "position": [ - 900, - 150 - ], - "alwaysOutputData": true, - "id": "175fcb7c-a5ee-4900-aeee-4a4bfe2ad1be" - }, - { - "parameters": { - "resource": "user", - "username": "nodeqa", - "details": "submitted", - "limit": 1 - }, - "name": "Reddit4", - "type": "n8n-nodes-base.reddit", - "typeVersion": 1, - "position": [ - 1050, - 150 - ], - "alwaysOutputData": true, - "id": "6d3148bb-7c31-435c-aad2-06272d3a8197" - }, - { - "parameters": { - "resource": "subreddit", - "subreddit": "nocode" - }, - "name": "Reddit5", - "type": "n8n-nodes-base.reddit", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "alwaysOutputData": true, - "id": "33965804-57f3-4f25-afb8-68715fa81354" - }, - { - "parameters": { - "resource": "subreddit", - "operation": "getAll", - "limit": 1, - "filters": { - "trending": false - } - }, - "name": "Reddit6", - "type": "n8n-nodes-base.reddit", - "typeVersion": 1, - "position": [ - 600, - 300 - ], - "alwaysOutputData": true, - "id": "f918e479-b30a-4fa0-8830-89dd7edf5004" - }, - { - "parameters": { - "resource": "profile" - }, - "name": "Reddit7", - "type": "n8n-nodes-base.reddit", - "typeVersion": 1, - "position": [ - 450, - 450 - ], - "alwaysOutputData": true, - "credentials": { - "redditOAuth2Api": { - "id": "120", - "name": "Reddit OAuth2 API creds" - } - }, - "notes": "IGNORED_PROPERTIES=cookie_consent_banner", - "id": "5747c453-08f3-4777-8cee-36315d2dfdc0" - }, - { - "parameters": { - "resource": "profile", - "details": "prefs" - }, - "name": "Reddit8", - "type": "n8n-nodes-base.reddit", - "typeVersion": 1, - "position": [ - 600, - 450 - ], - "alwaysOutputData": true, - "credentials": { - "redditOAuth2Api": { - "id": "120", - "name": "Reddit OAuth2 API creds" - } - }, - "id": "7301f84d-f865-4ce6-b754-26c6688927dc" - }, - { - "parameters": { - "resource": "profile", - "details": "trophies" - }, - "name": "Reddit9", - "type": "n8n-nodes-base.reddit", - "typeVersion": 1, - "position": [ - 750, - 450 - ], - "alwaysOutputData": true, - "credentials": { - "redditOAuth2Api": { - "id": "120", - "name": "Reddit OAuth2 API creds" - } - }, - "id": "6e6261e9-4b73-4cfd-9c43-06e3419204e1" - }, - { - "parameters": { - "subreddit": "test", - "title": "=Title{{Date.now()}}", - "text": "=Test post {{Date.now()}}" - }, - "name": "Reddit10", - "type": "n8n-nodes-base.reddit", - "typeVersion": 1, - "position": [ - 450, - 600 - ], - "alwaysOutputData": true, - "credentials": { - "redditOAuth2Api": { - "id": "120", - "name": "Reddit OAuth2 API creds" - } - }, - "id": "008c54e0-80a0-478d-a71e-3d84ede2952e" - }, - { - "parameters": { - "operation": "get", - "subreddit": "test", - "postId": "={{$node[\"Reddit10\"].json[\"id\"]}}" - }, - "name": "Reddit11", - "type": "n8n-nodes-base.reddit", - "typeVersion": 1, - "position": [ - 600, - 600 - ], - "alwaysOutputData": true, - "credentials": { - "redditOAuth2Api": { - "id": "120", - "name": "Reddit OAuth2 API creds" - } - }, - "id": "57990704-189f-4f6a-8fc5-6bb9c6593f05" - }, - { - "parameters": { - "operation": "getAll", - "subreddit": "test", - "limit": 1, - "filters": { - "category": "new" - } - }, - "name": "Reddit12", - "type": "n8n-nodes-base.reddit", - "typeVersion": 1, - "position": [ - 750, - 600 - ], - "alwaysOutputData": true, - "credentials": { - "redditOAuth2Api": { - "id": "120", - "name": "Reddit OAuth2 API creds" - } - }, - "id": "bbb708d3-a7b5-42fe-bc28-e617f0a95dff" - }, - { - "parameters": { - "operation": "search", - "subreddit": "test", - "keyword": "post", - "limit": 1, - "additionalFields": { - "sort": "new" - } - }, - "name": "Reddit13", - "type": "n8n-nodes-base.reddit", - "typeVersion": 1, - "position": [ - 900, - 600 - ], - "alwaysOutputData": true, - "credentials": { - "redditOAuth2Api": { - "id": "120", - "name": "Reddit OAuth2 API creds" - } - }, - "notes": "IGNORED_PROPERTIES=post_hint,preview,url_overridden_by_dest,is_gallery,gallery_data,media_metadata", - "id": "2201c9ff-a721-4b00-a17f-d285bd9daee7" - }, - { - "parameters": { - "operation": "delete", - "postId": "={{$node[\"Reddit10\"].json[\"id\"]}}" - }, - "name": "Reddit14", - "type": "n8n-nodes-base.reddit", - "typeVersion": 1, - "position": [ - 1960, - 600 - ], - "alwaysOutputData": true, - "credentials": { - "redditOAuth2Api": { - "id": "120", - "name": "Reddit OAuth2 API creds" - } - }, - "id": "6653bae4-be12-47a1-b515-a88ca01a0f03" - }, - { - "parameters": { - "resource": "postComment", - "postId": "={{$node[\"Reddit10\"].json[\"id\"]}}", - "commentText": "=Comment{{Date.now()}}" - }, - "name": "Reddit15", - "type": "n8n-nodes-base.reddit", - "typeVersion": 1, - "position": [ - 1050, - 750 - ], - "alwaysOutputData": true, - "credentials": { - "redditOAuth2Api": { - "id": "120", - "name": "Reddit OAuth2 API creds" - } - }, - "id": "d11b902b-9839-436b-b370-e90d61b9ed80" - }, - { - "parameters": { - "resource": "postComment", - "operation": "getAll", - "subreddit": "test", - "postId": "={{$node[\"Reddit10\"].json[\"id\"]}}", - "limit": 1 - }, - "name": "Reddit16", - "type": "n8n-nodes-base.reddit", - "typeVersion": 1, - "position": [ - 1360, - 750 - ], - "alwaysOutputData": true, - "credentials": { - "redditOAuth2Api": { - "id": "120", - "name": "Reddit OAuth2 API creds" - } - }, - "id": "a90dfeb6-1940-41eb-8083-eb9e7003bf10" - }, - { - "parameters": { - "resource": "postComment", - "operation": "reply", - "commentId": "={{$node[\"Reddit15\"].json[\"id\"]}}", - "replyText": "=ReplyComment{{Date.now()}}" - }, - "name": "Reddit17", - "type": "n8n-nodes-base.reddit", - "typeVersion": 1, - "position": [ - 1510, - 750 - ], - "alwaysOutputData": true, - "credentials": { - "redditOAuth2Api": { - "id": "120", - "name": "Reddit OAuth2 API creds" - } - }, - "id": "c80efe81-fc7d-4523-ba4c-11e0e22e064a" - }, - { - "parameters": { - "resource": "postComment", - "operation": "delete", - "commentId": "={{$node[\"Reddit15\"].json[\"id\"]}}" - }, - "name": "Reddit18", - "type": "n8n-nodes-base.reddit", - "typeVersion": 1, - "position": [ - 1660, - 750 - ], - "alwaysOutputData": true, - "credentials": { - "redditOAuth2Api": { - "id": "120", - "name": "Reddit OAuth2 API creds" - } - }, - "id": "ad24a5e6-0d22-441e-a7f9-d74dcf49ecd4" - }, - { - "parameters": { - "resource": "postComment", - "operation": "delete", - "commentId": "={{$node[\"Reddit17\"].json[\"id\"]}}" - }, - "name": "Reddit19", - "type": "n8n-nodes-base.reddit", - "typeVersion": 1, - "position": [ - 1810, - 750 - ], - "alwaysOutputData": true, - "credentials": { - "redditOAuth2Api": { - "id": "120", - "name": "Reddit OAuth2 API creds" - } - }, - "id": "a9ec2a18-187e-47ee-a5ce-73bbd02576f2" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(10000);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 10 seconds", - "type": "n8n-nodes-base.function", - "position": [ - 1200, - 750 - ], - "typeVersion": 1, - "id": "858b86f3-9efd-45b0-88e7-c2b25d560159" - } - ], - "connections": { - "Reddit": { - "main": [ - [ - { - "node": "Reddit1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Reddit1": { - "main": [ - [ - { - "node": "Reddit2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Reddit2": { - "main": [ - [ - { - "node": "Reddit3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Reddit3": { - "main": [ - [ - { - "node": "Reddit4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Reddit5": { - "main": [ - [ - { - "node": "Reddit6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Reddit7": { - "main": [ - [ - { - "node": "Reddit8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Reddit8": { - "main": [ - [ - { - "node": "Reddit9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Reddit10": { - "main": [ - [ - { - "node": "Reddit11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Reddit11": { - "main": [ - [ - { - "node": "Reddit12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Reddit12": { - "main": [ - [ - { - "node": "Reddit13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Reddit13": { - "main": [ - [ - { - "node": "Reddit15", - "type": "main", - "index": 0 - } - ] - ] - }, - "Reddit15": { - "main": [ - [ - { - "node": "Sleep 10 seconds", - "type": "main", - "index": 0 - } - ] - ] - }, - "Reddit16": { - "main": [ - [ - { - "node": "Reddit17", - "type": "main", - "index": 0 - } - ] - ] - }, - "Reddit17": { - "main": [ - [ - { - "node": "Reddit18", - "type": "main", - "index": 0 - } - ] - ] - }, - "Reddit18": { - "main": [ - [ - { - "node": "Reddit19", - "type": "main", - "index": 0 - } - ] - ] - }, - "Reddit19": { - "main": [ - [ - { - "node": "Reddit14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Reddit", - "type": "main", - "index": 0 - }, - { - "node": "Reddit5", - "type": "main", - "index": 0 - }, - { - "node": "Reddit7", - "type": "main", - "index": 0 - }, - { - "node": "Reddit10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 10 seconds": { - "main": [ - [ - { - "node": "Reddit16", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/15.json b/test-workflows/workflows/15.json deleted file mode 100644 index 1ff348562d9..00000000000 --- a/test-workflows/workflows/15.json +++ /dev/null @@ -1,543 +0,0 @@ -{ - "createdAt": "2021-02-16T10:16:46.803Z", - "updatedAt": "2021-05-20T15:21:14.466Z", - "id": "15", - "name": "DropBox:File: upload move copy download delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 120, - 300 - ], - "id": "96dbd3bb-afe7-43ce-a204-ab0a1fec38e1" - }, - { - "parameters": { - "path": "={{$json[\"metadata\"][\"path_display\"]}}/testFile", - "binaryData": true - }, - "name": "Dropbox", - "type": "n8n-nodes-base.dropbox", - "typeVersion": 1, - "position": [ - 750, - 300 - ], - "alwaysOutputData": true, - "credentials": { - "dropboxApi": { - "id": "31", - "name": "Dropbox creds" - } - }, - "continueOnFail": true, - "id": "ae1f6047-70fc-4da6-a602-663fc63442e4" - }, - { - "parameters": { - "operation": "move", - "path": "={{$node[\"Dropbox8\"].json[\"metadata\"][\"path_display\"]}}/testFile", - "toPath": "={{$node[\"Dropbox8\"].json[\"metadata\"][\"path_display\"]}}/moveTestFile{{Date.now()}}" - }, - "name": "Dropbox2", - "type": "n8n-nodes-base.dropbox", - "typeVersion": 1, - "position": [ - 1050, - 300 - ], - "alwaysOutputData": true, - "credentials": { - "dropboxApi": { - "id": "31", - "name": "Dropbox creds" - } - }, - "id": "6b0ee1ef-fd36-4a78-bf5a-77a6351e7cb5" - }, - { - "parameters": { - "operation": "copy", - "path": "={{$json[\"metadata\"][\"path_display\"]}}", - "toPath": "={{$node[\"Dropbox8\"].json[\"metadata\"][\"path_display\"]}}/copiedTestFile" - }, - "name": "Dropbox3", - "type": "n8n-nodes-base.dropbox", - "typeVersion": 1, - "position": [ - 1210, - 300 - ], - "alwaysOutputData": true, - "credentials": { - "dropboxApi": { - "id": "31", - "name": "Dropbox creds" - } - }, - "id": "249d895c-adab-4ef9-a9de-107a707eedc2" - }, - { - "parameters": { - "operation": "delete", - "path": "={{$json[\"metadata\"][\"path_display\"]}}" - }, - "name": "Dropbox4", - "type": "n8n-nodes-base.dropbox", - "typeVersion": 1, - "position": [ - 1490, - 300 - ], - "alwaysOutputData": true, - "credentials": { - "dropboxApi": { - "id": "31", - "name": "Dropbox creds" - } - }, - "id": "6f5575aa-9fb2-4ce9-8d17-0955797fb62d" - }, - { - "parameters": { - "operation": "download", - "path": "={{$json[\"metadata\"][\"path_display\"]}}" - }, - "name": "Dropbox5", - "type": "n8n-nodes-base.dropbox", - "typeVersion": 1, - "position": [ - 1210, - 450 - ], - "alwaysOutputData": true, - "credentials": { - "dropboxApi": { - "id": "31", - "name": "Dropbox creds" - } - }, - "id": "b982811b-6408-4410-8519-fa3a1df215ba" - }, - { - "parameters": { - "operation": "delete", - "path": "={{$json[\"metadata\"][\"path_display\"]}}" - }, - "name": "Dropbox6", - "type": "n8n-nodes-base.dropbox", - "typeVersion": 1, - "position": [ - 1500, - 450 - ], - "alwaysOutputData": true, - "credentials": { - "dropboxApi": { - "id": "31", - "name": "Dropbox creds" - } - }, - "id": "e168f6df-3d70-4256-a19d-ada81d6e29d1" - }, - { - "parameters": { - "filePath": "/tmp/n8n-logo.png" - }, - "name": "Read Binary File", - "type": "n8n-nodes-base.readBinaryFile", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "id": "0ac33c86-3813-4af0-be35-9201501cbd28" - }, - { - "parameters": { - "resource": "folder", - "path": "=/testFolder{{Date.now()}}" - }, - "name": "Dropbox8", - "type": "n8n-nodes-base.dropbox", - "typeVersion": 1, - "position": [ - 300, - 130 - ], - "credentials": { - "dropboxApi": { - "id": "31", - "name": "Dropbox creds" - } - }, - "id": "8d123a27-69dc-4fb1-95b4-c5d5eb90e07b" - }, - { - "parameters": { - "resource": "folder", - "operation": "list", - "path": "={{$node[\"Dropbox10\"].json[\"metadata\"][\"path_display\"]}}", - "limit": 1, - "filters": { - "include_deleted": true - } - }, - "name": "Dropbox9", - "type": "n8n-nodes-base.dropbox", - "typeVersion": 1, - "position": [ - 2070, - 150 - ], - "alwaysOutputData": true, - "credentials": { - "dropboxApi": { - "id": "31", - "name": "Dropbox creds" - } - }, - "id": "09395798-ba6f-4d77-a96a-01b162e9695f" - }, - { - "parameters": { - "resource": "folder", - "operation": "move", - "path": "={{$node[\"Dropbox8\"].json[\"metadata\"][\"path_display\"]}}", - "toPath": "={{$node[\"Dropbox8\"].json[\"metadata\"][\"path_display\"]}}Renamed" - }, - "name": "Dropbox10", - "type": "n8n-nodes-base.dropbox", - "typeVersion": 1, - "position": [ - 1800, - 150 - ], - "credentials": { - "dropboxApi": { - "id": "31", - "name": "Dropbox creds" - } - }, - "id": "7eca30c5-506c-46cc-bbe0-6ded1099dee3" - }, - { - "parameters": { - "resource": "folder", - "operation": "delete", - "path": "={{$node[\"Dropbox10\"].json[\"metadata\"][\"path_display\"]}}" - }, - "name": "Dropbox11", - "type": "n8n-nodes-base.dropbox", - "typeVersion": 1, - "position": [ - 2380, - 150 - ], - "credentials": { - "dropboxApi": { - "id": "31", - "name": "Dropbox creds" - } - }, - "id": "f513eda7-84d7-4903-ad94-c33c6f1a37a9" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 seconds", - "type": "n8n-nodes-base.function", - "position": [ - 600, - 300 - ], - "typeVersion": 1, - "id": "28826f4e-1aeb-4bad-9516-fd49a29a4db5" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 seconds1", - "type": "n8n-nodes-base.function", - "position": [ - 900, - 300 - ], - "typeVersion": 1, - "id": "55fa0728-bd74-41b0-b0b4-6b59175633b8" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 seconds2", - "type": "n8n-nodes-base.function", - "position": [ - 1350, - 300 - ], - "typeVersion": 1, - "id": "694407f2-2225-459d-bfd3-23f9371c7e22" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 seconds3", - "type": "n8n-nodes-base.function", - "position": [ - 1350, - 450 - ], - "typeVersion": 1, - "id": "c42d5236-994b-446a-9427-2095bb3b5121" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 seconds4", - "type": "n8n-nodes-base.function", - "position": [ - 2230, - 150 - ], - "typeVersion": 1, - "id": "84d5255b-7ef5-4f96-92dc-4bd7d406cba7" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 seconds5", - "type": "n8n-nodes-base.function", - "position": [ - 1930, - 150 - ], - "typeVersion": 1, - "id": "425dc02d-8d3c-42f9-a812-3a223f6b7a47" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 seconds6", - "type": "n8n-nodes-base.function", - "position": [ - 1650, - 450 - ], - "typeVersion": 1, - "id": "de860b61-34ef-4faa-a0a8-6054fcd8079b" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Dropbox8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Dropbox": { - "main": [ - [ - { - "node": "Sleep 0.8 seconds1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Dropbox2": { - "main": [ - [ - { - "node": "Dropbox3", - "type": "main", - "index": 0 - }, - { - "node": "Dropbox5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Dropbox3": { - "main": [ - [ - { - "node": "Sleep 0.8 seconds2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Dropbox5": { - "main": [ - [ - { - "node": "Sleep 0.8 seconds3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Dropbox6": { - "main": [ - [ - { - "node": "Sleep 0.8 seconds6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Read Binary File": { - "main": [ - [ - { - "node": "Sleep 0.8 seconds", - "type": "main", - "index": 0 - } - ] - ] - }, - "Dropbox8": { - "main": [ - [ - { - "node": "Read Binary File", - "type": "main", - "index": 0 - } - ] - ] - }, - "Dropbox9": { - "main": [ - [ - { - "node": "Sleep 0.8 seconds4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Dropbox10": { - "main": [ - [ - { - "node": "Sleep 0.8 seconds5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 seconds": { - "main": [ - [ - { - "node": "Dropbox", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 seconds1": { - "main": [ - [ - { - "node": "Dropbox2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 seconds2": { - "main": [ - [ - { - "node": "Dropbox4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 seconds3": { - "main": [ - [ - { - "node": "Dropbox6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 seconds4": { - "main": [ - [ - { - "node": "Dropbox11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 seconds5": { - "main": [ - [ - { - "node": "Dropbox9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 seconds6": { - "main": [ - [ - { - "node": "Dropbox10", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/150.json b/test-workflows/workflows/150.json deleted file mode 100644 index fe9f4514135..00000000000 --- a/test-workflows/workflows/150.json +++ /dev/null @@ -1,215 +0,0 @@ -{ - "createdAt": "2021-03-24T13:20:07.626Z", - "updatedAt": "2021-03-24T13:33:51.181Z", - "id": "150", - "name": "PostHog:Event:create:Identity:create:Alias:create:Track:page screen", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "74887071-8225-4c30-8b67-c3bc2cbbbb3c" - }, - { - "parameters": { - "eventName": "=Event{{Date.now()}}", - "distinctId": "={{Date.now()}}", - "additionalFields": { - "propertiesUi": { - "propertyValues": [ - { - "key": "name", - "value": "test" - } - ] - }, - "timestamp": "={{(new Date()).toISOString()}}" - } - }, - "name": "PostHog", - "type": "n8n-nodes-base.postHog", - "typeVersion": 1, - "position": [ - 500, - 150 - ], - "credentials": { - "postHogApi": { - "id": "121", - "name": "PostHog API" - } - }, - "id": "73600be8-3dde-4dea-a1d0-cea020c02acf" - }, - { - "parameters": { - "resource": "identity", - "distinctId": "={{Date.now()}}", - "additionalFields": { - "propertiesUi": { - "propertyValues": [ - { - "key": "name", - "value": "identity test" - }, - { - "key": "email", - "value": "=fake{{Date.now()}}@gmail.com" - } - ] - }, - "timestamp": "={{Date.now()}}" - } - }, - "name": "PostHog1", - "type": "n8n-nodes-base.postHog", - "typeVersion": 1, - "position": [ - 500, - 300 - ], - "credentials": { - "postHogApi": { - "id": "121", - "name": "PostHog API" - } - }, - "id": "dd146375-b44f-445a-a2a4-fbaeb9028b0c" - }, - { - "parameters": { - "resource": "alias", - "alias": "=Alias{{Date.now()}}", - "distinctId": "={{Date.now()}}", - "additionalFields": { - "contextUi": { - "contextValues": [ - { - "key": "name", - "value": "Aliastest" - } - ] - }, - "timestamp": "={{Date.now()}}" - } - }, - "name": "PostHog2", - "type": "n8n-nodes-base.postHog", - "typeVersion": 1, - "position": [ - 500, - 450 - ], - "credentials": { - "postHogApi": { - "id": "121", - "name": "PostHog API" - } - }, - "id": "cb1f2644-f1a7-46b0-950e-de720819b2b7" - }, - { - "parameters": { - "resource": "track", - "name": "=TrackPage{{Date.now()}}", - "distinctId": "={{Date.now()}}", - "additionalFields": { - "category": "landing", - "timestamp": "={{Date.now()}}" - } - }, - "name": "PostHog3", - "type": "n8n-nodes-base.postHog", - "typeVersion": 1, - "position": [ - 500, - 600 - ], - "credentials": { - "postHogApi": { - "id": "121", - "name": "PostHog API" - } - }, - "id": "88973d09-036b-41c3-a24c-d799ef0354e2" - }, - { - "parameters": { - "resource": "track", - "operation": "screen", - "name": "=TrackScreen{{Date.now()}}", - "distinctId": "={{Date.now()}}", - "additionalFields": { - "category": "registration", - "timestamp": "={{Date.now()}}" - } - }, - "name": "PostHog4", - "type": "n8n-nodes-base.postHog", - "typeVersion": 1, - "position": [ - 650, - 600 - ], - "credentials": { - "postHogApi": { - "id": "121", - "name": "PostHog API" - } - }, - "id": "2677f5a4-9a15-41f2-a8c0-ea42f269f57b" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "PostHog", - "type": "main", - "index": 0 - }, - { - "node": "PostHog1", - "type": "main", - "index": 0 - }, - { - "node": "PostHog2", - "type": "main", - "index": 0 - }, - { - "node": "PostHog3", - "type": "main", - "index": 0 - } - ] - ] - }, - "PostHog3": { - "main": [ - [ - { - "node": "PostHog4", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/151.json b/test-workflows/workflows/151.json deleted file mode 100644 index 5e7775abfc9..00000000000 --- a/test-workflows/workflows/151.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "createdAt": "2021-03-24T14:46:45.567Z", - "updatedAt": "2024-02-23T14:00:43.000Z", - "id": "151", - "name": "Wise:Account:getStatement getBalances getCurrencies:ExchangeRate:get:Profile:get getAll:Recipient:getAll:Quote:create get:Transfer:create get getAll execute delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [250, 650], - "id": "b6204c57-404f-4c53-acc1-a9c9f2e698f5" - }, - { - "parameters": { - "profileId": 16154361 - }, - "name": "Wise", - "type": "n8n-nodes-base.wise", - "typeVersion": 1, - "position": [650, 200], - "id": "b5851401-b389-4093-9ac2-4f3006f0d21c", - "credentials": { - "wiseApi": { - "id": "122", - "name": "Wise API creds" - } - } - }, - { - "parameters": { - "operation": "getCurrencies" - }, - "name": "Wise1", - "type": "n8n-nodes-base.wise", - "typeVersion": 1, - "position": [800, 200], - "id": "f0ae63de-1ea4-4ab7-9e72-27aad926e330", - "credentials": { - "wiseApi": { - "id": "122", - "name": "Wise API creds" - } - }, - "notes": "CAP_RESULTS_LENGTH=1" - }, - { - "parameters": { - "operation": "getStatement", - "profileId": 16154361, - "borderlessAccountId": 23302, - "currency": "EUR", - "additionalFields": { - "lineStyle": "FLAT" - } - }, - "name": "Wise2", - "type": "n8n-nodes-base.wise", - "typeVersion": 1, - "position": [500, 200], - "id": "519dda48-ddf1-403b-8dd0-9d91d503f2bb", - "credentials": { - "wiseApi": { - "id": "122", - "name": "Wise API creds" - } - } - }, - { - "parameters": { - "resource": "exchangeRate", - "source": "EUR", - "target": "USD", - "additionalFields": {} - }, - "name": "Wise3", - "type": "n8n-nodes-base.wise", - "typeVersion": 1, - "position": [500, 350], - "id": "ea08c815-9107-41b5-a5af-e2f45b251423", - "credentials": { - "wiseApi": { - "id": "122", - "name": "Wise API creds" - } - }, - "notes": "CAP_RESULTS_LENGTH=1" - }, - { - "parameters": { - "resource": "profile", - "profileId": 16154361 - }, - "name": "Wise4", - "type": "n8n-nodes-base.wise", - "typeVersion": 1, - "position": [500, 500], - "id": "8565eca9-04f5-4c9c-be56-8e3e424e907f", - "credentials": { - "wiseApi": { - "id": "122", - "name": "Wise API creds" - } - } - }, - { - "parameters": { - "resource": "recipient", - "limit": 1 - }, - "name": "Wise5", - "type": "n8n-nodes-base.wise", - "typeVersion": 1, - "position": [500, 650], - "id": "4e57ca88-b2a7-4459-a0c7-09c71da2162b", - "credentials": { - "wiseApi": { - "id": "122", - "name": "Wise API creds" - } - } - }, - { - "parameters": { - "resource": "quote", - "operation": "create", - "profileId": 16154361, - "targetAccountId": 147784112, - "amount": 2, - "sourceCurrency": "EUR", - "targetCurrency": "EUR" - }, - "name": "Wise6", - "type": "n8n-nodes-base.wise", - "typeVersion": 1, - "position": [500, 800], - "id": "0d28f340-cf11-4c34-922e-e82336dfed81", - "credentials": { - "wiseApi": { - "id": "122", - "name": "Wise API creds" - } - } - }, - { - "parameters": { - "resource": "quote", - "quoteId": "={{$node[\"Wise6\"].json[\"id\"]}}" - }, - "name": "Wise7", - "type": "n8n-nodes-base.wise", - "typeVersion": 1, - "position": [640, 800], - "id": "463946cf-45f9-4499-af29-ca3f7ea4f149", - "credentials": { - "wiseApi": { - "id": "122", - "name": "Wise API creds" - } - } - }, - { - "parameters": { - "resource": "transfer", - "operation": "create", - "profileId": 16154361, - "quoteId": "={{$node[\"Wise6\"].json[\"id\"]}}", - "targetAccountId": 700007874, - "additionalFields": {} - }, - "name": "Wise8", - "type": "n8n-nodes-base.wise", - "typeVersion": 1, - "position": [800, 850], - "id": "7adccbb0-f2c0-433c-a80d-5ce191e71ec6", - "credentials": { - "wiseApi": { - "id": "122", - "name": "Wise API creds" - } - } - }, - { - "parameters": { - "resource": "transfer", - "transferId": "={{$node[\"Wise8\"].json[\"id\"]}}" - }, - "name": "Wise9", - "type": "n8n-nodes-base.wise", - "typeVersion": 1, - "position": [950, 850], - "id": "6f34d46a-b8a9-462c-912f-a9de39b43aba", - "credentials": { - "wiseApi": { - "id": "122", - "name": "Wise API creds" - } - } - }, - { - "parameters": { - "resource": "transfer", - "operation": "getAll", - "profileId": 16154361, - "limit": 1, - "filters": {} - }, - "name": "Wise10", - "type": "n8n-nodes-base.wise", - "typeVersion": 1, - "position": [1100, 850], - "executeOnce": false, - "alwaysOutputData": true, - "id": "ba5f7e05-3192-4727-9340-a1003b6b73cb", - "credentials": { - "wiseApi": { - "id": "122", - "name": "Wise API creds" - } - } - }, - { - "parameters": { - "resource": "profile", - "operation": "getAll" - }, - "name": "Wise12", - "type": "n8n-nodes-base.wise", - "typeVersion": 1, - "position": [650, 500], - "id": "a33da4e1-d27c-4f69-9ce0-0734dbce5df7", - "credentials": { - "wiseApi": { - "id": "122", - "name": "Wise API creds" - } - } - }, - { - "parameters": { - "resource": "transfer", - "operation": "execute", - "profileId": 16154361, - "transferId": "={{$node[\"Wise8\"].json[\"id\"]}}" - }, - "name": "Wise13", - "type": "n8n-nodes-base.wise", - "typeVersion": 1, - "position": [1250, 850], - "id": "093d0ca7-9888-4fb1-9734-bc3bf746ce73", - "credentials": { - "wiseApi": { - "id": "122", - "name": "Wise API creds" - } - }, - "disabled": true - }, - { - "parameters": { - "resource": "quote", - "operation": "create", - "profileId": 16154361, - "targetAccountId": 147784112, - "amount": 2, - "sourceCurrency": "EUR", - "targetCurrency": "EUR" - }, - "name": "Wise14", - "type": "n8n-nodes-base.wise", - "typeVersion": 1, - "position": [500, 1000], - "id": "52b98874-8d52-4e6f-bd45-808afaa13e20", - "credentials": { - "wiseApi": { - "id": "122", - "name": "Wise API creds" - } - } - }, - { - "parameters": { - "resource": "transfer", - "operation": "create", - "profileId": 16154361, - "quoteId": "={{$node[\"Wise14\"].json[\"id\"]}}", - "targetAccountId": 700007874, - "additionalFields": {} - }, - "name": "Wise16", - "type": "n8n-nodes-base.wise", - "typeVersion": 1, - "position": [650, 1050], - "id": "e3d1a7a9-db38-4786-a21a-400182843da5", - "credentials": { - "wiseApi": { - "id": "122", - "name": "Wise API creds" - } - } - }, - { - "parameters": { - "resource": "transfer", - "operation": "delete", - "transferId": "={{$node[\"Wise16\"].json[\"id\"]}}" - }, - "name": "Wise15", - "type": "n8n-nodes-base.wise", - "typeVersion": 1, - "position": [800, 1050], - "id": "18f10919-83ea-48e0-8df0-19b0ebb2673f", - "credentials": { - "wiseApi": { - "id": "122", - "name": "Wise API creds" - } - } - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Wise5", - "type": "main", - "index": 0 - }, - { - "node": "Wise4", - "type": "main", - "index": 0 - }, - { - "node": "Wise3", - "type": "main", - "index": 0 - }, - { - "node": "Wise2", - "type": "main", - "index": 0 - }, - { - "node": "Wise6", - "type": "main", - "index": 0 - }, - { - "node": "Wise14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wise": { - "main": [ - [ - { - "node": "Wise1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wise2": { - "main": [ - [ - { - "node": "Wise", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wise6": { - "main": [ - [ - { - "node": "Wise7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wise4": { - "main": [ - [ - { - "node": "Wise12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wise7": { - "main": [ - [ - { - "node": "Wise8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wise8": { - "main": [ - [ - { - "node": "Wise9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wise9": { - "main": [ - [ - { - "node": "Wise10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wise10": { - "main": [ - [ - { - "node": "Wise13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wise14": { - "main": [ - [ - { - "node": "Wise16", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wise16": { - "main": [ - [ - { - "node": "Wise15", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": { - "templateCredsSetupCompleted": true - }, - "pinData": {}, - "versionId": "12d5670d-e8b6-4c6a-bf37-bcc7f8e53f43", - "triggerCount": 0, - "tags": [] -} diff --git a/test-workflows/workflows/152.json b/test-workflows/workflows/152.json deleted file mode 100644 index 7c0f603d5d8..00000000000 --- a/test-workflows/workflows/152.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "createdAt": "2021-03-25T09:23:15.717Z", - "updatedAt": "2021-05-10T14:22:21.201Z", - "id": "152", - "name": "AWSComprehend:Text:detectDominantLanguage detectSentiment detectEntities", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "4db01d0f-ffb0-4ced-be9a-8e80eddc20d4" - }, - { - "parameters": { - "text": "n8n (pronounced n-eight-n) helps you to interconnect every app with an API in the world with each other to share and manipulate its data without a single line of code. It is an easy to use, user-friendly and highly customizable service, which uses an intuitive user interface for you to design your unique workflows very fast. Hosted on your server and not based in the cloud, it keeps your sensible data very secure in your own trusted database." - }, - "name": "AWS Comprehend", - "type": "n8n-nodes-base.awsComprehend", - "typeVersion": 1, - "position": [ - 450, - 200 - ], - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - }, - "id": "dbc6fd62-d8c6-44e7-aed9-6f8f28e609db" - }, - { - "parameters": { - "operation": "detectSentiment", - "text": "n8n (pronounced n-eight-n) helps you to interconnect every app with an API in the world with each other to share and manipulate its data without a single line of code. It is an easy to use, user-friendly and highly customizable service, which uses an intuitive user interface for you to design your unique workflows very fast. Hosted on your server and not based in the cloud, it keeps your sensible data very secure in your own trusted database." - }, - "name": "AWS Comprehend1", - "type": "n8n-nodes-base.awsComprehend", - "typeVersion": 1, - "position": [ - 450, - 380 - ], - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - }, - "id": "5ba9b2b0-0534-44d9-bdb5-3f45cd4964d9" - }, - { - "parameters": { - "operation": "detectEntities", - "text": "n8n (pronounced n-eight-n) helps you to interconnect every app with an API in the world with each other to share and manipulate its data without a single line of code. It is an easy to use, user-friendly and highly customizable service, which uses an intuitive user interface for you to design your unique workflows very fast. Hosted on your server and not based in the cloud, it keeps your sensible data very secure in your own trusted database.", - "additionalFields": {} - }, - "name": "AWS Comprehend2", - "type": "n8n-nodes-base.awsComprehend", - "typeVersion": 1, - "position": [ - 450, - 550 - ], - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - }, - "id": "c744db52-65cc-4e4a-811b-69b2ec328352" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "AWS Comprehend", - "type": "main", - "index": 0 - }, - { - "node": "AWS Comprehend1", - "type": "main", - "index": 0 - }, - { - "node": "AWS Comprehend2", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/153.json b/test-workflows/workflows/153.json deleted file mode 100644 index efb19b570d7..00000000000 --- a/test-workflows/workflows/153.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "createdAt": "2021-03-25T09:44:00.500Z", - "updatedAt": "2021-03-25T09:44:00.500Z", - "id": "153", - "name": "AWSLambda:invoke", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "0e6c4d13-c106-4581-890c-ff9d76f686b5" - }, - { - "parameters": { - "function": "arn:aws:lambda:us-east-1:589875339869:function:test-helloworld" - }, - "name": "AWS Lambda", - "type": "n8n-nodes-base.awsLambda", - "typeVersion": 1, - "position": [ - 450, - 200 - ], - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - }, - "id": "2f7188cc-0b10-48aa-93a7-68814c18cdcb" - }, - { - "parameters": { - "function": "arn:aws:lambda:us-east-1:589875339869:function:test-helloworld", - "payload": "{\n \"name\": \"nodeqa\"\n}" - }, - "name": "AWS Lambda1", - "type": "n8n-nodes-base.awsLambda", - "typeVersion": 1, - "position": [ - 450, - 360 - ], - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - }, - "id": "798f32bd-9032-4fad-9b3f-5cd4fb35fdb2" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "AWS Lambda", - "type": "main", - "index": 0 - }, - { - "node": "AWS Lambda1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/154.json b/test-workflows/workflows/154.json deleted file mode 100644 index a232e735273..00000000000 --- a/test-workflows/workflows/154.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "createdAt": "2021-03-25T09:52:50.269Z", - "updatedAt": "2021-03-25T09:52:50.269Z", - "id": "154", - "name": "AWSRekognition:Image:analyze", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "b1f09994-6b4a-4979-bfc4-ec27ba3003ff" - }, - { - "parameters": { - "type": "detectText", - "binaryData": true, - "additionalFields": {} - }, - "name": "AWS Rekognition", - "type": "n8n-nodes-base.awsRekognition", - "typeVersion": 1, - "position": [ - 700, - 300 - ], - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - }, - "id": "9dd43252-32fd-469a-9698-7f486fc51bb5" - }, - { - "parameters": { - "functionCode": "item = {\n json:{},\n binary:{\n data: {\n data: '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', // Base64 encoded binary data (required)\n mimeType: 'image/png',\n fileExtension: 'png',\n fileName: 'n8n-logo.png',\n }\n }\n}\n\nreturn [item];" - }, - "name": "Function", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 500, - 300 - ], - "id": "1d29136d-934f-4913-bd1c-d34a2881c9c8" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Function", - "type": "main", - "index": 0 - } - ] - ] - }, - "Function": { - "main": [ - [ - { - "node": "AWS Rekognition", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/155.json b/test-workflows/workflows/155.json deleted file mode 100644 index a8615d20c33..00000000000 --- a/test-workflows/workflows/155.json +++ /dev/null @@ -1,512 +0,0 @@ -{ - "createdAt": "2021-03-25T10:06:21.916Z", - "updatedAt": "2023-03-16T11:39:51.000Z", - "id": "155", - "name": "AWSS3:Bucket:create getAll search:File:upload getAll download delete:Folder:create getAll delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "d1457491-53e0-46a5-b33d-f950be72cd4d" - }, - { - "parameters": { - "resource": "bucket", - "name": "={{$node[\"Set\"].json[\"bucketName\"]}}", - "additionalFields": {} - }, - "name": "AWS S3", - "type": "n8n-nodes-base.awsS3", - "typeVersion": 1, - "position": [ - 600, - 300 - ], - "id": "07bca9de-36b9-4dcb-b61e-7fe54ac44273", - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - } - }, - { - "parameters": { - "keepOnlySet": true, - "values": { - "string": [ - { - "name": "bucketName", - "value": "=Bucket{{Date.now()}}" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "id": "cc6144f2-31e2-47ff-bcb3-92d1c61d07fe" - }, - { - "parameters": { - "resource": "bucket", - "operation": "getAll", - "limit": 1 - }, - "name": "AWS S", - "type": "n8n-nodes-base.awsS3", - "typeVersion": 1, - "position": [ - 750, - 300 - ], - "id": "d500a6b2-04ba-4786-bd4e-ab0432456caa", - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - } - }, - { - "parameters": { - "resource": "bucket", - "operation": "search", - "bucketName": "={{$node[\"Set\"].json[\"bucketName\"]}}", - "limit": 1, - "additionalFields": {} - }, - "name": "AWS S1", - "type": "n8n-nodes-base.awsS3", - "typeVersion": 1, - "position": [ - 1650, - 310 - ], - "id": "ae1381cd-181d-41d4-a058-a276b9a860bc", - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - } - }, - { - "parameters": { - "operation": "upload", - "bucketName": "={{$node[\"Set\"].json[\"bucketName\"]}}", - "fileName": "n8n-logo.png", - "additionalFields": {} - }, - "name": "AWS S2", - "type": "n8n-nodes-base.awsS3", - "typeVersion": 1, - "position": [ - 1050, - 400 - ], - "id": "1ae1e324-2cbd-460b-ae07-45d76283b3de", - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - } - }, - { - "parameters": { - "functionCode": "item = {\n json:{},\n binary:{\n data: {\n data: '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', // Base64 encoded binary data (required)\n mimeType: 'image/png',\n fileExtension: 'png',\n fileName: 'n8n-logo.png',\n }\n }\n}\n\nreturn [item];" - }, - "name": "Function", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 900, - 400 - ], - "id": "07cbc362-2f04-49d7-bfe7-f6dc1449e633" - }, - { - "parameters": { - "operation": "getAll", - "bucketName": "={{$node[\"Set\"].json[\"bucketName\"]}}", - "limit": 1, - "options": {} - }, - "name": "AWS S4", - "type": "n8n-nodes-base.awsS3", - "typeVersion": 1, - "position": [ - 1200, - 400 - ], - "id": "6409d30f-f301-4455-915f-dca4ba380abd", - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - } - }, - { - "parameters": { - "bucketName": "={{$node[\"Set\"].json[\"bucketName\"]}}", - "fileKey": "n8n-logo.png" - }, - "name": "AWS S5", - "type": "n8n-nodes-base.awsS3", - "typeVersion": 1, - "position": [ - 1350, - 400 - ], - "id": "c92b350b-d8ca-434a-8c46-8f2af62100f4", - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - } - }, - { - "parameters": { - "operation": "copy", - "sourcePath": "={{$node[\"Set\"].json[\"bucketName\"]}}/n8n-logo.png", - "destinationPath": "={{$node[\"Set\"].json[\"bucketName\"]}}/copied-n8n-logo.png", - "additionalFields": {} - }, - "name": "AWS S6", - "type": "n8n-nodes-base.awsS3", - "typeVersion": 1, - "position": [ - 1500, - 400 - ], - "id": "f2d2014a-1b8a-4d40-88ea-c4033cc9cfcb", - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - }, - "disabled": true - }, - { - "parameters": { - "operation": "delete", - "bucketName": "={{$node[\"Set\"].json[\"bucketName\"]}}", - "fileKey": "n8n-logo.png", - "options": {} - }, - "name": "AWS S7", - "type": "n8n-nodes-base.awsS3", - "typeVersion": 1, - "position": [ - 1800, - 400 - ], - "id": "844d7a3e-3e56-4111-9667-f985f4ef3cfc", - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - } - }, - { - "parameters": { - "resource": "folder", - "bucketName": "={{$node[\"Set\"].json[\"bucketName\"]}}", - "folderName": "={{$node[\"Set1\"].json[\"folderName\"]}}", - "additionalFields": {} - }, - "name": "AWS S8", - "type": "n8n-nodes-base.awsS3", - "typeVersion": 1, - "position": [ - 900, - 150 - ], - "id": "2ede20ee-72aa-431a-bea6-b5831f4df5ae", - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - } - }, - { - "parameters": { - "resource": "folder", - "operation": "getAll", - "bucketName": "={{$node[\"Set\"].json[\"bucketName\"]}}", - "limit": 1, - "options": {} - }, - "name": "AWS S9", - "type": "n8n-nodes-base.awsS3", - "typeVersion": 1, - "position": [ - 1050, - 150 - ], - "id": "6ec127d1-bb69-4d7d-9fcf-1ff928ae6b32", - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - } - }, - { - "parameters": { - "resource": "folder", - "operation": "delete", - "bucketName": "={{$node[\"Set\"].json[\"bucketName\"]}}", - "folderKey": "={{$node[\"Set1\"].json[\"folderName\"]}}" - }, - "name": "AWS S10", - "type": "n8n-nodes-base.awsS3", - "typeVersion": 1, - "position": [ - 1200, - 150 - ], - "id": "2697e526-d402-4d6b-8e87-6bd52cc39183", - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - } - }, - { - "parameters": { - "keepOnlySet": true, - "values": { - "string": [ - { - "name": "folderName", - "value": "=Folder{{Date.now()}}" - } - ] - }, - "options": {} - }, - "name": "Set1", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 750, - 150 - ], - "id": "a2c96217-5106-46a3-bbf9-ed8fb0062592" - }, - { - "parameters": { - "resource": "bucket", - "operation": "delete", - "name": "={{$node[\"Set\"].json[\"bucketName\"]}}" - }, - "id": "afab353f-4e1a-437b-9351-1fd786ededcc", - "name": "AWS S31", - "type": "n8n-nodes-base.awsS3", - "typeVersion": 1, - "position": [ - 1980, - 400 - ], - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - } - } - ], - "connections": { - "AWS S3": { - "main": [ - [ - { - "node": "AWS S", - "type": "main", - "index": 0 - }, - { - "node": "Set1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set": { - "main": [ - [ - { - "node": "AWS S3", - "type": "main", - "index": 0 - } - ] - ] - }, - "AWS S": { - "main": [ - [ - { - "node": "Function", - "type": "main", - "index": 0 - } - ] - ] - }, - "Function": { - "main": [ - [ - { - "node": "AWS S2", - "type": "main", - "index": 0 - } - ] - ] - }, - "AWS S2": { - "main": [ - [ - { - "node": "AWS S4", - "type": "main", - "index": 0 - } - ] - ] - }, - "AWS S4": { - "main": [ - [ - { - "node": "AWS S5", - "type": "main", - "index": 0 - } - ] - ] - }, - "AWS S5": { - "main": [ - [ - { - "node": "AWS S6", - "type": "main", - "index": 0 - } - ] - ] - }, - "AWS S6": { - "main": [ - [ - { - "node": "AWS S1", - "type": "main", - "index": 0 - } - ] - ] - }, - "AWS S1": { - "main": [ - [ - { - "node": "AWS S7", - "type": "main", - "index": 0 - } - ] - ] - }, - "AWS S8": { - "main": [ - [ - { - "node": "AWS S9", - "type": "main", - "index": 0 - } - ] - ] - }, - "AWS S9": { - "main": [ - [ - { - "node": "AWS S10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set1": { - "main": [ - [ - { - "node": "AWS S8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - }, - "AWS S10": { - "main": [ - [] - ] - }, - "AWS S7": { - "main": [ - [ - { - "node": "AWS S31", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": {}, - "versionId": "75e8472d-f6c4-41de-9cc8-021c88f2e070", - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/156.json b/test-workflows/workflows/156.json deleted file mode 100644 index 6009efd38b8..00000000000 --- a/test-workflows/workflows/156.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "createdAt": "2021-03-25T10:56:20.715Z", - "updatedAt": "2021-03-25T10:56:20.715Z", - "id": "156", - "name": "AWSSNS:publish", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "b5a64e20-a0a9-4ed0-8eb2-f648f8f12789" - }, - { - "parameters": { - "topic": "arn:aws:sns:us-east-1:589875339869:TestingTopic", - "subject": "=Subject{{Date.now()}}", - "message": "=Message{{Date.now()}}" - }, - "name": "AWS SNS", - "type": "n8n-nodes-base.awsSns", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - }, - "id": "f57aef0c-0bb4-4e26-b9c2-89df3c72675c" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "AWS SNS", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/157.json b/test-workflows/workflows/157.json deleted file mode 100644 index cd97d388c4a..00000000000 --- a/test-workflows/workflows/157.json +++ /dev/null @@ -1,495 +0,0 @@ -{ - "createdAt": "2021-03-25T14:16:35.634Z", - "updatedAt": "2021-03-25T14:30:21.247Z", - "id": "157", - "name": "AWSSES:Template:create geAll get update delete:Email:sendTemplate send:CustomVerificationEmail:create get getAll update delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "b45b0b50-c25f-4e41-9d82-f0c06af9777a" - }, - { - "parameters": { - "resource": "template", - "templateName": "={{$node[\"Set\"].json[\"templateName\"]}}", - "subjectPart": "=Subject{{Date.now()}}", - "additionalFields": { - "textPart": "=Email body example {{Date.now()}}" - } - }, - "name": "AWS SES", - "type": "n8n-nodes-base.awsSes", - "typeVersion": 1, - "position": [ - 600, - 300 - ], - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - }, - "id": "3bacb945-31c3-4889-ae64-e956c40c4830" - }, - { - "parameters": { - "resource": "template", - "operation": "getAll", - "limit": 1 - }, - "name": "AWS SES1", - "type": "n8n-nodes-base.awsSes", - "typeVersion": 1, - "position": [ - 750, - 300 - ], - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - }, - "id": "8dd0d2de-eeac-49e4-ab06-04d56d09972e" - }, - { - "parameters": { - "resource": "template", - "operation": "get", - "templateName": "={{$node[\"Set\"].json[\"templateName\"]}}" - }, - "name": "AWS SES2", - "type": "n8n-nodes-base.awsSes", - "typeVersion": 1, - "position": [ - 900, - 300 - ], - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - }, - "id": "ab6f7068-8997-473c-a58c-59f881694dc3" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "templateName", - "value": "=Template{{Date.now()}}" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "id": "d8d7bba3-dc23-493e-8f26-781a66685439" - }, - { - "parameters": { - "resource": "template", - "operation": "update", - "templateName": "={{$node[\"Set\"].json[\"templateName\"]}}", - "updateFields": { - "subjectPart": "={{$node[\"AWS SES2\"].json[\"GetTemplateResult\"][\"Template\"][\"SubjectPart\"]}}", - "htmlPart": "=Updated{{$node[\"AWS SES2\"].json[\"GetTemplateResult\"][\"Template\"][\"TextPart\"]}}" - } - }, - "name": "AWS SES3", - "type": "n8n-nodes-base.awsSes", - "typeVersion": 1, - "position": [ - 1050, - 300 - ], - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - }, - "id": "f807da32-fd62-46b0-9204-2667437bc3ee" - }, - { - "parameters": { - "resource": "template", - "operation": "delete", - "templateName": "={{$node[\"Set\"].json[\"templateName\"]}}" - }, - "name": "AWS SES4", - "type": "n8n-nodes-base.awsSes", - "typeVersion": 1, - "position": [ - 1500, - 300 - ], - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - }, - "id": "913d5637-d449-42dc-b4b9-ccc6dcb92bde" - }, - { - "parameters": { - "operation": "sendTemplate", - "templateName": "={{$node[\"Set\"].json[\"templateName\"]}}", - "fromEmail": "node8qa@gmail.com", - "toAddresses": [ - "node8qa@gmail.com" - ], - "templateDataUi": { - "templateDataValues": [] - }, - "additionalFields": {} - }, - "name": "AWS SES5", - "type": "n8n-nodes-base.awsSes", - "typeVersion": 1, - "position": [ - 1200, - 450 - ], - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - }, - "id": "6681aed4-834c-480c-b712-3fac85484bae" - }, - { - "parameters": { - "subject": "=AWS email {{Date.now()}}", - "body": "=Testing AWS SES node {{Date.now()}}", - "fromEmail": "node8qa@gmail.com", - "toAddresses": [ - "node8qa@gmail.com" - ], - "additionalFields": {} - }, - "name": "AWS SES6", - "type": "n8n-nodes-base.awsSes", - "typeVersion": 1, - "position": [ - 1350, - 450 - ], - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - }, - "id": "00af365e-6cc7-4006-acdf-6357a1fc80d2" - }, - { - "parameters": { - "resource": "customVerificationEmail", - "fromEmailAddress": "node8qa@gmail.com", - "templateName": "={{$node[\"Set1\"].json[\"templateName\"]}}", - "templateSubject": "=VerificationSubject{{Date.now()}}", - "successRedirectionURL": "http://n8n.io", - "failureRedirectionURL": "http://n8n.io" - }, - "name": "AWS SES7", - "type": "n8n-nodes-base.awsSes", - "typeVersion": 1, - "position": [ - 600, - 100 - ], - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - }, - "id": "844157e9-3159-4ba1-9a6d-0d9a88622cb7" - }, - { - "parameters": { - "resource": "customVerificationEmail", - "operation": "get", - "templateName": "={{$node[\"Set1\"].json[\"templateName\"]}}" - }, - "name": "AWS SES8", - "type": "n8n-nodes-base.awsSes", - "typeVersion": 1, - "position": [ - 800, - 100 - ], - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - }, - "id": "a43d3806-6471-4db1-ac5b-ebf3f85198ca" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "templateName", - "value": "=VerificationTemplate{{Date.now()}}" - } - ] - }, - "options": {} - }, - "name": "Set1", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 450, - 100 - ], - "id": "4c2fa60b-186d-49bc-8c1c-125c25553acb" - }, - { - "parameters": { - "resource": "customVerificationEmail", - "operation": "getAll", - "limit": 1 - }, - "name": "AWS SES9", - "type": "n8n-nodes-base.awsSes", - "typeVersion": 1, - "position": [ - 1000, - 100 - ], - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - }, - "id": "cfcaa069-6215-4adf-81cf-20a8d7d4da49" - }, - { - "parameters": { - "resource": "customVerificationEmail", - "operation": "update", - "templateName": "={{$node[\"Set1\"].json[\"templateName\"]}}", - "updateFields": { - "failureRedirectionURL": "https://community.n8n.io/" - } - }, - "name": "AWS SES10", - "type": "n8n-nodes-base.awsSes", - "typeVersion": 1, - "position": [ - 1200, - 100 - ], - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - }, - "id": "42712f43-3c40-48db-b031-f370b75efae6" - }, - { - "parameters": { - "resource": "customVerificationEmail", - "operation": "delete", - "templateName": "={{$node[\"Set1\"].json[\"templateName\"]}}" - }, - "name": "AWS SES11", - "type": "n8n-nodes-base.awsSes", - "typeVersion": 1, - "position": [ - 1400, - 100 - ], - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - }, - "id": "ec9b73d3-c23c-4f14-9e2e-2c55910d508f" - } - ], - "connections": { - "AWS SES": { - "main": [ - [ - { - "node": "AWS SES1", - "type": "main", - "index": 0 - } - ] - ] - }, - "AWS SES1": { - "main": [ - [ - { - "node": "AWS SES2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set": { - "main": [ - [ - { - "node": "AWS SES", - "type": "main", - "index": 0 - } - ] - ] - }, - "AWS SES2": { - "main": [ - [ - { - "node": "AWS SES3", - "type": "main", - "index": 0 - } - ] - ] - }, - "AWS SES3": { - "main": [ - [ - { - "node": "AWS SES5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - }, - { - "node": "Set1", - "type": "main", - "index": 0 - } - ] - ] - }, - "AWS SES5": { - "main": [ - [ - { - "node": "AWS SES6", - "type": "main", - "index": 0 - } - ] - ] - }, - "AWS SES6": { - "main": [ - [ - { - "node": "AWS SES4", - "type": "main", - "index": 0 - } - ] - ] - }, - "AWS SES7": { - "main": [ - [ - { - "node": "AWS SES8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set1": { - "main": [ - [ - { - "node": "AWS SES7", - "type": "main", - "index": 0 - } - ] - ] - }, - "AWS SES8": { - "main": [ - [ - { - "node": "AWS SES9", - "type": "main", - "index": 0 - } - ] - ] - }, - "AWS SES9": { - "main": [ - [ - { - "node": "AWS SES10", - "type": "main", - "index": 0 - } - ] - ] - }, - "AWS SES10": { - "main": [ - [ - { - "node": "AWS SES11", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/158.json b/test-workflows/workflows/158.json deleted file mode 100644 index da78e96f915..00000000000 --- a/test-workflows/workflows/158.json +++ /dev/null @@ -1,260 +0,0 @@ -{ - "createdAt": "2021-03-25T15:40:17.167Z", - "updatedAt": "2021-03-25T15:40:17.167Z", - "id": "158", - "name": "MicrosoftSQL:insert update executeQuery", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "07cfaafd-88a2-4563-9c2d-7ecfacc4a008" - }, - { - "parameters": { - "table": "TestTable", - "columns": "id,content" - }, - "name": "Microsoft SQL", - "type": "n8n-nodes-base.microsoftSql", - "typeVersion": 1, - "position": [ - 550, - 300 - ], - "credentials": { - "microsoftSql": { - "id": "98", - "name": "Microsoft SQL" - } - }, - "id": "e854f1b2-572c-4697-8597-aaa1cbfb06cb" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "content", - "value": "=Content{{(new Date()).toISOString()}}" - } - ], - "number": [ - { - "name": "id", - "value": "={{Math.round(Math.random()*10000)}}" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 400, - 300 - ], - "id": "59f67b24-0711-4944-aec9-b3470e58ef3a" - }, - { - "parameters": { - "operation": "update", - "table": "TestTable", - "columns": "id,content" - }, - "name": "Microsoft SQL1", - "type": "n8n-nodes-base.microsoftSql", - "typeVersion": 1, - "position": [ - 850, - 300 - ], - "credentials": { - "microsoftSql": { - "id": "98", - "name": "Microsoft SQL" - } - }, - "id": "7dd65584-a631-4365-aa97-d1eac48055dd" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "content", - "value": "=UpdatedContent{{(new Date()).toISOString()}}" - } - ], - "number": [] - }, - "options": {} - }, - "name": "Set1", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 700, - 300 - ], - "id": "a7177030-713f-456c-97d8-2d1eeeabacd8" - }, - { - "parameters": { - "operation": "executeQuery", - "query": "=SELECT * FROM TestTable WHERE id={{$node[\"Set\"].json[\"id\"]}};" - }, - "name": "Microsoft SQL2", - "type": "n8n-nodes-base.microsoftSql", - "typeVersion": 1, - "position": [ - 1000, - 300 - ], - "notesInFlow": true, - "credentials": { - "microsoftSql": { - "id": "98", - "name": "Microsoft SQL" - } - }, - "notes": "Execute Query (SELECT one)", - "id": "66a5e1da-49ef-4b2a-a505-6d42985c72d3" - }, - { - "parameters": { - "operation": "delete", - "table": "TestTable" - }, - "name": "Microsoft SQL3", - "type": "n8n-nodes-base.microsoftSql", - "typeVersion": 1, - "position": [ - 1150, - 300 - ], - "credentials": { - "microsoftSql": { - "id": "98", - "name": "Microsoft SQL" - } - }, - "id": "43594a06-313c-40f6-b454-7bf217d8dfb8" - }, - { - "parameters": { - "operation": "executeQuery", - "query": "SELECT * FROM TestTable;" - }, - "name": "Microsoft SQL4", - "type": "n8n-nodes-base.microsoftSql", - "typeVersion": 1, - "position": [ - 1300, - 300 - ], - "notesInFlow": true, - "credentials": { - "microsoftSql": { - "id": "98", - "name": "Microsoft SQL" - } - }, - "notes": "Execute Query (SELECT All)", - "id": "5c833fc6-917e-445b-b4bc-d7d2090c9e1a" - } - ], - "connections": { - "Microsoft SQL": { - "main": [ - [ - { - "node": "Set1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set": { - "main": [ - [ - { - "node": "Microsoft SQL", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set1": { - "main": [ - [ - { - "node": "Microsoft SQL1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft SQL1": { - "main": [ - [ - { - "node": "Microsoft SQL2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft SQL2": { - "main": [ - [ - { - "node": "Microsoft SQL3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft SQL3": { - "main": [ - [ - { - "node": "Microsoft SQL4", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/159.json b/test-workflows/workflows/159.json deleted file mode 100644 index 4ac38937666..00000000000 --- a/test-workflows/workflows/159.json +++ /dev/null @@ -1,457 +0,0 @@ -{ - "createdAt": "2021-03-25T16:19:55.787Z", - "updatedAt": "2021-03-25T16:30:10.075Z", - "id": "159", - "name": "Tapfiliate:Affiliate:create getAll get delete:ProgramAffiliate:add disapprove approve get getAll:AffiliateMetaData:add update remove", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "35279fb2-20b3-4fb0-b959-7a34dfdd053f" - }, - { - "parameters": { - "email": "=fake{{Date.now()}}@gmail.com", - "firstname": "=Fname{{Date.now()}}", - "lastname": "=Lname{{Date.now()}}", - "additionalFields": {} - }, - "name": "Tapfiliate", - "type": "n8n-nodes-base.tapfiliate", - "typeVersion": 1, - "position": [ - 500, - 300 - ], - "credentials": { - "tapfiliateApi": { - "id": "125", - "name": "Tapfiliate API creds" - } - }, - "id": "c69d2f6e-658d-4372-a697-f7e56b1a0f3e" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "Tapfiliate1", - "type": "n8n-nodes-base.tapfiliate", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "credentials": { - "tapfiliateApi": { - "id": "125", - "name": "Tapfiliate API creds" - } - }, - "id": "448a390b-2bf9-4676-bb8a-a963a6662117" - }, - { - "parameters": { - "operation": "get", - "affiliateId": "={{$node[\"Tapfiliate\"].json[\"id\"]}}" - }, - "name": "Tapfiliate2", - "type": "n8n-nodes-base.tapfiliate", - "typeVersion": 1, - "position": [ - 800, - 300 - ], - "credentials": { - "tapfiliateApi": { - "id": "125", - "name": "Tapfiliate API creds" - } - }, - "id": "6d5a78c3-8e56-4401-ada4-2de21b0710c6" - }, - { - "parameters": { - "operation": "delete", - "affiliateId": "={{$node[\"Tapfiliate\"].json[\"id\"]}}" - }, - "name": "Tapfiliate3", - "type": "n8n-nodes-base.tapfiliate", - "typeVersion": 1, - "position": [ - 1850, - 300 - ], - "credentials": { - "tapfiliateApi": { - "id": "125", - "name": "Tapfiliate API creds" - } - }, - "id": "b30f84fe-d53f-485a-8362-509e66c19060" - }, - { - "parameters": { - "resource": "affiliateMetadata", - "affiliateId": "={{$node[\"Tapfiliate\"].json[\"id\"]}}", - "metadataUi": { - "metadataValues": [ - { - "key": "source", - "value": "n8n" - } - ] - } - }, - "name": "Tapfiliate4", - "type": "n8n-nodes-base.tapfiliate", - "typeVersion": 1, - "position": [ - 950, - 400 - ], - "credentials": { - "tapfiliateApi": { - "id": "125", - "name": "Tapfiliate API creds" - } - }, - "id": "a6109eae-d935-48c9-a9aa-b06f15f604c9" - }, - { - "parameters": { - "resource": "affiliateMetadata", - "operation": "update", - "affiliateId": "={{$node[\"Tapfiliate\"].json[\"id\"]}}", - "key": "source", - "value": "n8n.io" - }, - "name": "Tapfiliate5", - "type": "n8n-nodes-base.tapfiliate", - "typeVersion": 1, - "position": [ - 1100, - 400 - ], - "credentials": { - "tapfiliateApi": { - "id": "125", - "name": "Tapfiliate API creds" - } - }, - "id": "0492bf9a-1a4b-4282-8a07-1319fe026e45" - }, - { - "parameters": { - "resource": "affiliateMetadata", - "operation": "remove", - "affiliateId": "={{$node[\"Tapfiliate\"].json[\"id\"]}}", - "key": "source" - }, - "name": "Tapfiliate6", - "type": "n8n-nodes-base.tapfiliate", - "typeVersion": 1, - "position": [ - 1250, - 400 - ], - "credentials": { - "tapfiliateApi": { - "id": "125", - "name": "Tapfiliate API creds" - } - }, - "id": "baf74150-4967-4c31-8bbf-602ffdeef566" - }, - { - "parameters": { - "resource": "programAffiliate", - "programId": "nodeqa-affiliate", - "affiliateId": "={{$node[\"Tapfiliate\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Tapfiliate7", - "type": "n8n-nodes-base.tapfiliate", - "typeVersion": 1, - "position": [ - 950, - 200 - ], - "credentials": { - "tapfiliateApi": { - "id": "125", - "name": "Tapfiliate API creds" - } - }, - "id": "c909217e-f419-46b9-83fd-7a3b7c8203dc" - }, - { - "parameters": { - "resource": "programAffiliate", - "operation": "disapprove", - "programId": "nodeqa-affiliate", - "affiliateId": "={{$node[\"Tapfiliate\"].json[\"id\"]}}" - }, - "name": "Tapfiliate8", - "type": "n8n-nodes-base.tapfiliate", - "typeVersion": 1, - "position": [ - 1100, - 200 - ], - "credentials": { - "tapfiliateApi": { - "id": "125", - "name": "Tapfiliate API creds" - } - }, - "id": "9178e7d7-d054-466d-83c3-e99b09705035" - }, - { - "parameters": { - "resource": "programAffiliate", - "operation": "approve", - "programId": "nodeqa-affiliate", - "affiliateId": "={{$node[\"Tapfiliate\"].json[\"id\"]}}" - }, - "name": "Tapfiliate9", - "type": "n8n-nodes-base.tapfiliate", - "typeVersion": 1, - "position": [ - 1250, - 200 - ], - "credentials": { - "tapfiliateApi": { - "id": "125", - "name": "Tapfiliate API creds" - } - }, - "id": "8c873324-9d69-4bc8-97c8-3a3907aff5a2" - }, - { - "parameters": { - "resource": "programAffiliate", - "operation": "get", - "programId": "nodeqa-affiliate", - "affiliateId": "={{$node[\"Tapfiliate\"].json[\"id\"]}}" - }, - "name": "Tapfiliate10", - "type": "n8n-nodes-base.tapfiliate", - "typeVersion": 1, - "position": [ - 1400, - 200 - ], - "credentials": { - "tapfiliateApi": { - "id": "125", - "name": "Tapfiliate API creds" - } - }, - "id": "16dc0791-f3b0-4d70-ba91-8f68eaceb7e0" - }, - { - "parameters": { - "resource": "programAffiliate", - "operation": "getAll", - "programId": "nodeqa-affiliate", - "limit": 1, - "filters": {} - }, - "name": "Tapfiliate11", - "type": "n8n-nodes-base.tapfiliate", - "typeVersion": 1, - "position": [ - 1550, - 200 - ], - "credentials": { - "tapfiliateApi": { - "id": "125", - "name": "Tapfiliate API creds" - } - }, - "id": "56c57083-92db-4e64-97d8-34fc470147de" - }, - { - "parameters": { - "mode": "wait" - }, - "name": "Merge", - "type": "n8n-nodes-base.merge", - "typeVersion": 1, - "position": [ - 1700, - 300 - ], - "id": "8465e4b1-c77d-4522-8f59-df64f4582255" - } - ], - "connections": { - "Tapfiliate": { - "main": [ - [ - { - "node": "Tapfiliate1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Tapfiliate1": { - "main": [ - [ - { - "node": "Tapfiliate2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Tapfiliate", - "type": "main", - "index": 0 - } - ] - ] - }, - "Tapfiliate2": { - "main": [ - [ - { - "node": "Tapfiliate4", - "type": "main", - "index": 0 - }, - { - "node": "Tapfiliate7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Tapfiliate4": { - "main": [ - [ - { - "node": "Tapfiliate5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Tapfiliate5": { - "main": [ - [ - { - "node": "Tapfiliate6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Tapfiliate7": { - "main": [ - [ - { - "node": "Tapfiliate8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Tapfiliate8": { - "main": [ - [ - { - "node": "Tapfiliate9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Tapfiliate9": { - "main": [ - [ - { - "node": "Tapfiliate10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Tapfiliate10": { - "main": [ - [ - { - "node": "Tapfiliate11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Tapfiliate11": { - "main": [ - [ - { - "node": "Merge", - "type": "main", - "index": 0 - } - ] - ] - }, - "Tapfiliate6": { - "main": [ - [ - { - "node": "Merge", - "type": "main", - "index": 1 - } - ] - ] - }, - "Merge": { - "main": [ - [ - { - "node": "Tapfiliate3", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/16.json b/test-workflows/workflows/16.json deleted file mode 100644 index 1efac1a16f1..00000000000 --- a/test-workflows/workflows/16.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "createdAt": "2021-02-16T12:21:52.835Z", - "updatedAt": "2021-07-15T14:40:02.810Z", - "id": "16", - "name": "OpenWeatherMap:: current-weather 5-day-forecast", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "3af2c46a-cc25-4094-8889-0539e80bbbfb" - }, - { - "parameters": { - "cityName": "berlin", - "language": "en" - }, - "name": "OpenWeatherMap", - "type": "n8n-nodes-base.openWeatherMap", - "typeVersion": 1, - "position": [ - 490, - 300 - ], - "credentials": { - "openWeatherMapApi": { - "id": "9", - "name": "openweathermap token" - } - }, - "notes": "IGNORED_PROPERTIES=rain", - "id": "e12fb37d-8207-4219-a3df-20cbd5b9a4d8" - }, - { - "parameters": { - "operation": "5DayForecast", - "cityName": "berlin", - "language": "en" - }, - "name": "OpenWeatherMap1", - "type": "n8n-nodes-base.openWeatherMap", - "typeVersion": 1, - "position": [ - 690, - 300 - ], - "credentials": { - "openWeatherMapApi": { - "id": "9", - "name": "openweathermap token" - } - }, - "id": "4923e536-3bc8-4659-b3bc-c15b7cf7352f" - } - ], - "connections": { - "OpenWeatherMap": { - "main": [ - [ - { - "node": "OpenWeatherMap1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "OpenWeatherMap", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/160.json b/test-workflows/workflows/160.json deleted file mode 100644 index b5a3cb6cd5b..00000000000 --- a/test-workflows/workflows/160.json +++ /dev/null @@ -1,293 +0,0 @@ -{ - "createdAt": "2021-03-26T08:52:34.511Z", - "updatedAt": "2021-11-19T13:01:47.053Z", - "id": "160", - "name": "Wordpress:User:getAll get create update:Post:create get getAll update", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "1a1d54e3-a566-4100-9ce1-3299836fbf11" - }, - { - "parameters": { - "resource": "user", - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "Wordpress", - "type": "n8n-nodes-base.wordpress", - "typeVersion": 1, - "position": [ - 450, - 150 - ], - "credentials": { - "wordpressApi": { - "id": "126", - "name": "Wordpress API creds" - } - }, - "id": "47be3700-b529-4ea0-b262-9230788cc460" - }, - { - "parameters": { - "resource": "user", - "username": "=username{{Date.now()}}", - "name": "=Name{{Date.now()}}", - "firstName": "=Fname{{Date.now()}}", - "lastName": "=Lname{{Date.now()}}", - "email": "=fake{{Date.now()}}@gmail.com", - "password": "={{new Array(12).fill().map(() => String.fromCharCode(Math.random()*25+66)).join(\"\")}}", - "additionalFields": {} - }, - "name": "Wordpress1", - "type": "n8n-nodes-base.wordpress", - "typeVersion": 1, - "position": [ - 750, - 150 - ], - "credentials": { - "wordpressApi": { - "id": "126", - "name": "Wordpress API creds" - } - }, - "id": "3195d3b1-4dad-4470-9707-cefbe4409813" - }, - { - "parameters": { - "resource": "user", - "operation": "get", - "userId": "={{$node[\"Wordpress\"].json[\"id\"]}}", - "options": {} - }, - "name": "Wordpress2", - "type": "n8n-nodes-base.wordpress", - "typeVersion": 1, - "position": [ - 600, - 150 - ], - "credentials": { - "wordpressApi": { - "id": "126", - "name": "Wordpress API creds" - } - }, - "id": "e1ef9cce-7248-470b-a827-b4bb27c3ce22" - }, - { - "parameters": { - "resource": "user", - "operation": "update", - "userId": "={{$node[\"Wordpress1\"].json[\"id\"]}}", - "updateFields": { - "slug": "=slug-updated{{$node[\"Wordpress1\"].json[\"slug\"]}}" - } - }, - "name": "Wordpress3", - "type": "n8n-nodes-base.wordpress", - "typeVersion": 1, - "position": [ - 900, - 150 - ], - "credentials": { - "wordpressApi": { - "id": "126", - "name": "Wordpress API creds" - } - }, - "id": "cf5aa95b-d232-493e-9c8a-d35039ac13b4" - }, - { - "parameters": { - "title": "=Title{{Date.now()}}", - "additionalFields": { - "content": "=Post content {{Date.now()}}", - "status": "draft" - } - }, - "name": "Wordpress4", - "type": "n8n-nodes-base.wordpress", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "wordpressApi": { - "id": "126", - "name": "Wordpress API creds" - } - }, - "id": "3e3bf3c6-e000-4034-9919-6ff705999f1a" - }, - { - "parameters": { - "operation": "get", - "postId": "={{$node[\"Wordpress4\"].json[\"id\"]}}", - "options": {} - }, - "name": "Wordpress5", - "type": "n8n-nodes-base.wordpress", - "typeVersion": 1, - "position": [ - 600, - 300 - ], - "credentials": { - "wordpressApi": { - "id": "126", - "name": "Wordpress API creds" - } - }, - "id": "761de321-3bf2-4c4d-9432-ffe80813bda9" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "Wordpress6", - "type": "n8n-nodes-base.wordpress", - "typeVersion": 1, - "position": [ - 750, - 300 - ], - "credentials": { - "wordpressApi": { - "id": "126", - "name": "Wordpress API creds" - } - }, - "id": "2bf2fd5e-ed32-4964-95dd-2a94e7f0fb4d" - }, - { - "parameters": { - "operation": "update", - "postId": "={{$node[\"Wordpress4\"].json[\"id\"]}}", - "updateFields": { - "title": "=Updated{{$node[\"Wordpress4\"].json[\"title\"][\"rendered\"]}}" - } - }, - "name": "Wordpress7", - "type": "n8n-nodes-base.wordpress", - "typeVersion": 1, - "position": [ - 900, - 300 - ], - "credentials": { - "wordpressApi": { - "id": "126", - "name": "Wordpress API creds" - } - }, - "id": "f574c739-2015-4996-ace7-c9d6f7f170ba" - } - ], - "connections": { - "Wordpress": { - "main": [ - [ - { - "node": "Wordpress2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wordpress2": { - "main": [ - [ - { - "node": "Wordpress1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wordpress1": { - "main": [ - [ - { - "node": "Wordpress3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wordpress4": { - "main": [ - [ - { - "node": "Wordpress5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wordpress5": { - "main": [ - [ - { - "node": "Wordpress6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Wordpress", - "type": "main", - "index": 0 - }, - { - "node": "Wordpress4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wordpress6": { - "main": [ - [ - { - "node": "Wordpress7", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/161.json b/test-workflows/workflows/161.json deleted file mode 100644 index 1fa13a1e276..00000000000 --- a/test-workflows/workflows/161.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "createdAt": "2021-03-29T08:38:31.241Z", - "updatedAt": "2021-03-29T08:39:51.181Z", - "id": "161", - "name": "Vonage:SMS:send", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "e945a821-3ba5-4579-966a-2dad40345d27" - }, - { - "parameters": { - "from": "21624827732", - "to": "21624827732", - "message": "=Message{{Date.now()}}", - "additionalFields": {} - }, - "name": "Vonage", - "type": "n8n-nodes-base.vonage", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "vonageApi": { - "id": "128", - "name": "Vonage API creds" - } - }, - "id": "d92003eb-6352-45fe-9e96-7a4b98fdd513" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Vonage", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/162.json b/test-workflows/workflows/162.json deleted file mode 100644 index ec8c7cc8aac..00000000000 --- a/test-workflows/workflows/162.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "createdAt": "2021-04-06T08:27:12.354Z", - "updatedAt": "2021-04-19T08:16:20.657Z", - "id": "162", - "name": "AWSSQS:sendMessage", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "61c9e1a4-21ab-4146-82ae-4c4388c1da30" - }, - { - "parameters": { - "queue": "https://sqs.us-east-1.amazonaws.com/589875339869/StandardTestQueue", - "sendInputData": false, - "message": "=StandardMessage{{Date.now()}}", - "options": { - "messageAttributes": { - "string": [ - { - "name": "type", - "value": "test" - } - ] - } - } - }, - "name": "AWS SQS", - "type": "n8n-nodes-base.awsSqs", - "typeVersion": 1, - "position": [ - 550, - 200 - ], - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - }, - "id": "0194b047-c629-4f68-a629-12455de6ecf6" - }, - { - "parameters": { - "queue": "https://sqs.us-east-1.amazonaws.com/589875339869/FifoTestQueue.fifo", - "queueType": "fifo", - "sendInputData": false, - "message": "=FIFOMessage{{Date.now()}}", - "messageGroupId": "TestMessageGroupId", - "options": { - "messageAttributes": { - "string": [ - { - "name": "type", - "value": "test" - } - ] - }, - "messageDeduplicationId": "DedupTestMessageGroupId" - } - }, - "name": "AWS SQS1", - "type": "n8n-nodes-base.awsSqs", - "typeVersion": 1, - "position": [ - 550, - 380 - ], - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - }, - "id": "25bc7b70-06c8-4605-8744-f27ab8765761" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "AWS SQS1", - "type": "main", - "index": 0 - }, - { - "node": "AWS SQS", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/163.json b/test-workflows/workflows/163.json deleted file mode 100644 index 4e3a1a33f29..00000000000 --- a/test-workflows/workflows/163.json +++ /dev/null @@ -1,277 +0,0 @@ -{ - "createdAt": "2021-04-06T10:52:29.924Z", - "updatedAt": "2021-04-06T12:05:26.358Z", - "id": "163", - "name": "GoogleSlides:Presentation:create get getSlides replaceText:Page:get getThumbnail", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "280bf9cc-7749-4adb-972f-17c43e386aa9" - }, - { - "parameters": { - "authentication": "serviceAccount", - "title": "=Slides{{(new Date()).toUTCString()}}" - }, - "name": "Google Slides", - "type": "n8n-nodes-base.googleSlides", - "typeVersion": 1, - "position": [ - 480, - 220 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "4c2f181a-17c4-41d9-aef1-05c8e0641974" - }, - { - "parameters": { - "authentication": "serviceAccount", - "operation": "get", - "presentationId": "={{$node[\"Google Slides\"].json[\"presentationId\"]}}" - }, - "name": "Google Slides1", - "type": "n8n-nodes-base.googleSlides", - "typeVersion": 1, - "position": [ - 640, - 220 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "1b3d04df-4bab-4b44-b1c3-1ed81e90c7f0" - }, - { - "parameters": { - "authentication": "serviceAccount", - "operation": "getSlides", - "presentationId": "={{$node[\"Google Slides\"].json[\"presentationId\"]}}" - }, - "name": "Google Slides2", - "type": "n8n-nodes-base.googleSlides", - "typeVersion": 1, - "position": [ - 800, - 220 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "65882408-7d0c-4869-aa45-d454cc9e3c3f" - }, - { - "parameters": { - "authentication": "serviceAccount", - "operation": "replaceText", - "presentationId": "=1y7glcx_2V4LQoSWXTkBbn-kWRLBEAsn7I27B6RQ3cdo", - "textUi": { - "textValues": [ - { - "pageObjectIds": [ - "p" - ], - "replaceText": "n8n", - "text": "Title" - } - ] - }, - "options": { - "revisionId": "" - } - }, - "name": "Google Slides3", - "type": "n8n-nodes-base.googleSlides", - "typeVersion": 1, - "position": [ - 500, - 50 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "81aa81ed-04d3-4204-a583-9b31fda35266" - }, - { - "parameters": { - "authentication": "serviceAccount", - "resource": "page", - "operation": "getThumbnail", - "presentationId": "={{$node[\"Google Slides\"].json[\"presentationId\"]}}", - "pageObjectId": "p", - "download": true - }, - "name": "Google Slides4", - "type": "n8n-nodes-base.googleSlides", - "typeVersion": 1, - "position": [ - 640, - 390 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "4b42479d-07ed-49ce-9bf6-4c13e7541d89" - }, - { - "parameters": { - "authentication": "serviceAccount", - "resource": "page", - "presentationId": "={{$node[\"Google Slides\"].json[\"presentationId\"]}}", - "pageObjectId": "p" - }, - "name": "Google Slides5", - "type": "n8n-nodes-base.googleSlides", - "typeVersion": 1, - "position": [ - 800, - 390 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "4525257c-52bd-4520-87eb-b7327b01bccb" - }, - { - "parameters": { - "authentication": "serviceAccount", - "operation": "replaceText", - "presentationId": "=1y7glcx_2V4LQoSWXTkBbn-kWRLBEAsn7I27B6RQ3cdo", - "textUi": { - "textValues": [ - { - "pageObjectIds": [ - "p" - ], - "replaceText": "Title", - "text": "n8n" - } - ] - }, - "options": { - "revisionId": "" - } - }, - "name": "Google Slides6", - "type": "n8n-nodes-base.googleSlides", - "typeVersion": 1, - "position": [ - 650, - 50 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "11ef0bd7-e0bf-4779-b21e-4a9f81327119" - } - ], - "connections": { - "Google Slides": { - "main": [ - [ - { - "node": "Google Slides1", - "type": "main", - "index": 0 - }, - { - "node": "Google Slides4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Slides1": { - "main": [ - [ - { - "node": "Google Slides2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Slides2": { - "main": [ - [] - ] - }, - "Google Slides4": { - "main": [ - [ - { - "node": "Google Slides5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Google Slides", - "type": "main", - "index": 0 - }, - { - "node": "Google Slides3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Slides3": { - "main": [ - [ - { - "node": "Google Slides6", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/164.json b/test-workflows/workflows/164.json deleted file mode 100644 index cedfa5dffe0..00000000000 --- a/test-workflows/workflows/164.json +++ /dev/null @@ -1,812 +0,0 @@ -{ - "createdAt": "2021-04-07T16:05:43.152Z", - "updatedAt": "2021-05-21T11:15:28.503Z", - "id": "164", - "name": "ClickUp:SpaceTag:create getAll update delete:TaskTag:add remove:TaskList:add remove", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "e574628c-4213-42a6-9675-067f8663a712" - }, - { - "parameters": { - "resource": "spaceTag", - "space": "8716115", - "name": "={{$node[\"Set\"].json[\"name\"]}}", - "foregroundColor": "#fff", - "backgroundColor": "#FF6D5A" - }, - "name": "ClickUp", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 550, - 300 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "cac9ec08-3ee6-4e13-bf16-97e2f65384f3" - }, - { - "parameters": { - "resource": "spaceTag", - "operation": "getAll", - "space": "8716115", - "returnAll": false, - "limit": 1 - }, - "name": "ClickUp2", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 850, - 300 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "c23b91c3-7954-4779-ae69-6ba40d03c207" - }, - { - "parameters": { - "resource": "spaceTag", - "operation": "update", - "space": "8716115", - "name": "={{$node[\"Set\"].json[\"name\"].toLowerCase()}}", - "newName": "={{$node[\"Set1\"].json[\"updatedname\"]}}", - "foregroundColor": "#FF6D5A" - }, - "name": "ClickUp3", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1300, - 300 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "a242d8e6-7e91-4cf2-a092-677a156e72bd" - }, - { - "parameters": { - "resource": "spaceTag", - "operation": "delete", - "space": "8716115", - "name": "={{$node[\"Set1\"].json[\"updatedname\"].toLowerCase()}}" - }, - "name": "ClickUp4", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1600, - 300 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "8c4ab219-84b6-4bd6-8b31-babfd3971f5d" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "name", - "value": "=SpaceTag{{Date.now()}}" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 400, - 300 - ], - "id": "52b9c2d4-d0e7-46f7-b62e-0c5e55d50bf4" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "updatedname", - "value": "=UpdatedSpaceTag{{Date.now()}}" - } - ] - }, - "options": {} - }, - "name": "Set1", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 1000, - 300 - ], - "id": "6da544fc-4cd1-479a-8692-7ed19d7b2125" - }, - { - "parameters": { - "resource": "list", - "operation": "create", - "team": "4651110", - "space": "8716115", - "folderless": true, - "name": "=TestList{{Date.now()}}", - "additionalFields": {} - }, - "name": "ClickUp1", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 400, - 450 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "d4cec873-fa7d-46b5-80d8-99c1976cf787" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second", - "type": "n8n-nodes-base.function", - "position": [ - 550, - 500 - ], - "typeVersion": 1, - "id": "e4f9c382-78bb-4eb3-b27a-408e5d696cce" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second1", - "type": "n8n-nodes-base.function", - "position": [ - 700, - 300 - ], - "typeVersion": 1, - "id": "2dad6f1d-f2e3-48db-8593-e741e04bd5ae" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second2", - "type": "n8n-nodes-base.function", - "position": [ - 1150, - 300 - ], - "typeVersion": 1, - "id": "f5f6b488-12be-4c2c-91f0-ff1b6a932a4c" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second3", - "type": "n8n-nodes-base.function", - "position": [ - 1450, - 300 - ], - "typeVersion": 1, - "id": "29ab4028-3ffd-4b2a-bad6-b1702f2709c2" - }, - { - "parameters": { - "team": "4651110", - "space": "8716115", - "folderless": true, - "list": "={{$node[\"ClickUp1\"].json[\"id\"]}}", - "name": "=testTask{{Date.now()}}", - "additionalFields": {} - }, - "name": "ClickUp5", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1000, - 500 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "8e04926c-2eca-41e2-b48a-bf3b679d4df4" - }, - { - "parameters": { - "resource": "taskList", - "taskId": "={{$node[\"ClickUp5\"].json[\"id\"]}}", - "listId": "={{$node[\"ClickUp7\"].json[\"id\"]}}" - }, - "name": "ClickUp6", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 2050, - 500 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "55659b0d-1067-4a18-a849-72ce9bc20e39" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second4", - "type": "n8n-nodes-base.function", - "position": [ - 1150, - 500 - ], - "typeVersion": 1, - "id": "94369ca0-c7c9-4b4e-ad64-7f400169ea24" - }, - { - "parameters": { - "resource": "list", - "operation": "create", - "team": "4651110", - "space": "8716115", - "folderless": true, - "name": "=TestList{{Date.now()}}", - "additionalFields": {} - }, - "name": "ClickUp7", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 700, - 500 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "5d662490-3d98-4427-98c8-308fba1ef216" - }, - { - "parameters": { - "keepOnlySet": true, - "values": { - "string": [ - { - "name": "name", - "value": "=TaskTag{{Date.now()}}" - } - ] - }, - "options": {} - }, - "name": "Set2", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 1300, - 600 - ], - "id": "d5d2592b-4e8e-4fef-b151-43a5d0f11d28" - }, - { - "parameters": { - "resource": "taskTag", - "taskId": "={{$node[\"ClickUp5\"].json[\"id\"]}}", - "tagName": "={{$node[\"Set2\"].json[\"name\"]}}", - "additionalFields": {} - }, - "name": "ClickUp8", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1450, - 600 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "61f2fe7f-b3a9-495a-84a3-8c3d7a7865b8" - }, - { - "parameters": { - "resource": "taskTag", - "operation": "remove", - "taskId": "={{$node[\"ClickUp5\"].json[\"id\"]}}", - "tagName": "={{$node[\"Set2\"].json[\"name\"]}}", - "additionalFields": {} - }, - "name": "ClickUp9", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1750, - 600 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "3a612843-f56e-450e-b570-597adb5c16e1" - }, - { - "parameters": { - "resource": "taskList", - "operation": "remove", - "taskId": "={{$node[\"ClickUp5\"].json[\"id\"]}}", - "listId": "={{$node[\"ClickUp7\"].json[\"id\"]}}" - }, - "name": "ClickUp10", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 2350, - 500 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "419a6bd0-af51-4835-9357-d67592c5ac59" - }, - { - "parameters": { - "operation": "delete", - "id": "={{$node[\"ClickUp5\"].json[\"id\"]}}" - }, - "name": "ClickUp11", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 2550, - 500 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "b3d6e8db-f9b1-4ad5-bb07-67414b83c06e" - }, - { - "parameters": { - "resource": "list", - "operation": "delete", - "team": "4651110", - "space": "8716115", - "folderless": true, - "list": "={{$node[\"ClickUp1\"].json[\"id\"]}}" - }, - "name": "ClickUp12", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 2700, - 500 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "f864bc89-0fbd-4268-94bd-947f4bfbd283" - }, - { - "parameters": { - "resource": "list", - "operation": "delete", - "team": "4651110", - "space": "8716115", - "folderless": true, - "list": "={{$node[\"ClickUp7\"].json[\"id\"]}}" - }, - "name": "ClickUp13", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 2850, - 500 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "a18e9bc1-c907-49a6-ad91-d06a3d08607a" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second5", - "type": "n8n-nodes-base.function", - "position": [ - 850, - 500 - ], - "typeVersion": 1, - "id": "88500c7b-e4da-4d5c-aef5-f533b1beca73" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second6", - "type": "n8n-nodes-base.function", - "position": [ - 1600, - 600 - ], - "typeVersion": 1, - "id": "a65e5617-7265-44b4-a4f9-0b24e9bc8a63" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second7", - "type": "n8n-nodes-base.function", - "position": [ - 1900, - 500 - ], - "typeVersion": 1, - "id": "b1abb9ec-9534-462e-9b87-c2b15d5fdd94" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second8", - "type": "n8n-nodes-base.function", - "position": [ - 2200, - 500 - ], - "typeVersion": 1, - "id": "4bcf2ad3-34c5-4061-9c14-eb9033e726fa" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - }, - { - "node": "ClickUp1", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp": { - "main": [ - [ - { - "node": "Sleep 0.8 second1", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp2": { - "main": [ - [ - { - "node": "Set1", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp3": { - "main": [ - [ - { - "node": "Sleep 0.8 second3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set": { - "main": [ - [ - { - "node": "ClickUp", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set1": { - "main": [ - [ - { - "node": "Sleep 0.8 second2", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp1": { - "main": [ - [ - { - "node": "Sleep 0.8 second", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second": { - "main": [ - [ - { - "node": "ClickUp7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second1": { - "main": [ - [ - { - "node": "ClickUp2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second2": { - "main": [ - [ - { - "node": "ClickUp3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second3": { - "main": [ - [ - { - "node": "ClickUp4", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp5": { - "main": [ - [ - { - "node": "Sleep 0.8 second4", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp6": { - "main": [ - [ - { - "node": "Sleep 0.8 second8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second4": { - "main": [ - [ - { - "node": "Set2", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp7": { - "main": [ - [ - { - "node": "Sleep 0.8 second5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set2": { - "main": [ - [ - { - "node": "ClickUp8", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp8": { - "main": [ - [ - { - "node": "Sleep 0.8 second6", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp9": { - "main": [ - [ - { - "node": "Sleep 0.8 second7", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp10": { - "main": [ - [ - { - "node": "ClickUp11", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp11": { - "main": [ - [ - { - "node": "ClickUp12", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp12": { - "main": [ - [ - { - "node": "ClickUp13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second5": { - "main": [ - [ - { - "node": "ClickUp5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second6": { - "main": [ - [ - { - "node": "ClickUp9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second7": { - "main": [ - [ - { - "node": "ClickUp6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second8": { - "main": [ - [ - { - "node": "ClickUp10", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/165.json b/test-workflows/workflows/165.json deleted file mode 100644 index 816c2ac40cc..00000000000 --- a/test-workflows/workflows/165.json +++ /dev/null @@ -1,264 +0,0 @@ -{ - "createdAt": "2021-04-09T07:26:51.323Z", - "updatedAt": "2021-05-21T09:03:30.653Z", - "id": "165", - "name": "Emelia:Campaign:create addContact get getAll start pause:ContactList:getAll add", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "e0161f99-f352-4391-a04c-4f5f35a5579d" - }, - { - "parameters": { - "operation": "addContact", - "campaignId": "={{$node[\"Emelia3\"].json[\"_id\"]}}", - "contactEmail": "=fake{{Date.now()}}@email.com", - "additionalFields": {} - }, - "name": "Emelia", - "type": "n8n-nodes-base.emelia", - "typeVersion": 1, - "position": [ - 590, - 150 - ], - "credentials": { - "emeliaApi": { - "id": "136", - "name": "Emelia API creds" - } - }, - "id": "b01f183f-33bb-4f66-a35b-c3510f25566c" - }, - { - "parameters": { - "campaignId": "={{$node[\"Emelia3\"].json[\"_id\"]}}" - }, - "name": "Emelia1", - "type": "n8n-nodes-base.emelia", - "typeVersion": 1, - "position": [ - 750, - 150 - ], - "credentials": { - "emeliaApi": { - "id": "136", - "name": "Emelia API creds" - } - }, - "id": "a7748a81-f4c6-4412-81f3-a30433806180" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1 - }, - "name": "Emelia2", - "type": "n8n-nodes-base.emelia", - "typeVersion": 1, - "position": [ - 750, - 300 - ], - "credentials": { - "emeliaApi": { - "id": "136", - "name": "Emelia API creds" - } - }, - "id": "3915812e-9ccc-4106-9617-f8e4a0e86721" - }, - { - "parameters": { - "operation": "create", - "campaignName": "=TestCampaign{{Date.now()}}" - }, - "name": "Emelia3", - "type": "n8n-nodes-base.emelia", - "typeVersion": 1, - "position": [ - 450, - 150 - ], - "credentials": { - "emeliaApi": { - "id": "136", - "name": "Emelia API creds" - } - }, - "id": "2c3250bc-e6e8-4d96-ba6c-e48b7d4d7029" - }, - { - "parameters": { - "operation": "start", - "campaignId": "6076e11687008a0e9fc32356" - }, - "name": "Emelia4", - "type": "n8n-nodes-base.emelia", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "emeliaApi": { - "id": "136", - "name": "Emelia API creds" - } - }, - "id": "425267c3-ceee-44b8-a225-8b9754df353d" - }, - { - "parameters": { - "operation": "pause", - "campaignId": "6076e11687008a0e9fc32356" - }, - "name": "Emelia5", - "type": "n8n-nodes-base.emelia", - "typeVersion": 1, - "position": [ - 600, - 300 - ], - "credentials": { - "emeliaApi": { - "id": "136", - "name": "Emelia API creds" - } - }, - "id": "385748b1-d93b-48f9-bcde-3f5dc8bbd72a" - }, - { - "parameters": { - "resource": "contactList", - "operation": "getAll", - "limit": 1 - }, - "name": "Emelia6", - "type": "n8n-nodes-base.emelia", - "typeVersion": 1, - "position": [ - 450, - 450 - ], - "credentials": { - "emeliaApi": { - "id": "136", - "name": "Emelia API creds" - } - }, - "id": "6026559f-751f-4cc0-9762-6be2c85011a0" - }, - { - "parameters": { - "resource": "contactList", - "operation": "add", - "contactListId": "={{$node[\"Emelia6\"].json[\"_id\"]}}", - "contactEmail": "=fakeContact{{Date.now()}}@email.com", - "additionalFields": {} - }, - "name": "Emelia7", - "type": "n8n-nodes-base.emelia", - "typeVersion": 1, - "position": [ - 600, - 450 - ], - "credentials": { - "emeliaApi": { - "id": "136", - "name": "Emelia API creds" - } - }, - "id": "9b44146c-54be-48fe-868e-30029a235f7a" - } - ], - "connections": { - "Emelia": { - "main": [ - [ - { - "node": "Emelia1", - "type": "main", - "index": 0 - }, - { - "node": "Emelia2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Emelia3": { - "main": [ - [ - { - "node": "Emelia", - "type": "main", - "index": 0 - } - ] - ] - }, - "Emelia4": { - "main": [ - [ - { - "node": "Emelia5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Emelia6": { - "main": [ - [ - { - "node": "Emelia7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Emelia3", - "type": "main", - "index": 0 - }, - { - "node": "Emelia4", - "type": "main", - "index": 0 - }, - { - "node": "Emelia6", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/166.json b/test-workflows/workflows/166.json deleted file mode 100644 index 432ee5d0b7f..00000000000 --- a/test-workflows/workflows/166.json +++ /dev/null @@ -1,520 +0,0 @@ -{ - "createdAt": "2021-04-09T07:48:03.152Z", - "updatedAt": "2021-04-16T10:57:50.621Z", - "id": "166", - "name": "Intercom:Company:create get getAll update users:Lead:create get getAll update delete:User:create get getAll update delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 270, - 300 - ], - "id": "64bf3c53-0178-4d4d-9512-03e5d4499dbd" - }, - { - "parameters": { - "resource": "company", - "companyId": "=Company{{Date.now()}}", - "additionalFields": { - "name": "=TestingCompany{{(new Date()).toISOString()}}" - }, - "customAttributesUi": { - "customAttributesValues": [] - } - }, - "name": "Intercom1", - "type": "n8n-nodes-base.intercom", - "typeVersion": 1, - "position": [ - 450, - 140 - ], - "credentials": { - "intercomApi": { - "id": "137", - "name": "Intercom API creds" - } - }, - "id": "58a9b746-7277-4ade-96cd-cbe1d7b043f1" - }, - { - "parameters": { - "resource": "company", - "operation": "get", - "selectBy": "companyId", - "value": "={{$node[\"Intercom1\"].json[\"company_id\"]}}" - }, - "name": "Intercom", - "type": "n8n-nodes-base.intercom", - "typeVersion": 1, - "position": [ - 600, - 140 - ], - "credentials": { - "intercomApi": { - "id": "137", - "name": "Intercom API creds" - } - }, - "id": "6dc0d8fe-d4f2-420b-aa34-dbae9b3720f7" - }, - { - "parameters": { - "resource": "company", - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "Intercom2", - "type": "n8n-nodes-base.intercom", - "typeVersion": 1, - "position": [ - 750, - 140 - ], - "alwaysOutputData": true, - "credentials": { - "intercomApi": { - "id": "137", - "name": "Intercom API creds" - } - }, - "id": "ca96c3e9-1a42-4586-a59e-e020ff6bb533" - }, - { - "parameters": { - "resource": "company", - "operation": "update", - "companyId": "={{$node[\"Intercom1\"].json[\"company_id\"]}}", - "additionalFields": { - "name": "=Updated{{$node[\"Intercom\"].json[\"name\"]}}" - } - }, - "name": "Intercom3", - "type": "n8n-nodes-base.intercom", - "typeVersion": 1, - "position": [ - 900, - 140 - ], - "credentials": { - "intercomApi": { - "id": "137", - "name": "Intercom API creds" - } - }, - "id": "10bc6886-98c8-4abd-a43e-955b02228f32" - }, - { - "parameters": { - "resource": "company", - "operation": "users", - "listBy": "companyId", - "value": "={{$node[\"Intercom\"].json[\"company_id\"]}}" - }, - "name": "Intercom4", - "type": "n8n-nodes-base.intercom", - "typeVersion": 1, - "position": [ - 1050, - 140 - ], - "credentials": { - "intercomApi": { - "id": "137", - "name": "Intercom API creds" - } - }, - "id": "b9b67277-92d0-4f4f-ad58-c052bd7fdc1e" - }, - { - "parameters": { - "resource": "lead", - "email": "=fake{{Date.now()}}@email.com", - "additionalFields": { - "avatar": "https://static.intercomassets.com/ember/assets/images/onboarding/home/guide-assistants/phil-978b5567c644d4c0f67a4516c03c6b91.png" - } - }, - "name": "Intercom5", - "type": "n8n-nodes-base.intercom", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "intercomApi": { - "id": "137", - "name": "Intercom API creds" - } - }, - "id": "ee755a25-9b93-4041-9021-e4f81c3d7c69" - }, - { - "parameters": { - "resource": "lead", - "operation": "get", - "selectBy": "id", - "value": "={{$node[\"Intercom5\"].json[\"id\"]}}" - }, - "name": "Intercom6", - "type": "n8n-nodes-base.intercom", - "typeVersion": 1, - "position": [ - 600, - 300 - ], - "credentials": { - "intercomApi": { - "id": "137", - "name": "Intercom API creds" - } - }, - "id": "fceb5905-6512-4c30-b0e8-de1720e7cace" - }, - { - "parameters": { - "resource": "lead", - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "Intercom7", - "type": "n8n-nodes-base.intercom", - "typeVersion": 1, - "position": [ - 750, - 300 - ], - "alwaysOutputData": true, - "credentials": { - "intercomApi": { - "id": "137", - "name": "Intercom API creds" - } - }, - "id": "03ace0e9-3abc-4144-ba2a-6a3785887d39" - }, - { - "parameters": { - "resource": "lead", - "operation": "update", - "value": "={{$node[\"Intercom5\"].json[\"id\"]}}", - "additionalFields": { - "name": "=UpdatedLead" - } - }, - "name": "Intercom8", - "type": "n8n-nodes-base.intercom", - "typeVersion": 1, - "position": [ - 900, - 300 - ], - "credentials": { - "intercomApi": { - "id": "137", - "name": "Intercom API creds" - } - }, - "id": "0deacb0c-d21c-4f03-85c1-83f6383f3c67" - }, - { - "parameters": { - "resource": "lead", - "operation": "delete", - "deleteBy": "id", - "value": "={{$node[\"Intercom5\"].json[\"id\"]}}" - }, - "name": "Intercom9", - "type": "n8n-nodes-base.intercom", - "typeVersion": 1, - "position": [ - 1050, - 300 - ], - "credentials": { - "intercomApi": { - "id": "137", - "name": "Intercom API creds" - } - }, - "id": "c4dbf1f2-2c89-4041-b409-64f83643c235" - }, - { - "parameters": { - "identifierType": "userId", - "idValue": "=User{{Date.now()}}", - "additionalFields": {} - }, - "name": "Intercom10", - "type": "n8n-nodes-base.intercom", - "typeVersion": 1, - "position": [ - 450, - 440 - ], - "credentials": { - "intercomApi": { - "id": "137", - "name": "Intercom API creds" - } - }, - "id": "3a93e3d0-b94e-4987-bf80-b272d9315472" - }, - { - "parameters": { - "operation": "get", - "selectBy": "id", - "value": "={{$node[\"Intercom10\"].json[\"id\"]}}" - }, - "name": "Intercom11", - "type": "n8n-nodes-base.intercom", - "typeVersion": 1, - "position": [ - 600, - 440 - ], - "credentials": { - "intercomApi": { - "id": "137", - "name": "Intercom API creds" - } - }, - "id": "7442311e-f761-47fb-8008-b884e434acd8" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "Intercom12", - "type": "n8n-nodes-base.intercom", - "typeVersion": 1, - "position": [ - 740, - 440 - ], - "alwaysOutputData": true, - "credentials": { - "intercomApi": { - "id": "137", - "name": "Intercom API creds" - } - }, - "id": "f82997b8-6501-4e4f-b36f-34571cbb4b84" - }, - { - "parameters": { - "operation": "update", - "value": "={{$node[\"Intercom10\"].json[\"id\"]}}", - "additionalFields": { - "name": "UpdatedUser" - } - }, - "name": "Intercom13", - "type": "n8n-nodes-base.intercom", - "typeVersion": 1, - "position": [ - 900, - 440 - ], - "credentials": { - "intercomApi": { - "id": "137", - "name": "Intercom API creds" - } - }, - "id": "a11ffecd-9647-4a31-846f-687b1f5146fd" - }, - { - "parameters": { - "operation": "delete", - "id": "={{$node[\"Intercom10\"].json[\"id\"]}}" - }, - "name": "Intercom14", - "type": "n8n-nodes-base.intercom", - "typeVersion": 1, - "position": [ - 1050, - 440 - ], - "credentials": { - "intercomApi": { - "id": "137", - "name": "Intercom API creds" - } - }, - "id": "300d5a46-b105-4360-80d6-f60f8f4e8e35" - } - ], - "connections": { - "Intercom1": { - "main": [ - [ - { - "node": "Intercom", - "type": "main", - "index": 0 - } - ] - ] - }, - "Intercom": { - "main": [ - [ - { - "node": "Intercom2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Intercom2": { - "main": [ - [ - { - "node": "Intercom3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Intercom3": { - "main": [ - [ - { - "node": "Intercom4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Intercom5": { - "main": [ - [ - { - "node": "Intercom6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Intercom6": { - "main": [ - [ - { - "node": "Intercom7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Intercom7": { - "main": [ - [ - { - "node": "Intercom8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Intercom8": { - "main": [ - [ - { - "node": "Intercom9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Intercom10": { - "main": [ - [ - { - "node": "Intercom11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Intercom11": { - "main": [ - [ - { - "node": "Intercom12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Intercom12": { - "main": [ - [ - { - "node": "Intercom13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Intercom13": { - "main": [ - [ - { - "node": "Intercom14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Intercom5", - "type": "main", - "index": 0 - }, - { - "node": "Intercom10", - "type": "main", - "index": 0 - }, - { - "node": "Intercom1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/167.json b/test-workflows/workflows/167.json deleted file mode 100644 index 29b37e3458d..00000000000 --- a/test-workflows/workflows/167.json +++ /dev/null @@ -1,370 +0,0 @@ -{ - "createdAt": "2021-04-09T18:07:51.949Z", - "updatedAt": "2021-04-09T18:10:34.849Z", - "id": "167", - "name": "FreshDesk:Contact:create get update getAll delete:Ticket:create get getAll update delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "30b651f9-2126-4c0c-9574-2c52f2ebddc0" - }, - { - "parameters": { - "resource": "contact", - "name": "=Name{{Date.now()}}", - "email": "=Fake{{Date.now()}}@email.com", - "additionalFields": { - "company_id": 80000582589 - } - }, - "name": "Freshdesk", - "type": "n8n-nodes-base.freshdesk", - "typeVersion": 1, - "position": [ - 500, - 300 - ], - "credentials": { - "freshdeskApi": { - "id": "134", - "name": "Freshdesk API creds" - } - }, - "id": "106ad001-92d8-4969-8bbb-44f90f77b2f0" - }, - { - "parameters": { - "resource": "contact", - "operation": "get", - "contactId": "={{$node[\"Freshdesk\"].json[\"id\"]}}" - }, - "name": "Freshdesk1", - "type": "n8n-nodes-base.freshdesk", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "credentials": { - "freshdeskApi": { - "id": "134", - "name": "Freshdesk API creds" - } - }, - "id": "6953c12c-ddce-45c5-89f7-65179a5b8f5a" - }, - { - "parameters": { - "resource": "contact", - "operation": "update", - "contactId": "={{$node[\"Freshdesk\"].json[\"id\"]}}", - "additionalFields": { - "job_title": "QA", - "tags": [ - "Test" - ] - } - }, - "name": "Freshdesk2", - "type": "n8n-nodes-base.freshdesk", - "typeVersion": 1, - "position": [ - 800, - 300 - ], - "credentials": { - "freshdeskApi": { - "id": "134", - "name": "Freshdesk API creds" - } - }, - "id": "b31d99f6-5818-458c-98ca-17ba07e85319" - }, - { - "parameters": { - "resource": "contact", - "operation": "getAll", - "filters": { - "email": "={{$node[\"Freshdesk1\"].json[\"email\"]}}" - } - }, - "name": "Freshdesk3", - "type": "n8n-nodes-base.freshdesk", - "typeVersion": 1, - "position": [ - 950, - 300 - ], - "credentials": { - "freshdeskApi": { - "id": "134", - "name": "Freshdesk API creds" - } - }, - "id": "67a516db-2f2e-4963-a3e2-e1c692c4d271" - }, - { - "parameters": { - "resource": "contact", - "operation": "delete", - "contactId": "={{$node[\"Freshdesk\"].json[\"id\"]}}" - }, - "name": "Freshdesk4", - "type": "n8n-nodes-base.freshdesk", - "typeVersion": 1, - "position": [ - 1850, - 300 - ], - "credentials": { - "freshdeskApi": { - "id": "134", - "name": "Freshdesk API creds" - } - }, - "id": "f1658504-002f-4bd9-9323-87c9923953e2" - }, - { - "parameters": { - "requesterIdentificationValue": "={{$node[\"Freshdesk\"].json[\"id\"]}}", - "priority": "medium", - "options": { - "agent": 80014216011, - "company": 80000582589, - "description": "Testing Workflow", - "group": 80000368389, - "name": "=TicketTest", - "subject": "Testing ticket creation", - "tags": "test,", - "type": "Question" - } - }, - "name": "Freshdesk5", - "type": "n8n-nodes-base.freshdesk", - "typeVersion": 1, - "position": [ - 1100, - 400 - ], - "credentials": { - "freshdeskApi": { - "id": "134", - "name": "Freshdesk API creds" - } - }, - "id": "6859ca0a-615c-451e-961f-2293fbd40ae0" - }, - { - "parameters": { - "operation": "get", - "ticketId": "={{$node[\"Freshdesk5\"].json[\"id\"]}}" - }, - "name": "Freshdesk6", - "type": "n8n-nodes-base.freshdesk", - "typeVersion": 1, - "position": [ - 1250, - 400 - ], - "credentials": { - "freshdeskApi": { - "id": "134", - "name": "Freshdesk API creds" - } - }, - "id": "b20c4c3a-7bcb-4c22-995e-c4ce5f920c70" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "Freshdesk7", - "type": "n8n-nodes-base.freshdesk", - "typeVersion": 1, - "position": [ - 1400, - 400 - ], - "credentials": { - "freshdeskApi": { - "id": "134", - "name": "Freshdesk API creds" - } - }, - "id": "988bd8e4-4b99-4612-b0cf-8e77c652fd4b" - }, - { - "parameters": { - "operation": "update", - "ticketId": "={{$node[\"Freshdesk5\"].json[\"id\"]}}", - "updateFields": { - "status": "open", - "tags": "test,updated" - } - }, - "name": "Freshdesk8", - "type": "n8n-nodes-base.freshdesk", - "typeVersion": 1, - "position": [ - 1550, - 400 - ], - "credentials": { - "freshdeskApi": { - "id": "134", - "name": "Freshdesk API creds" - } - }, - "id": "421ede3f-463e-4262-b4a3-7f874e0866c1" - }, - { - "parameters": { - "operation": "delete", - "ticketId": "={{$node[\"Freshdesk5\"].json[\"id\"]}}" - }, - "name": "Freshdesk9", - "type": "n8n-nodes-base.freshdesk", - "typeVersion": 1, - "position": [ - 1700, - 400 - ], - "credentials": { - "freshdeskApi": { - "id": "134", - "name": "Freshdesk API creds" - } - }, - "id": "2a3e7a8e-b5e8-42a4-be76-b97d1c877942" - } - ], - "connections": { - "Freshdesk": { - "main": [ - [ - { - "node": "Freshdesk1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Freshdesk1": { - "main": [ - [ - { - "node": "Freshdesk2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Freshdesk2": { - "main": [ - [ - { - "node": "Freshdesk3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Freshdesk3": { - "main": [ - [ - { - "node": "Freshdesk5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Freshdesk5": { - "main": [ - [ - { - "node": "Freshdesk6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Freshdesk6": { - "main": [ - [ - { - "node": "Freshdesk7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Freshdesk7": { - "main": [ - [ - { - "node": "Freshdesk8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Freshdesk8": { - "main": [ - [ - { - "node": "Freshdesk9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Freshdesk9": { - "main": [ - [ - { - "node": "Freshdesk4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Freshdesk", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/168.json b/test-workflows/workflows/168.json deleted file mode 100644 index 94307143adf..00000000000 --- a/test-workflows/workflows/168.json +++ /dev/null @@ -1,153 +0,0 @@ -{ - "createdAt": "2021-04-13T14:55:34.780Z", - "updatedAt": "2021-05-26T08:10:22.923Z", - "id": "168", - "name": "Demio:Event:getAll get register:Report:get", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 400, - 480 - ], - "id": "47dbd966-77aa-4bda-96ed-e97f6a5981fd" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "Demio", - "type": "n8n-nodes-base.demio", - "typeVersion": 1, - "position": [ - 650, - 420 - ], - "credentials": { - "demioApi": { - "id": "135", - "name": "Demio API creds" - } - }, - "id": "57e082a8-354b-45a4-942d-11f7227fc3ce" - }, - { - "parameters": { - "eventId": "={{$node[\"Demio\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Demio1", - "type": "n8n-nodes-base.demio", - "typeVersion": 1, - "position": [ - 790, - 420 - ], - "credentials": { - "demioApi": { - "id": "135", - "name": "Demio API creds" - } - }, - "id": "1e57d585-0f82-4111-8c63-f5b4e66cef5e" - }, - { - "parameters": { - "operation": "register", - "eventId": "={{$node[\"Demio\"].json[\"id\"]}}", - "firstName": "=Name{{Date.now()}}", - "email": "=Fake{{Date.now()}}@email.com", - "additionalFields": {} - }, - "name": "Demio2", - "type": "n8n-nodes-base.demio", - "typeVersion": 1, - "position": [ - 940, - 420 - ], - "credentials": { - "demioApi": { - "id": "135", - "name": "Demio API creds" - } - }, - "id": "517f9682-cda3-406e-bf92-668fcc9feccb" - }, - { - "parameters": { - "resource": "report", - "eventId": 400538, - "dateId": 1967450, - "filters": {} - }, - "name": "Demio3", - "type": "n8n-nodes-base.demio", - "typeVersion": 1, - "position": [ - 650, - 570 - ], - "credentials": { - "demioApi": { - "id": "135", - "name": "Demio API creds" - } - }, - "id": "3404303d-775a-4445-9458-a77f408726a7" - } - ], - "connections": { - "Demio": { - "main": [ - [ - { - "node": "Demio1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Demio1": { - "main": [ - [ - { - "node": "Demio2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Demio", - "type": "main", - "index": 0 - }, - { - "node": "Demio3", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/169.json b/test-workflows/workflows/169.json deleted file mode 100644 index aae1b055c37..00000000000 --- a/test-workflows/workflows/169.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "createdAt": "2021-04-19T08:59:29.617Z", - "updatedAt": "2021-04-19T08:59:29.617Z", - "id": "169", - "name": "Mocean:SMS:send", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "7f66f905-8236-4fe4-922b-8a7ab6921f26" - }, - { - "parameters": { - "from": "Nodeqa", - "to": "21624827732", - "message": "=SMS-TEST-{{Date.now()}}" - }, - "name": "Mocean", - "type": "n8n-nodes-base.mocean", - "typeVersion": 1, - "position": [ - 500, - 200 - ], - "credentials": { - "moceanApi": { - "id": "138", - "name": "Mocean Api creds" - } - }, - "id": "3a8d2f48-5719-466e-95be-21d0c1d84c88" - }, - { - "parameters": { - "resource": "voice", - "from": "Nodeqa", - "to": "21624827732", - "language": "en-GB", - "message": "=SMS{{Date.now()}}" - }, - "name": "Mocean1", - "type": "n8n-nodes-base.mocean", - "typeVersion": 1, - "position": [ - 500, - 350 - ], - "credentials": { - "moceanApi": { - "id": "138", - "name": "Mocean Api creds" - } - }, - "disabled": true, - "id": "2b80cb4d-4dda-4b2b-8c7a-05293a2ae063" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Mocean", - "type": "main", - "index": 0 - }, - { - "node": "Mocean1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/17.json b/test-workflows/workflows/17.json deleted file mode 100644 index dd0ff484696..00000000000 --- a/test-workflows/workflows/17.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "createdAt": "2021-02-16T12:25:56.509Z", - "updatedAt": "2021-02-16T12:26:09.769Z", - "id": "17", - "name": "OpenThesaurus:: Get Synonyms", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "d7c16b8e-f8b9-42dc-8c13-b38f754dac42" - }, - { - "parameters": { - "text": "Wasser", - "options": { - "similar": true - } - }, - "name": "OpenThesaurus", - "type": "n8n-nodes-base.openThesaurus", - "typeVersion": 1, - "position": [ - 500, - 300 - ], - "id": "54144d68-c88f-447d-8831-72754b58214a" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "OpenThesaurus", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/170.json b/test-workflows/workflows/170.json deleted file mode 100644 index 694bdee9293..00000000000 --- a/test-workflows/workflows/170.json +++ /dev/null @@ -1,311 +0,0 @@ -{ - "createdAt": "2021-04-19T09:55:16.357Z", - "updatedAt": "2021-05-25T13:38:12.376Z", - "id": "170", - "name": "Xero:Contact:create get getAll update:Invoice:create get getAll update", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "f0c45c75-abab-4369-b823-165926299d4d" - }, - { - "parameters": { - "resource": "contact", - "organizationId": "90ee722a-8780-44f6-8788-e1d6b0bd2aa4", - "name": "=Contact{{Date.now()}}", - "additionalFields": { - "firstName": "=FirstName{{Date.now()}}" - } - }, - "name": "Xero", - "type": "n8n-nodes-base.xero", - "typeVersion": 1, - "position": [ - 500, - 200 - ], - "credentials": { - "xeroOAuth2Api": { - "id": "139", - "name": "Xero OAuth2 API creds" - } - }, - "id": "bef8a1fb-6608-4881-843a-3f1a0bf6d0df" - }, - { - "parameters": { - "resource": "contact", - "operation": "get", - "organizationId": "90ee722a-8780-44f6-8788-e1d6b0bd2aa4", - "contactId": "={{$node[\"Xero\"].json[\"ContactID\"]}}" - }, - "name": "Xero1", - "type": "n8n-nodes-base.xero", - "typeVersion": 1, - "position": [ - 650, - 200 - ], - "credentials": { - "xeroOAuth2Api": { - "id": "139", - "name": "Xero OAuth2 API creds" - } - }, - "id": "04550831-0f26-471a-ac9d-4acd8d25e905" - }, - { - "parameters": { - "resource": "contact", - "operation": "getAll", - "organizationId": "90ee722a-8780-44f6-8788-e1d6b0bd2aa4", - "limit": 1, - "options": { - "orderBy": "UpdatedDateUTC", - "sortOrder": "ASC" - } - }, - "name": "Xero2", - "type": "n8n-nodes-base.xero", - "typeVersion": 1, - "position": [ - 800, - 200 - ], - "credentials": { - "xeroOAuth2Api": { - "id": "139", - "name": "Xero OAuth2 API creds" - } - }, - "id": "db15691c-4eb1-4ada-81c0-deb62b1ad238" - }, - { - "parameters": { - "resource": "contact", - "operation": "update", - "organizationId": "90ee722a-8780-44f6-8788-e1d6b0bd2aa4", - "contactId": "={{$node[\"Xero\"].json[\"ContactID\"]}}", - "updateFields": { - "firstName": "=Updated{{$node[\"Xero1\"].json[\"FirstName\"]}}" - } - }, - "name": "Xero3", - "type": "n8n-nodes-base.xero", - "typeVersion": 1, - "position": [ - 950, - 200 - ], - "credentials": { - "xeroOAuth2Api": { - "id": "139", - "name": "Xero OAuth2 API creds" - } - }, - "id": "8ca6dfd8-8429-4ae8-809e-7f2167350cf2" - }, - { - "parameters": { - "organizationId": "90ee722a-8780-44f6-8788-e1d6b0bd2aa4", - "type": "ACCPAY", - "contactId": "={{$node[\"Xero1\"].json[\"ContactID\"]}}", - "lineItemsUi": { - "lineItemsValues": [ - { - "description": "Test", - "quantity": 3, - "unitAmount": "10", - "itemCode": "BOOK", - "accountCode": "300", - "taxType": "INPUT", - "taxAmount": "10" - } - ] - }, - "additionalFields": {} - }, - "name": "Xero4", - "type": "n8n-nodes-base.xero", - "typeVersion": 1, - "position": [ - 800, - 350 - ], - "credentials": { - "xeroOAuth2Api": { - "id": "139", - "name": "Xero OAuth2 API creds" - } - }, - "id": "fd0adcca-b10b-4ae1-9a24-d088339623f7" - }, - { - "parameters": { - "operation": "get", - "organizationId": "90ee722a-8780-44f6-8788-e1d6b0bd2aa4", - "invoiceId": "={{$node[\"Xero4\"].json[\"InvoiceID\"]}}" - }, - "name": "Xero5", - "type": "n8n-nodes-base.xero", - "typeVersion": 1, - "position": [ - 950, - 350 - ], - "credentials": { - "xeroOAuth2Api": { - "id": "139", - "name": "Xero OAuth2 API creds" - } - }, - "id": "576e9017-aabf-4651-b653-fa13d56de323" - }, - { - "parameters": { - "operation": "getAll", - "organizationId": "90ee722a-8780-44f6-8788-e1d6b0bd2aa4", - "limit": 1, - "options": {} - }, - "name": "Xero6", - "type": "n8n-nodes-base.xero", - "typeVersion": 1, - "position": [ - 1100, - 350 - ], - "credentials": { - "xeroOAuth2Api": { - "id": "139", - "name": "Xero OAuth2 API creds" - } - }, - "id": "fe2004ce-131e-448a-90c5-8c326a30b2dd" - }, - { - "parameters": { - "operation": "update", - "organizationId": "90ee722a-8780-44f6-8788-e1d6b0bd2aa4", - "invoiceId": "={{$node[\"Xero4\"].json[\"InvoiceID\"]}}", - "updateFields": { - "dueDate": "2021-04-29T22:00:00.000Z", - "status": "SUBMITTED" - } - }, - "name": "Xero7", - "type": "n8n-nodes-base.xero", - "typeVersion": 1, - "position": [ - 1250, - 350 - ], - "credentials": { - "xeroOAuth2Api": { - "id": "139", - "name": "Xero OAuth2 API creds" - } - }, - "id": "1e653ae8-8157-4d05-9dd2-2446a64385d1" - } - ], - "connections": { - "Xero": { - "main": [ - [ - { - "node": "Xero1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Xero1": { - "main": [ - [ - { - "node": "Xero2", - "type": "main", - "index": 0 - }, - { - "node": "Xero4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Xero2": { - "main": [ - [ - { - "node": "Xero3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Xero4": { - "main": [ - [ - { - "node": "Xero5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Xero5": { - "main": [ - [ - { - "node": "Xero6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Xero6": { - "main": [ - [ - { - "node": "Xero7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Xero", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/171.json b/test-workflows/workflows/171.json deleted file mode 100644 index 809c936f9cb..00000000000 --- a/test-workflows/workflows/171.json +++ /dev/null @@ -1,202 +0,0 @@ -{ - "createdAt": "2021-04-19T10:15:58.189Z", - "updatedAt": "2021-06-04T14:55:29.008Z", - "id": "171", - "name": "Stackby:append read list delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "570ac713-7639-4d31-aed5-d813b6cb3f32" - }, - { - "parameters": { - "stackId": "stOgji6AOGIluLfusu", - "table": "TestTable", - "columns": "id,name" - }, - "name": "Stackby", - "type": "n8n-nodes-base.stackby", - "typeVersion": 1, - "position": [ - 570, - 300 - ], - "credentials": { - "stackbyApi": { - "id": "140", - "name": "Stackby API creds" - } - }, - "id": "c5684dac-5284-4aee-ac91-fbf9cd9f0ee6" - }, - { - "parameters": { - "values": { - "number": [ - { - "name": "id", - "value": "={{Math.round(Math.random()*1000)}}" - } - ], - "string": [ - { - "name": "name", - "value": "=Test{{Date.now()}}" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 400, - 300 - ], - "id": "31ebc435-4f59-42a7-813d-6d98eb59449e" - }, - { - "parameters": { - "operation": "read", - "stackId": "stOgji6AOGIluLfusu", - "table": "TestTable", - "id": "={{$node[\"Stackby\"].json[\"rowId\"]}}" - }, - "name": "Stackby1", - "type": "n8n-nodes-base.stackby", - "typeVersion": 1, - "position": [ - 720, - 300 - ], - "credentials": { - "stackbyApi": { - "id": "140", - "name": "Stackby API creds" - } - }, - "id": "d78e9f09-6930-46d9-919b-80bfaeeac953" - }, - { - "parameters": { - "operation": "list", - "stackId": "stOgji6AOGIluLfusu", - "table": "TestTable", - "additionalFields": { - "view": "" - } - }, - "name": "Stackby2", - "type": "n8n-nodes-base.stackby", - "typeVersion": 1, - "position": [ - 880, - 300 - ], - "credentials": { - "stackbyApi": { - "id": "140", - "name": "Stackby API creds" - } - }, - "notes": "CAP_RESULTS_LENGTH=1", - "id": "e94a8735-e82b-4388-8020-925e6e549c1b" - }, - { - "parameters": { - "operation": "delete", - "stackId": "stOgji6AOGIluLfusu", - "table": "TestTable", - "id": "={{$node[\"Stackby\"].json[\"rowId\"]}}" - }, - "name": "Stackby3", - "type": "n8n-nodes-base.stackby", - "typeVersion": 1, - "position": [ - 1030, - 300 - ], - "executeOnce": true, - "credentials": { - "stackbyApi": { - "id": "140", - "name": "Stackby API creds" - } - }, - "id": "18174a44-9f60-4a2b-9635-1f5f5eb579c7" - } - ], - "connections": { - "Stackby": { - "main": [ - [ - { - "node": "Stackby1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set": { - "main": [ - [ - { - "node": "Stackby", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - }, - "Stackby1": { - "main": [ - [ - { - "node": "Stackby2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Stackby2": { - "main": [ - [ - { - "node": "Stackby3", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/172.json b/test-workflows/workflows/172.json deleted file mode 100644 index cdc931c78fc..00000000000 --- a/test-workflows/workflows/172.json +++ /dev/null @@ -1,166 +0,0 @@ -{ - "createdAt": "2021-04-19T13:01:49.487Z", - "updatedAt": "2021-06-08T09:29:29.798Z", - "id": "172", - "name": "Paypal:Payout:create get:PayoutItem:get", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "c685e7cb-90e2-42d3-87d4-c8f8143c5a8c" - }, - { - "parameters": { - "senderBatchId": "={{Date.now()}}", - "itemsUi": { - "itemsValues": [ - { - "receiverValue": "sb-0ci8p5941871@business.example.com", - "amount": "20" - } - ] - }, - "additionalFields": {} - }, - "name": "PayPal", - "type": "n8n-nodes-base.payPal", - "typeVersion": 1, - "position": [ - 450, - 200 - ], - "credentials": { - "payPalApi": { - "id": "141", - "name": "PayPal API creds" - } - }, - "id": "31bf4a9b-bc38-4b63-9990-4f08db26a285" - }, - { - "parameters": { - "operation": "get", - "payoutBatchId": "={{$node[\"PayPal\"].json[\"batch_header\"][\"payout_batch_id\"]}}", - "limit": 1 - }, - "name": "PayPal1", - "type": "n8n-nodes-base.payPal", - "typeVersion": 1, - "position": [ - 600, - 200 - ], - "credentials": { - "payPalApi": { - "id": "141", - "name": "PayPal API creds" - } - }, - "notes": "IGNORED_PROPERTIES=errors", - "id": "d2fdb861-6f84-4ee1-86a4-a5b8c81b0656" - }, - { - "parameters": { - "resource": "payoutItem", - "payoutItemId": "={{$node[\"PayPal1\"].json[\"payout_item_id\"]}}" - }, - "name": "PayPal2", - "type": "n8n-nodes-base.payPal", - "typeVersion": 1, - "position": [ - 750, - 250 - ], - "credentials": { - "payPalApi": { - "id": "141", - "name": "PayPal API creds" - } - }, - "notes": "IGNORED_PROPERTIES=errors", - "id": "0ef6ac4c-4aa1-4cb1-a4f7-3feb6a17208e" - }, - { - "parameters": { - "resource": "payoutItem", - "operation": "cancel", - "payoutItemId": "={{$node[\"PayPal1\"].json[\"payout_item_id\"]}}" - }, - "name": "PayPal3", - "type": "n8n-nodes-base.payPal", - "typeVersion": 1, - "position": [ - 900, - 250 - ], - "credentials": { - "payPalApi": { - "id": "141", - "name": "PayPal API creds" - } - }, - "disabled": true, - "id": "bec01033-9ce1-4789-9115-7f07991ac6b1" - } - ], - "connections": { - "PayPal": { - "main": [ - [ - { - "node": "PayPal1", - "type": "main", - "index": 0 - } - ] - ] - }, - "PayPal1": { - "main": [ - [ - { - "node": "PayPal2", - "type": "main", - "index": 0 - } - ] - ] - }, - "PayPal2": { - "main": [ - [ - { - "node": "PayPal3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "PayPal", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/173.json b/test-workflows/workflows/173.json deleted file mode 100644 index c8b043a2bf7..00000000000 --- a/test-workflows/workflows/173.json +++ /dev/null @@ -1,221 +0,0 @@ -{ - "createdAt": "2021-04-19T15:04:14.654Z", - "updatedAt": "2021-04-20T08:10:42.292Z", - "id": "173", - "name": "GetResponse:Contact:create getAll get update delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "5651ff0c-3724-4194-8070-66f3737a0762" - }, - { - "parameters": { - "operation": "create", - "email": "=fake{{Date.now()}}@email.com", - "campaignId": "MHDjt", - "additionalFields": { - "name": "=Name{{Date.now()}}" - } - }, - "name": "GetResponse", - "type": "n8n-nodes-base.getResponse", - "typeVersion": 1, - "position": [ - 500, - 300 - ], - "credentials": { - "getResponseApi": { - "id": "143", - "name": "GetResponse API creds" - } - }, - "id": "a3fa00e2-6539-4066-ac49-a6e2561397a9" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "options": { - "sortBy": "createdOn", - "sortOrder": "DESC" - } - }, - "name": "GetResponse1", - "type": "n8n-nodes-base.getResponse", - "typeVersion": 1, - "position": [ - 900, - 300 - ], - "credentials": { - "getResponseApi": { - "id": "143", - "name": "GetResponse API creds" - } - }, - "id": "6abe5d00-d52a-4624-a45b-e7508bdc8cbc" - }, - { - "parameters": { - "contactId": "={{$node[\"GetResponse1\"].json[\"contactId\"]}}", - "options": {} - }, - "name": "GetResponse2", - "type": "n8n-nodes-base.getResponse", - "typeVersion": 1, - "position": [ - 1100, - 300 - ], - "credentials": { - "getResponseApi": { - "id": "143", - "name": "GetResponse API creds" - } - }, - "id": "f6ac6160-9cf1-4f5f-88e9-6c1fee5328bd" - }, - { - "parameters": { - "operation": "update", - "contactId": "={{$node[\"GetResponse1\"].json[\"contactId\"]}}", - "updateFields": { - "email": "=Updated{{$node[\"GetResponse1\"].json[\"email\"]}}", - "name": "=Updated{{$node[\"GetResponse1\"].json[\"name\"]}}" - } - }, - "name": "GetResponse3", - "type": "n8n-nodes-base.getResponse", - "typeVersion": 1, - "position": [ - 1300, - 300 - ], - "credentials": { - "getResponseApi": { - "id": "143", - "name": "GetResponse API creds" - } - }, - "id": "af223c10-9e82-4e4f-b4a2-fbcb87e3a81f" - }, - { - "parameters": { - "operation": "delete", - "contactId": "={{$node[\"GetResponse1\"].json[\"contactId\"]}}", - "options": {} - }, - "name": "GetResponse4", - "type": "n8n-nodes-base.getResponse", - "typeVersion": 1, - "position": [ - 1500, - 300 - ], - "credentials": { - "getResponseApi": { - "id": "143", - "name": "GetResponse API creds" - } - }, - "id": "85f302a7-b522-4e38-a88a-07e0705f0711" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(1000);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 1 second", - "type": "n8n-nodes-base.function", - "position": [ - 700, - 300 - ], - "typeVersion": 1, - "id": "994c0e7a-3a6d-4cdd-8fa6-f62d67f15a70" - } - ], - "connections": { - "GetResponse1": { - "main": [ - [ - { - "node": "GetResponse2", - "type": "main", - "index": 0 - } - ] - ] - }, - "GetResponse2": { - "main": [ - [ - { - "node": "GetResponse3", - "type": "main", - "index": 0 - } - ] - ] - }, - "GetResponse3": { - "main": [ - [ - { - "node": "GetResponse4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "GetResponse", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 1 second": { - "main": [ - [ - { - "node": "GetResponse1", - "type": "main", - "index": 0 - } - ] - ] - }, - "GetResponse": { - "main": [ - [ - { - "node": "Sleep 1 second", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/174.json b/test-workflows/workflows/174.json deleted file mode 100644 index 312e6674289..00000000000 --- a/test-workflows/workflows/174.json +++ /dev/null @@ -1,337 +0,0 @@ -{ - "createdAt": "2021-04-20T08:36:34.927Z", - "updatedAt": "2021-04-20T08:36:34.927Z", - "id": "174", - "name": "Vero:User:create alias addTags removeTags unsubscribe resubscribe delete:Event:track", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "b7de37cc-c85a-4eac-beec-1f0c1ea5190a" - }, - { - "parameters": { - "id": "={{$node[\"Set id & email\"].json[\"id\"]}}", - "additionalFields": { - "email": "={{$node[\"Set id & email\"].json[\"email\"]}}" - }, - "dataAttributesUi": { - "dataAttributesValues": [] - } - }, - "name": "Vero", - "type": "n8n-nodes-base.vero", - "typeVersion": 1, - "position": [ - 550, - 300 - ], - "credentials": { - "veroApi": { - "id": "144", - "name": "Vero API creds" - } - }, - "id": "d27a15f1-3855-42b0-b3d9-bca97501ed10" - }, - { - "parameters": { - "operation": "alias", - "id": "={{$node[\"Set id & email\"].json[\"id\"]}}", - "newId": "={{$node[\"Set id & email\"].json[\"email\"]}}" - }, - "name": "Vero1", - "type": "n8n-nodes-base.vero", - "typeVersion": 1, - "position": [ - 700, - 300 - ], - "credentials": { - "veroApi": { - "id": "144", - "name": "Vero API creds" - } - }, - "id": "ea140d44-f58b-4d57-9ac3-5bf93cddbe93" - }, - { - "parameters": { - "operation": "addTags", - "id": "={{$node[\"Set id & email\"].json[\"email\"]}}", - "tags": "TEST," - }, - "name": "Vero2", - "type": "n8n-nodes-base.vero", - "typeVersion": 1, - "position": [ - 850, - 300 - ], - "credentials": { - "veroApi": { - "id": "144", - "name": "Vero API creds" - } - }, - "id": "903d206c-c3c4-4d20-81b7-a6ea73aeaebf" - }, - { - "parameters": { - "operation": "removeTags", - "id": "={{$node[\"Set id & email\"].json[\"email\"]}}", - "tags": "TEST," - }, - "name": "Vero3", - "type": "n8n-nodes-base.vero", - "typeVersion": 1, - "position": [ - 1000, - 300 - ], - "credentials": { - "veroApi": { - "id": "144", - "name": "Vero API creds" - } - }, - "id": "1e426c6f-88d4-4c23-8c01-9ffcca7bed76" - }, - { - "parameters": { - "operation": "unsubscribe", - "id": "={{$node[\"Set id & email\"].json[\"email\"]}}" - }, - "name": "Vero4", - "type": "n8n-nodes-base.vero", - "typeVersion": 1, - "position": [ - 1150, - 300 - ], - "credentials": { - "veroApi": { - "id": "144", - "name": "Vero API creds" - } - }, - "id": "a92a41ef-d98b-4ff8-931d-d2488777ecf8" - }, - { - "parameters": { - "operation": "resubscribe", - "id": "={{$node[\"Set id & email\"].json[\"email\"]}}" - }, - "name": "Vero5", - "type": "n8n-nodes-base.vero", - "typeVersion": 1, - "position": [ - 1300, - 300 - ], - "credentials": { - "veroApi": { - "id": "144", - "name": "Vero API creds" - } - }, - "id": "629e08e8-9f31-4824-afc1-f09c7fbfdf1a" - }, - { - "parameters": { - "operation": "delete", - "id": "={{$node[\"Set id & email\"].json[\"email\"]}}" - }, - "name": "Vero6", - "type": "n8n-nodes-base.vero", - "typeVersion": 1, - "position": [ - 1600, - 300 - ], - "credentials": { - "veroApi": { - "id": "144", - "name": "Vero API creds" - } - }, - "id": "5da2dd1f-d40e-490c-bb38-9adaf10ebc92" - }, - { - "parameters": { - "keepOnlySet": true, - "values": { - "string": [ - { - "name": "email", - "value": "=fake{{Date.now()}}@email.com" - } - ], - "number": [ - { - "name": "id", - "value": "={{Math.round(Math.random()*1000)}}" - } - ] - }, - "options": {} - }, - "name": "Set id & email", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 400, - 300 - ], - "id": "76d32334-89e0-4fc0-aa81-e56eaeb206c2" - }, - { - "parameters": { - "resource": "event", - "id": "={{$node[\"Set id & email\"].json[\"email\"]}}", - "email": "={{$node[\"Set id & email\"].json[\"email\"]}}", - "eventName": "=Event{{Date.now()}}", - "dataAttributesUi": { - "dataAttributesValues": [ - { - "key": "Type", - "value": "Test" - } - ] - }, - "extraAttributesUi": { - "extraAttributesValues": [] - } - }, - "name": "Vero7", - "type": "n8n-nodes-base.vero", - "typeVersion": 1, - "position": [ - 1450, - 400 - ], - "credentials": { - "veroApi": { - "id": "144", - "name": "Vero API creds" - } - }, - "id": "89b0e1de-a2b6-4f67-a63b-1d7dafdba2c2" - } - ], - "connections": { - "Vero1": { - "main": [ - [ - { - "node": "Vero2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Set id & email", - "type": "main", - "index": 0 - } - ] - ] - }, - "Vero": { - "main": [ - [ - { - "node": "Vero1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Vero2": { - "main": [ - [ - { - "node": "Vero3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Vero3": { - "main": [ - [ - { - "node": "Vero4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Vero4": { - "main": [ - [ - { - "node": "Vero5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Vero5": { - "main": [ - [ - { - "node": "Vero7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set id & email": { - "main": [ - [ - { - "node": "Vero", - "type": "main", - "index": 0 - } - ] - ] - }, - "Vero7": { - "main": [ - [ - { - "node": "Vero6", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/176.json b/test-workflows/workflows/176.json deleted file mode 100644 index eb84f56ca39..00000000000 --- a/test-workflows/workflows/176.json +++ /dev/null @@ -1,1192 +0,0 @@ -{ - "createdAt": "2021-04-20T13:25:03.086Z", - "updatedAt": "2021-04-20T15:03:32.741Z", - "id": "176", - "name": "uProc:Audio:*:company:*;", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "d0c17f4b-8961-440e-a16c-c2b24573ded4" - }, - { - "parameters": { - "group": "audio", - "text": "n8n rocks!", - "gender": "female", - "language": "american", - "additionalOptions": {} - }, - "name": "uProc", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 560, - 200 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "93760945-e663-434d-929b-bde008a9048d" - }, - { - "parameters": { - "group": "audio", - "tool": "getAudioSpeechByText", - "text": "n8n rocks!", - "gender": "female", - "language": "american", - "additionalOptions": {} - }, - "name": "uProc1", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 740, - 200 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "048ecc11-0c05-474f-b05c-758e4ed5debb" - }, - { - "parameters": { - "group": "company", - "tool": "getCifNormalized", - "cif": "B 12345 678", - "additionalOptions": {} - }, - "name": "uProc10", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 560, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "a6e61a99-e759-45ce-9564-c07e9edd4ff9" - }, - { - "parameters": { - "group": "company", - "cif": "B 12345 678", - "additionalOptions": {} - }, - "name": "uProc11", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 690, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "3176fdab-d652-4402-883f-eb3b49173235" - }, - { - "parameters": { - "group": "company", - "tool": "checkNumberIsin", - "isin": "US0004026250", - "additionalOptions": {} - }, - "name": "uProc12", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 820, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "e015d1d9-aa1e-49e5-823c-9e6372d316ec" - }, - { - "parameters": { - "group": "company", - "tool": "checkNumberSsEs", - "number": "998239812282", - "additionalOptions": {} - }, - "name": "uProc13", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 950, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "90bde607-e419-4547-b8e2-e96a181dd152" - }, - { - "parameters": { - "group": "company", - "tool": "getCompanyByCif", - "cif": "B 12345 678", - "additionalOptions": {} - }, - "name": "uProc14", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1080, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "d4ad8ce2-d306-432d-a6de-a82826964eda" - }, - { - "parameters": { - "group": "company", - "tool": "getCompanyByDomain", - "domain": "n8n.io", - "additionalOptions": {} - }, - "name": "uProc15", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1210, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "d2852025-5de5-41fa-9f29-d9783cb3ec9d" - }, - { - "parameters": { - "group": "company", - "tool": "getCompanyByDuns", - "duns": "150483782", - "additionalOptions": {} - }, - "name": "uProc16", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1340, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "88e58d49-0c18-42e4-84bf-d9752cf74fa7" - }, - { - "parameters": { - "group": "company", - "tool": "getCompanyByEmail", - "email": "hello@n8n.io", - "additionalOptions": {} - }, - "name": "uProc17", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1470, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "74543b06-f296-417a-a9cb-cf5c9aeb8bf4" - }, - { - "parameters": { - "group": "company", - "tool": "getCompanyByIp", - "ip": "104.21.37.3", - "additionalOptions": {} - }, - "name": "uProc18", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1600, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "6cbbc927-2cef-4688-9824-50e15a2ab433" - }, - { - "parameters": { - "group": "company", - "tool": "getCompanyByName", - "country": "DE", - "name": "n8n", - "additionalOptions": {} - }, - "name": "uProc19", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1730, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "b9198acf-94fb-4d58-81f6-9713d3588e64" - }, - { - "parameters": { - "group": "company", - "tool": "getCompanyByPhone", - "phone": "932187670", - "additionalOptions": {} - }, - "name": "uProc20", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1860, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "2862f234-cc12-4df0-b994-26d38ee16414" - }, - { - "parameters": { - "group": "company", - "tool": "getCompanyByProfile", - "url": "https://twitter.com/n8n_io", - "additionalOptions": {} - }, - "name": "uProc21", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1990, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "b6c61930-8b49-4c7d-8831-93722da0f894" - }, - { - "parameters": { - "group": "company", - "tool": "getRoleClassified", - "role": "Junior web developer", - "additionalOptions": {} - }, - "name": "uProc22", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 2120, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "d051cee8-5bca-4c2a-b945-95cbf54a08b4" - }, - { - "parameters": { - "group": "company", - "tool": "checkCompanyDebtorByTaxid", - "taxid": "B12345678", - "additionalOptions": {} - }, - "name": "uProc23", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 2250, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "421b79d2-8337-41f9-9f3b-e44d49040cb3" - }, - { - "parameters": { - "group": "company", - "tool": "getPersonDecisionMaker", - "company": "n8n.io", - "area": "Engineering", - "additionalOptions": {} - }, - "name": "uProc24", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 2380, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "1e955a1c-eb87-4c24-af10-8f5bfc0728dd" - }, - { - "parameters": { - "group": "company", - "tool": "getPersonDecisionMakerBySearch", - "company": "n8n.io", - "area": "Product", - "clevel": "No", - "additionalOptions": {} - }, - "name": "uProc25", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 2510, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "d288cae2-b1d9-46e7-a4f2-339fc7a8fab1" - }, - { - "parameters": { - "group": "company", - "tool": "getCompanyDomainByName", - "name": "n8n.io", - "additionalOptions": {} - }, - "name": "uProc26", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 2640, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "896d6a19-4717-4e1e-9380-b7fa88e05a3b" - }, - { - "parameters": { - "group": "company", - "tool": "getPersonEmailsByDomainAndArea", - "domain": "n8n.io", - "area": "Engineering", - "additionalOptions": {} - }, - "name": "uProc27", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 2770, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "c5b64761-444e-4ee1-8289-b3e3805b071d" - }, - { - "parameters": { - "group": "company", - "tool": "getCompanyExtendedByDomain", - "domain": "n8n.io", - "additionalOptions": {} - }, - "name": "uProc28", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 2900, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "01cb8555-31bc-49ec-82a2-36b24bb48873" - }, - { - "parameters": { - "group": "company", - "tool": "getCompanyExtendedByEmail", - "email": "hello@n8n.io", - "additionalOptions": {} - }, - "name": "uProc29", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 3030, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "a801f605-1677-443b-8c86-fe636414c2ab" - }, - { - "parameters": { - "group": "company", - "tool": "getProfileFacebookByCompany", - "company": "n8n.io", - "additionalOptions": {} - }, - "name": "uProc30", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 3160, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "a0f7131d-c121-4eb2-b6f5-bf72e3af23c0" - }, - { - "parameters": { - "group": "company", - "tool": "getCompanyFinancialByDomain", - "domain": "n8n.io", - "additionalOptions": {} - }, - "name": "uProc31", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 3290, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "1b027a55-7122-4a63-8364-9dd7176f9672" - }, - { - "parameters": { - "group": "company", - "tool": "getCompanyFinancialByDuns", - "duns": "150483782", - "additionalOptions": {} - }, - "name": "uProc32", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 3420, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "b046e6e6-34c2-4b91-ab6b-0f69905f85ce" - }, - { - "parameters": { - "group": "company", - "tool": "getCompanyFinancialByName", - "name": "n8n.io", - "additionalOptions": {} - }, - "name": "uProc33", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 3550, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "a01a0c27-1386-45a7-a86e-8e118bf5d327" - }, - { - "parameters": { - "group": "company", - "tool": "getCompanyFinancialByTaxid", - "taxid": "B12345678", - "additionalOptions": {} - }, - "name": "uProc34", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 3680, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "60c8d394-358a-47e1-9a2c-dd11553737a0" - }, - { - "parameters": { - "group": "company", - "tool": "getCompanyGeocodedByIp", - "ip": "104.21.37.3", - "additionalOptions": {} - }, - "name": "uProc35", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 3810, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "a4efe1ed-b5da-4185-99e0-840da0544e4f" - }, - { - "parameters": { - "group": "company", - "tool": "getProfileLinkedinByCompany", - "company": "n8n.io", - "additionalOptions": {} - }, - "name": "uProc36", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 3940, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "ad662983-c0b8-4650-9577-dd23ac9b3db7" - }, - { - "parameters": { - "group": "company", - "tool": "getPersonListByParams", - "country": "DE", - "phone": "932187670", - "email": "hello@n8n.io", - "company": "n8n.io", - "area": "Information technology", - "seniority": "Intermediate", - "additionalOptions": {} - }, - "name": "uProc37", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 4070, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "aaaa41b2-d90e-4cb4-8083-87cd7bdcaf69" - }, - { - "parameters": { - "group": "company", - "tool": "getPersonMultipleDecisionMakerBySearch", - "company": "n8n.io", - "area": "Information technology", - "clevel": "No", - "additionalOptions": {} - }, - "name": "uProc38", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 4200, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "ba76171b-5070-4938-9e9d-923121f1c45a" - }, - { - "parameters": { - "group": "company", - "tool": "getCompanyNameByDomain", - "domain": "n8n.io", - "additionalOptions": {} - }, - "name": "uProc39", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 4330, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "d76f3d0a-9a82-4d93-a783-8f793c412c94" - }, - { - "parameters": { - "group": "company", - "tool": "getCompanyPhoneByDomain", - "domain": "n8n.io", - "additionalOptions": {} - }, - "name": "uProc40", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 4460, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "f53778bf-935f-4f49-9281-552993ae1429" - }, - { - "parameters": { - "group": "company", - "tool": "getCompanyPhoneByName", - "name": "n8n.io", - "additionalOptions": {} - }, - "name": "uProc41", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 4590, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "ab0ec7c3-397d-44de-b082-33e244ba1272" - }, - { - "parameters": { - "group": "company", - "tool": "getProfileTwitterByCompany", - "company": "n8n.io", - "additionalOptions": {} - }, - "name": "uProc42", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 4720, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "bbe5a143-20db-49b7-a9ac-8600a895b74d" - } - ], - "connections": { - "uProc": { - "main": [ - [ - { - "node": "uProc1", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc10": { - "main": [ - [ - { - "node": "uProc11", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc11": { - "main": [ - [ - { - "node": "uProc12", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc12": { - "main": [ - [ - { - "node": "uProc13", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc13": { - "main": [ - [ - { - "node": "uProc14", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc14": { - "main": [ - [ - { - "node": "uProc15", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc15": { - "main": [ - [ - { - "node": "uProc16", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc16": { - "main": [ - [ - { - "node": "uProc17", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc17": { - "main": [ - [ - { - "node": "uProc18", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc18": { - "main": [ - [ - { - "node": "uProc19", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc19": { - "main": [ - [ - { - "node": "uProc20", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc20": { - "main": [ - [ - { - "node": "uProc21", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc21": { - "main": [ - [ - { - "node": "uProc22", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc22": { - "main": [ - [ - { - "node": "uProc23", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc23": { - "main": [ - [ - { - "node": "uProc24", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc24": { - "main": [ - [ - { - "node": "uProc25", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc25": { - "main": [ - [ - { - "node": "uProc26", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc26": { - "main": [ - [ - { - "node": "uProc27", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc27": { - "main": [ - [ - { - "node": "uProc28", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc28": { - "main": [ - [ - { - "node": "uProc29", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc29": { - "main": [ - [ - { - "node": "uProc30", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc30": { - "main": [ - [ - { - "node": "uProc31", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc31": { - "main": [ - [ - { - "node": "uProc32", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc32": { - "main": [ - [ - { - "node": "uProc33", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc33": { - "main": [ - [ - { - "node": "uProc34", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc34": { - "main": [ - [ - { - "node": "uProc35", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc35": { - "main": [ - [ - { - "node": "uProc36", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc36": { - "main": [ - [ - { - "node": "uProc37", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc37": { - "main": [ - [ - { - "node": "uProc38", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc38": { - "main": [ - [ - { - "node": "uProc39", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc39": { - "main": [ - [ - { - "node": "uProc40", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc40": { - "main": [ - [ - { - "node": "uProc41", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc41": { - "main": [ - [ - { - "node": "uProc42", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "uProc", - "type": "main", - "index": 0 - }, - { - "node": "uProc10", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/177.json b/test-workflows/workflows/177.json deleted file mode 100644 index 18571c297eb..00000000000 --- a/test-workflows/workflows/177.json +++ /dev/null @@ -1,825 +0,0 @@ -{ - "createdAt": "2021-04-20T15:07:09.205Z", - "updatedAt": "2021-04-20T15:15:49.518Z", - "id": "177", - "name": "uProc:Finance:*;", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "6b5f7fea-a0f3-445b-8366-b6631683411e" - }, - { - "parameters": { - "group": "finance", - "tool": "checkCreditcardChecksum", - "credit_card": "5564456122310619", - "additionalOptions": {} - }, - "name": "uProc1", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 510, - 290 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "74ad2ff7-afc0-4327-9fad-600cb2675d92" - }, - { - "parameters": { - "group": "finance", - "tool": "getCreditcardType", - "credit_card": "5564456122310619", - "additionalOptions": {} - }, - "name": "uProc2", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 640, - 290 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "47cd053a-0375-4e02-944e-57ca74d30b3a" - }, - { - "parameters": { - "group": "finance", - "tool": "checkBankAccountValidEs", - "account": "5564456122310619", - "additionalOptions": {} - }, - "name": "uProc3", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 770, - 290 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "25a3db7b-f396-4cc4-bb1c-2d95c72a3e70" - }, - { - "parameters": { - "group": "finance", - "bic": "AYGBESMM", - "additionalOptions": {} - }, - "name": "uProc4", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 900, - 290 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "a96d6b7d-de57-4b0f-9451-da49bcad0023" - }, - { - "parameters": { - "group": "finance", - "tool": "getBankIbanByAccount", - "account": "9121000418450200051332M", - "isocode": "ES", - "additionalOptions": {} - }, - "name": "uProc5", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1030, - 290 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "48f91455-d72d-404f-8edb-a3113272a656" - }, - { - "parameters": { - "group": "finance", - "tool": "getBankIbanLookup", - "iban": "ES9121000418450200051332M", - "additionalOptions": {} - }, - "name": "uProc6", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1160, - 290 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "2926e714-090d-4605-ad8a-a3fc6299d953" - }, - { - "parameters": { - "group": "finance", - "tool": "checkBankIbanValid", - "iban": "ES9121000418450200051332M", - "additionalOptions": {} - }, - "name": "uProc7", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1290, - 290 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "851c69bb-ca48-4be7-a536-00de1d6e1705" - }, - { - "parameters": { - "group": "finance", - "tool": "getCurrencyByCountry", - "country": "ES", - "additionalOptions": {} - }, - "name": "uProc8", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1420, - 290 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "0783831e-2de6-429b-8b65-0a891c43c524" - }, - { - "parameters": { - "group": "finance", - "tool": "getCurrencyByCountryIsocode", - "country_code": "ES", - "additionalOptions": {} - }, - "name": "uProc9", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1550, - 290 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "b34da6a8-3825-4d75-bb7f-33f2777bd05e" - }, - { - "parameters": { - "group": "finance", - "tool": "getCurrencyByIp", - "ip": "104.21.37.3", - "additionalOptions": {} - }, - "name": "uProc10", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1680, - 290 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "a6d4a2b4-16bc-44d6-8f62-289fe44e3150" - }, - { - "parameters": { - "group": "finance", - "tool": "getCurrencyByIsocode", - "isocode": "ES", - "additionalOptions": {} - }, - "name": "uProc11", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1810, - 290 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "df8e1a41-aee5-45b2-96ce-743a871263e9" - }, - { - "parameters": { - "group": "finance", - "tool": "getCurrencyConvertedBetweenIsocodeDate", - "date": "104.21.37.3", - "amount": "10", - "isocode1": "EUR", - "isocode2": "JPY", - "additionalOptions": {} - }, - "name": "uProc12", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1940, - 290 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "1be97cfc-7d88-4308-8fcc-bf089c1a89a9" - }, - { - "parameters": { - "group": "finance", - "tool": "getCurrencyListByCountry", - "additionalOptions": {} - }, - "name": "uProc13", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 2070, - 290 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "07c56b1c-ec2d-4041-96bb-976c33920f95" - }, - { - "parameters": { - "group": "finance", - "tool": "getCurrencyListByIp", - "ip": "104.21.37.3", - "additionalOptions": {} - }, - "name": "uProc14", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 2200, - 290 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "e8d0f97f-9d56-412c-9a05-0ba48a923a76" - }, - { - "parameters": { - "group": "finance", - "tool": "getCurrencyListByIsocode", - "isocode": "DE", - "additionalOptions": {} - }, - "name": "uProc15", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 2330, - 290 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "804d201d-919c-4464-8280-49fd0c6126ca" - }, - { - "parameters": { - "group": "finance", - "tool": "checkCurrencyValidIso", - "isocode": "DE", - "additionalOptions": {} - }, - "name": "uProc16", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 2460, - 290 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "dff16814-7b04-4e4c-82f4-a480686e490e" - }, - { - "parameters": { - "group": "finance", - "tool": "getVatByAddress", - "address": "10115, Berlin, Germany", - "additionalOptions": {} - }, - "name": "uProc17", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 2590, - 290 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "919c88b5-7079-46c4-9c7a-e5c7e29adcce" - }, - { - "parameters": { - "group": "finance", - "tool": "getVatByCoordinates", - "coordinates": "52.52986092913615, 13.389315284523297", - "additionalOptions": {} - }, - "name": "uProc18", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 2720, - 290 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "e93ca526-f829-4793-a05a-9ecab9b45b78" - }, - { - "parameters": { - "group": "finance", - "tool": "getVatByIp", - "ip": "104.21.37.3", - "additionalOptions": {} - }, - "name": "uProc19", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 2850, - 290 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "c90211c8-5e05-4f0b-bd91-fef5d2d51e3a" - }, - { - "parameters": { - "group": "finance", - "tool": "getVatByIsocode", - "isocode": "DE", - "additionalOptions": {} - }, - "name": "uProc20", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 2980, - 290 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "c5be744b-9203-4e74-9626-37afc39a1577" - }, - { - "parameters": { - "group": "finance", - "tool": "getVatByNumber", - "isocode": "DE", - "tin": "44016116G", - "additionalOptions": {} - }, - "name": "uProc21", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 3110, - 290 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "9a011b5c-ef1a-4b51-bb7a-6a2458116342" - }, - { - "parameters": { - "group": "finance", - "tool": "getVatByPhone", - "phone": "932187670", - "additionalOptions": {} - }, - "name": "uProc22", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 3240, - 290 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "094bb0ed-9abf-47e1-8c35-dcb30e1c966a" - }, - { - "parameters": { - "group": "finance", - "tool": "getVatByZipcode", - "zipcode": "10115", - "additionalOptions": {} - }, - "name": "uProc23", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 3370, - 290 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "644bf7bc-3fdf-4e27-91ea-8bbd7912a79c" - }, - { - "parameters": { - "group": "finance", - "tool": "checkVatExist", - "isocode": "ES", - "tin": "44016116G", - "additionalOptions": {} - }, - "name": "uProc24", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 3500, - 290 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "8d9a2640-f227-4184-8563-16a2054a5992" - } - ], - "connections": { - "uProc1": { - "main": [ - [ - { - "node": "uProc2", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc2": { - "main": [ - [ - { - "node": "uProc3", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc3": { - "main": [ - [ - { - "node": "uProc4", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc4": { - "main": [ - [ - { - "node": "uProc5", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc5": { - "main": [ - [ - { - "node": "uProc6", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc6": { - "main": [ - [ - { - "node": "uProc7", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc7": { - "main": [ - [ - { - "node": "uProc8", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc8": { - "main": [ - [ - { - "node": "uProc9", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc9": { - "main": [ - [ - { - "node": "uProc10", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc10": { - "main": [ - [ - { - "node": "uProc11", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc11": { - "main": [ - [ - { - "node": "uProc12", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc12": { - "main": [ - [ - { - "node": "uProc13", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc13": { - "main": [ - [ - { - "node": "uProc14", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc14": { - "main": [ - [ - { - "node": "uProc15", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc15": { - "main": [ - [ - { - "node": "uProc16", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc16": { - "main": [ - [ - { - "node": "uProc17", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc17": { - "main": [ - [ - { - "node": "uProc18", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc18": { - "main": [ - [ - { - "node": "uProc19", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc19": { - "main": [ - [ - { - "node": "uProc20", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc20": { - "main": [ - [ - { - "node": "uProc21", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc21": { - "main": [ - [ - { - "node": "uProc22", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc22": { - "main": [ - [ - { - "node": "uProc23", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc23": { - "main": [ - [ - { - "node": "uProc24", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "uProc1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/179.json b/test-workflows/workflows/179.json deleted file mode 100644 index 85c584b2946..00000000000 --- a/test-workflows/workflows/179.json +++ /dev/null @@ -1,363 +0,0 @@ -{ - "createdAt": "2021-04-21T07:53:05.959Z", - "updatedAt": "2021-04-21T07:53:05.959Z", - "id": "179", - "name": "uProc:Image:*:Security:*;", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "ea22a2a9-c7b7-4e4c-b89a-d123c4de7c63" - }, - { - "parameters": { - "group": "security", - "tool": "checkNumberUuid", - "uuid": "0c6a1543-6232-49d2-b50d-c1e70cd015a0", - "additionalOptions": {} - }, - "name": "uProc1", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 450, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "cd9469be-7495-4963-9e72-2946c8c9026b" - }, - { - "parameters": { - "group": "security", - "tool": "getDomainBlacklists", - "domain": "n8n.io", - "additionalOptions": {} - }, - "name": "uProc2", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 580, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "65d979d4-1b48-4e05-81ec-003ca73360ec" - }, - { - "parameters": { - "group": "security", - "tool": "getIpBlacklists", - "ip": "104.21.37.3", - "additionalOptions": {} - }, - "name": "uProc3", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 710, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "a93216f3-6d7e-4e8e-808f-2a9781cd54d1" - }, - { - "parameters": { - "group": "security", - "luhn": "79927398713", - "additionalOptions": {} - }, - "name": "uProc4", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 840, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "c850df47-d882-4253-9912-87781ce9cca5" - }, - { - "parameters": { - "group": "security", - "tool": "checkPasswordStrong", - "password": "randompassword", - "additionalOptions": {} - }, - "name": "uProc5", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 970, - 350 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "13527442-5599-40a4-aa97-69e88fc71dac" - }, - { - "parameters": { - "group": "image", - "tool": "getBarcodeEncoded", - "text": "n8n rocks!", - "bcid": "auspost", - "additionalOptions": {} - }, - "name": "uProc", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 450, - 150 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "826bf485-a60a-4835-8290-1259daf44305" - }, - { - "parameters": { - "group": "image", - "tool": "getImageExif", - "url": "https://n8n.io/_nuxt/img/df5be1c.png", - "additionalOptions": {} - }, - "name": "uProc8", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 840, - 150 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "dcf2a843-5f5f-4f9f-ba27-1aaa9486dd58" - }, - { - "parameters": { - "group": "image", - "tool": "getImageWithText", - "text": "n8n rocks!", - "url": "https://n8n.io/_nuxt/img/df5be1c.png", - "size": "72", - "additionalOptions": {} - }, - "name": "uProc9", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 970, - 150 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "5a42b133-730f-4288-aed9-8ef6ab9f9579" - }, - { - "parameters": { - "group": "image", - "tool": "getDomainLogo", - "domain": "n8n.io", - "additionalOptions": {} - }, - "name": "uProc10", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 580, - 150 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "5a1a3be9-b954-4cab-8adc-a82fa4156780" - }, - { - "parameters": { - "group": "image", - "tool": "getUrlScreenshot", - "url": "n8n.io", - "useragent": "n8n-agent", - "width": "160", - "fullpage": "no", - "additionalOptions": {} - }, - "name": "uProc11", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 710, - 150 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "65aa976a-1b8b-4ddf-bab6-f3308221ade0" - } - ], - "connections": { - "uProc1": { - "main": [ - [ - { - "node": "uProc2", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc2": { - "main": [ - [ - { - "node": "uProc3", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc3": { - "main": [ - [ - { - "node": "uProc4", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc4": { - "main": [ - [ - { - "node": "uProc5", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc": { - "main": [ - [ - { - "node": "uProc10", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc8": { - "main": [ - [ - { - "node": "uProc9", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc9": { - "main": [ - [] - ] - }, - "uProc10": { - "main": [ - [ - { - "node": "uProc11", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc11": { - "main": [ - [ - { - "node": "uProc8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "uProc", - "type": "main", - "index": 0 - }, - { - "node": "uProc1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/180.json b/test-workflows/workflows/180.json deleted file mode 100644 index 0bdddaced57..00000000000 --- a/test-workflows/workflows/180.json +++ /dev/null @@ -1,1351 +0,0 @@ -{ - "createdAt": "2021-04-21T08:02:44.895Z", - "updatedAt": "2021-04-21T08:23:47.669Z", - "id": "180", - "name": "uProc:Internet:*;", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "471ee767-0f84-4092-8848-b32bfa27c904" - }, - { - "parameters": { - "group": "internet", - "tool": "getDeviceByUa", - "useragent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36", - "additionalOptions": {} - }, - "name": "uProc1", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 420, - 300 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "225c9e0c-c8df-4a5c-99c1-ab87c07c5747" - }, - { - "parameters": { - "group": "internet", - "tool": "getUrlByDomain", - "domain": "n8n.io", - "additionalOptions": {} - }, - "name": "uProc2", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 550, - 300 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "d05ce8e6-52bc-4cdf-8ca9-8e736dab51e7" - }, - { - "parameters": { - "group": "internet", - "tool": "getDomainByIp", - "ip": "104.21.37.3", - "additionalOptions": {} - }, - "name": "uProc3", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 680, - 300 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "ec459164-9037-4974-86db-51572db34457" - }, - { - "parameters": { - "group": "internet", - "tool": "getDomainByUrl", - "url": "https://n8n.io", - "additionalOptions": {} - }, - "name": "uProc4", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 810, - 300 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "de574cfe-b7b8-4d7e-bf9d-874994cd72a1" - }, - { - "parameters": { - "group": "internet", - "tool": "checkDomainCertificate", - "domain": "n8n.io", - "additionalOptions": {} - }, - "name": "uProc5", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 940, - 300 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "6a965548-4b41-4ec7-a171-b808fa56f874" - }, - { - "parameters": { - "group": "internet", - "tool": "getDomainCertificate", - "domain": "n8n.io", - "additionalOptions": {} - }, - "name": "uProc6", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1070, - 300 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "8c1aa668-7b5d-43cd-aa59-9c9fc7734514" - }, - { - "parameters": { - "group": "internet", - "domain": "n8n.io", - "additionalOptions": {} - }, - "name": "uProc7", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1200, - 300 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "221ef5e2-caf2-4454-b3e9-82f7741e1fe7" - }, - { - "parameters": { - "group": "internet", - "tool": "checkDomainFormat", - "domain": "n8n.io", - "additionalOptions": {} - }, - "name": "uProc8", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1330, - 300 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "3c2fbae3-b5d5-4a07-9d07-9dc12e18b96d" - }, - { - "parameters": { - "group": "internet", - "tool": "getDomainIsp", - "domain": "n8n.io", - "additionalOptions": {} - }, - "name": "uProc9", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1460, - 300 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "a05ff442-89be-4566-8ab4-a0a6be404b8c" - }, - { - "parameters": { - "group": "internet", - "tool": "checkDomainMx", - "domain": "n8n.io", - "additionalOptions": {} - }, - "name": "uProc10", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1590, - 300 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "28f8de7b-97db-4ba4-ae60-d7715a47b433" - }, - { - "parameters": { - "group": "internet", - "tool": "getUrlPdf", - "url": "https://n8n.io", - "additionalOptions": {} - }, - "name": "uProc11", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1720, - 300 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "866ba0e4-3011-4c2a-aab6-dedd534b0ccf" - }, - { - "parameters": { - "group": "internet", - "tool": "checkDomainRecord", - "domain": "n8n.io", - "type": "NS", - "additionalOptions": {} - }, - "name": "uProc12", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1850, - 300 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "edd0634b-e73d-4b56-ac05-2ebc2986af7c" - }, - { - "parameters": { - "group": "internet", - "tool": "getDomainRecord", - "domain": "n8n.io", - "type": "NS", - "additionalOptions": {} - }, - "name": "uProc13", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1980, - 300 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "97d92f60-cf96-4f11-88c6-5f0c13466cc8" - }, - { - "parameters": { - "group": "internet", - "tool": "getDomainRecords", - "domain": "n8n.io", - "additionalOptions": {} - }, - "name": "uProc14", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 2110, - 300 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "2b48dcec-a2bc-422f-bd74-60e237726f93" - }, - { - "parameters": { - "group": "internet", - "tool": "checkDomainReverse", - "ip": "104.21.37.3", - "domain": "n8n.io", - "additionalOptions": {} - }, - "name": "uProc15", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 2240, - 300 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "25a7db94-89db-4c44-b5ea-610921ea78c5" - }, - { - "parameters": { - "group": "internet", - "tool": "getDomainReverseIp", - "domain": "n8n.io", - "additionalOptions": {} - }, - "name": "uProc16", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 2370, - 300 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "4dcf45b3-9786-4c41-9b5a-be82a46927b1" - }, - { - "parameters": { - "group": "internet", - "tool": "getUrlShareableLinks", - "text": "n8n rocks!", - "url": "https://n8n.io/", - "additionalOptions": {} - }, - "name": "uProc17", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 2500, - 300 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "bc8d869f-0f74-40aa-ad4f-a602e6703526" - }, - { - "parameters": { - "group": "internet", - "tool": "getDomainTechnologies", - "domain": "n8n.io", - "additionalOptions": {} - }, - "name": "uProc18", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 2630, - 300 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "c19223f4-34f6-4fc0-8580-a706d079a0ff" - }, - { - "parameters": { - "group": "internet", - "tool": "getUrlTechnologies", - "url": "https://n8n.io", - "additionalOptions": {} - }, - "name": "uProc19", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 2760, - 300 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "cd0c931e-5ced-4300-8d38-4c6b13d7f9d7" - }, - { - "parameters": { - "group": "internet", - "tool": "getDomainVisits", - "domain": "n8n.io", - "additionalOptions": {} - }, - "name": "uProc20", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 2890, - 300 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "e63b384c-db6c-4f60-867a-e0b1c185e13d" - }, - { - "parameters": { - "group": "internet", - "tool": "getDomainWhois", - "domain": "n8n.io", - "additionalOptions": {} - }, - "name": "uProc21", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 3020, - 300 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "111d4ba6-cdb8-4879-94db-b26f52a0a8fd" - }, - { - "parameters": { - "group": "internet", - "tool": "getIpWhois", - "ip": "104.21.37.3", - "additionalOptions": {} - }, - "name": "uProc22", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 420, - 470 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "33cd2d4d-710a-485f-a54d-db721b95be59" - }, - { - "parameters": { - "group": "internet", - "tool": "getFileCopiedBetweenUrls", - "source": "https://n8n.io/_nuxt/img/df5be1c.png", - "destination": "test", - "additionalOptions": {} - }, - "name": "uProc23", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 550, - 470 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "01eadfc0-0bc0-4630-b54a-a254917686d3" - }, - { - "parameters": { - "group": "internet", - "tool": "getUrlAnalysis", - "url": "https://n8n.io", - "additionalOptions": {} - }, - "name": "uProc24", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 680, - 470 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "309d8b34-9d8f-4f04-8487-5849906b23fb" - }, - { - "parameters": { - "group": "internet", - "tool": "getNetAton", - "ip": "104.21.37.3", - "additionalOptions": {} - }, - "name": "uProc25", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 810, - 470 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "8560b080-f140-4dec-9ab6-a7135c9a0ccc" - }, - { - "parameters": { - "group": "internet", - "tool": "checkUrlContains", - "url": "104.21.37.3", - "regex": "n8n", - "additionalOptions": {} - }, - "name": "uProc26", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 940, - 470 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "9d7ea1fd-7b6c-4023-8452-de501689d0e0" - }, - { - "parameters": { - "group": "internet", - "tool": "getUrlContents", - "url": "https://n8n.io", - "selector": "h1", - "additionalOptions": {} - }, - "name": "uProc27", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1070, - 470 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "61e3e8c3-619e-430a-99fb-dc0e30c85177" - }, - { - "parameters": { - "group": "internet", - "tool": "getUrlContentsParsed", - "url": "https://n8n.io", - "additionalOptions": {} - }, - "name": "uProc28", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1200, - 470 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "cd18157f-d519-4700-a0f6-acb17688bf38" - }, - { - "parameters": { - "group": "internet", - "tool": "getUrlDecode", - "url": "https://n8n.io", - "additionalOptions": {} - }, - "name": "uProc29", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1330, - 470 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "94bac370-001b-42bd-aab8-0a3265166e43" - }, - { - "parameters": { - "group": "internet", - "tool": "getUrlEncode", - "url": "https://n8n.io", - "additionalOptions": {} - }, - "name": "uProc30", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1460, - 470 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "8af8cfea-c432-404f-83a1-0fb46c7a86e3" - }, - { - "parameters": { - "group": "internet", - "tool": "checkUrlExist", - "url": "https://n8n.io", - "additionalOptions": {} - }, - "name": "uProc31", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1590, - 470 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "ec8594b3-8ae9-4a76-9f71-d1cec1508e00" - }, - { - "parameters": { - "group": "internet", - "tool": "getNetFixip", - "number": "104.21.37.3", - "additionalOptions": {} - }, - "name": "uProc32", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1720, - 470 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "7c981264-b095-4827-81a0-751991548cda" - }, - { - "parameters": { - "group": "internet", - "tool": "checkNetHostAlive", - "host": "https://n8n.io", - "additionalOptions": {} - }, - "name": "uProc33", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1850, - 470 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "ad04ee24-86dc-4972-ac6a-c6f5dd731c72" - }, - { - "parameters": { - "group": "internet", - "tool": "getUrlListContentsParsed", - "url": "https://n8n.io", - "additionalOptions": {} - }, - "name": "uProc34", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 1980, - 470 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "b7a838aa-9b5a-41a8-ad4e-078d5bae0386" - }, - { - "parameters": { - "group": "internet", - "tool": "getNetNtoa", - "number": "10421373", - "additionalOptions": {} - }, - "name": "uProc35", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 2110, - 470 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "99b81130-900a-4eff-afe1-9f812071071f" - }, - { - "parameters": { - "group": "internet", - "tool": "getUrlParsed", - "url": "https://n8n.io", - "additionalOptions": {} - }, - "name": "uProc36", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 2240, - 470 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "02263618-4341-43a3-97ff-579b3ae5849b" - }, - { - "parameters": { - "group": "internet", - "tool": "getNetScan", - "host": "https://n8n.io", - "additionalOptions": {} - }, - "name": "uProc37", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 2370, - 470 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "f12e7ab7-f2eb-419f-8a7d-5e630849ac5c" - }, - { - "parameters": { - "group": "internet", - "tool": "checkNetServiceUp", - "host": "https://n8n.io", - "port": "80", - "additionalOptions": {} - }, - "name": "uProc38", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 2500, - 470 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "30cdf3be-b9eb-4c91-8c8a-979ed1672bea" - }, - { - "parameters": { - "group": "internet", - "tool": "getUrlTables", - "url": "https://n8n.io", - "table": "3", - "additionalOptions": {} - }, - "name": "uProc39", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 2630, - 470 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "ed5bf95c-cdd4-4eb8-810f-ac18703f3743" - }, - { - "parameters": { - "group": "internet", - "tool": "checkUrlValid", - "url": "https://n8n.io", - "additionalOptions": {} - }, - "name": "uProc40", - "type": "n8n-nodes-base.uproc", - "typeVersion": 1, - "position": [ - 2760, - 470 - ], - "credentials": { - "uprocApi": { - "id": "142", - "name": "uProc API creds" - } - }, - "id": "6f264af2-ffbe-44cc-9b31-2e64d2b83b9b" - } - ], - "connections": { - "uProc1": { - "main": [ - [ - { - "node": "uProc2", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc2": { - "main": [ - [ - { - "node": "uProc3", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc3": { - "main": [ - [ - { - "node": "uProc4", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc4": { - "main": [ - [ - { - "node": "uProc5", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc5": { - "main": [ - [ - { - "node": "uProc6", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc6": { - "main": [ - [ - { - "node": "uProc7", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc7": { - "main": [ - [ - { - "node": "uProc8", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc8": { - "main": [ - [ - { - "node": "uProc9", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc9": { - "main": [ - [ - { - "node": "uProc10", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc10": { - "main": [ - [ - { - "node": "uProc11", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc11": { - "main": [ - [ - { - "node": "uProc12", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc12": { - "main": [ - [ - { - "node": "uProc13", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc13": { - "main": [ - [ - { - "node": "uProc14", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc14": { - "main": [ - [ - { - "node": "uProc15", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc15": { - "main": [ - [ - { - "node": "uProc16", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc16": { - "main": [ - [ - { - "node": "uProc17", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc17": { - "main": [ - [ - { - "node": "uProc18", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc18": { - "main": [ - [ - { - "node": "uProc19", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc19": { - "main": [ - [ - { - "node": "uProc20", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc20": { - "main": [ - [ - { - "node": "uProc21", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc22": { - "main": [ - [ - { - "node": "uProc23", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc23": { - "main": [ - [ - { - "node": "uProc24", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc24": { - "main": [ - [ - { - "node": "uProc25", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc25": { - "main": [ - [ - { - "node": "uProc26", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc26": { - "main": [ - [ - { - "node": "uProc27", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc27": { - "main": [ - [ - { - "node": "uProc28", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc28": { - "main": [ - [ - { - "node": "uProc29", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc29": { - "main": [ - [ - { - "node": "uProc30", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc30": { - "main": [ - [ - { - "node": "uProc31", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc31": { - "main": [ - [ - { - "node": "uProc32", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc32": { - "main": [ - [ - { - "node": "uProc33", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc33": { - "main": [ - [ - { - "node": "uProc34", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc34": { - "main": [ - [ - { - "node": "uProc35", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc35": { - "main": [ - [ - { - "node": "uProc36", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc36": { - "main": [ - [ - { - "node": "uProc37", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc37": { - "main": [ - [ - { - "node": "uProc38", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc38": { - "main": [ - [ - { - "node": "uProc39", - "type": "main", - "index": 0 - } - ] - ] - }, - "uProc39": { - "main": [ - [ - { - "node": "uProc40", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "uProc1", - "type": "main", - "index": 0 - }, - { - "node": "uProc22", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/182.json b/test-workflows/workflows/182.json deleted file mode 100644 index fae2d5f9884..00000000000 --- a/test-workflows/workflows/182.json +++ /dev/null @@ -1,232 +0,0 @@ -{ - "createdAt": "2021-04-23T08:55:02.078Z", - "updatedAt": "2021-04-23T08:55:02.078Z", - "id": "182", - "name": "Webflow:Item:create get update delete getAll", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "a462a0c7-cda9-4a9e-b447-99be5b8df6f2" - }, - { - "parameters": { - "operation": "create", - "siteId": "6082884ac940c371277833ae", - "collectionId": "608289f18593d40792d70d54", - "fieldsUi": { - "fieldValues": [ - { - "fieldId": "name", - "fieldValue": "=Item{{Date.now()}}" - }, - { - "fieldId": "slug", - "fieldValue": "=ItemSlug{{Date.now()}}" - }, - { - "fieldId": "_archived", - "fieldValue": "False" - }, - { - "fieldId": "_draft", - "fieldValue": "True" - } - ] - } - }, - "name": "Webflow", - "type": "n8n-nodes-base.webflow", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "webflowApi": { - "id": "147", - "name": "Webflow API creds" - } - }, - "id": "270ca4f8-df14-4629-95df-e5adb713d02d" - }, - { - "parameters": { - "siteId": "6082884ac940c371277833ae", - "collectionId": "608289f18593d40792d70d54", - "itemId": "={{$node[\"Webflow\"].json[\"_id\"]}}" - }, - "name": "Webflow1", - "type": "n8n-nodes-base.webflow", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "credentials": { - "webflowApi": { - "id": "147", - "name": "Webflow API creds" - } - }, - "id": "fc5b71c8-e124-49aa-b15f-8fed15916ff1" - }, - { - "parameters": { - "operation": "update", - "siteId": "6082884ac940c371277833ae", - "collectionId": "608289f18593d40792d70d54", - "itemId": "={{$node[\"Webflow\"].json[\"_id\"]}}", - "fieldsUi": { - "fieldValues": [ - { - "fieldId": "_draft", - "fieldValue": "False" - }, - { - "fieldId": "_archived", - "fieldValue": "False" - }, - { - "fieldId": "slug", - "fieldValue": "=Updated{{$node[\"Webflow1\"].json[\"slug\"]}}" - }, - { - "fieldId": "name", - "fieldValue": "=Updated{{$node[\"Webflow1\"].json[\"name\"]}}" - } - ] - } - }, - "name": "Webflow2", - "type": "n8n-nodes-base.webflow", - "typeVersion": 1, - "position": [ - 850, - 300 - ], - "credentials": { - "webflowApi": { - "id": "147", - "name": "Webflow API creds" - } - }, - "id": "07182187-0587-41b2-89e0-1a289070643d" - }, - { - "parameters": { - "operation": "delete", - "siteId": "6082884ac940c371277833ae", - "collectionId": "608289f18593d40792d70d54", - "itemId": "={{$node[\"Webflow\"].json[\"_id\"]}}" - }, - "name": "Webflow3", - "type": "n8n-nodes-base.webflow", - "typeVersion": 1, - "position": [ - 1050, - 300 - ], - "credentials": { - "webflowApi": { - "id": "147", - "name": "Webflow API creds" - } - }, - "id": "197f83d4-c767-4c4a-a776-6c28ec39c799" - }, - { - "parameters": { - "operation": "getAll", - "siteId": "6082884ac940c371277833ae", - "collectionId": "608289f18593d40792d70d54", - "limit": 1 - }, - "name": "Webflow4", - "type": "n8n-nodes-base.webflow", - "typeVersion": 1, - "position": [ - 1250, - 300 - ], - "credentials": { - "webflowApi": { - "id": "147", - "name": "Webflow API creds" - } - }, - "id": "acb4b42b-c8b1-4222-9227-10b8456505fb" - } - ], - "connections": { - "Webflow": { - "main": [ - [ - { - "node": "Webflow1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Webflow1": { - "main": [ - [ - { - "node": "Webflow2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Webflow2": { - "main": [ - [ - { - "node": "Webflow3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Webflow3": { - "main": [ - [ - { - "node": "Webflow4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Webflow", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/183.json b/test-workflows/workflows/183.json deleted file mode 100644 index efa087bd297..00000000000 --- a/test-workflows/workflows/183.json +++ /dev/null @@ -1,617 +0,0 @@ -{ - "createdAt": "2021-04-23T11:00:16.427Z", - "updatedAt": "2021-04-23T16:04:29.271Z", - "id": "183", - "name": "Telegram:Chat:get setDescription setTitle member:Message: sendMessage editMessageText pinChatMessage unpinChatMessage sendPhoto sendSticker sendMediaGroup sendChatAction sendLocation sendDocument sendAudio sendAnimation sendVideo:File:get", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "2003127c-05c1-4e8d-a123-f50582b324d0" - }, - { - "parameters": { - "resource": "chat", - "chatId": "@FixedChannel123" - }, - "name": "Telegram", - "type": "n8n-nodes-base.telegram", - "typeVersion": 1, - "position": [ - 500, - 200 - ], - "credentials": { - "telegramApi": { - "id": "148", - "name": "Telegram API creds" - } - }, - "id": "b74ed6ec-dd64-46f1-bbd2-968a02e248bc" - }, - { - "parameters": { - "resource": "chat", - "operation": "setDescription", - "chatId": "@FixedChannel123", - "description": "=UpdatedDescription{{Date.now()}}" - }, - "name": "Telegram1", - "type": "n8n-nodes-base.telegram", - "typeVersion": 1, - "position": [ - 650, - 200 - ], - "credentials": { - "telegramApi": { - "id": "148", - "name": "Telegram API creds" - } - }, - "id": "b78da1c6-a208-490f-95a9-b359f8d9852c" - }, - { - "parameters": { - "resource": "chat", - "operation": "setTitle", - "chatId": "@FixedChannel123", - "title": "=Title{{Date.now()}}" - }, - "name": "Telegram2", - "type": "n8n-nodes-base.telegram", - "typeVersion": 1, - "position": [ - 800, - 200 - ], - "credentials": { - "telegramApi": { - "id": "148", - "name": "Telegram API creds" - } - }, - "id": "50e2a9f1-5cf4-4009-8952-9d9a7f798cf6" - }, - { - "parameters": { - "resource": "chat", - "operation": "member", - "chatId": "@FixedChannel123", - "userId": "1757347499" - }, - "name": "Telegram3", - "type": "n8n-nodes-base.telegram", - "typeVersion": 1, - "position": [ - 950, - 200 - ], - "credentials": { - "telegramApi": { - "id": "148", - "name": "Telegram API creds" - } - }, - "id": "26a5c251-d0c1-4cb4-83a8-b5722b6b086c" - }, - { - "parameters": { - "chatId": "@FixedChannel123", - "text": "=Test{{Date.now()}}", - "additionalFields": {} - }, - "name": "Telegram4", - "type": "n8n-nodes-base.telegram", - "typeVersion": 1, - "position": [ - 490, - 400 - ], - "credentials": { - "telegramApi": { - "id": "148", - "name": "Telegram API creds" - } - }, - "id": "8b3c6634-82c9-433e-8492-8c670b0e0ffd" - }, - { - "parameters": { - "operation": "editMessageText", - "chatId": "@FixedChannel123", - "messageId": "={{$node[\"Telegram4\"].json[\"result\"][\"message_id\"]}}", - "text": "=UpdatedTest{{Date.now()}}", - "additionalFields": {} - }, - "name": "Telegram5", - "type": "n8n-nodes-base.telegram", - "typeVersion": 1, - "position": [ - 650, - 400 - ], - "credentials": { - "telegramApi": { - "id": "148", - "name": "Telegram API creds" - } - }, - "id": "179251fc-335f-4f05-ab9c-9c712e11b778" - }, - { - "parameters": { - "operation": "pinChatMessage", - "chatId": "@FixedChannel123", - "messageId": "={{$node[\"Telegram4\"].json[\"result\"][\"message_id\"]}}", - "additionalFields": {} - }, - "name": "Telegram6", - "type": "n8n-nodes-base.telegram", - "typeVersion": 1, - "position": [ - 800, - 400 - ], - "credentials": { - "telegramApi": { - "id": "148", - "name": "Telegram API creds" - } - }, - "id": "bb70b35e-a908-43d8-8f01-a9cb3d152d53" - }, - { - "parameters": { - "operation": "unpinChatMessage", - "chatId": "@FixedChannel123", - "messageId": "={{$node[\"Telegram4\"].json[\"result\"][\"message_id\"]}}" - }, - "name": "Telegram7", - "type": "n8n-nodes-base.telegram", - "typeVersion": 1, - "position": [ - 950, - 400 - ], - "credentials": { - "telegramApi": { - "id": "148", - "name": "Telegram API creds" - } - }, - "id": "dce352dc-fdbe-49ee-bb47-7aa065d5c3e4" - }, - { - "parameters": { - "operation": "sendPhoto", - "chatId": "@FixedChannel123", - "file": "https://n8n.io/_nuxt/img/df5be1c.png", - "additionalFields": {} - }, - "name": "Telegram8", - "type": "n8n-nodes-base.telegram", - "typeVersion": 1, - "position": [ - 1100, - 400 - ], - "credentials": { - "telegramApi": { - "id": "148", - "name": "Telegram API creds" - } - }, - "id": "bdb4221e-41ad-42ad-8725-6d93a326abe4" - }, - { - "parameters": { - "operation": "sendSticker", - "chatId": "@FixedChannel123", - "file": "https://tlgrm.eu/_/stickers/22c/b26/22cb267f-a2ab-41e4-8360-fe35ac048c3b/192/12.webp", - "additionalFields": {} - }, - "name": "Telegram9", - "type": "n8n-nodes-base.telegram", - "typeVersion": 1, - "position": [ - 1250, - 400 - ], - "credentials": { - "telegramApi": { - "id": "148", - "name": "Telegram API creds" - } - }, - "id": "70f93d2c-1365-4a84-acb6-efe74de090a1" - }, - { - "parameters": { - "resource": "file", - "fileId": "={{$node[\"Telegram8\"].json[\"result\"][\"photo\"][0][\"file_id\"]}}" - }, - "name": "Telegram10", - "type": "n8n-nodes-base.telegram", - "typeVersion": 1, - "position": [ - 1250, - 600 - ], - "credentials": { - "telegramApi": { - "id": "148", - "name": "Telegram API creds" - } - }, - "id": "53b7d1e7-462d-4843-b852-3491a1e69310" - }, - { - "parameters": { - "operation": "sendMediaGroup", - "chatId": "@FixedChannel123", - "media": { - "media": [ - { - "media": "https://n8n.io/_nuxt/img/df5be1c.png", - "additionalFields": {} - }, - { - "media": "https://raw.githubusercontent.com/n8n-io/n8n/master/assets/n8n-screenshot.png", - "additionalFields": {} - } - ] - }, - "additionalFields": {} - }, - "name": "Telegram11", - "type": "n8n-nodes-base.telegram", - "typeVersion": 1, - "position": [ - 1400, - 400 - ], - "credentials": { - "telegramApi": { - "id": "148", - "name": "Telegram API creds" - } - }, - "id": "f8727e6e-c697-4b6b-be71-aaa451f4dabb" - }, - { - "parameters": { - "operation": "sendChatAction", - "chatId": "@FixedChannel123", - "action": "find_location" - }, - "name": "Telegram12", - "type": "n8n-nodes-base.telegram", - "typeVersion": 1, - "position": [ - 1550, - 400 - ], - "credentials": { - "telegramApi": { - "id": "148", - "name": "Telegram API creds" - } - }, - "id": "045fd95c-e699-4568-b6a5-3e1289e686c1" - }, - { - "parameters": { - "operation": "sendLocation", - "chatId": "@FixedChannel123", - "latitude": 52.529776, - "longitude": 13.3893152845, - "additionalFields": {} - }, - "name": "Telegram13", - "type": "n8n-nodes-base.telegram", - "typeVersion": 1, - "position": [ - 1700, - 400 - ], - "credentials": { - "telegramApi": { - "id": "148", - "name": "Telegram API creds" - } - }, - "id": "fa2ee6c4-f697-4e88-a952-dfbe3b5806d2" - }, - { - "parameters": { - "operation": "sendDocument", - "chatId": "@FixedChannel123", - "file": "https://nx10458.your-storageshare.de/s/4w7bEHjjGyEzoXq/download", - "additionalFields": {} - }, - "name": "Telegram14", - "type": "n8n-nodes-base.telegram", - "typeVersion": 1, - "position": [ - 1850, - 400 - ], - "credentials": { - "telegramApi": { - "id": "148", - "name": "Telegram API creds" - } - }, - "id": "777d6bca-1444-4da2-bc76-454702bbbd33" - }, - { - "parameters": { - "operation": "sendAudio", - "chatId": "@FixedChannel123", - "file": "http://websrvr90va.audiovideoweb.com/va90web25003/companions/Foundations%20of%20Rock/13.07.mp3", - "additionalFields": {} - }, - "name": "Telegram15", - "type": "n8n-nodes-base.telegram", - "typeVersion": 1, - "position": [ - 2000, - 400 - ], - "credentials": { - "telegramApi": { - "id": "148", - "name": "Telegram API creds" - } - }, - "id": "d6eced32-26b0-417f-832f-0521976847ec" - }, - { - "parameters": { - "operation": "sendAnimation", - "chatId": "@FixedChannel123", - "file": "https://media.giphy.com/media/1nR6fu93A17vWZbO9c/giphy.gif", - "additionalFields": {} - }, - "name": "Telegram16", - "type": "n8n-nodes-base.telegram", - "typeVersion": 1, - "position": [ - 2150, - 400 - ], - "credentials": { - "telegramApi": { - "id": "148", - "name": "Telegram API creds" - } - }, - "id": "64ed5e7e-fa11-447c-b9e8-f8ee091bc447" - }, - { - "parameters": { - "operation": "sendVideo", - "chatId": "@FixedChannel123", - "file": "http://vod-progressive.akamaized.net/exp=1619203691~acl=%2Fvimeo-prod-skyfire-std-us%2F01%2F3610%2F13%2F343052045%2F1373111309.mp4~hmac=8ede5174dfb91845afeae538f8144fe5d6819b4a4713f700e1ff805261445369/vimeo-prod-skyfire-std-us/01/3610/13/343052045/1373111309.mp4?download=1&filename=Pexels Videos 2519660.mp4", - "additionalFields": {} - }, - "name": "Telegram17", - "type": "n8n-nodes-base.telegram", - "typeVersion": 1, - "position": [ - 2300, - 400 - ], - "credentials": { - "telegramApi": { - "id": "148", - "name": "Telegram API creds" - } - }, - "id": "735e6eeb-4dff-4a56-847f-ac2512d00a18" - } - ], - "connections": { - "Telegram": { - "main": [ - [ - { - "node": "Telegram1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Telegram1": { - "main": [ - [ - { - "node": "Telegram2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Telegram2": { - "main": [ - [ - { - "node": "Telegram3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Telegram4": { - "main": [ - [ - { - "node": "Telegram5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Telegram5": { - "main": [ - [ - { - "node": "Telegram6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Telegram6": { - "main": [ - [ - { - "node": "Telegram7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Telegram8": { - "main": [ - [ - { - "node": "Telegram10", - "type": "main", - "index": 0 - }, - { - "node": "Telegram9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Telegram7": { - "main": [ - [ - { - "node": "Telegram8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Telegram9": { - "main": [ - [ - { - "node": "Telegram11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Telegram", - "type": "main", - "index": 0 - }, - { - "node": "Telegram4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Telegram11": { - "main": [ - [ - { - "node": "Telegram12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Telegram12": { - "main": [ - [ - { - "node": "Telegram13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Telegram13": { - "main": [ - [ - { - "node": "Telegram14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Telegram14": { - "main": [ - [ - { - "node": "Telegram15", - "type": "main", - "index": 0 - } - ] - ] - }, - "Telegram15": { - "main": [ - [ - { - "node": "Telegram16", - "type": "main", - "index": 0 - } - ] - ] - }, - "Telegram16": { - "main": [ - [ - { - "node": "Telegram17", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/184.json b/test-workflows/workflows/184.json deleted file mode 100644 index 91b6137b2de..00000000000 --- a/test-workflows/workflows/184.json +++ /dev/null @@ -1,930 +0,0 @@ -{ - "createdAt": "2021-04-26T16:15:15.635Z", - "updatedAt": "2021-05-20T16:56:10.192Z", - "id": "184", - "name": "Salesforce:Account:create get addNote getAll getSummary update delete:Case:create get addComment getAll getSummary update delete:Attachment:create get getAll getSummary update delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "66a1cb46-3115-4e3f-b986-589153ee056b" - }, - { - "parameters": { - "resource": "account", - "name": "=Account{{Date.now()}}", - "additionalFields": {} - }, - "name": "Salesforce", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 520, - 190 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "5b1a4927-ea99-4ad0-9166-87de446b39e2" - }, - { - "parameters": { - "resource": "account", - "operation": "get", - "accountId": "={{$node[\"Salesforce\"].json[\"id\"]}}" - }, - "name": "Salesforce1", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 770, - 190 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "78646575-42fb-4d9c-af75-f55fcac7a0e8" - }, - { - "parameters": { - "resource": "account", - "operation": "addNote", - "accountId": "={{$node[\"Salesforce\"].json[\"id\"]}}", - "title": "=Note{{Date.now()}}", - "options": {} - }, - "name": "Salesforce2", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 930, - 190 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "3036a0b8-1700-4cac-afd9-0679461bbeb3" - }, - { - "parameters": { - "resource": "account", - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "Salesforce3", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 1210, - 190 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "3025fb7e-2d06-4174-b60b-e31ae414b56e" - }, - { - "parameters": { - "resource": "account", - "operation": "getSummary" - }, - "name": "Salesforce4", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 1360, - 190 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "f9572f72-55e8-4e58-9aac-aebc4476a91b" - }, - { - "parameters": { - "resource": "account", - "operation": "update", - "accountId": "={{$node[\"Salesforce\"].json[\"id\"]}}", - "updateFields": { - "name": "=Updated{{$node[\"Salesforce1\"].json[\"Name\"]}}" - } - }, - "name": "Salesforce5", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 1650, - 190 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "50385d4f-bfbf-49ba-a620-6372ce9eb7e2" - }, - { - "parameters": { - "resource": "account", - "operation": "delete", - "accountId": "={{$node[\"Salesforce\"].json[\"id\"]}}" - }, - "name": "Salesforce6", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 1800, - 190 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "2baac145-ccd2-421a-8e57-0312264f64c6" - }, - { - "parameters": { - "resource": "case", - "type": "Other", - "additionalFields": { - "reason": "Installation", - "subject": "=Subject{{Date.now()}}" - } - }, - "name": "Salesforce7", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 530, - 350 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "6f52f121-1906-4583-9ab5-ace8a85c21f1" - }, - { - "parameters": { - "resource": "case", - "operation": "get", - "caseId": "={{$node[\"Salesforce7\"].json[\"id\"]}}" - }, - "name": "Salesforce8", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 690, - 350 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "5623e57f-6a90-46d4-b4b1-2a295c4a97be" - }, - { - "parameters": { - "resource": "case", - "operation": "addComment", - "caseId": "={{$node[\"Salesforce7\"].json[\"id\"]}}", - "options": { - "commentBody": "=Comment{{Date.now()}}" - } - }, - "name": "Salesforce9", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 2490, - 350 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "2fd4dca0-4bfa-41d2-971e-0bd469242d21" - }, - { - "parameters": { - "resource": "case", - "operation": "getSummary" - }, - "name": "Salesforce10", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 2750, - 350 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "93aa55e7-46e5-4576-a634-82ff1b94963b" - }, - { - "parameters": { - "resource": "case", - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "Salesforce11", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 2910, - 350 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "3e12fbf3-547f-4444-84c8-82339fa49485" - }, - { - "parameters": { - "resource": "case", - "operation": "update", - "caseId": "={{$node[\"Salesforce7\"].json[\"id\"]}}", - "updateFields": { - "subject": "=Updated{{$node[\"Salesforce8\"].json[\"Subject\"]}}" - } - }, - "name": "Salesforce12", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 3180, - 350 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "dc93d012-04c6-4b5b-85c8-6a6cdd2c37f1" - }, - { - "parameters": { - "resource": "case", - "operation": "delete", - "caseId": "={{$node[\"Salesforce7\"].json[\"id\"]}}" - }, - "name": "Salesforce13", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 3340, - 350 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "339d8458-fcf3-4717-8baf-33651e27e169" - }, - { - "parameters": { - "resource": "attachment", - "parentId": "={{$node[\"Salesforce8\"].json[\"Id\"]}}", - "name": "=Attachment{{Date.now()}}", - "additionalFields": {} - }, - "name": "Salesforce14", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 1260, - 500 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "6cac533b-4965-4432-908e-5f9abf9d7e28" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "data", - "value": "=Attachment example" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 800, - 500 - ], - "id": "4e4a6a2b-ffb1-4ca1-93bd-39ace5d35c68" - }, - { - "parameters": { - "mode": "jsonToBinary", - "options": {} - }, - "name": "Move Binary Data", - "type": "n8n-nodes-base.moveBinaryData", - "typeVersion": 1, - "position": [ - 960, - 500 - ], - "id": "2436fc2e-c730-4cfc-aeb9-0fbeda60b653" - }, - { - "parameters": { - "resource": "attachment", - "operation": "get", - "attachmentId": "={{$node[\"Salesforce14\"].json[\"id\"]}}" - }, - "name": "Salesforce15", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 1410, - 500 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "044ebdfa-a4ba-4c6f-a6b8-73e557b01f5a" - }, - { - "parameters": { - "resource": "attachment", - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "Salesforce16", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 1710, - 500 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "11d43928-769d-49b0-b0df-540b98dbb94e" - }, - { - "parameters": { - "resource": "attachment", - "operation": "getSummary" - }, - "name": "Salesforce17", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 1860, - 500 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "677c0167-c2c3-43cd-87c8-6281f3bdbced" - }, - { - "parameters": { - "resource": "attachment", - "operation": "update", - "attachmentId": "={{$node[\"Salesforce14\"].json[\"id\"]}}", - "updateFields": { - "isPrivate": true - } - }, - "name": "Salesforce18", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 2140, - 500 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "0f9a0337-0b8e-4839-8507-4da0ae9cce8f" - }, - { - "parameters": { - "resource": "attachment", - "operation": "delete", - "attachmentId": "={{$node[\"Salesforce14\"].json[\"id\"]}}" - }, - "name": "Salesforce19", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 2290, - 500 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "d3dee2a4-4a49-42c8-9965-8d3a4614dab7" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second", - "type": "n8n-nodes-base.function", - "position": [ - 650, - 190 - ], - "typeVersion": 1, - "id": "82031d82-409d-4921-8fd7-bdb9f5b30e44" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second1", - "type": "n8n-nodes-base.function", - "position": [ - 1070, - 190 - ], - "typeVersion": 1, - "id": "ca22ae1e-464b-4c60-9411-d953f6274def" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second2", - "type": "n8n-nodes-base.function", - "position": [ - 1510, - 190 - ], - "typeVersion": 1, - "id": "b51888e4-e156-45dc-b04a-de238a40d59b" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second3", - "type": "n8n-nodes-base.function", - "position": [ - 3050, - 350 - ], - "typeVersion": 1, - "id": "52d4818a-c5fa-4172-9a9d-754095a21f3b" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second4", - "type": "n8n-nodes-base.function", - "position": [ - 2620, - 350 - ], - "typeVersion": 1, - "id": "8fdcf0f4-d8be-41dd-94c1-4c3802500701" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second5", - "type": "n8n-nodes-base.function", - "position": [ - 1990, - 500 - ], - "typeVersion": 1, - "id": "98e604e1-ee39-43a5-8aad-53b423f88033" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second6", - "type": "n8n-nodes-base.function", - "position": [ - 1580, - 500 - ], - "typeVersion": 1, - "id": "04e6ad3e-5031-4945-ac5e-84baaf8db3be" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second7", - "type": "n8n-nodes-base.function", - "position": [ - 1120, - 500 - ], - "typeVersion": 1, - "id": "a61fabaa-a79e-4714-8910-4300cdb6c0b5" - } - ], - "connections": { - "Salesforce": { - "main": [ - [ - { - "node": "Sleep 0.5 second", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce1": { - "main": [ - [ - { - "node": "Salesforce2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce2": { - "main": [ - [ - { - "node": "Sleep 0.5 second1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce3": { - "main": [ - [ - { - "node": "Salesforce4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce4": { - "main": [ - [ - { - "node": "Sleep 0.5 second2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce5": { - "main": [ - [ - { - "node": "Salesforce6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce7": { - "main": [ - [ - { - "node": "Salesforce8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce8": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce9": { - "main": [ - [ - { - "node": "Sleep 0.5 second4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce10": { - "main": [ - [ - { - "node": "Salesforce11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce11": { - "main": [ - [ - { - "node": "Sleep 0.5 second3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce12": { - "main": [ - [ - { - "node": "Salesforce13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set": { - "main": [ - [ - { - "node": "Move Binary Data", - "type": "main", - "index": 0 - } - ] - ] - }, - "Move Binary Data": { - "main": [ - [ - { - "node": "Sleep 0.5 second7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce14": { - "main": [ - [ - { - "node": "Salesforce15", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce15": { - "main": [ - [ - { - "node": "Sleep 0.5 second6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce16": { - "main": [ - [ - { - "node": "Salesforce17", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce17": { - "main": [ - [ - { - "node": "Sleep 0.5 second5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce18": { - "main": [ - [ - { - "node": "Salesforce19", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce19": { - "main": [ - [ - { - "node": "Salesforce9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Salesforce7", - "type": "main", - "index": 0 - }, - { - "node": "Salesforce", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second": { - "main": [ - [ - { - "node": "Salesforce1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second1": { - "main": [ - [ - { - "node": "Salesforce3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second2": { - "main": [ - [ - { - "node": "Salesforce5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second3": { - "main": [ - [ - { - "node": "Salesforce12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second4": { - "main": [ - [ - { - "node": "Salesforce10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second5": { - "main": [ - [ - { - "node": "Salesforce18", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second6": { - "main": [ - [ - { - "node": "Salesforce16", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second7": { - "main": [ - [ - { - "node": "Salesforce14", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/185.json b/test-workflows/workflows/185.json deleted file mode 100644 index 8edbab332a1..00000000000 --- a/test-workflows/workflows/185.json +++ /dev/null @@ -1,966 +0,0 @@ -{ - "createdAt": "2021-04-26T16:57:16.077Z", - "updatedAt": "2021-05-20T16:55:37.548Z", - "id": "185", - "name": "Salesforce:Lead:create get addNote addToCampaign getAll getSummary update delete:Contact:create get addNote addToCampaign getAll getSummary update delete:CustomObject:create get getAll update delete:Flow:getAll", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "3e759fa8-73f9-4851-968b-65c1843c646c" - }, - { - "parameters": { - "resource": "contact", - "lastname": "=Contact{{Date.now()}}", - "additionalFields": {} - }, - "name": "Salesforce", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 450, - 230 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "0ae37230-15ba-4ff3-a4af-373fa3a1b0b4" - }, - { - "parameters": { - "resource": "contact", - "operation": "get", - "contactId": "={{$node[\"Salesforce\"].json[\"id\"]}}" - }, - "name": "Salesforce1", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 600, - 230 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "a2dc5829-0aee-495e-a7e2-a8db3b8eacc5" - }, - { - "parameters": { - "resource": "contact", - "operation": "addNote", - "contactId": "={{$node[\"Salesforce\"].json[\"id\"]}}", - "title": "=Note{{Date.now()}}", - "options": {} - }, - "name": "Salesforce2", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 940, - 230 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "75d1b33c-cb4d-429e-835d-06e3b59cecff" - }, - { - "parameters": { - "resource": "contact", - "operation": "getSummary" - }, - "name": "Salesforce3", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 1090, - 230 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "6a0bda2d-3ba5-409f-b5c2-d1cce8e13206" - }, - { - "parameters": { - "resource": "contact", - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "Salesforce4", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 1400, - 230 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "bf879abe-b86e-44f9-819a-96dcde8ed019" - }, - { - "parameters": { - "resource": "contact", - "operation": "addToCampaign", - "contactId": "={{$node[\"Salesforce\"].json[\"id\"]}}", - "campaignId": "70109000000TU12AAG", - "options": {} - }, - "name": "Salesforce5", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 1550, - 230 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "a00bc642-9a77-4109-9de3-be96c3d9c615" - }, - { - "parameters": { - "resource": "contact", - "operation": "update", - "contactId": "={{$node[\"Salesforce\"].json[\"id\"]}}", - "updateFields": { - "title": "=UpdatedTitle{{Date.now()}}" - } - }, - "name": "Salesforce6", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 1910, - 230 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "f7354012-b9c7-4a0b-9ca6-d627443b24c5" - }, - { - "parameters": { - "resource": "contact", - "operation": "delete", - "contactId": "={{$node[\"Salesforce\"].json[\"id\"]}}" - }, - "name": "Salesforce7", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 2060, - 230 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "d1552ed3-73d6-4f8d-801c-d24e594044b7" - }, - { - "parameters": { - "resource": "customObject", - "customObject": "CustomObjectFixed__c", - "customFieldsUi": { - "customFieldsValues": [ - { - "fieldId": "Name", - "value": "TestCustomObjectFixed" - } - ] - } - }, - "name": "Salesforce8", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 460, - 400 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "1ca8c1bc-5e2b-45c5-ab7a-33b766fa906b" - }, - { - "parameters": { - "resource": "customObject", - "operation": "get", - "customObject": "CustomObjectFixed__c", - "recordId": "={{$node[\"Salesforce8\"].json[\"id\"]}}" - }, - "name": "Salesforce9", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 810, - 400 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "7ec96ddd-97b2-48c1-ba74-f0219d9f8df6" - }, - { - "parameters": { - "resource": "customObject", - "operation": "getAll", - "customObject": "CustomObjectFixed__c", - "limit": 1, - "options": {} - }, - "name": "Salesforce10", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 950, - 400 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "655e131b-ce30-4408-90c4-33c2bbf2509d" - }, - { - "parameters": { - "resource": "customObject", - "operation": "update", - "customObject": "CustomObjectFixed__c", - "recordId": "={{$node[\"Salesforce8\"].json[\"id\"]}}", - "customFieldsUi": { - "customFieldsValues": [ - { - "fieldId": "Name", - "value": "UpdatedCustomObjectFixed" - } - ] - } - }, - "name": "Salesforce11", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 1320, - 400 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "a8bbc9dc-095e-4977-8e7e-ab51105e067e" - }, - { - "parameters": { - "resource": "customObject", - "operation": "delete", - "customObject": "CustomObjectFixed__c", - "recordId": "={{$node[\"Salesforce8\"].json[\"id\"]}}" - }, - "name": "Salesforce12", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 1470, - 400 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "079ed153-25b5-459d-8fa9-09ed6b6839a4" - }, - { - "parameters": { - "resource": "flow", - "operation": "getAll", - "limit": 1 - }, - "name": "Salesforce13", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 460, - 560 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "f869a8a4-f0ac-4ad6-a594-2d51099aa226" - }, - { - "parameters": { - "resource": "flow", - "apiName": "={{$node[\"Salesforce13\"].json[\"name\"]}}" - }, - "name": "Salesforce14", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 600, - 560 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "disabled": true, - "id": "f476766b-2817-4b3a-9220-21b5852609e2" - }, - { - "parameters": { - "company": "n8n", - "lastname": "=LastName{{Date.now()}}", - "additionalFields": {} - }, - "name": "Salesforce15", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 450, - 50 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "2881bb5a-12ff-41b6-9624-82bbadf392e2" - }, - { - "parameters": { - "operation": "get", - "leadId": "={{$node[\"Salesforce15\"].json[\"id\"]}}" - }, - "name": "Salesforce16", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 600, - 50 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "79861ab0-f376-48df-aeba-08c297c7070f" - }, - { - "parameters": { - "operation": "addNote", - "leadId": "={{$node[\"Salesforce15\"].json[\"id\"]}}", - "title": "LeadNote", - "options": {} - }, - "name": "Salesforce17", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 940, - 50 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "19fd1281-ef46-4aa2-9b21-0c767bf2e050" - }, - { - "parameters": { - "operation": "getSummary" - }, - "name": "Salesforce18", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 1090, - 50 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "f1b56cfe-41c8-4f8b-9ce5-ba48744907fd" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "Salesforce19", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 1400, - 50 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "b80c3c9c-9f27-459c-b4c7-8d581923dced" - }, - { - "parameters": { - "operation": "addToCampaign", - "leadId": "={{$node[\"Salesforce15\"].json[\"id\"]}}", - "campaignId": "70109000000TU12AAG", - "options": {} - }, - "name": "Salesforce20", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 1550, - 50 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "b7fa794c-495a-4d41-9416-9b318522e236" - }, - { - "parameters": { - "operation": "update", - "leadId": "={{$node[\"Salesforce15\"].json[\"id\"]}}", - "updateFields": { - "description": "Updated Description" - } - }, - "name": "Salesforce21", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 1910, - 50 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "c26d4856-782a-47e9-aa17-aecb7705610a" - }, - { - "parameters": { - "operation": "delete", - "leadId": "={{$node[\"Salesforce15\"].json[\"id\"]}}" - }, - "name": "Salesforce22", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 2060, - 50 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "02fc2ba8-33ae-4ffe-9e18-ed113a5b75e6" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second", - "type": "n8n-nodes-base.function", - "position": [ - 770, - 50 - ], - "typeVersion": 1, - "id": "c004a09e-09fd-4ac2-8d5c-270a15b204b1" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second1", - "type": "n8n-nodes-base.function", - "position": [ - 770, - 230 - ], - "typeVersion": 1, - "id": "4939f605-622d-4f84-8da2-6565fc63b42f" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second2", - "type": "n8n-nodes-base.function", - "position": [ - 1240, - 50 - ], - "typeVersion": 1, - "id": "e44a9ad5-a103-49da-956c-53ff4993450c" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second3", - "type": "n8n-nodes-base.function", - "position": [ - 1250, - 230 - ], - "typeVersion": 1, - "id": "75c555b9-1b6f-426a-9dab-b691918843a2" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second4", - "type": "n8n-nodes-base.function", - "position": [ - 1730, - 50 - ], - "typeVersion": 1, - "id": "523558db-379a-4eac-8ce0-03e3ce08ff6a" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second5", - "type": "n8n-nodes-base.function", - "position": [ - 1730, - 230 - ], - "typeVersion": 1, - "id": "077e1d54-864f-47f9-b248-a5b482946e13" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second6", - "type": "n8n-nodes-base.function", - "position": [ - 1150, - 400 - ], - "typeVersion": 1, - "id": "d6328f6e-5944-4f30-8911-1f691fbfbd4c" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second7", - "type": "n8n-nodes-base.function", - "position": [ - 620, - 400 - ], - "typeVersion": 1, - "id": "feb9fe8d-176e-442e-85e5-f58a42603a35" - } - ], - "connections": { - "Salesforce": { - "main": [ - [ - { - "node": "Salesforce1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce1": { - "main": [ - [ - { - "node": "Sleep 0.5 second1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce2": { - "main": [ - [ - { - "node": "Salesforce3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce3": { - "main": [ - [ - { - "node": "Sleep 0.5 second3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce4": { - "main": [ - [ - { - "node": "Salesforce5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce5": { - "main": [ - [ - { - "node": "Sleep 0.5 second5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce6": { - "main": [ - [ - { - "node": "Salesforce7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Salesforce", - "type": "main", - "index": 0 - }, - { - "node": "Salesforce8", - "type": "main", - "index": 0 - }, - { - "node": "Salesforce13", - "type": "main", - "index": 0 - }, - { - "node": "Salesforce15", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce8": { - "main": [ - [ - { - "node": "Sleep 0.5 second7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce9": { - "main": [ - [ - { - "node": "Salesforce10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce10": { - "main": [ - [ - { - "node": "Sleep 0.5 second6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce11": { - "main": [ - [ - { - "node": "Salesforce12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce13": { - "main": [ - [ - { - "node": "Salesforce14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce15": { - "main": [ - [ - { - "node": "Salesforce16", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce16": { - "main": [ - [ - { - "node": "Sleep 0.5 second", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce17": { - "main": [ - [ - { - "node": "Salesforce18", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce18": { - "main": [ - [ - { - "node": "Sleep 0.5 second2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce19": { - "main": [ - [ - { - "node": "Salesforce20", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce20": { - "main": [ - [ - { - "node": "Sleep 0.5 second4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce21": { - "main": [ - [ - { - "node": "Salesforce22", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second4": { - "main": [ - [ - { - "node": "Salesforce21", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second5": { - "main": [ - [ - { - "node": "Salesforce6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second2": { - "main": [ - [ - { - "node": "Salesforce19", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second3": { - "main": [ - [ - { - "node": "Salesforce4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second": { - "main": [ - [ - { - "node": "Salesforce17", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second1": { - "main": [ - [ - { - "node": "Salesforce2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second6": { - "main": [ - [ - { - "node": "Salesforce11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second7": { - "main": [ - [ - { - "node": "Salesforce9", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/186.json b/test-workflows/workflows/186.json deleted file mode 100644 index bbdaf94514c..00000000000 --- a/test-workflows/workflows/186.json +++ /dev/null @@ -1,618 +0,0 @@ -{ - "createdAt": "2021-04-26T17:42:22.794Z", - "updatedAt": "2021-05-21T12:39:59.740Z", - "id": "186", - "name": "Salesforce:Opportunity:create get addNote getAll getSummary update delete:Task:create get getAll getSummary update delete:Query:search", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "0c8d4ebe-b490-4418-a240-32e15a25879c" - }, - { - "parameters": { - "resource": "opportunity", - "name": "=Opp{{Date.now()}}", - "closeDate": "2021-03-31T22:00:00.000Z", - "stageName": "Value Proposition", - "additionalFields": {} - }, - "name": "Salesforce", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 500, - 250 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "611612e2-cd0e-413c-a8c0-ca011830d3f3" - }, - { - "parameters": { - "resource": "opportunity", - "operation": "get", - "opportunityId": "={{$node[\"Salesforce\"].json[\"id\"]}}" - }, - "name": "Salesforce1", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 780, - 250 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "76c5bb71-c7a5-41fe-bab8-8ab5a4e3bd02" - }, - { - "parameters": { - "resource": "opportunity", - "operation": "addNote", - "opportunityId": "={{$node[\"Salesforce\"].json[\"id\"]}}", - "title": "OppNote", - "options": {} - }, - "name": "Salesforce2", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 910, - 250 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "863c2685-0e4a-45ae-a838-570cd2b328be" - }, - { - "parameters": { - "resource": "opportunity", - "operation": "getSummary" - }, - "name": "Salesforce3", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 1180, - 250 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "531dba66-59fa-4274-abd9-fa424c6068d2" - }, - { - "parameters": { - "resource": "opportunity", - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "Salesforce4", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 1330, - 250 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "95bef426-8b35-43d0-a0cb-274650ee2f64" - }, - { - "parameters": { - "resource": "opportunity", - "operation": "update", - "opportunityId": "={{$node[\"Salesforce\"].json[\"id\"]}}", - "updateFields": { - "name": "UpdatedOpp" - } - }, - "name": "Salesforce5", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 1580, - 250 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "9806aa1f-fe25-4e09-83c7-7412d6897d52" - }, - { - "parameters": { - "resource": "opportunity", - "operation": "delete", - "opportunityId": "={{$node[\"Salesforce\"].json[\"id\"]}}" - }, - "name": "Salesforce6", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 1730, - 250 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "7e5cf8e8-0935-4ea0-b58e-896cd0a1d7a2" - }, - { - "parameters": { - "resource": "search", - "query": "SELECT Id, Name, BillingCity FROM Account LIMIT 1" - }, - "name": "Salesforce7", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 500, - 400 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "b338d5c8-ce76-4faa-9764-f86e4b346b87" - }, - { - "parameters": { - "resource": "task", - "status": "In Progress", - "additionalFields": {} - }, - "name": "Salesforce8", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 600, - 550 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "2c2811e3-2dc0-42c1-ab13-0940503318fd" - }, - { - "parameters": { - "resource": "task", - "operation": "get", - "taskId": "={{$node[\"Salesforce8\"].json[\"id\"]}}" - }, - "name": "Salesforce9", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 750, - 550 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "0e61e836-069b-45f3-8ea7-298610c170b2" - }, - { - "parameters": { - "resource": "task", - "operation": "getSummary" - }, - "name": "Salesforce10", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 1010, - 550 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "ff0c0a0f-16c9-44e5-9aef-531039f7985c" - }, - { - "parameters": { - "resource": "task", - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "Salesforce11", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 1150, - 550 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "cbf534bd-9db5-4e10-abfa-8cae05cf147b" - }, - { - "parameters": { - "resource": "task", - "operation": "update", - "taskId": "={{$node[\"Salesforce8\"].json[\"id\"]}}", - "updateFields": { - "status": "Completed" - } - }, - "name": "Salesforce12", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 1460, - 550 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "04afbeb0-d437-4060-8966-e35cef872f79" - }, - { - "parameters": { - "resource": "task", - "operation": "delete", - "taskId": "={{$node[\"Salesforce8\"].json[\"id\"]}}" - }, - "name": "Salesforce13", - "type": "n8n-nodes-base.salesforce", - "typeVersion": 1, - "position": [ - 1610, - 550 - ], - "credentials": { - "salesforceOAuth2Api": { - "id": "149", - "name": "Salesforce OAuth2 API creds" - } - }, - "id": "5f800e5f-7be2-483a-8633-70e258e9ce69" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second", - "type": "n8n-nodes-base.function", - "position": [ - 640, - 250 - ], - "typeVersion": 1, - "id": "74e93e34-a272-40a3-a976-98f7da373e49" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second1", - "type": "n8n-nodes-base.function", - "position": [ - 1050, - 250 - ], - "typeVersion": 1, - "id": "c4d53540-e46f-4e9f-b61a-cdfa72df1730" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second2", - "type": "n8n-nodes-base.function", - "position": [ - 1450, - 250 - ], - "typeVersion": 1, - "id": "1fc2b051-cd25-4fc4-8c6f-819c24ca1f49" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second3", - "type": "n8n-nodes-base.function", - "position": [ - 880, - 550 - ], - "typeVersion": 1, - "id": "a7794510-cd2c-4265-b7ce-505aceb813c8" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second4", - "type": "n8n-nodes-base.function", - "position": [ - 480, - 550 - ], - "typeVersion": 1, - "id": "f50da613-c2c9-4823-9ba8-2969ed4899c1" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second5", - "type": "n8n-nodes-base.function", - "position": [ - 1290, - 550 - ], - "typeVersion": 1, - "id": "3259acd2-fd46-4348-b7d0-48d4396041df" - } - ], - "connections": { - "Salesforce": { - "main": [ - [ - { - "node": "Sleep 0.5 second", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce1": { - "main": [ - [ - { - "node": "Salesforce2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce3": { - "main": [ - [ - { - "node": "Salesforce4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce4": { - "main": [ - [ - { - "node": "Sleep 0.5 second2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce5": { - "main": [ - [ - { - "node": "Salesforce6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Salesforce", - "type": "main", - "index": 0 - }, - { - "node": "Salesforce7", - "type": "main", - "index": 0 - }, - { - "node": "Sleep 0.5 second4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce8": { - "main": [ - [ - { - "node": "Salesforce9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce9": { - "main": [ - [ - { - "node": "Sleep 0.5 second3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce10": { - "main": [ - [ - { - "node": "Salesforce11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce11": { - "main": [ - [ - { - "node": "Sleep 0.5 second5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce12": { - "main": [ - [ - { - "node": "Salesforce13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second4": { - "main": [ - [ - { - "node": "Salesforce8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second1": { - "main": [ - [ - { - "node": "Salesforce3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second": { - "main": [ - [ - { - "node": "Salesforce1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second3": { - "main": [ - [ - { - "node": "Salesforce10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second2": { - "main": [ - [ - { - "node": "Salesforce5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second5": { - "main": [ - [ - { - "node": "Salesforce12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesforce2": { - "main": [ - [ - { - "node": "Sleep 0.5 second1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/187.json b/test-workflows/workflows/187.json deleted file mode 100644 index 97ead5e5678..00000000000 --- a/test-workflows/workflows/187.json +++ /dev/null @@ -1,266 +0,0 @@ -{ - "createdAt": "2021-04-29T08:02:29.441Z", - "updatedAt": "2021-04-29T08:02:29.441Z", - "id": "187", - "name": "Strapi:Entry:create get getAll update delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "e4175f5f-af4e-4fe5-b5e4-c7a00de9330c" - }, - { - "parameters": { - "operation": "create", - "contentType": "Tests", - "columns": "test,random" - }, - "name": "Strapi", - "type": "n8n-nodes-base.strapi", - "typeVersion": 1, - "position": [ - 550, - 300 - ], - "credentials": { - "strapiApi": { - "id": "150", - "name": "Strapi API creds" - } - }, - "id": "d3173ece-7c5a-42c5-95d8-cb11b4444741" - }, - { - "parameters": { - "values": { - "number": [ - { - "name": "random", - "value": "={{Math.round(Math.random()*1000)}}" - } - ], - "string": [ - { - "name": "test", - "value": "=Entry{{Date.now()}}" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 400, - 300 - ], - "id": "f4431416-b2cf-49d9-b61f-8629fb40f97b" - }, - { - "parameters": { - "contentType": "Tests", - "entryId": "={{$node[\"Strapi\"].json[\"id\"]}}" - }, - "name": "Strapi1", - "type": "n8n-nodes-base.strapi", - "typeVersion": 1, - "position": [ - 700, - 300 - ], - "credentials": { - "strapiApi": { - "id": "150", - "name": "Strapi API creds" - } - }, - "id": "2160d0d9-f5f3-45c5-9925-3e6449a71097" - }, - { - "parameters": { - "operation": "getAll", - "contentType": "Tests", - "limit": 1, - "options": {} - }, - "name": "Strapi2", - "type": "n8n-nodes-base.strapi", - "typeVersion": 1, - "position": [ - 850, - 300 - ], - "credentials": { - "strapiApi": { - "id": "150", - "name": "Strapi API creds" - } - }, - "id": "bebbc112-21a2-48f8-9291-89f264057fff" - }, - { - "parameters": { - "operation": "update", - "contentType": "Tests", - "columns": "test" - }, - "name": "Strapi3", - "type": "n8n-nodes-base.strapi", - "typeVersion": 1, - "position": [ - 1150, - 300 - ], - "credentials": { - "strapiApi": { - "id": "150", - "name": "Strapi API creds" - } - }, - "id": "275f4cc2-4ebb-42fe-9fee-ef709df4df6b" - }, - { - "parameters": { - "keepOnlySet": true, - "values": { - "number": [ - { - "name": "id", - "value": "={{$node[\"Strapi1\"].json[\"id\"]}}" - } - ], - "string": [ - { - "name": "test", - "value": "=Updated{{$node[\"Set\"].json[\"test\"]}}" - } - ] - }, - "options": {} - }, - "name": "Set1", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 1000, - 300 - ], - "id": "bcff9dc4-914a-4494-b08f-321f541511d2" - }, - { - "parameters": { - "operation": "delete", - "contentType": "Tests", - "entryId": "={{$node[\"Strapi\"].json[\"id\"]}}" - }, - "name": "Strapi4", - "type": "n8n-nodes-base.strapi", - "typeVersion": 1, - "position": [ - 1290, - 300 - ], - "credentials": { - "strapiApi": { - "id": "150", - "name": "Strapi API creds" - } - }, - "id": "f60abebb-e54e-4bf6-805e-7a3c22769dbc" - } - ], - "connections": { - "Strapi": { - "main": [ - [ - { - "node": "Strapi1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set": { - "main": [ - [ - { - "node": "Strapi", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - }, - "Strapi1": { - "main": [ - [ - { - "node": "Strapi2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Strapi2": { - "main": [ - [ - { - "node": "Set1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set1": { - "main": [ - [ - { - "node": "Strapi3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Strapi3": { - "main": [ - [ - { - "node": "Strapi4", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/188.json b/test-workflows/workflows/188.json deleted file mode 100644 index ac147d5dc12..00000000000 --- a/test-workflows/workflows/188.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "createdAt": "2021-04-29T08:16:23.227Z", - "updatedAt": "2021-04-29T08:16:23.227Z", - "id": "188", - "name": "Uplead:Company:enrich:Person:enrich", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "1a29e4a7-f246-40dc-b79c-b786d4c806b1" - }, - { - "parameters": { - "company": "amazon" - }, - "name": "Uplead", - "type": "n8n-nodes-base.uplead", - "typeVersion": 1, - "position": [ - 550, - 200 - ], - "credentials": { - "upleadApi": { - "id": "151", - "name": "Uplead API creds" - } - }, - "id": "879b9140-4c58-4d4d-86ab-a483fd617922" - }, - { - "parameters": { - "resource": "person", - "firstname": "Werner ", - "lastname": "Vogels", - "domain": "amazon.com" - }, - "name": "Uplead1", - "type": "n8n-nodes-base.uplead", - "typeVersion": 1, - "position": [ - 550, - 350 - ], - "credentials": { - "upleadApi": { - "id": "151", - "name": "Uplead API creds" - } - }, - "id": "e97bccd6-c107-4099-9141-040cebe56ed8" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Uplead", - "type": "main", - "index": 0 - }, - { - "node": "Uplead1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/189.json b/test-workflows/workflows/189.json deleted file mode 100644 index 6aeac6a6c4f..00000000000 --- a/test-workflows/workflows/189.json +++ /dev/null @@ -1,534 +0,0 @@ -{ - "createdAt": "2021-04-29T08:53:09.807Z", - "updatedAt": "2021-05-12T17:31:21.682Z", - "id": "189", - "name": "Affinity:Organization:create get update delete getAll:List:getAll get:ListEntry:create get getAll delete:Person:create get update getAll delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "87d46406-85dc-49d6-bf83-b69e094d6873" - }, - { - "parameters": { - "name": "=TESTCOMPANY{{Date.now()}}", - "domain": "test.com", - "additionalFields": {} - }, - "name": "Affinity", - "type": "n8n-nodes-base.affinity", - "typeVersion": 1, - "position": [ - 500, - 300 - ], - "credentials": { - "affinityApi": { - "id": "152", - "name": "Affinity API creds" - } - }, - "id": "1be8b362-0d29-48ef-8f70-f98b408ac154" - }, - { - "parameters": { - "operation": "get", - "organizationId": "={{$node[\"Affinity\"].json[\"id\"]}}", - "options": {} - }, - "name": "Affinity1", - "type": "n8n-nodes-base.affinity", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "credentials": { - "affinityApi": { - "id": "152", - "name": "Affinity API creds" - } - }, - "id": "5797c0f2-ace5-41ef-aabf-1104f582ae02" - }, - { - "parameters": { - "operation": "update", - "organizationId": "={{$node[\"Affinity\"].json[\"id\"]}}", - "updateFields": { - "name": "={{$node[\"Affinity1\"].json[\"name\"]}}-UPDATED" - } - }, - "name": "Affinity2", - "type": "n8n-nodes-base.affinity", - "typeVersion": 1, - "position": [ - 800, - 300 - ], - "credentials": { - "affinityApi": { - "id": "152", - "name": "Affinity API creds" - } - }, - "id": "1a74bdc8-4e0e-4d9c-9af0-4e80dba7a290" - }, - { - "parameters": { - "operation": "delete", - "organizationId": "={{$node[\"Affinity\"].json[\"id\"]}}" - }, - "name": "Affinity3", - "type": "n8n-nodes-base.affinity", - "typeVersion": 1, - "position": [ - 950, - 300 - ], - "credentials": { - "affinityApi": { - "id": "152", - "name": "Affinity API creds" - } - }, - "id": "781cad97-11a9-47ba-8de2-0b1863513c0f" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "Affinity4", - "type": "n8n-nodes-base.affinity", - "typeVersion": 1, - "position": [ - 500, - 450 - ], - "credentials": { - "affinityApi": { - "id": "152", - "name": "Affinity API creds" - } - }, - "id": "d803cdfd-b2ea-4f74-9839-56c26276a9d4" - }, - { - "parameters": { - "resource": "list", - "operation": "getAll", - "limit": 1 - }, - "name": "Affinity5", - "type": "n8n-nodes-base.affinity", - "typeVersion": 1, - "position": [ - 500, - 150 - ], - "credentials": { - "affinityApi": { - "id": "152", - "name": "Affinity API creds" - } - }, - "id": "d2f43144-3321-4b65-9aed-91ed98d8b26d" - }, - { - "parameters": { - "resource": "list", - "listId": "={{$node[\"Affinity5\"].json[\"id\"]}}" - }, - "name": "Affinity6", - "type": "n8n-nodes-base.affinity", - "typeVersion": 1, - "position": [ - 650, - 150 - ], - "credentials": { - "affinityApi": { - "id": "152", - "name": "Affinity API creds" - } - }, - "id": "7f3f2a9b-d82c-451f-bf94-785afba42af9" - }, - { - "parameters": { - "resource": "person", - "firstName": "=Fname_{{(new Date).toISOString()}}", - "lastName": "=Lname_{{(new Date).toISOString()}}", - "additionalFields": {} - }, - "name": "Affinity7", - "type": "n8n-nodes-base.affinity", - "typeVersion": 1, - "position": [ - 500, - 600 - ], - "credentials": { - "affinityApi": { - "id": "152", - "name": "Affinity API creds" - } - }, - "id": "a7a2a691-028c-4c01-a8ed-392e2c026f94" - }, - { - "parameters": { - "resource": "person", - "operation": "get", - "personId": "={{$node[\"Affinity7\"].json[\"id\"]}}", - "options": {} - }, - "name": "Affinity8", - "type": "n8n-nodes-base.affinity", - "typeVersion": 1, - "position": [ - 650, - 600 - ], - "credentials": { - "affinityApi": { - "id": "152", - "name": "Affinity API creds" - } - }, - "id": "12399f87-e27c-443b-809e-812eaa0e41fb" - }, - { - "parameters": { - "resource": "person", - "operation": "update", - "personId": "={{$node[\"Affinity7\"].json[\"id\"]}}", - "updateFields": {}, - "emails": [ - "=email_{{Date.now()}}@test.com" - ] - }, - "name": "Affinity9", - "type": "n8n-nodes-base.affinity", - "typeVersion": 1, - "position": [ - 800, - 600 - ], - "credentials": { - "affinityApi": { - "id": "152", - "name": "Affinity API creds" - } - }, - "id": "b28eb5fe-e6f9-487e-b947-469f21addca5" - }, - { - "parameters": { - "resource": "person", - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "Affinity10", - "type": "n8n-nodes-base.affinity", - "typeVersion": 1, - "position": [ - 950, - 600 - ], - "credentials": { - "affinityApi": { - "id": "152", - "name": "Affinity API creds" - } - }, - "id": "aadcf4a8-89eb-49b6-a1cf-36df4aff4c3b" - }, - { - "parameters": { - "resource": "person", - "operation": "delete", - "personId": "={{$node[\"Affinity7\"].json[\"id\"]}}" - }, - "name": "Affinity11", - "type": "n8n-nodes-base.affinity", - "typeVersion": 1, - "position": [ - 1100, - 600 - ], - "credentials": { - "affinityApi": { - "id": "152", - "name": "Affinity API creds" - } - }, - "id": "013b336c-1062-4f12-90f4-b3204fde09df" - }, - { - "parameters": { - "resource": "listEntry", - "listId": 51365, - "entityId": "={{$node[\"Affinity\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Affinity12", - "type": "n8n-nodes-base.affinity", - "typeVersion": 1, - "position": [ - 650, - 450 - ], - "credentials": { - "affinityApi": { - "id": "152", - "name": "Affinity API creds" - } - }, - "id": "99544ad9-75e7-4927-9070-a1d88df5631a" - }, - { - "parameters": { - "resource": "listEntry", - "operation": "get", - "listId": 51365, - "listEntryId": "={{$node[\"Affinity12\"].json[\"id\"]}}" - }, - "name": "Affinity13", - "type": "n8n-nodes-base.affinity", - "typeVersion": 1, - "position": [ - 800, - 450 - ], - "credentials": { - "affinityApi": { - "id": "152", - "name": "Affinity API creds" - } - }, - "id": "8a4abe86-e2d3-4bb5-9f1a-2dc77c0668fa" - }, - { - "parameters": { - "resource": "listEntry", - "operation": "getAll", - "listId": 51365, - "limit": 1 - }, - "name": "Affinity14", - "type": "n8n-nodes-base.affinity", - "typeVersion": 1, - "position": [ - 950, - 450 - ], - "credentials": { - "affinityApi": { - "id": "152", - "name": "Affinity API creds" - } - }, - "id": "a1e54a4a-19a1-4705-bb5e-36a3074a987a" - }, - { - "parameters": { - "resource": "listEntry", - "operation": "delete", - "listId": 51365, - "listEntryId": "={{$node[\"Affinity12\"].json[\"id\"]}}" - }, - "name": "Affinity15", - "type": "n8n-nodes-base.affinity", - "typeVersion": 1, - "position": [ - 1100, - 450 - ], - "credentials": { - "affinityApi": { - "id": "152", - "name": "Affinity API creds" - } - }, - "id": "a1f2281d-3a7f-4632-9d76-8696703fda14" - } - ], - "connections": { - "Affinity": { - "main": [ - [ - { - "node": "Affinity12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Affinity1": { - "main": [ - [ - { - "node": "Affinity2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Affinity2": { - "main": [ - [ - { - "node": "Affinity3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Affinity", - "type": "main", - "index": 0 - }, - { - "node": "Affinity4", - "type": "main", - "index": 0 - }, - { - "node": "Affinity5", - "type": "main", - "index": 0 - }, - { - "node": "Affinity7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Affinity5": { - "main": [ - [ - { - "node": "Affinity6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Affinity7": { - "main": [ - [ - { - "node": "Affinity8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Affinity8": { - "main": [ - [ - { - "node": "Affinity9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Affinity9": { - "main": [ - [ - { - "node": "Affinity10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Affinity10": { - "main": [ - [ - { - "node": "Affinity11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Affinity12": { - "main": [ - [ - { - "node": "Affinity13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Affinity13": { - "main": [ - [ - { - "node": "Affinity14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Affinity14": { - "main": [ - [ - { - "node": "Affinity15", - "type": "main", - "index": 0 - } - ] - ] - }, - "Affinity15": { - "main": [ - [ - { - "node": "Affinity1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/19.json b/test-workflows/workflows/19.json deleted file mode 100644 index 18a8ffad4b2..00000000000 --- a/test-workflows/workflows/19.json +++ /dev/null @@ -1,794 +0,0 @@ -{ - "createdAt": "2021-02-16T14:22:05.872Z", - "updatedAt": "2021-07-15T13:45:13.306Z", - "id": "19", - "name": "SentryIo:Organization:create get getAll update:Team:create get getAll update delete:Project:create getAll get update delete:Issue:getAll get update:Event:getAll get:Release:create get getAll update delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 210, - 580 - ], - "id": "3ae6a472-ef2b-4e70-b1b8-34f11865656a" - }, - { - "parameters": { - "resource": "organization", - "operation": "create", - "name": "=Org{{Date.now()}}", - "agreeTerms": true, - "additionalFields": {} - }, - "name": "Sentry.io", - "type": "n8n-nodes-base.sentryIo", - "typeVersion": 1, - "position": [ - 420, - 300 - ], - "credentials": { - "sentryIoApi": { - "id": "10", - "name": "sentry io token" - } - }, - "id": "3b9b06b9-024b-411b-b074-b5d26419c178" - }, - { - "parameters": { - "resource": "organization", - "organizationSlug": "={{$node[\"Sentry.io\"].json[\"slug\"]}}" - }, - "name": "Sentry.io1", - "type": "n8n-nodes-base.sentryIo", - "typeVersion": 1, - "position": [ - 610, - 300 - ], - "credentials": { - "sentryIoApi": { - "id": "10", - "name": "sentry io token" - } - }, - "id": "214cd123-0b74-4e6b-b70b-fc715226309b" - }, - { - "parameters": { - "resource": "organization", - "operation": "getAll", - "limit": 1, - "additionalFields": {} - }, - "name": "Sentry.io2", - "type": "n8n-nodes-base.sentryIo", - "typeVersion": 1, - "position": [ - 980, - 300 - ], - "credentials": { - "sentryIoApi": { - "id": "10", - "name": "sentry io token" - } - }, - "id": "b39920cd-5e8e-4cb7-a5f6-781665b22b53" - }, - { - "parameters": { - "resource": "team", - "operation": "create", - "organizationSlug": "n8n-iq", - "name": "=Team{{Date.now()}}", - "additionalFields": {} - }, - "name": "Sentry.io3", - "type": "n8n-nodes-base.sentryIo", - "typeVersion": 1, - "position": [ - 420, - 140 - ], - "credentials": { - "sentryIoApi": { - "id": "10", - "name": "sentry io token" - } - }, - "id": "9f460480-4b55-4f2d-b0ab-7e1f1dc1e974" - }, - { - "parameters": { - "resource": "team", - "organizationSlug": "n8n-iq", - "teamSlug": "={{$node[\"Sentry.io3\"].json[\"slug\"]}}" - }, - "name": "Sentry.io4", - "type": "n8n-nodes-base.sentryIo", - "typeVersion": 1, - "position": [ - 580, - 140 - ], - "credentials": { - "sentryIoApi": { - "id": "10", - "name": "sentry io token" - } - }, - "id": "c095b56c-c87b-41e4-9dd1-a529b963dd47" - }, - { - "parameters": { - "resource": "team", - "operation": "getAll", - "organizationSlug": "n8n-iq", - "limit": 1 - }, - "name": "Sentry.io5", - "type": "n8n-nodes-base.sentryIo", - "typeVersion": 1, - "position": [ - 930, - 140 - ], - "credentials": { - "sentryIoApi": { - "id": "10", - "name": "sentry io token" - } - }, - "id": "83e5e140-a7fa-497a-9154-84b33f1f43a7" - }, - { - "parameters": { - "resource": "project", - "operation": "getAll", - "limit": 1 - }, - "name": "Sentry.io6", - "type": "n8n-nodes-base.sentryIo", - "typeVersion": 1, - "position": [ - 590, - 470 - ], - "credentials": { - "sentryIoApi": { - "id": "10", - "name": "sentry io token" - } - }, - "id": "674a3f1a-9812-43b9-b95b-e3de0106df02" - }, - { - "parameters": { - "resource": "project", - "organizationSlug": "n8n-iq", - "projectSlug": "={{$node[\"Sentry.io22\"].json[\"slug\"]}}" - }, - "name": "Sentry.io7", - "type": "n8n-nodes-base.sentryIo", - "typeVersion": 1, - "position": [ - 780, - 470 - ], - "credentials": { - "sentryIoApi": { - "id": "10", - "name": "sentry io token" - } - }, - "id": "78b758fd-29a0-4444-b8b6-128e942b1075" - }, - { - "parameters": { - "resource": "issue", - "issueId": "={{$json[\"id\"]}}" - }, - "name": "Sentry.io8", - "type": "n8n-nodes-base.sentryIo", - "typeVersion": 1, - "position": [ - 610, - 630 - ], - "credentials": { - "sentryIoApi": { - "id": "10", - "name": "sentry io token" - } - }, - "id": "15c4106f-e73e-492f-8ea4-bfcfbd15ae6d" - }, - { - "parameters": { - "resource": "issue", - "operation": "getAll", - "organizationSlug": "n8n-iq", - "projectSlug": "javascript", - "limit": 1, - "additionalFields": {} - }, - "name": "Sentry.io9", - "type": "n8n-nodes-base.sentryIo", - "typeVersion": 1, - "position": [ - 430, - 630 - ], - "credentials": { - "sentryIoApi": { - "id": "10", - "name": "sentry io token" - } - }, - "id": "ee504fe3-dec7-4225-8ba9-3e978f5186aa" - }, - { - "parameters": { - "resource": "issue", - "operation": "update", - "issueId": "={{$json[\"id\"]}}", - "additionalFields": { - "isBookmarked": "={{!$json[\"isBookmarked\"]}}" - } - }, - "name": "Sentry.io10", - "type": "n8n-nodes-base.sentryIo", - "typeVersion": 1, - "position": [ - 780, - 630 - ], - "credentials": { - "sentryIoApi": { - "id": "10", - "name": "sentry io token" - } - }, - "id": "33d3a8d7-1f90-47ab-b890-f3689bb2c4c2" - }, - { - "parameters": { - "operation": "getAll", - "organizationSlug": "n8n-iq", - "projectSlug": "javascript", - "full": false, - "limit": 1 - }, - "name": "Sentry.io11", - "type": "n8n-nodes-base.sentryIo", - "typeVersion": 1, - "position": [ - 430, - 780 - ], - "credentials": { - "sentryIoApi": { - "id": "10", - "name": "sentry io token" - } - }, - "id": "9bb47894-f507-49da-9b4e-5b69629bbfcf" - }, - { - "parameters": { - "organizationSlug": "n8n-iq", - "projectSlug": "javascript", - "eventId": "={{$json[\"id\"]}}" - }, - "name": "Sentry.io12", - "type": "n8n-nodes-base.sentryIo", - "typeVersion": 1, - "position": [ - 610, - 780 - ], - "credentials": { - "sentryIoApi": { - "id": "10", - "name": "sentry io token" - } - }, - "id": "b99e1b5d-f5c9-448b-84fe-f14fadda556b" - }, - { - "parameters": { - "resource": "release", - "operation": "create", - "organizationSlug": "n8n-iq", - "version": "={{Date.now().toString()}}", - "url": "http://n8n.io", - "projects": "={{[$node[\"Sentry.io22\"].json[\"slug\"]]}}", - "additionalFields": {} - }, - "name": "Sentry.io13", - "type": "n8n-nodes-base.sentryIo", - "typeVersion": 1, - "position": [ - 1100, - 530 - ], - "credentials": { - "sentryIoApi": { - "id": "10", - "name": "sentry io token" - } - }, - "id": "c20a70e0-852e-4e75-9ea5-52196890f619" - }, - { - "parameters": { - "resource": "release", - "organizationSlug": "n8n-iq", - "version": "={{$node[\"Sentry.io13\"].json[\"shortVersion\"]}}" - }, - "name": "Sentry.io14", - "type": "n8n-nodes-base.sentryIo", - "typeVersion": 1, - "position": [ - 1260, - 530 - ], - "credentials": { - "sentryIoApi": { - "id": "10", - "name": "sentry io token" - } - }, - "id": "b962d75f-256b-4e10-9da0-750913bf4b21" - }, - { - "parameters": { - "resource": "release", - "operation": "getAll", - "organizationSlug": "n8n-iq", - "limit": 1, - "additionalFields": {} - }, - "name": "Sentry.io15", - "type": "n8n-nodes-base.sentryIo", - "typeVersion": 1, - "position": [ - 1440, - 530 - ], - "credentials": { - "sentryIoApi": { - "id": "10", - "name": "sentry io token" - } - }, - "id": "253e52a4-18a3-4ce8-b3a9-f9ece3eb6230" - }, - { - "parameters": { - "resource": "team", - "operation": "update", - "organizationSlug": "n8n-iq", - "teamSlug": "={{$node[\"Sentry.io3\"].json[\"slug\"]}}", - "updateFields": {} - }, - "name": "Sentry.io16", - "type": "n8n-nodes-base.sentryIo", - "typeVersion": 1, - "position": [ - 750, - 140 - ], - "credentials": { - "sentryIoApi": { - "id": "10", - "name": "sentry io token" - } - }, - "id": "8e6fe7c5-6475-4404-87e4-20441ddb887f" - }, - { - "parameters": { - "resource": "team", - "operation": "delete", - "organizationSlug": "n8n-iq", - "teamSlug": "={{$node[\"Sentry.io3\"].json[\"slug\"]}}" - }, - "name": "Sentry.io17", - "type": "n8n-nodes-base.sentryIo", - "typeVersion": 1, - "position": [ - 1100, - 140 - ], - "credentials": { - "sentryIoApi": { - "id": "10", - "name": "sentry io token" - } - }, - "id": "860e3e1b-139d-487b-8cfc-cc141044c446" - }, - { - "parameters": { - "resource": "organization", - "operation": "update", - "organization_slug": "={{$node[\"Sentry.io\"].json[\"slug\"]}}", - "updateFields": {} - }, - "name": "Sentry.io18", - "type": "n8n-nodes-base.sentryIo", - "typeVersion": 1, - "position": [ - 790, - 300 - ], - "credentials": { - "sentryIoApi": { - "id": "10", - "name": "sentry io token" - } - }, - "id": "9265dc47-fd2c-458e-991c-ff781cf7fbcd" - }, - { - "parameters": { - "resource": "project", - "operation": "update", - "organizationSlug": "n8n-iq", - "projectSlug": "={{$node[\"Sentry.io6\"].json[\"slug\"]}}", - "updateFields": {} - }, - "name": "Sentry.io19", - "type": "n8n-nodes-base.sentryIo", - "typeVersion": 1, - "position": [ - 950, - 470 - ], - "credentials": { - "sentryIoApi": { - "id": "10", - "name": "sentry io token" - } - }, - "id": "60e51eaa-b5a3-4871-9514-462c11b9b640" - }, - { - "parameters": { - "resource": "release", - "operation": "update", - "organizationSlug": "n8n-iq", - "version": "={{$node[\"Sentry.io13\"].json[\"shortVersion\"]}}", - "updateFields": {} - }, - "name": "Sentry.io20", - "type": "n8n-nodes-base.sentryIo", - "typeVersion": 1, - "position": [ - 1600, - 530 - ], - "credentials": { - "sentryIoApi": { - "id": "10", - "name": "sentry io token" - } - }, - "id": "0c4c5b23-1127-4dc4-be96-50ccca58c89e" - }, - { - "parameters": { - "resource": "release", - "operation": "delete", - "organizationSlug": "n8n-iq", - "version": "={{$node[\"Sentry.io13\"].json[\"shortVersion\"]}}" - }, - "name": "Sentry.io21", - "type": "n8n-nodes-base.sentryIo", - "typeVersion": 1, - "position": [ - 1750, - 530 - ], - "credentials": { - "sentryIoApi": { - "id": "10", - "name": "sentry io token" - } - }, - "id": "61a5111f-5290-429a-9513-c26789af0bd6" - }, - { - "parameters": { - "resource": "project", - "operation": "create", - "organizationSlug": "n8n-iq", - "teamSlug": "n8nteam", - "name": "=ProjectTest{{Date.now()}}", - "additionalFields": {} - }, - "name": "Sentry.io22", - "type": "n8n-nodes-base.sentryIo", - "typeVersion": 1, - "position": [ - 430, - 470 - ], - "credentials": { - "sentryIoApi": { - "id": "10", - "name": "sentry io token" - } - }, - "id": "dc68e4b1-7874-4f7a-b44f-5222ae7fe47e" - }, - { - "parameters": { - "resource": "project", - "operation": "delete", - "organizationSlug": "n8n-iq", - "projectSlug": "={{$node[\"Sentry.io22\"].json[\"slug\"]}}" - }, - "name": "Sentry.io23", - "type": "n8n-nodes-base.sentryIo", - "typeVersion": 1, - "position": [ - 1900, - 480 - ], - "credentials": { - "sentryIoApi": { - "id": "10", - "name": "sentry io token" - } - }, - "id": "8143174a-4e94-4e6b-a75f-080c71f08227" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Sentry.io", - "type": "main", - "index": 0 - }, - { - "node": "Sentry.io3", - "type": "main", - "index": 0 - }, - { - "node": "Sentry.io22", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sentry.io": { - "main": [ - [ - { - "node": "Sentry.io1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sentry.io1": { - "main": [ - [ - { - "node": "Sentry.io18", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sentry.io3": { - "main": [ - [ - { - "node": "Sentry.io4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sentry.io4": { - "main": [ - [ - { - "node": "Sentry.io16", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sentry.io6": { - "main": [ - [ - { - "node": "Sentry.io7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sentry.io8": { - "main": [ - [ - { - "node": "Sentry.io10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sentry.io9": { - "main": [ - [ - { - "node": "Sentry.io8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sentry.io11": { - "main": [ - [ - { - "node": "Sentry.io12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sentry.io13": { - "main": [ - [ - { - "node": "Sentry.io14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sentry.io14": { - "main": [ - [ - { - "node": "Sentry.io15", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sentry.io16": { - "main": [ - [ - { - "node": "Sentry.io5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sentry.io5": { - "main": [ - [ - { - "node": "Sentry.io17", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sentry.io18": { - "main": [ - [ - { - "node": "Sentry.io2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sentry.io7": { - "main": [ - [ - { - "node": "Sentry.io19", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sentry.io19": { - "main": [ - [ - { - "node": "Sentry.io13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sentry.io15": { - "main": [ - [ - { - "node": "Sentry.io20", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sentry.io20": { - "main": [ - [ - { - "node": "Sentry.io21", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sentry.io22": { - "main": [ - [ - { - "node": "Sentry.io6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sentry.io21": { - "main": [ - [ - { - "node": "Sentry.io23", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/190.json b/test-workflows/workflows/190.json deleted file mode 100644 index 62871b2e246..00000000000 --- a/test-workflows/workflows/190.json +++ /dev/null @@ -1,561 +0,0 @@ -{ - "createdAt": "2021-04-29T10:21:23.768Z", - "updatedAt": "2021-06-04T14:59:28.116Z", - "id": "190", - "name": "Discourse:User:create get getAll:Category:create update getAll:Group:create update get getAll:UserGroup:add remove:Post:create update get getAll", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "84717a95-a963-4bf8-9398-1b47ae0ddea8" - }, - { - "parameters": { - "resource": "category", - "name": "=Category{{Date.now()}}", - "color": "FF6D5A" - }, - "name": "Discourse", - "type": "n8n-nodes-base.discourse", - "typeVersion": 1, - "position": [ - 500, - 250 - ], - "credentials": { - "discourseApi": { - "id": "153", - "name": "Discourse API" - } - }, - "id": "1f50403d-2276-4adb-827d-b7c4259f4966" - }, - { - "parameters": { - "resource": "category", - "operation": "update", - "categoryId": "={{$node[\"Discourse\"].json[\"id\"]}}", - "name": "=Updated{{$node[\"Discourse\"].json[\"name\"]}}", - "updateFields": {} - }, - "name": "Discourse1", - "type": "n8n-nodes-base.discourse", - "typeVersion": 1, - "position": [ - 650, - 250 - ], - "credentials": { - "discourseApi": { - "id": "153", - "name": "Discourse API" - } - }, - "id": "1719b47a-1de6-470f-a6f5-a92b8bc4c7d2" - }, - { - "parameters": { - "resource": "category", - "operation": "getAll", - "limit": 1 - }, - "name": "Discourse2", - "type": "n8n-nodes-base.discourse", - "typeVersion": 1, - "position": [ - 800, - 250 - ], - "credentials": { - "discourseApi": { - "id": "153", - "name": "Discourse API" - } - }, - "id": "dcddf8d2-7e35-4075-9302-11c69187ac8a" - }, - { - "parameters": { - "resource": "group", - "name": "=Group{{Date.now()}}" - }, - "name": "Discourse3", - "type": "n8n-nodes-base.discourse", - "typeVersion": 1, - "position": [ - 500, - 410 - ], - "credentials": { - "discourseApi": { - "id": "153", - "name": "Discourse API" - } - }, - "id": "a7c4475b-bf7c-4660-a402-0d8f28237caf" - }, - { - "parameters": { - "resource": "group", - "operation": "update", - "groupId": "={{$node[\"Discourse3\"].json[\"id\"]}}", - "name": "=Up{{$node[\"Discourse3\"].json[\"name\"]}}" - }, - "name": "Discourse4", - "type": "n8n-nodes-base.discourse", - "typeVersion": 1, - "position": [ - 650, - 410 - ], - "credentials": { - "discourseApi": { - "id": "153", - "name": "Discourse API" - } - }, - "id": "c0f711d4-45e0-4f3e-add9-982e643294c9" - }, - { - "parameters": { - "resource": "group", - "operation": "get", - "name": "=Up{{$node[\"Discourse3\"].json[\"name\"]}}" - }, - "name": "Discourse5", - "type": "n8n-nodes-base.discourse", - "typeVersion": 1, - "position": [ - 800, - 410 - ], - "credentials": { - "discourseApi": { - "id": "153", - "name": "Discourse API" - } - }, - "id": "4c795130-79c3-4f7d-982d-25b7c70b9e0e" - }, - { - "parameters": { - "resource": "group", - "operation": "getAll", - "limit": 1 - }, - "name": "Discourse6", - "type": "n8n-nodes-base.discourse", - "typeVersion": 1, - "position": [ - 950, - 410 - ], - "credentials": { - "discourseApi": { - "id": "153", - "name": "Discourse API" - } - }, - "id": "f25ab7e3-e2fb-45e5-871f-d3770301b03f" - }, - { - "parameters": { - "title": "=Post {{Date.now()}}", - "content": "=Content {{(new Date()).toString()}}", - "additionalFields": {} - }, - "name": "Discourse7", - "type": "n8n-nodes-base.discourse", - "typeVersion": 1, - "position": [ - 500, - 710 - ], - "credentials": { - "discourseApi": { - "id": "153", - "name": "Discourse API" - } - }, - "id": "854b71d1-dd7c-4d89-b9cf-4a583803907f" - }, - { - "parameters": { - "operation": "update", - "postId": "={{$node[\"Discourse7\"].json[\"id\"]}}", - "content": "=updated{{$node[\"Discourse7\"].json[\"cooked\"]}}", - "updateFields": {} - }, - "name": "Discourse8", - "type": "n8n-nodes-base.discourse", - "typeVersion": 1, - "position": [ - 650, - 710 - ], - "credentials": { - "discourseApi": { - "id": "153", - "name": "Discourse API" - } - }, - "id": "747331c5-f73a-4ae4-888f-559d83aa03ca" - }, - { - "parameters": { - "operation": "get", - "postId": "={{$node[\"Discourse7\"].json[\"id\"]}}" - }, - "name": "Discourse9", - "type": "n8n-nodes-base.discourse", - "typeVersion": 1, - "position": [ - 800, - 710 - ], - "credentials": { - "discourseApi": { - "id": "153", - "name": "Discourse API" - } - }, - "id": "3f9bb0d0-7a38-452c-a717-080fc9e75404" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1 - }, - "name": "Discourse10", - "type": "n8n-nodes-base.discourse", - "typeVersion": 1, - "position": [ - 950, - 710 - ], - "credentials": { - "discourseApi": { - "id": "153", - "name": "Discourse API" - } - }, - "id": "29df1627-7bc8-4968-8df3-5cfb7566e626" - }, - { - "parameters": { - "resource": "user", - "name": "=User{{Math.round(Math.random()*1000)}}", - "email": "=fake{{Date.now()}}@test.com", - "username": "={{$node[\"Set\"].json[\"username\"]}}", - "password": "=A{{Date.now()}}Z", - "additionalFields": { - "active": true, - "approved": true - } - }, - "name": "Discourse11", - "type": "n8n-nodes-base.discourse", - "typeVersion": 1, - "position": [ - 500, - 100 - ], - "credentials": { - "discourseApi": { - "id": "153", - "name": "Discourse API" - } - }, - "notes": "IGNORED_PROPERTIES=errors,values,is_developer,active,user_id", - "id": "731fa606-fcdd-4920-ac0c-ba357877b20f" - }, - { - "parameters": { - "resource": "user", - "operation": "get", - "username": "={{$node[\"Set\"].json[\"username\"]}}" - }, - "name": "Discourse12", - "type": "n8n-nodes-base.discourse", - "typeVersion": 1, - "position": [ - 650, - 100 - ], - "alwaysOutputData": true, - "credentials": { - "discourseApi": { - "id": "153", - "name": "Discourse API" - } - }, - "continueOnFail": true, - "id": "33d82113-445b-4a03-ac01-c921318a1d6c" - }, - { - "parameters": { - "resource": "user", - "operation": "getAll", - "flag": "active", - "limit": 1 - }, - "name": "Discourse13", - "type": "n8n-nodes-base.discourse", - "typeVersion": 1, - "position": [ - 800, - 100 - ], - "credentials": { - "discourseApi": { - "id": "153", - "name": "Discourse API" - } - }, - "id": "38e8bf81-979b-4b0d-bf78-c8347366e008" - }, - { - "parameters": { - "resource": "userGroup", - "usernames": "nodeqa,", - "groupId": "={{$node[\"Discourse3\"].json[\"id\"]}}" - }, - "name": "Discourse14", - "type": "n8n-nodes-base.discourse", - "typeVersion": 1, - "position": [ - 650, - 560 - ], - "credentials": { - "discourseApi": { - "id": "153", - "name": "Discourse API" - } - }, - "id": "620970bb-377a-4ae5-9ad9-be380be5fbbd" - }, - { - "parameters": { - "resource": "userGroup", - "operation": "remove", - "usernames": "nodeqa,", - "groupId": "={{$node[\"Discourse3\"].json[\"id\"]}}" - }, - "name": "Discourse15", - "type": "n8n-nodes-base.discourse", - "typeVersion": 1, - "position": [ - 800, - 560 - ], - "credentials": { - "discourseApi": { - "id": "153", - "name": "Discourse API" - } - }, - "id": "54683239-ffe0-4360-a276-36cdd22aa272" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "username", - "value": "=Username{{Math.round(Math.random()*1000)}}" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 360, - 100 - ], - "id": "9be1116c-5e9e-491d-8ab1-038416cf9560" - } - ], - "connections": { - "Discourse": { - "main": [ - [ - { - "node": "Discourse1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Discourse1": { - "main": [ - [ - { - "node": "Discourse2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Discourse", - "type": "main", - "index": 0 - }, - { - "node": "Discourse3", - "type": "main", - "index": 0 - }, - { - "node": "Discourse7", - "type": "main", - "index": 0 - }, - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - }, - "Discourse3": { - "main": [ - [ - { - "node": "Discourse4", - "type": "main", - "index": 0 - }, - { - "node": "Discourse14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Discourse4": { - "main": [ - [ - { - "node": "Discourse5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Discourse5": { - "main": [ - [ - { - "node": "Discourse6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Discourse7": { - "main": [ - [ - { - "node": "Discourse8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Discourse8": { - "main": [ - [ - { - "node": "Discourse9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Discourse9": { - "main": [ - [ - { - "node": "Discourse10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Discourse14": { - "main": [ - [ - { - "node": "Discourse15", - "type": "main", - "index": 0 - } - ] - ] - }, - "Discourse11": { - "main": [ - [ - { - "node": "Discourse12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Discourse12": { - "main": [ - [ - { - "node": "Discourse13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set": { - "main": [ - [ - { - "node": "Discourse11", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/191.json b/test-workflows/workflows/191.json deleted file mode 100644 index 0bebb1ffa22..00000000000 --- a/test-workflows/workflows/191.json +++ /dev/null @@ -1,157 +0,0 @@ -{ - "createdAt": "2021-04-30T07:16:09.288Z", - "updatedAt": "2021-04-30T07:16:09.288Z", - "id": "191", - "name": "Mailerlite:Subscriber:create get update getAll", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "c998f9cf-a589-4a12-8f24-c5ad324ba4ad" - }, - { - "parameters": { - "email": "=fake{{Date.now()}}@test.com", - "additionalFields": {} - }, - "name": "MailerLite", - "type": "n8n-nodes-base.mailerLite", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "mailerLiteApi": { - "id": "154", - "name": "Mailer Lite API creds" - } - }, - "id": "4de4bbd8-1214-4d0d-81fa-879332f6bca5" - }, - { - "parameters": { - "operation": "get", - "subscriberId": "={{$node[\"MailerLite\"].json[\"email\"]}}" - }, - "name": "MailerLite1", - "type": "n8n-nodes-base.mailerLite", - "typeVersion": 1, - "position": [ - 600, - 300 - ], - "credentials": { - "mailerLiteApi": { - "id": "154", - "name": "Mailer Lite API creds" - } - }, - "id": "d539fbfb-0228-4101-9e31-493abab14049" - }, - { - "parameters": { - "operation": "update", - "subscriberId": "={{$node[\"MailerLite\"].json[\"email\"]}}", - "updateFields": { - "name": "=UpdatedName{{Date.now()}}" - } - }, - "name": "MailerLite2", - "type": "n8n-nodes-base.mailerLite", - "typeVersion": 1, - "position": [ - 750, - 300 - ], - "credentials": { - "mailerLiteApi": { - "id": "154", - "name": "Mailer Lite API creds" - } - }, - "id": "a56e6d61-cab2-4556-8d6d-e2f1f549c9d0" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "MailerLite3", - "type": "n8n-nodes-base.mailerLite", - "typeVersion": 1, - "position": [ - 900, - 300 - ], - "credentials": { - "mailerLiteApi": { - "id": "154", - "name": "Mailer Lite API creds" - } - }, - "id": "6083faa2-8837-49df-8eac-3515986418b2" - } - ], - "connections": { - "MailerLite": { - "main": [ - [ - { - "node": "MailerLite1", - "type": "main", - "index": 0 - } - ] - ] - }, - "MailerLite1": { - "main": [ - [ - { - "node": "MailerLite2", - "type": "main", - "index": 0 - } - ] - ] - }, - "MailerLite2": { - "main": [ - [ - { - "node": "MailerLite3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "MailerLite", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/192.json b/test-workflows/workflows/192.json deleted file mode 100644 index 9803e2c818e..00000000000 --- a/test-workflows/workflows/192.json +++ /dev/null @@ -1,650 +0,0 @@ -{ - "createdAt": "2021-04-30T08:31:10.410Z", - "updatedAt": "2021-04-30T08:46:44.441Z", - "id": "192", - "name": "Mattermost:Channel:create addUser members statistics delete restore:Message:post postEphemeral delete:Reaction:create getAll delete:User:create getById getByEmail getAll invite deactive", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "f0a6807e-f707-401a-a50c-7ef643be9447" - }, - { - "parameters": { - "resource": "channel", - "teamId": "y1p853gfspdrxre5oextbii7wh", - "displayName": "=TestChannel{{Date.now()}}", - "channel": "=testchannel{{Date.now()}}" - }, - "name": "Mattermost", - "type": "n8n-nodes-base.mattermost", - "typeVersion": 1, - "position": [ - 430, - 300 - ], - "credentials": { - "mattermostApi": { - "id": "155", - "name": "Mattermost API creds" - } - }, - "id": "adeecdf6-f6ea-4065-b1ec-6273ed507467" - }, - { - "parameters": { - "resource": "channel", - "operation": "addUser", - "channelId": "={{$node[\"Mattermost\"].json[\"id\"]}}", - "userId": "4yp7tpa3sbgk9qrf38egttbioo" - }, - "name": "Mattermost1", - "type": "n8n-nodes-base.mattermost", - "typeVersion": 1, - "position": [ - 580, - 300 - ], - "credentials": { - "mattermostApi": { - "id": "155", - "name": "Mattermost API creds" - } - }, - "id": "85887926-1b04-4ed2-a6d5-0627fb9e408f" - }, - { - "parameters": { - "resource": "channel", - "operation": "members", - "teamId": "y1p853gfspdrxre5oextbii7wh", - "channelId": "={{$node[\"Mattermost\"].json[\"id\"]}}", - "returnAll": false, - "limit": 1 - }, - "name": "Mattermost2", - "type": "n8n-nodes-base.mattermost", - "typeVersion": 1, - "position": [ - 1650, - 300 - ], - "credentials": { - "mattermostApi": { - "id": "155", - "name": "Mattermost API creds" - } - }, - "id": "ad9c7a0c-ff3c-4538-a243-81316472e888" - }, - { - "parameters": { - "resource": "channel", - "operation": "statistics", - "channelId": "={{$node[\"Mattermost\"].json[\"id\"]}}" - }, - "name": "Mattermost3", - "type": "n8n-nodes-base.mattermost", - "typeVersion": 1, - "position": [ - 1800, - 300 - ], - "credentials": { - "mattermostApi": { - "id": "155", - "name": "Mattermost API creds" - } - }, - "id": "724755bb-157b-43cf-8153-d0ff0a00bb26" - }, - { - "parameters": { - "resource": "channel", - "operation": "delete", - "channelId": "={{$node[\"Mattermost\"].json[\"id\"]}}" - }, - "name": "Mattermost4", - "type": "n8n-nodes-base.mattermost", - "typeVersion": 1, - "position": [ - 1950, - 300 - ], - "credentials": { - "mattermostApi": { - "id": "155", - "name": "Mattermost API creds" - } - }, - "id": "474eb599-04f2-4e43-a472-b6fd4e94d97e" - }, - { - "parameters": { - "resource": "channel", - "operation": "restore", - "channelId": "={{$node[\"Mattermost\"].json[\"id\"]}}" - }, - "name": "Mattermost5", - "type": "n8n-nodes-base.mattermost", - "typeVersion": 1, - "position": [ - 2100, - 300 - ], - "credentials": { - "mattermostApi": { - "id": "155", - "name": "Mattermost API creds" - } - }, - "id": "46fb131b-3338-4e49-a9f8-85130fe56e17" - }, - { - "parameters": { - "resource": "channel", - "operation": "delete", - "channelId": "={{$node[\"Mattermost\"].json[\"id\"]}}" - }, - "name": "Mattermost6", - "type": "n8n-nodes-base.mattermost", - "typeVersion": 1, - "position": [ - 2240, - 190 - ], - "credentials": { - "mattermostApi": { - "id": "155", - "name": "Mattermost API creds" - } - }, - "id": "10595228-5484-4c14-bbb2-429a52a5d2c9" - }, - { - "parameters": { - "channelId": "={{$node[\"Mattermost\"].json[\"id\"]}}", - "message": "=Message{{Date.now()}}", - "attachments": [], - "otherOptions": {} - }, - "name": "Mattermost7", - "type": "n8n-nodes-base.mattermost", - "typeVersion": 1, - "position": [ - 730, - 450 - ], - "credentials": { - "mattermostApi": { - "id": "155", - "name": "Mattermost API creds" - } - }, - "id": "a48c3b43-1402-40cd-ad28-dfa306c1e17c" - }, - { - "parameters": { - "operation": "postEphemeral", - "userId": "4yp7tpa3sbgk9qrf38egttbioo", - "channelId": "={{$node[\"Mattermost\"].json[\"id\"]}}", - "message": "=EpheMessage{{Date.now()}}" - }, - "name": "Mattermost8", - "type": "n8n-nodes-base.mattermost", - "typeVersion": 1, - "position": [ - 900, - 450 - ], - "credentials": { - "mattermostApi": { - "id": "155", - "name": "Mattermost API creds" - } - }, - "id": "84efb0d3-0dd2-4942-b188-3e4bf1e258b3" - }, - { - "parameters": { - "operation": "delete", - "postId": "={{$node[\"Mattermost7\"].json[\"id\"]}}" - }, - "name": "Mattermost9", - "type": "n8n-nodes-base.mattermost", - "typeVersion": 1, - "position": [ - 1500, - 450 - ], - "credentials": { - "mattermostApi": { - "id": "155", - "name": "Mattermost API creds" - } - }, - "id": "d1a5ed6b-2eaf-434c-9bac-de823f6112c6" - }, - { - "parameters": { - "resource": "reaction", - "userId": "fo4frgcntiy6jfc63wor76kxpy", - "postId": "={{$node[\"Mattermost7\"].json[\"id\"]}}", - "emojiName": "rocket" - }, - "name": "Mattermost10", - "type": "n8n-nodes-base.mattermost", - "typeVersion": 1, - "position": [ - 1050, - 550 - ], - "credentials": { - "mattermostApi": { - "id": "155", - "name": "Mattermost API creds" - } - }, - "id": "5b0cedd2-5bfd-4a46-ae99-7eecfb3ab70b" - }, - { - "parameters": { - "resource": "reaction", - "operation": "getAll", - "postId": "={{$node[\"Mattermost7\"].json[\"id\"]}}", - "returnAll": false, - "limit": 1 - }, - "name": "Mattermost11", - "type": "n8n-nodes-base.mattermost", - "typeVersion": 1, - "position": [ - 1200, - 550 - ], - "credentials": { - "mattermostApi": { - "id": "155", - "name": "Mattermost API creds" - } - }, - "id": "345bbd7e-f443-45be-bec2-016b0aa64758" - }, - { - "parameters": { - "resource": "reaction", - "operation": "delete", - "userId": "fo4frgcntiy6jfc63wor76kxpy", - "postId": "={{$node[\"Mattermost7\"].json[\"id\"]}}", - "emojiName": "rocket" - }, - "name": "Mattermost12", - "type": "n8n-nodes-base.mattermost", - "typeVersion": 1, - "position": [ - 1350, - 550 - ], - "credentials": { - "mattermostApi": { - "id": "155", - "name": "Mattermost API creds" - } - }, - "id": "e3e339f3-5aae-4b43-b227-aa1ee65700fb" - }, - { - "parameters": { - "resource": "user", - "operation": "create", - "username": "=Username{{Date.now()}}", - "authService": "email", - "email": "=fake{{Date.now()}}@test.com", - "password": "=a{{Math.round(Math.random()*1000000)}}z", - "additionalFields": {} - }, - "name": "Mattermost13", - "type": "n8n-nodes-base.mattermost", - "typeVersion": 1, - "position": [ - 440, - 150 - ], - "credentials": { - "mattermostApi": { - "id": "155", - "name": "Mattermost API creds" - } - }, - "id": "bd6fa681-3999-4bee-ab30-29ab39bc0a67" - }, - { - "parameters": { - "resource": "user", - "operation": "getById", - "userIds": "={{$node[\"Mattermost13\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Mattermost14", - "type": "n8n-nodes-base.mattermost", - "typeVersion": 1, - "position": [ - 600, - 150 - ], - "credentials": { - "mattermostApi": { - "id": "155", - "name": "Mattermost API creds" - } - }, - "id": "5cd54641-5d32-48a7-97c8-8bd5f7cdd22e" - }, - { - "parameters": { - "resource": "user", - "operation": "getByEmail", - "email": "={{$node[\"Mattermost13\"].json[\"email\"]}}" - }, - "name": "Mattermost15", - "type": "n8n-nodes-base.mattermost", - "typeVersion": 1, - "position": [ - 750, - 150 - ], - "credentials": { - "mattermostApi": { - "id": "155", - "name": "Mattermost API creds" - } - }, - "id": "239a7d42-4b04-401a-a4f2-8818d904e223" - }, - { - "parameters": { - "resource": "user", - "operation": "getAll", - "returnAll": false, - "limit": 1, - "additionalFields": {} - }, - "name": "Mattermost16", - "type": "n8n-nodes-base.mattermost", - "typeVersion": 1, - "position": [ - 900, - 150 - ], - "credentials": { - "mattermostApi": { - "id": "155", - "name": "Mattermost API creds" - } - }, - "id": "438a00e9-77fb-4d53-903f-3e67c5a3e8d8" - }, - { - "parameters": { - "resource": "user", - "operation": "invite", - "teamId": "y1p853gfspdrxre5oextbii7wh", - "emails": "={{$node[\"Mattermost13\"].json[\"email\"]}}" - }, - "name": "Mattermost17", - "type": "n8n-nodes-base.mattermost", - "typeVersion": 1, - "position": [ - 1050, - 150 - ], - "credentials": { - "mattermostApi": { - "id": "155", - "name": "Mattermost API creds" - } - }, - "id": "59055891-8e15-4c74-8832-5a3a8db69b58" - }, - { - "parameters": { - "resource": "user", - "operation": "deactive", - "userId": "={{$node[\"Mattermost13\"].json[\"id\"]}}" - }, - "name": "Mattermost18", - "type": "n8n-nodes-base.mattermost", - "typeVersion": 1, - "position": [ - 1200, - 150 - ], - "credentials": { - "mattermostApi": { - "id": "155", - "name": "Mattermost API creds" - } - }, - "id": "0a74598f-31d7-4011-a447-72d092178f02" - } - ], - "connections": { - "Mattermost": { - "main": [ - [ - { - "node": "Mattermost1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mattermost1": { - "main": [ - [ - { - "node": "Mattermost7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mattermost2": { - "main": [ - [ - { - "node": "Mattermost3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mattermost3": { - "main": [ - [ - { - "node": "Mattermost4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mattermost4": { - "main": [ - [ - { - "node": "Mattermost5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mattermost5": { - "main": [ - [ - { - "node": "Mattermost6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Mattermost", - "type": "main", - "index": 0 - }, - { - "node": "Mattermost13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mattermost7": { - "main": [ - [ - { - "node": "Mattermost8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mattermost9": { - "main": [ - [ - { - "node": "Mattermost2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mattermost8": { - "main": [ - [ - { - "node": "Mattermost10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mattermost10": { - "main": [ - [ - { - "node": "Mattermost11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mattermost11": { - "main": [ - [ - { - "node": "Mattermost12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mattermost12": { - "main": [ - [ - { - "node": "Mattermost9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mattermost13": { - "main": [ - [ - { - "node": "Mattermost14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mattermost14": { - "main": [ - [ - { - "node": "Mattermost15", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mattermost15": { - "main": [ - [ - { - "node": "Mattermost16", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mattermost16": { - "main": [ - [ - { - "node": "Mattermost17", - "type": "main", - "index": 0 - } - ] - ] - }, - "Mattermost17": { - "main": [ - [ - { - "node": "Mattermost18", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/193.json b/test-workflows/workflows/193.json deleted file mode 100644 index dd812330a8e..00000000000 --- a/test-workflows/workflows/193.json +++ /dev/null @@ -1,159 +0,0 @@ -{ - "createdAt": "2021-04-30T10:29:23.378Z", - "updatedAt": "2021-04-30T10:29:23.378Z", - "id": "193", - "name": "ChargeBee:Customer:create:Invoice:list pdfUrl", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "0bd35ca2-b8f6-4357-9315-f2f1d91289ae" - }, - { - "parameters": { - "resource": "customer", - "properties": { - "id": "=Customer{{Date.now()}}", - "first_name": "=FirstName{{Date.now()}}" - } - }, - "name": "Chargebee", - "type": "n8n-nodes-base.chargebee", - "typeVersion": 1, - "position": [ - 510, - 270 - ], - "credentials": { - "chargebeeApi": { - "id": "156", - "name": "Chargebee API creds" - } - }, - "id": "5fe5d283-a430-4963-8fb1-1954889f2682" - }, - { - "parameters": { - "maxResults": 1 - }, - "name": "Chargebee1", - "type": "n8n-nodes-base.chargebee", - "typeVersion": 1, - "position": [ - 510, - 420 - ], - "credentials": { - "chargebeeApi": { - "id": "156", - "name": "Chargebee API creds" - } - }, - "id": "7a957a3b-449c-4b38-b9aa-ecc8f67dc431" - }, - { - "parameters": { - "operation": "pdfUrl", - "invoiceId": "={{$node[\"Chargebee1\"].json[\"id\"]}}" - }, - "name": "Chargebee2", - "type": "n8n-nodes-base.chargebee", - "typeVersion": 1, - "position": [ - 640, - 420 - ], - "credentials": { - "chargebeeApi": { - "id": "156", - "name": "Chargebee API creds" - } - }, - "id": "484868c1-c294-4998-83cc-7b698d7f77ab" - }, - { - "parameters": { - "resource": "subscription", - "operation": "cancel" - }, - "name": "Chargebee3", - "type": "n8n-nodes-base.chargebee", - "typeVersion": 1, - "position": [ - 520, - 120 - ], - "credentials": { - "chargebeeApi": { - "id": "156", - "name": "Chargebee API creds" - } - }, - "disabled": true, - "id": "1dd03d89-9883-46d6-923b-bff5c8f40af9" - }, - { - "parameters": { - "resource": "subscription" - }, - "name": "Chargebee4", - "type": "n8n-nodes-base.chargebee", - "typeVersion": 1, - "position": [ - 670, - 120 - ], - "credentials": { - "chargebeeApi": { - "id": "156", - "name": "Chargebee API creds" - } - }, - "disabled": true, - "id": "08be587e-e655-400a-b1d1-e0f637f7c415" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Chargebee", - "type": "main", - "index": 0 - }, - { - "node": "Chargebee1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Chargebee1": { - "main": [ - [ - { - "node": "Chargebee2", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/194.json b/test-workflows/workflows/194.json deleted file mode 100644 index 2b65e7a573f..00000000000 --- a/test-workflows/workflows/194.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "createdAt": "2021-04-30T10:58:10.188Z", - "updatedAt": "2021-04-30T10:58:10.188Z", - "id": "194", - "name": "Mailjet:Email:send sendTemplate", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "0a7bd7bf-38ad-4d4f-9e74-390a5a008663" - }, - { - "parameters": { - "operation": "sendTemplate", - "subject": "test", - "fromEmail": "node8qa@gmail.com", - "toEmail": "node8qa@gmail.com", - "templateId": "2850185", - "additionalFields": {} - }, - "name": "Mailjet", - "type": "n8n-nodes-base.mailjet", - "typeVersion": 1, - "position": [ - 480, - 240 - ], - "credentials": { - "mailjetEmailApi": { - "id": "157", - "name": "Mailjet Email API creds" - } - }, - "id": "ad66d136-3fcc-4173-871e-545e451c3fdb" - }, - { - "parameters": { - "fromEmail": "node8qa@gmail.com", - "toEmail": "node8qa@gmail.com", - "subject": "test", - "text": "test", - "additionalFields": {} - }, - "name": "Mailjet1", - "type": "n8n-nodes-base.mailjet", - "typeVersion": 1, - "position": [ - 620, - 240 - ], - "credentials": { - "mailjetEmailApi": { - "id": "157", - "name": "Mailjet Email API creds" - } - }, - "id": "9a786724-7be7-4cc8-bac6-f168b1afa8b7" - }, - { - "parameters": { - "resource": "sms", - "subject": "test", - "text": "test" - }, - "name": "Mailjet2", - "type": "n8n-nodes-base.mailjet", - "typeVersion": 1, - "position": [ - 480, - 390 - ], - "credentials": { - "mailjetSmsApi": { - "id": "158", - "name": "Mailjet SMS API creds" - } - }, - "disabled": true, - "id": "20d1d0dd-e801-41c9-a1b1-1aae62a2a1bf" - } - ], - "connections": { - "Mailjet": { - "main": [ - [ - { - "node": "Mailjet1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Mailjet", - "type": "main", - "index": 0 - }, - { - "node": "Mailjet2", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/195.json b/test-workflows/workflows/195.json deleted file mode 100644 index 8c5fcf13641..00000000000 --- a/test-workflows/workflows/195.json +++ /dev/null @@ -1,233 +0,0 @@ -{ - "createdAt": "2021-05-03T07:34:19.371Z", - "updatedAt": "2021-05-03T07:34:19.371Z", - "id": "195", - "name": "Kitemaker:Organization:get:Space:getAll:User:getAll:WorkItem:create get getAll update", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "ad2433c4-6d81-4195-a812-f036e3f63181" - }, - { - "parameters": { - "resource": "organization" - }, - "name": "Kitemaker", - "type": "n8n-nodes-base.kitemaker", - "typeVersion": 1, - "position": [ - 450, - 150 - ], - "credentials": { - "kitemakerApi": { - "id": "159", - "name": "Kitemaker API creds" - } - }, - "id": "3714c961-e9eb-4c84-b712-8e30572a0b71" - }, - { - "parameters": { - "resource": "space", - "limit": 1 - }, - "name": "Kitemaker1", - "type": "n8n-nodes-base.kitemaker", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "kitemakerApi": { - "id": "159", - "name": "Kitemaker API creds" - } - }, - "id": "1e1fb5db-906c-4b93-a411-dfe137207a51" - }, - { - "parameters": { - "resource": "user", - "limit": 1 - }, - "name": "Kitemaker2", - "type": "n8n-nodes-base.kitemaker", - "typeVersion": 1, - "position": [ - 450, - 450 - ], - "credentials": { - "kitemakerApi": { - "id": "159", - "name": "Kitemaker API creds" - } - }, - "id": "ab77571b-c9e8-478a-bb3d-e3cda0e7efee" - }, - { - "parameters": { - "operation": "create", - "title": "=WorkItem{{Date.now()}}", - "statusId": "0f42cd20f9617405", - "additionalFields": {} - }, - "name": "Kitemaker3", - "type": "n8n-nodes-base.kitemaker", - "typeVersion": 1, - "position": [ - 450, - 600 - ], - "credentials": { - "kitemakerApi": { - "id": "159", - "name": "Kitemaker API creds" - } - }, - "id": "67de6dc9-c5c6-464e-b92d-64e839f7ae57" - }, - { - "parameters": { - "workItemId": "={{$node[\"Kitemaker3\"].json[\"id\"]}}" - }, - "name": "Kitemaker4", - "type": "n8n-nodes-base.kitemaker", - "typeVersion": 1, - "position": [ - 600, - 600 - ], - "credentials": { - "kitemakerApi": { - "id": "159", - "name": "Kitemaker API creds" - } - }, - "id": "623c86bc-c0e6-4974-aede-669fd25b3e49" - }, - { - "parameters": { - "operation": "getAll", - "spaceId": "0f42cd20b0617400", - "limit": 1 - }, - "name": "Kitemaker5", - "type": "n8n-nodes-base.kitemaker", - "typeVersion": 1, - "position": [ - 750, - 600 - ], - "credentials": { - "kitemakerApi": { - "id": "159", - "name": "Kitemaker API creds" - } - }, - "id": "0282eaab-cfe7-46ab-b0b1-958789c39eb6" - }, - { - "parameters": { - "operation": "update", - "workItemId": "={{$node[\"Kitemaker3\"].json[\"id\"]}}", - "updateFields": { - "statusId": "0f42cd20f9617401", - "title": "=Updated{{$node[\"Kitemaker3\"].json[\"title\"]}}" - } - }, - "name": "Kitemaker6", - "type": "n8n-nodes-base.kitemaker", - "typeVersion": 1, - "position": [ - 900, - 600 - ], - "credentials": { - "kitemakerApi": { - "id": "159", - "name": "Kitemaker API creds" - } - }, - "id": "af8e0085-242b-4d5c-9efd-ded439b41aba" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Kitemaker1", - "type": "main", - "index": 0 - }, - { - "node": "Kitemaker", - "type": "main", - "index": 0 - }, - { - "node": "Kitemaker2", - "type": "main", - "index": 0 - }, - { - "node": "Kitemaker3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Kitemaker3": { - "main": [ - [ - { - "node": "Kitemaker4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Kitemaker4": { - "main": [ - [ - { - "node": "Kitemaker5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Kitemaker5": { - "main": [ - [ - { - "node": "Kitemaker6", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/196.json b/test-workflows/workflows/196.json deleted file mode 100644 index 256ddedda67..00000000000 --- a/test-workflows/workflows/196.json +++ /dev/null @@ -1,1222 +0,0 @@ -{ - "createdAt": "2021-05-04T09:29:11.382Z", - "updatedAt": "2021-05-04T10:32:51.938Z", - "id": "196", - "name": "QuickBooks:Bill:create get update getAll delete:Item:getAll:get:Vendor:create get getAll update:Employee:create get update getAll:Customer:create get update getAll:Estimate:create get update getAll send delete:Invoice:create get update getAll send delete:Payment:create get update getAll send delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "e0188874-3b1d-4dfb-881d-74e79e543722" - }, - { - "parameters": { - "operation": "create", - "displayName": "=Customer{{Date.now()}}", - "additionalFields": {} - }, - "name": "QuickBooks", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 450, - 390 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "689e8fe0-7b26-4a93-926e-221bd869ed8c" - }, - { - "parameters": { - "customerId": "={{$node[\"QuickBooks\"].json[\"Id\"]}}" - }, - "name": "QuickBooks1", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 600, - 390 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "39187a1b-c5f9-4a8e-a60c-ae87771be5eb" - }, - { - "parameters": { - "operation": "update", - "customerId": "={{$node[\"QuickBooks\"].json[\"Id\"]}}", - "updateFields": { - "Active": false - } - }, - "name": "QuickBooks2", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 750, - 390 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "4b0c15be-a7fa-440f-918a-3d197305640e" - }, - { - "parameters": { - "operation": "getAll", - "filters": {} - }, - "name": "QuickBooks3", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 900, - 390 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "9219c2cd-e3df-4afd-9a49-ca83c2b7b1ce" - }, - { - "parameters": { - "resource": "employee", - "operation": "create", - "FamilyName": "=Fname{{Date.now()}}", - "GivenName": "=Name{{Date.now()}}", - "additionalFields": {} - }, - "name": "QuickBooks4", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 450, - 240 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "e66647c5-fdd7-4d10-b029-033cd7a71076" - }, - { - "parameters": { - "resource": "employee", - "employeeId": "={{$node[\"QuickBooks4\"].json[\"Id\"]}}" - }, - "name": "QuickBooks5", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 600, - 240 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "6d100355-e163-43ab-affa-850a3e547f0e" - }, - { - "parameters": { - "resource": "employee", - "operation": "update", - "employeeId": "={{$node[\"QuickBooks4\"].json[\"Id\"]}}", - "updateFields": { - "Active": false - } - }, - "name": "QuickBooks6", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 750, - 240 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "f53f7640-f512-4beb-beb1-61edbf24e164" - }, - { - "parameters": { - "resource": "employee", - "operation": "getAll", - "filters": {} - }, - "name": "QuickBooks7", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 900, - 240 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "489b4d87-a2b1-4111-a165-b36762dc6de2" - }, - { - "parameters": { - "resource": "estimate", - "operation": "create", - "CustomerRef": "1", - "Line": [ - { - "itemId": "3", - "DetailType": "SalesItemLineDetail", - "Amount": 3, - "Description": "test" - } - ], - "additionalFields": {} - }, - "name": "QuickBooks8", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 450, - 540 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "f47dca6a-81eb-41ab-bf6f-34993f8333bc" - }, - { - "parameters": { - "resource": "estimate", - "estimateId": "={{$node[\"QuickBooks8\"].json[\"Id\"]}}" - }, - "name": "QuickBooks9", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 600, - 540 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "dc22140e-affa-4da1-9636-c0bd04987c39" - }, - { - "parameters": { - "resource": "estimate", - "operation": "update", - "estimateId": "={{$node[\"QuickBooks8\"].json[\"Id\"]}}", - "updateFields": { - "BillEmail": "fake@test.com" - } - }, - "name": "QuickBooks10", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 750, - 540 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "bf4a83d1-dfbb-4a38-8140-fefe9ee06195" - }, - { - "parameters": { - "resource": "estimate", - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "QuickBooks11", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 900, - 540 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "8403016a-222f-4f05-80cf-2982bdeac426" - }, - { - "parameters": { - "resource": "estimate", - "operation": "send", - "estimateId": "={{$node[\"QuickBooks8\"].json[\"Id\"]}}", - "email": "fake@test.com" - }, - "name": "QuickBooks12", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 1050, - 540 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "c00d2656-596b-4a09-ae82-09d5c71dcaab" - }, - { - "parameters": { - "resource": "estimate", - "operation": "delete", - "estimateId": "={{$node[\"QuickBooks8\"].json[\"Id\"]}}" - }, - "name": "QuickBooks13", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 1200, - 540 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "0b7f754f-a7d9-49fe-b629-3c0cf1b1b7f5" - }, - { - "parameters": { - "resource": "invoice", - "operation": "create", - "CustomerRef": "5", - "Line": [ - { - "DetailType": "SalesItemLineDetail", - "itemId": "7", - "Amount": 0, - "Description": "test" - } - ], - "additionalFields": {} - }, - "name": "QuickBooks14", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 450, - 690 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "c5d80817-5c5a-4a78-bc72-4ca29b4757f4" - }, - { - "parameters": { - "resource": "invoice", - "invoiceId": "={{$node[\"QuickBooks14\"].json[\"Id\"]}}" - }, - "name": "QuickBooks15", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 600, - 690 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "6ad6231c-b645-4e00-b61f-ab4031b9f4f2" - }, - { - "parameters": { - "resource": "invoice", - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "QuickBooks16", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 750, - 690 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "88333b7b-f905-4c83-960e-3eb650f17d00" - }, - { - "parameters": { - "resource": "invoice", - "operation": "update", - "invoiceId": "={{$node[\"QuickBooks14\"].json[\"Id\"]}}", - "updateFields": { - "CustomerMemo": "test" - } - }, - "name": "QuickBooks17", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 900, - 690 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "e625f0d1-a0bb-4f8d-83b2-9dc62d3a526d" - }, - { - "parameters": { - "resource": "invoice", - "operation": "send", - "invoiceId": "={{$node[\"QuickBooks14\"].json[\"Id\"]}}", - "email": "fake@test.com" - }, - "name": "QuickBooks18", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 1050, - 690 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "59851dc6-1aee-4c49-9cb1-3447df019be1" - }, - { - "parameters": { - "resource": "invoice", - "operation": "delete", - "invoiceId": "={{$node[\"QuickBooks14\"].json[\"Id\"]}}" - }, - "name": "QuickBooks19", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 1190, - 690 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "68dda52d-9455-491e-b7b9-8dc10d6e8460" - }, - { - "parameters": { - "resource": "item", - "itemId": "={{$node[\"QuickBooks21\"].json[\"Id\"]}}" - }, - "name": "QuickBooks22", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 600, - -60 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "98c8ad9c-5053-4376-9dc0-95545e6f3d23" - }, - { - "parameters": { - "resource": "item", - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "QuickBooks21", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 450, - -60 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "e1b294da-dea1-4318-a487-390aa95c9287" - }, - { - "parameters": { - "resource": "payment", - "operation": "create", - "CustomerRef": "1", - "TotalAmt": 50, - "additionalFields": {} - }, - "name": "QuickBooks20", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 450, - 840 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "aa58f15e-a22b-402c-8af3-39aeea6de874" - }, - { - "parameters": { - "resource": "payment", - "paymentId": "={{$node[\"QuickBooks20\"].json[\"Id\"]}}" - }, - "name": "QuickBooks23", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 600, - 840 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "f0226998-0489-4b64-ba0e-c06e13e75a9d" - }, - { - "parameters": { - "resource": "payment", - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "QuickBooks24", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 750, - 840 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "49554443-c484-4f7b-ad8f-8694e3163150" - }, - { - "parameters": { - "resource": "payment", - "operation": "update", - "paymentId": "={{$node[\"QuickBooks20\"].json[\"Id\"]}}", - "updateFields": { - "TxnDate": "2021-04-30T22:00:00.000Z" - } - }, - "name": "QuickBooks25", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 900, - 840 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "65fb3536-c40a-48a4-9e6a-ce4d4f24628a" - }, - { - "parameters": { - "resource": "payment", - "operation": "send", - "paymentId": "={{$node[\"QuickBooks20\"].json[\"Id\"]}}", - "email": "fake@test.com" - }, - "name": "QuickBooks26", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 1050, - 840 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "33f3a73e-799e-4dc0-a8fc-5c9aa492a953" - }, - { - "parameters": { - "resource": "payment", - "operation": "delete", - "paymentId": "={{$node[\"QuickBooks20\"].json[\"Id\"]}}" - }, - "name": "QuickBooks27", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 1200, - 840 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "fb87ee2d-7fad-4cbe-82a4-aede0b3462c1" - }, - { - "parameters": { - "resource": "vendor", - "operation": "create", - "displayName": "=Vendor{{Date.now()}}", - "additionalFields": {} - }, - "name": "QuickBooks28", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 450, - 90 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "09a16143-613f-4812-926a-acacbefb63d1" - }, - { - "parameters": { - "resource": "vendor", - "vendorId": "={{$node[\"QuickBooks28\"].json[\"Id\"]}}" - }, - "name": "QuickBooks29", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 600, - 90 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "ec53abeb-83ad-4cdb-b419-56eff8ed7de7" - }, - { - "parameters": { - "resource": "vendor", - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "QuickBooks30", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 750, - 90 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "f3c16a5c-83c6-410c-b382-1b22dd7404e1" - }, - { - "parameters": { - "resource": "vendor", - "operation": "update", - "vendorId": "={{$node[\"QuickBooks28\"].json[\"Id\"]}}", - "updateFields": { - "Active": false - } - }, - "name": "QuickBooks31", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 900, - 90 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "0bf8d78c-d02e-4b3c-a1fc-98a7afe4f7b9" - }, - { - "parameters": { - "resource": "bill", - "operation": "create", - "VendorRef": "46", - "Line": [ - { - "DetailType": "AccountBasedExpenseLineDetail", - "Amount": 152, - "Description": "test", - "accountId": "78" - } - ], - "additionalFields": {} - }, - "name": "QuickBooks37", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 450, - -210 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "2f7af95b-cbb8-4272-bdaf-64cd9906ae47" - }, - { - "parameters": { - "resource": "bill", - "billId": "={{$node[\"QuickBooks37\"].json[\"Id\"]}}" - }, - "name": "QuickBooks38", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 600, - -210 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "28dbf9b4-288b-4726-8796-718e9b586cca" - }, - { - "parameters": { - "resource": "bill", - "operation": "update", - "billId": "={{$node[\"QuickBooks37\"].json[\"Id\"]}}", - "updateFields": { - "DueDate": "2021-04-30T22:00:00.000Z" - } - }, - "name": "QuickBooks39", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 750, - -210 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "2843f656-3ee4-4e51-a376-315d92f8d9fd" - }, - { - "parameters": { - "resource": "bill", - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "QuickBooks40", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 900, - -210 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "624d0f96-d465-448b-b9a1-50483479e032" - }, - { - "parameters": { - "resource": "bill", - "operation": "delete", - "billId": "={{$node[\"QuickBooks37\"].json[\"Id\"]}}" - }, - "name": "QuickBooks41", - "type": "n8n-nodes-base.quickbooks", - "typeVersion": 1, - "position": [ - 1050, - -210 - ], - "credentials": { - "quickBooksOAuth2Api": { - "id": "160", - "name": "QuickBooks OAuth2 API creds" - } - }, - "id": "0c89671b-1312-46b7-92af-4b879dbd5ff0" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "QuickBooks28", - "type": "main", - "index": 0 - }, - { - "node": "QuickBooks21", - "type": "main", - "index": 0 - }, - { - "node": "QuickBooks4", - "type": "main", - "index": 0 - }, - { - "node": "QuickBooks", - "type": "main", - "index": 0 - }, - { - "node": "QuickBooks37", - "type": "main", - "index": 0 - }, - { - "node": "QuickBooks8", - "type": "main", - "index": 0 - }, - { - "node": "QuickBooks14", - "type": "main", - "index": 0 - }, - { - "node": "QuickBooks20", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuickBooks": { - "main": [ - [ - { - "node": "QuickBooks1", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuickBooks1": { - "main": [ - [ - { - "node": "QuickBooks2", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuickBooks2": { - "main": [ - [ - { - "node": "QuickBooks3", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuickBooks4": { - "main": [ - [ - { - "node": "QuickBooks5", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuickBooks5": { - "main": [ - [ - { - "node": "QuickBooks6", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuickBooks6": { - "main": [ - [ - { - "node": "QuickBooks7", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuickBooks8": { - "main": [ - [ - { - "node": "QuickBooks9", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuickBooks9": { - "main": [ - [ - { - "node": "QuickBooks10", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuickBooks10": { - "main": [ - [ - { - "node": "QuickBooks11", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuickBooks11": { - "main": [ - [ - { - "node": "QuickBooks12", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuickBooks12": { - "main": [ - [ - { - "node": "QuickBooks13", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuickBooks14": { - "main": [ - [ - { - "node": "QuickBooks15", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuickBooks15": { - "main": [ - [ - { - "node": "QuickBooks16", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuickBooks16": { - "main": [ - [ - { - "node": "QuickBooks17", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuickBooks17": { - "main": [ - [ - { - "node": "QuickBooks18", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuickBooks18": { - "main": [ - [ - { - "node": "QuickBooks19", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuickBooks21": { - "main": [ - [ - { - "node": "QuickBooks22", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuickBooks20": { - "main": [ - [ - { - "node": "QuickBooks23", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuickBooks23": { - "main": [ - [ - { - "node": "QuickBooks24", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuickBooks24": { - "main": [ - [ - { - "node": "QuickBooks25", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuickBooks25": { - "main": [ - [ - { - "node": "QuickBooks26", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuickBooks26": { - "main": [ - [ - { - "node": "QuickBooks27", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuickBooks28": { - "main": [ - [ - { - "node": "QuickBooks29", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuickBooks29": { - "main": [ - [ - { - "node": "QuickBooks30", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuickBooks30": { - "main": [ - [ - { - "node": "QuickBooks31", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuickBooks37": { - "main": [ - [ - { - "node": "QuickBooks38", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuickBooks38": { - "main": [ - [ - { - "node": "QuickBooks39", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuickBooks39": { - "main": [ - [ - { - "node": "QuickBooks40", - "type": "main", - "index": 0 - } - ] - ] - }, - "QuickBooks40": { - "main": [ - [ - { - "node": "QuickBooks41", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/197.json b/test-workflows/workflows/197.json deleted file mode 100644 index 235aa97142d..00000000000 --- a/test-workflows/workflows/197.json +++ /dev/null @@ -1,144 +0,0 @@ -{ - "createdAt": "2021-05-06T09:34:45.652Z", - "updatedAt": "2021-05-06T09:39:48.494Z", - "id": "197", - "name": "MQTT:sendMessage", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "850eb506-8c40-4257-92f9-13b39588d01a" - }, - { - "parameters": { - "topic": "TestTopic", - "sendInputData": false, - "message": "=MQTT-message{{Date.now()}}", - "options": { - "qos": 0 - } - }, - "name": "MQTT qos:1", - "type": "n8n-nodes-base.mqtt", - "typeVersion": 1, - "position": [ - 450, - 160 - ], - "credentials": { - "mqtt": { - "id": "131", - "name": "MQTT creds" - } - }, - "id": "af2b9c5f-2b44-43d6-852f-436ebfc72c3c" - }, - { - "parameters": { - "topic": "TestTopic", - "sendInputData": false, - "message": "=MQTT-message{{Date.now()}}", - "options": { - "qos": 1 - } - }, - "name": "MQTT1 qos:0", - "type": "n8n-nodes-base.mqtt", - "typeVersion": 1, - "position": [ - 450, - 310 - ], - "credentials": { - "mqtt": { - "id": "131", - "name": "MQTT creds" - } - }, - "id": "37d6e4f3-b06b-4bb3-8f68-ca54de4e41a9" - }, - { - "parameters": { - "topic": "TestTopic", - "options": { - "qos": 2 - } - }, - "name": "MQTT2 qos:2", - "type": "n8n-nodes-base.mqtt", - "typeVersion": 1, - "position": [ - 600, - 450 - ], - "credentials": { - "mqtt": { - "id": "131", - "name": "MQTT creds" - } - }, - "id": "6e4693bb-23e5-4622-aa4f-2e93ce916f86" - }, - { - "parameters": { - "functionCode": "items = [\n {\n json:{\n \"message\":`MQTT-item-message${Date.now()}`\n }\n }\n]\nreturn items;" - }, - "name": "Function", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 450, - 450 - ], - "id": "37ef3107-c80c-4bad-a5d6-3d9a349ca76a" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "MQTT qos:1", - "type": "main", - "index": 0 - }, - { - "node": "MQTT1 qos:0", - "type": "main", - "index": 0 - }, - { - "node": "Function", - "type": "main", - "index": 0 - } - ] - ] - }, - "Function": { - "main": [ - [ - { - "node": "MQTT2 qos:2", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/198.json b/test-workflows/workflows/198.json deleted file mode 100644 index a75b8677857..00000000000 --- a/test-workflows/workflows/198.json +++ /dev/null @@ -1,329 +0,0 @@ -{ - "createdAt": "2021-05-07T14:37:14.511Z", - "updatedAt": "2021-05-12T17:39:44.046Z", - "id": "198", - "name": "GoogleCloudFirestore:Document:create get upset getAll query delete:Collection:getAll", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "68fcd431-1e94-4928-b19a-1749502c6ec5" - }, - { - "parameters": { - "operation": "create", - "projectId": "fixedtestproject", - "collection": "FixedCollection", - "columns": "number,boolean" - }, - "name": "Google Cloud Firestore", - "type": "n8n-nodes-base.googleFirebaseCloudFirestore", - "typeVersion": 1, - "position": [ - 600, - 250 - ], - "credentials": { - "googleFirebaseCloudFirestoreOAuth2Api": { - "id": "167", - "name": "Google Firebase Cloud Firestore OAuth2 API creds" - } - }, - "id": "d5788046-8872-44f7-83c4-4d1b66480b22" - }, - { - "parameters": { - "values": { - "number": [ - { - "name": "number", - "value": 3 - } - ], - "boolean": [ - { - "name": "boolean", - "value": true - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 450, - 250 - ], - "id": "b4b9cc8e-7496-40ed-ad8a-eb02421546e0" - }, - { - "parameters": { - "projectId": "fixedtestproject", - "collection": "FixedCollection", - "documentId": "={{$node[\"Google Cloud Firestore\"].json[\"_id\"]}}" - }, - "name": "Google Cloud Firestore1", - "type": "n8n-nodes-base.googleFirebaseCloudFirestore", - "typeVersion": 1, - "position": [ - 800, - 250 - ], - "credentials": { - "googleFirebaseCloudFirestoreOAuth2Api": { - "id": "167", - "name": "Google Firebase Cloud Firestore OAuth2 API creds" - } - }, - "id": "56bff4bf-504c-4dca-bcef-0dbd4f881303" - }, - { - "parameters": { - "operation": "upsert", - "projectId": "fixedtestproject", - "collection": "FixedCollection", - "updateKey": "={{$node[\"Google Cloud Firestore1\"].json[\"_id\"]}}", - "columns": "number" - }, - "name": "Google Cloud Firestore2", - "type": "n8n-nodes-base.googleFirebaseCloudFirestore", - "typeVersion": 1, - "position": [ - 1100, - 250 - ], - "credentials": { - "googleFirebaseCloudFirestoreOAuth2Api": { - "id": "167", - "name": "Google Firebase Cloud Firestore OAuth2 API creds" - } - }, - "id": "fe3abd23-d891-4bcf-aa5e-64e9a0961332" - }, - { - "parameters": { - "keepOnlySet": true, - "values": { - "number": [ - { - "name": "number", - "value": 100 - } - ], - "boolean": [ - { - "name": "boolean", - "value": true - } - ] - }, - "options": {} - }, - "name": "Set1", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 950, - 250 - ], - "id": "3bbbae32-f56a-4252-8e4b-4f0f4854fe22" - }, - { - "parameters": { - "operation": "getAll", - "projectId": "fixedtestproject", - "collection": "FixedCollection", - "limit": 1 - }, - "name": "Google Cloud Firestore3", - "type": "n8n-nodes-base.googleFirebaseCloudFirestore", - "typeVersion": 1, - "position": [ - 1250, - 250 - ], - "credentials": { - "googleFirebaseCloudFirestoreOAuth2Api": { - "id": "167", - "name": "Google Firebase Cloud Firestore OAuth2 API creds" - } - }, - "id": "77e69936-c4c5-4aee-918b-1246e25e0446" - }, - { - "parameters": { - "operation": "query", - "projectId": "fixedtestproject", - "query": "{\n \"structuredQuery\":{\n \"where\":{\n \"fieldFilter\":{\n \"field\":{\n \"fieldPath\": \"number\"\n },\n \"op\":\"EQUAL\",\n \"value\":{\n \"integerValue\": 100\n }\n }\n },\n \"from\":[\n {\n \"collectionId\":\"FixedCollection\"\n }\n ]\n }\n}" - }, - "name": "Google Cloud Firestore4", - "type": "n8n-nodes-base.googleFirebaseCloudFirestore", - "typeVersion": 1, - "position": [ - 1450, - 250 - ], - "credentials": { - "googleFirebaseCloudFirestoreOAuth2Api": { - "id": "167", - "name": "Google Firebase Cloud Firestore OAuth2 API creds" - } - }, - "id": "0f0d74da-fbc7-4078-9462-d8c40322b9e7" - }, - { - "parameters": { - "resource": "collection", - "projectId": "fixedtestproject", - "limit": 1 - }, - "name": "Google Cloud Firestore5", - "type": "n8n-nodes-base.googleFirebaseCloudFirestore", - "typeVersion": 1, - "position": [ - 450, - 400 - ], - "credentials": { - "googleFirebaseCloudFirestoreOAuth2Api": { - "id": "167", - "name": "Google Firebase Cloud Firestore OAuth2 API creds" - } - }, - "id": "bda9b450-d8d2-46a0-b3f2-d38fe8bfb6e8" - }, - { - "parameters": { - "operation": "delete", - "projectId": "fixedtestproject", - "collection": "FixedCollection", - "documentId": "={{$node[\"Google Cloud Firestore\"].json[\"_id\"]}}" - }, - "name": "Google Cloud Firestore6", - "type": "n8n-nodes-base.googleFirebaseCloudFirestore", - "typeVersion": 1, - "position": [ - 1650, - 250 - ], - "credentials": { - "googleFirebaseCloudFirestoreOAuth2Api": { - "id": "167", - "name": "Google Firebase Cloud Firestore OAuth2 API creds" - } - }, - "id": "62f8a14b-34de-48c6-87d9-6292203427e1" - } - ], - "connections": { - "Google Cloud Firestore": { - "main": [ - [ - { - "node": "Google Cloud Firestore1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set": { - "main": [ - [ - { - "node": "Google Cloud Firestore", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Cloud Firestore1": { - "main": [ - [ - { - "node": "Set1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set1": { - "main": [ - [ - { - "node": "Google Cloud Firestore2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Cloud Firestore2": { - "main": [ - [ - { - "node": "Google Cloud Firestore3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Cloud Firestore3": { - "main": [ - [ - { - "node": "Google Cloud Firestore4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - }, - { - "node": "Google Cloud Firestore5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Cloud Firestore4": { - "main": [ - [ - { - "node": "Google Cloud Firestore6", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/199.json b/test-workflows/workflows/199.json deleted file mode 100644 index d61c381d947..00000000000 --- a/test-workflows/workflows/199.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "createdAt": "2021-05-10T11:24:19.202Z", - "updatedAt": "2021-05-10T13:18:56.388Z", - "id": "199", - "name": "MailCheck:Email:check", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "77ccc40b-307c-479e-882d-6f2700b67b8d" - }, - { - "parameters": { - "email": "jan@n8n.io" - }, - "name": "Mailcheck", - "type": "n8n-nodes-base.mailcheck", - "typeVersion": 1, - "position": [ - 470, - 300 - ], - "credentials": { - "mailcheckApi": { - "id": "169", - "name": "Mailcheck API creds" - } - }, - "id": "01a36e75-0cbd-4536-896e-1fe4cf9a8179" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Mailcheck", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": { - "timezone": "Europe/Berlin" - }, - "staticData": { - "node:Clockify Trigger": { - "userId": "60335ad2f24e660123d7fdeb", - "lastTimeChecked": "2021-05-10T14:49:24Z" - } - }, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/20.json b/test-workflows/workflows/20.json deleted file mode 100644 index 04bdb59e837..00000000000 --- a/test-workflows/workflows/20.json +++ /dev/null @@ -1,583 +0,0 @@ -{ - "createdAt": "2021-02-16T15:33:11.177Z", - "updatedAt": "2021-06-04T17:17:22.109Z", - "id": "20", - "name": "Hubspot:Contact:upsert getall search getRecentlyCreatedUpdated get delete:Company:getall searchByDomain getRecentlyCreated update getRecentlyModified delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "d8cbfb90-51ba-45b9-a701-1d278992b7d5" - }, - { - "parameters": { - "resource": "contact", - "email": "nodeqa@n8n.io", - "additionalFields": {} - }, - "name": "Hubspot", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 410, - 260 - ], - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "notes": "IGNORED_PROPERTIES=associated-company", - "id": "6b417cab-bf37-4b57-8fdf-24f011106618" - }, - { - "parameters": { - "resource": "contact", - "operation": "getRecentlyCreatedUpdated", - "limit": 1, - "filters": {} - }, - "name": "Hubspot1", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 1320, - 260 - ], - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "id": "0be3e59d-9094-4422-a834-bcc945725a75" - }, - { - "parameters": { - "resource": "contact", - "operation": "getAll", - "limit": 1, - "additionalFields": {} - }, - "name": "Hubspot2", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 710, - 260 - ], - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "id": "5180a058-b5ff-481b-90aa-421f8609b091" - }, - { - "parameters": { - "resource": "contact", - "operation": "search", - "limit": 1, - "filterGroupsUi": { - "filterGroupsValues": [] - }, - "additionalFields": {} - }, - "name": "Hubspot3", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 1000, - 260 - ], - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "notes": "CAP_RESULTS_LENGTH=1", - "id": "2e18e4b1-d379-4fa4-b9ad-2da493c43a22" - }, - { - "parameters": { - "resource": "contact", - "operation": "delete", - "contactId": "={{$json[\"vid\"]}}" - }, - "name": "Hubspot4", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 1880, - 260 - ], - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "id": "573f1fdf-4d4e-44e4-a086-b1389dab7ff8" - }, - { - "parameters": { - "resource": "contact", - "operation": "get", - "contactId": "={{$json[\"vid\"]}}", - "additionalFields": {} - }, - "name": "Hubspot5", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 1600, - 260 - ], - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "notes": "IGNORED_PROPERTIES=associated-company", - "id": "ae17da34-808d-4e19-81f1-42546ec64dbc" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(1500);\n\nreturn [items[0]];" - }, - "name": "Function", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 1140, - 260 - ], - "notesInFlow": true, - "notes": "Limit Contacts to single one", - "id": "702edf3d-4e2e-4091-875f-b477c842802c" - }, - { - "parameters": { - "resource": "company", - "name": "n8n", - "additionalFields": { - "companyDomainName": "n8n.io" - } - }, - "name": "Hubspot6", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 410, - 430 - ], - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "id": "30467fe0-8ba4-4b71-942e-0cfa7adde3c1" - }, - { - "parameters": { - "resource": "company", - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "Hubspot7", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 570, - 430 - ], - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "id": "2d35a462-2a30-4297-a7df-1aca9be285c3" - }, - { - "parameters": { - "resource": "company", - "operation": "getRecentlyCreated", - "limit": 1 - }, - "name": "Hubspot8", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 910, - 430 - ], - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "id": "98a71897-123f-4c6e-a0c7-ba79e5947823" - }, - { - "parameters": { - "resource": "company", - "operation": "searchByDomain", - "domain": "n8n.io", - "limit": 1, - "options": {} - }, - "name": "Hubspot9", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 740, - 430 - ], - "alwaysOutputData": true, - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "id": "46d6962d-f16a-4d89-92d6-bce6506f6e58" - }, - { - "parameters": { - "resource": "company", - "operation": "update", - "companyId": "={{$node[\"Hubspot6\"].json[\"companyId\"]}}", - "updateFields": { - "city": "berlin" - } - }, - "name": "Hubspot10", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 1060, - 430 - ], - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "id": "b69304b8-5093-4988-8304-89d3ee8e2c2e" - }, - { - "parameters": { - "resource": "company", - "operation": "getRecentlyModified", - "limit": 1, - "filters": {} - }, - "name": "Hubspot11", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 1220, - 430 - ], - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "id": "c0f52b10-af2e-41d2-a902-6892f14742e6" - }, - { - "parameters": { - "resource": "company", - "operation": "delete", - "companyId": "={{$node[\"Hubspot6\"].json[\"companyId\"]}}" - }, - "name": "Hubspot12", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 1390, - 430 - ], - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "id": "cc00b5ca-2611-472d-89da-4649e12afa89" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second", - "type": "n8n-nodes-base.function", - "position": [ - 550, - 260 - ], - "typeVersion": 1, - "notes": "IGNORED_PROPERTIES=associated-company", - "id": "d8a86813-0d02-4b5d-89f9-41818194c326" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second1", - "type": "n8n-nodes-base.function", - "position": [ - 850, - 260 - ], - "typeVersion": 1, - "id": "9276f38e-185a-4844-8764-ef4e91b0bd68" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second2", - "type": "n8n-nodes-base.function", - "position": [ - 1480, - 260 - ], - "typeVersion": 1, - "id": "ea72ad5a-b5b1-40f3-8f5f-9ac4fb5c37c4" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second3", - "type": "n8n-nodes-base.function", - "position": [ - 1730, - 260 - ], - "typeVersion": 1, - "notes": "IGNORED_PROPERTIES=associated-company", - "id": "0a60605e-e573-4386-9fe5-2198a3c838d8" - } - ], - "connections": { - "Hubspot": { - "main": [ - [ - { - "node": "Sleep 0.5 second", - "type": "main", - "index": 0 - } - ] - ] - }, - "Hubspot1": { - "main": [ - [ - { - "node": "Sleep 0.5 second2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Hubspot2": { - "main": [ - [ - { - "node": "Sleep 0.5 second1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Hubspot3": { - "main": [ - [ - { - "node": "Function", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Hubspot6", - "type": "main", - "index": 0 - }, - { - "node": "Hubspot", - "type": "main", - "index": 0 - } - ] - ] - }, - "Hubspot5": { - "main": [ - [ - { - "node": "Sleep 0.5 second3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Function": { - "main": [ - [ - { - "node": "Hubspot1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Hubspot6": { - "main": [ - [ - { - "node": "Hubspot7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Hubspot7": { - "main": [ - [ - { - "node": "Hubspot9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Hubspot8": { - "main": [ - [ - { - "node": "Hubspot10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Hubspot9": { - "main": [ - [ - { - "node": "Hubspot8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Hubspot10": { - "main": [ - [ - { - "node": "Hubspot11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Hubspot11": { - "main": [ - [ - { - "node": "Hubspot12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second": { - "main": [ - [ - { - "node": "Hubspot2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second1": { - "main": [ - [ - { - "node": "Hubspot3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second2": { - "main": [ - [ - { - "node": "Hubspot5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second3": { - "main": [ - [ - { - "node": "Hubspot4", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/200.json b/test-workflows/workflows/200.json deleted file mode 100644 index 7bbf7a85db4..00000000000 --- a/test-workflows/workflows/200.json +++ /dev/null @@ -1,1121 +0,0 @@ -{ - "createdAt": "2021-05-11T07:41:09.199Z", - "updatedAt": "2021-05-11T08:09:44.364Z", - "id": "200", - "name": "Pipedrive:Activity:create get update getAll delete:Deal:create get update duplicate getAll delete:Person:create get update getAll search delete:File:create get download delete:Organization:create get update getAll delete:Note:create get update getAll delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "1424805b-9720-4fc3-99a3-96b39b1b2d4c" - }, - { - "parameters": { - "resource": "activity", - "subject": "=Activity{{(new Date).toISOString()}}", - "type": "meeting", - "additionalFields": {} - }, - "name": "Pipedrive", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 500, - 200 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "c137d42d-46da-4fea-aa3f-098b56e0828d" - }, - { - "parameters": { - "resource": "activity", - "operation": "get", - "activityId": "={{$node[\"Pipedrive\"].json[\"id\"]}}" - }, - "name": "Pipedrive1", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 650, - 200 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "3f597274-830b-4dcb-b0c6-0f1df94e6e9b" - }, - { - "parameters": { - "resource": "activity", - "operation": "update", - "activityId": "={{$node[\"Pipedrive\"].json[\"id\"]}}", - "updateFields": { - "done": "1", - "note": "Used for testing", - "subject": "=Updated{{$node[\"Pipedrive\"].json[\"subject\"]}}", - "type": "call" - } - }, - "name": "Pipedrive2", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 800, - 200 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "14248e74-036b-4817-92b9-c9f549cb9c4f" - }, - { - "parameters": { - "resource": "activity", - "operation": "getAll", - "limit": 1 - }, - "name": "Pipedrive3", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 950, - 200 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "a073500e-83c6-4d69-a205-b053396c213e" - }, - { - "parameters": { - "resource": "activity", - "operation": "delete", - "activityId": "={{$node[\"Pipedrive\"].json[\"id\"]}}" - }, - "name": "Pipedrive4", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 1100, - 200 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "25501736-984e-47c8-890e-187307524392" - }, - { - "parameters": { - "title": "=Deal{{(new Date).toISOString()}}", - "additionalFields": { - "status": "open" - } - }, - "name": "Pipedrive5", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 500, - 350 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "dfa82f60-7728-4318-9125-229db86ce994" - }, - { - "parameters": { - "operation": "get", - "dealId": "={{$node[\"Pipedrive5\"].json[\"id\"]}}" - }, - "name": "Pipedrive6", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 650, - 350 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "ddc83c7e-1434-4f19-963b-08e52484dbb6" - }, - { - "parameters": { - "operation": "update", - "dealId": "={{$node[\"Pipedrive5\"].json[\"id\"]}}", - "updateFields": { - "status": "won", - "title": "=Updated{{$node[\"Pipedrive5\"].json[\"title\"]}}" - } - }, - "name": "Pipedrive7", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 800, - 350 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "00491412-62f0-45b4-ad3b-27cbac938293" - }, - { - "parameters": { - "operation": "duplicate", - "dealId": "={{$node[\"Pipedrive5\"].json[\"id\"]}}" - }, - "name": "Pipedrive8", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 950, - 350 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "b72444fe-3667-468a-89ef-9bbb6c05ff96" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1 - }, - "name": "Pipedrive9", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 1100, - 350 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "4f5d8819-5573-4214-bdf4-711dd2426277" - }, - { - "parameters": { - "operation": "delete", - "dealId": "={{$node[\"Pipedrive5\"].json[\"id\"]}}" - }, - "name": "Pipedrive10", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 1250, - 350 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "d9540101-e05b-4599-8e26-283e4da6a4bf" - }, - { - "parameters": { - "operation": "delete", - "dealId": "={{$node[\"Pipedrive8\"].json[\"id\"]}}" - }, - "name": "Pipedrive11", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 1400, - 350 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "967d2d73-6ae2-46e5-9c9c-3325fd47a0f5" - }, - { - "parameters": { - "resource": "file", - "additionalFields": {} - }, - "name": "Pipedrive12", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 800, - 500 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "751fb956-96d4-4b31-92c7-34159e7c83d1" - }, - { - "parameters": { - "values": { - "number": [], - "string": [ - { - "name": "file", - "value": "=Testing file" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 500, - 500 - ], - "id": "aa58167e-6c9e-4be6-9049-f280204d8eba" - }, - { - "parameters": { - "mode": "jsonToBinary", - "convertAllData": false, - "sourceKey": "file", - "options": { - "fileName": "testFile", - "mimeType": "text" - } - }, - "name": "Move Binary Data", - "type": "n8n-nodes-base.moveBinaryData", - "typeVersion": 1, - "position": [ - 650, - 500 - ], - "id": "3ba06dd7-c49e-4b72-9785-2e5e3fc01f53" - }, - { - "parameters": { - "resource": "file", - "operation": "get", - "fileId": "={{$node[\"Pipedrive12\"].json[\"id\"]}}" - }, - "name": "Pipedrive13", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 950, - 500 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "e769e423-dcff-4d51-8200-3c5a3fbe01e2" - }, - { - "parameters": { - "resource": "file", - "operation": "download", - "fileId": "={{$node[\"Pipedrive12\"].json[\"id\"]}}" - }, - "name": "Pipedrive14", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 1100, - 500 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "c973182a-5d43-4a12-92c2-1ece40b66f22" - }, - { - "parameters": { - "resource": "file", - "operation": "delete", - "fileId": "={{$node[\"Pipedrive12\"].json[\"id\"]}}" - }, - "name": "Pipedrive15", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 1250, - 500 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "0d2cac69-6912-4156-8bb5-57c174a53e82" - }, - { - "parameters": { - "resource": "organization", - "name": "=Organization_{{(new Date).toISOString()}}", - "additionalFields": { - "label": 3 - } - }, - "name": "Pipedrive16", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 500, - 650 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "45b73830-24ac-486f-b1e1-cfa76d621624" - }, - { - "parameters": { - "resource": "organization", - "operation": "get", - "organizationId": "={{$node[\"Pipedrive16\"].json[\"id\"]}}" - }, - "name": "Pipedrive17", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 670, - 650 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "0fd8d1b6-4851-4c91-b3ea-cf7a2759286e" - }, - { - "parameters": { - "resource": "organization", - "operation": "update", - "organizationId": "={{$node[\"Pipedrive16\"].json[\"id\"]}}", - "updateFields": { - "label": 2, - "name": "=Updated{{$node[\"Pipedrive16\"].json[\"name\"]}}", - "visible_to": "3" - } - }, - "name": "Pipedrive18", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 820, - 650 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "00c38f10-591e-43b4-8e1e-875383f0846b" - }, - { - "parameters": { - "resource": "organization", - "operation": "getAll", - "limit": 1 - }, - "name": "Pipedrive19", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 970, - 650 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "c528c1e6-aee8-46ae-a573-b770d61a5462" - }, - { - "parameters": { - "resource": "organization", - "operation": "delete", - "organizationId": "={{$node[\"Pipedrive16\"].json[\"id\"]}}" - }, - "name": "Pipedrive20", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 1120, - 650 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "95f50030-a435-470c-910d-990fd4bde80d" - }, - { - "parameters": { - "resource": "note", - "content": "=Note_{{(new Date).toISOString()}}", - "additionalFields": { - "org_id": "={{$node[\"Pipedrive16\"].json[\"id\"]}}" - } - }, - "name": "Pipedrive21", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 650, - 800 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "dcdc4d84-f8c2-4402-bfc9-1b38740bc70a" - }, - { - "parameters": { - "resource": "note", - "operation": "get", - "noteId": "={{$node[\"Pipedrive21\"].json[\"id\"]}}" - }, - "name": "Pipedrive22", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 800, - 800 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "4128895d-8656-49fb-a196-099f2ec336a3" - }, - { - "parameters": { - "resource": "note", - "operation": "update", - "noteId": "={{$node[\"Pipedrive21\"].json[\"id\"]}}", - "updateFields": { - "content": "=Updated{{$node[\"Pipedrive21\"].json[\"content\"]}}" - } - }, - "name": "Pipedrive23", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 950, - 800 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "d1900e79-4b29-4f56-9110-311ea321dc78" - }, - { - "parameters": { - "resource": "note", - "operation": "getAll", - "additionalFields": {}, - "limit": 1 - }, - "name": "Pipedrive24", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 1100, - 800 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "64d156ea-828b-42da-88d5-170e48d1b11b" - }, - { - "parameters": { - "resource": "note", - "operation": "delete", - "noteId": "={{$node[\"Pipedrive21\"].json[\"id\"]}}" - }, - "name": "Pipedrive25", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 1250, - 800 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "40e8dea1-279c-44d6-ae6a-cc79ab5e123b" - }, - { - "parameters": { - "resource": "person", - "name": "=Person_{{(new Date).toISOString()}}", - "additionalFields": { - "label": 1, - "visible_to": "3" - } - }, - "name": "Pipedrive26", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 500, - 50 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "c1b68ae7-37ac-42d5-9ff8-43c88223122a" - }, - { - "parameters": { - "resource": "person", - "operation": "get", - "personId": "={{$node[\"Pipedrive26\"].json[\"id\"]}}" - }, - "name": "Pipedrive27", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 650, - 50 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "c9dcd61f-c456-40e8-ace3-05c9e5f961c7" - }, - { - "parameters": { - "resource": "person", - "operation": "update", - "personId": "={{$node[\"Pipedrive26\"].json[\"id\"]}}", - "updateFields": { - "label": 2, - "name": "=Updated{{$node[\"Pipedrive31302926\"].json[\"first_name\"]}}" - } - }, - "name": "Pipedrive28", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 800, - 50 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "04f88fba-4196-400e-9147-760c9253b423" - }, - { - "parameters": { - "resource": "person", - "operation": "getAll", - "limit": 1, - "additionalFields": {} - }, - "name": "Pipedrive29", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 950, - 50 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "2e72dc73-d6f5-4641-bb17-15def44c8481" - }, - { - "parameters": { - "resource": "person", - "operation": "search", - "limit": 1, - "term": "updated", - "additionalFields": {} - }, - "name": "Pipedrive30", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 1100, - 50 - ], - "alwaysOutputData": true, - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "3b2617a2-e33d-40fa-8e1b-5a7c402a2898" - }, - { - "parameters": { - "resource": "person", - "operation": "delete", - "personId": "={{$node[\"Pipedrive26\"].json[\"id\"]}}" - }, - "name": "Pipedrive31", - "type": "n8n-nodes-base.pipedrive", - "typeVersion": 1, - "position": [ - 1250, - 50 - ], - "credentials": { - "pipedriveApi": { - "id": "171", - "name": "Pipedrive API creds" - } - }, - "id": "094f29de-6d5b-4433-a673-3a5127f8438d" - } - ], - "connections": { - "Pipedrive": { - "main": [ - [ - { - "node": "Pipedrive1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pipedrive1": { - "main": [ - [ - { - "node": "Pipedrive2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pipedrive2": { - "main": [ - [ - { - "node": "Pipedrive3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pipedrive3": { - "main": [ - [ - { - "node": "Pipedrive4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Pipedrive", - "type": "main", - "index": 0 - }, - { - "node": "Pipedrive5", - "type": "main", - "index": 0 - }, - { - "node": "Set", - "type": "main", - "index": 0 - }, - { - "node": "Pipedrive16", - "type": "main", - "index": 0 - }, - { - "node": "Pipedrive26", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pipedrive5": { - "main": [ - [ - { - "node": "Pipedrive6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pipedrive6": { - "main": [ - [ - { - "node": "Pipedrive7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pipedrive7": { - "main": [ - [ - { - "node": "Pipedrive8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pipedrive8": { - "main": [ - [ - { - "node": "Pipedrive9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pipedrive9": { - "main": [ - [ - { - "node": "Pipedrive10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pipedrive10": { - "main": [ - [ - { - "node": "Pipedrive11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set": { - "main": [ - [ - { - "node": "Move Binary Data", - "type": "main", - "index": 0 - } - ] - ] - }, - "Move Binary Data": { - "main": [ - [ - { - "node": "Pipedrive12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pipedrive12": { - "main": [ - [ - { - "node": "Pipedrive13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pipedrive13": { - "main": [ - [ - { - "node": "Pipedrive14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pipedrive14": { - "main": [ - [ - { - "node": "Pipedrive15", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pipedrive16": { - "main": [ - [ - { - "node": "Pipedrive21", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pipedrive17": { - "main": [ - [ - { - "node": "Pipedrive18", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pipedrive18": { - "main": [ - [ - { - "node": "Pipedrive19", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pipedrive19": { - "main": [ - [ - { - "node": "Pipedrive20", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pipedrive21": { - "main": [ - [ - { - "node": "Pipedrive22", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pipedrive22": { - "main": [ - [ - { - "node": "Pipedrive23", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pipedrive23": { - "main": [ - [ - { - "node": "Pipedrive24", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pipedrive24": { - "main": [ - [ - { - "node": "Pipedrive25", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pipedrive25": { - "main": [ - [ - { - "node": "Pipedrive17", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pipedrive26": { - "main": [ - [ - { - "node": "Pipedrive27", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pipedrive27": { - "main": [ - [ - { - "node": "Pipedrive28", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pipedrive28": { - "main": [ - [ - { - "node": "Pipedrive29", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pipedrive29": { - "main": [ - [ - { - "node": "Pipedrive30", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pipedrive30": { - "main": [ - [ - { - "node": "Pipedrive31", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/201.json b/test-workflows/workflows/201.json deleted file mode 100644 index 628f5511cde..00000000000 --- a/test-workflows/workflows/201.json +++ /dev/null @@ -1,296 +0,0 @@ -{ - "createdAt": "2021-05-12T07:38:44.391Z", - "updatedAt": "2021-06-04T17:24:19.887Z", - "id": "201", - "name": "Iterable:User:upsert get delete:UserList:add remove:Event:track", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "87df2205-aeb2-453f-920f-89f4d9da9608" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "userId", - "value": "=User_{{Date.now()}}" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 430, - 220 - ], - "id": "5d51609e-46fa-4c57-b1ed-447eb36ff334" - }, - { - "parameters": { - "identifier": "userId", - "value": "={{$node[\"Set\"].json[\"userId\"]}}", - "additionalFields": { - "dataFieldsUi": { - "dataFieldValues": [] - } - } - }, - "name": "Iterable", - "type": "n8n-nodes-base.iterable", - "typeVersion": 1, - "position": [ - 590, - 220 - ], - "credentials": { - "iterableApi": { - "id": "174", - "name": "Iterable API creds" - } - }, - "id": "11659a29-db59-49ad-a74c-02702ce391d1" - }, - { - "parameters": { - "operation": "get", - "by": "userId", - "userId": "={{$node[\"Set\"].json[\"userId\"]}}" - }, - "name": "Iterable1", - "type": "n8n-nodes-base.iterable", - "typeVersion": 1, - "position": [ - 900, - 220 - ], - "credentials": { - "iterableApi": { - "id": "174", - "name": "Iterable API creds" - } - }, - "notes": "IGNORED_PROPERTIES=dataFields", - "id": "d8af6ed5-9797-4904-880d-d3a68abb7457" - }, - { - "parameters": { - "resource": "userList", - "listId": 798932, - "identifier": "userId", - "value": "={{$node[\"Set\"].json[\"userId\"]}}" - }, - "name": "Iterable2", - "type": "n8n-nodes-base.iterable", - "typeVersion": 1, - "position": [ - 1050, - 320 - ], - "credentials": { - "iterableApi": { - "id": "174", - "name": "Iterable API creds" - } - }, - "id": "d5799965-0693-4d2e-bfd7-450d0022e355" - }, - { - "parameters": { - "resource": "userList", - "operation": "remove", - "listId": 798932, - "identifier": "userId", - "value": "={{$node[\"Set\"].json[\"userId\"]}}", - "additionalFields": {} - }, - "name": "Iterable3", - "type": "n8n-nodes-base.iterable", - "typeVersion": 1, - "position": [ - 1200, - 320 - ], - "credentials": { - "iterableApi": { - "id": "174", - "name": "Iterable API creds" - } - }, - "id": "d66b3b48-e631-47e0-ade1-fe4b6137623b" - }, - { - "parameters": { - "resource": "event", - "name": "TestEvent", - "additionalFields": { - "id": "={{$node[\"Set\"].json[\"userId\"]}}", - "userId": "={{$node[\"Set\"].json[\"userId\"]}}" - } - }, - "name": "Iterable4", - "type": "n8n-nodes-base.iterable", - "typeVersion": 1, - "position": [ - 1350, - 390 - ], - "credentials": { - "iterableApi": { - "id": "174", - "name": "Iterable API creds" - } - }, - "id": "73e5dc94-d847-4ade-95ef-98ea69237245" - }, - { - "parameters": { - "operation": "delete", - "email": "={{$node[\"Iterable1\"].json[\"email\"]}}" - }, - "name": "Iterable5", - "type": "n8n-nodes-base.iterable", - "typeVersion": 1, - "position": [ - 1500, - 210 - ], - "credentials": { - "iterableApi": { - "id": "174", - "name": "Iterable API creds" - } - }, - "id": "650fa586-231c-4544-bb92-772ac561f0ee" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second", - "type": "n8n-nodes-base.function", - "position": [ - 740, - 220 - ], - "typeVersion": 1, - "id": "a4cdbbb5-a101-40f3-9f52-efe768d27e62" - } - ], - "connections": { - "Set": { - "main": [ - [ - { - "node": "Iterable", - "type": "main", - "index": 0 - } - ] - ] - }, - "Iterable": { - "main": [ - [ - { - "node": "Sleep 0.5 second", - "type": "main", - "index": 0 - } - ] - ] - }, - "Iterable1": { - "main": [ - [ - { - "node": "Iterable2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Iterable2": { - "main": [ - [ - { - "node": "Iterable3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Iterable3": { - "main": [ - [ - { - "node": "Iterable4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Iterable4": { - "main": [ - [ - { - "node": "Iterable5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second": { - "main": [ - [ - { - "node": "Iterable1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": { - "timezone": "Europe/Berlin", - "saveExecutionProgress": "DEFAULT" - }, - "staticData": { - "node:Clockify Trigger": { - "userId": "60335ad2f24e660123d7fdeb", - "lastTimeChecked": "2021-05-12T10:25:03Z" - } - }, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/202.json b/test-workflows/workflows/202.json deleted file mode 100644 index 36e65f24d61..00000000000 --- a/test-workflows/workflows/202.json +++ /dev/null @@ -1,192 +0,0 @@ -{ - "createdAt": "2021-05-12T08:49:01.587Z", - "updatedAt": "2021-05-12T08:49:01.587Z", - "id": "202", - "name": "Beeminder:Datapoint:create getAll update delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "b22f554d-032b-49a3-8d93-72bdf0e14c89" - }, - { - "parameters": { - "goalName": "testing", - "additionalFields": {} - }, - "name": "Beeminder", - "type": "n8n-nodes-base.beeminder", - "typeVersion": 1, - "position": [ - 490, - 300 - ], - "credentials": { - "beeminderApi": { - "id": "175", - "name": "Beeminder API creds" - } - }, - "id": "7a4b7543-ff45-418a-921c-ceec717d1350" - }, - { - "parameters": { - "operation": "getAll", - "goalName": "testing", - "limit": 1, - "options": {} - }, - "name": "Beeminder1", - "type": "n8n-nodes-base.beeminder", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "credentials": { - "beeminderApi": { - "id": "175", - "name": "Beeminder API creds" - } - }, - "id": "625eea7d-b4cd-4f48-a939-379f20e92d88" - }, - { - "parameters": { - "operation": "update", - "goalName": "testing", - "datapointId": "={{$node[\"Beeminder\"].json[\"id\"]}}", - "updateFields": { - "value": 10 - } - }, - "name": "Beeminder2", - "type": "n8n-nodes-base.beeminder", - "typeVersion": 1, - "position": [ - 800, - 300 - ], - "credentials": { - "beeminderApi": { - "id": "175", - "name": "Beeminder API creds" - } - }, - "id": "92817af4-a51b-49ee-a4d9-8839330b5f94" - }, - { - "parameters": { - "operation": "delete", - "goalName": "testing", - "datapointId": "={{$node[\"Beeminder4\"].json[\"id\"]}}" - }, - "name": "Beeminder3", - "type": "n8n-nodes-base.beeminder", - "typeVersion": 1, - "position": [ - 1100, - 350 - ], - "credentials": { - "beeminderApi": { - "id": "175", - "name": "Beeminder API creds" - } - }, - "id": "085ad031-f3d0-48d9-b1d0-f9bc3d5b9a1b" - }, - { - "parameters": { - "goalName": "testing", - "value": 3, - "additionalFields": {} - }, - "name": "Beeminder4", - "type": "n8n-nodes-base.beeminder", - "typeVersion": 1, - "position": [ - 950, - 350 - ], - "credentials": { - "beeminderApi": { - "id": "175", - "name": "Beeminder API creds" - } - }, - "id": "fbd1b086-506b-42cd-8b1c-cad5a3401fe7" - } - ], - "connections": { - "Beeminder": { - "main": [ - [ - { - "node": "Beeminder1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Beeminder1": { - "main": [ - [ - { - "node": "Beeminder2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Beeminder2": { - "main": [ - [ - { - "node": "Beeminder4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Beeminder4": { - "main": [ - [ - { - "node": "Beeminder3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Beeminder", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/203.json b/test-workflows/workflows/203.json deleted file mode 100644 index 29f869269db..00000000000 --- a/test-workflows/workflows/203.json +++ /dev/null @@ -1,340 +0,0 @@ -{ - "createdAt": "2021-05-12T10:06:38.839Z", - "updatedAt": "2021-06-02T10:31:43.824Z", - "id": "203", - "name": "Paddle:Payment:getAll reschedule:Plan:getAll get:Product:getAll:Coupon:create update getAll:User:getAll", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "6dca848e-e78f-4e1e-b637-c5b7a9b6d4cd" - }, - { - "parameters": { - "resource": "plan", - "operation": "getAll", - "limit": 1 - }, - "name": "Paddle", - "type": "n8n-nodes-base.paddle", - "typeVersion": 1, - "position": [ - 450, - 230 - ], - "credentials": { - "paddleApi": { - "id": "173", - "name": "Paddle API sandbox creds" - } - }, - "id": "552a93b0-4047-4ba5-8542-858e843045a5" - }, - { - "parameters": { - "resource": "plan", - "planId": "={{$node[\"Paddle\"].json[\"id\"]}}" - }, - "name": "Paddle1", - "type": "n8n-nodes-base.paddle", - "typeVersion": 1, - "position": [ - 600, - 230 - ], - "credentials": { - "paddleApi": { - "id": "173", - "name": "Paddle API sandbox creds" - } - }, - "id": "330027d9-fb24-4cd1-98bd-07b388ed3d0c" - }, - { - "parameters": { - "resource": "product", - "limit": 1 - }, - "name": "Paddle2", - "type": "n8n-nodes-base.paddle", - "typeVersion": 1, - "position": [ - 450, - 380 - ], - "credentials": { - "paddleApi": { - "id": "173", - "name": "Paddle API sandbox creds" - } - }, - "id": "a88765a6-f48f-428e-a13d-94e3c711e1eb" - }, - { - "parameters": { - "resource": "user", - "limit": 1, - "additionalFields": {} - }, - "name": "Paddle3", - "type": "n8n-nodes-base.paddle", - "typeVersion": 1, - "position": [ - 450, - 530 - ], - "credentials": { - "paddleApi": { - "id": "173", - "name": "Paddle API sandbox creds" - } - }, - "id": "a6911282-01de-4125-9479-b7ec3111edee" - }, - { - "parameters": { - "resource": "payment", - "limit": 1, - "additionalFields": {} - }, - "name": "Paddle4", - "type": "n8n-nodes-base.paddle", - "typeVersion": 1, - "position": [ - 450, - 80 - ], - "credentials": { - "paddleApi": { - "id": "173", - "name": "Paddle API sandbox creds" - } - }, - "id": "53405b18-8d3a-42b3-9c28-fa0416a1c240" - }, - { - "parameters": { - "couponType": "product", - "productIds": "={{$node[\"Paddle2\"].json[\"id\"]}}", - "discountAmount": 50, - "currency": "USD", - "additionalFields": {} - }, - "name": "Paddle5", - "type": "n8n-nodes-base.paddle", - "typeVersion": 1, - "position": [ - 600, - 430 - ], - "credentials": { - "paddleApi": { - "id": "173", - "name": "Paddle API sandbox creds" - } - }, - "id": "b2d6f9c0-6134-4723-b9b1-67b68e0cfb6f" - }, - { - "parameters": { - "operation": "update", - "couponCode": "={{$node[\"Paddle5\"].json[\"coupon\"]}}", - "additionalFields": { - "discount": { - "discountProperties": { - "currency": "USD", - "discountAmount": 5 - } - } - } - }, - "name": "Paddle6", - "type": "n8n-nodes-base.paddle", - "typeVersion": 1, - "position": [ - 750, - 430 - ], - "credentials": { - "paddleApi": { - "id": "173", - "name": "Paddle API sandbox creds" - } - }, - "id": "9f0c228c-f1c8-47ca-9702-2e373cc0b632" - }, - { - "parameters": { - "operation": "getAll", - "productId": "={{$node[\"Paddle2\"].json[\"id\"]}}", - "returnAll": true - }, - "name": "Paddle7", - "type": "n8n-nodes-base.paddle", - "typeVersion": 1, - "position": [ - 900, - 430 - ], - "credentials": { - "paddleApi": { - "id": "173", - "name": "Paddle API sandbox creds" - } - }, - "notes": "CAP_RESULTS_LENGTH=1", - "id": "86d2cc5d-93f5-4aa5-803e-c5995c89be66" - }, - { - "parameters": { - "resource": "payment", - "operation": "reschedule", - "paymentId": "={{$node[\"Paddle4\"].json[\"id\"]}}", - "date": "={{$node[\"Date & Time\"].json[\"data\"]}}" - }, - "name": "Paddle8", - "type": "n8n-nodes-base.paddle", - "typeVersion": 1, - "position": [ - 760, - 80 - ], - "credentials": { - "paddleApi": { - "id": "173", - "name": "Paddle API sandbox creds" - } - }, - "id": "2b7076a8-2563-4808-970a-934e1389b517" - }, - { - "parameters": { - "action": "calculate", - "value": "={{Date.now()}}", - "duration": 5, - "options": {} - }, - "name": "Date & Time", - "type": "n8n-nodes-base.dateTime", - "typeVersion": 1, - "position": [ - 600, - 80 - ], - "id": "8282ff84-da5e-4da6-97d7-84c4d08e9947" - } - ], - "connections": { - "Paddle": { - "main": [ - [ - { - "node": "Paddle1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Paddle2": { - "main": [ - [ - { - "node": "Paddle5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Paddle4": { - "main": [ - [ - { - "node": "Date & Time", - "type": "main", - "index": 0 - } - ] - ] - }, - "Paddle5": { - "main": [ - [ - { - "node": "Paddle6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Paddle6": { - "main": [ - [ - { - "node": "Paddle7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Paddle", - "type": "main", - "index": 0 - }, - { - "node": "Paddle2", - "type": "main", - "index": 0 - }, - { - "node": "Paddle3", - "type": "main", - "index": 0 - }, - { - "node": "Paddle4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Date & Time": { - "main": [ - [ - { - "node": "Paddle8", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": { - "node:Clockify Trigger": { - "userId": "60335ad2f24e660123d7fdeb", - "lastTimeChecked": "2021-05-12T08:09:47Z" - } - }, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/204.json b/test-workflows/workflows/204.json deleted file mode 100644 index 5295f97f5d7..00000000000 --- a/test-workflows/workflows/204.json +++ /dev/null @@ -1,459 +0,0 @@ -{ - "createdAt": "2021-05-14T09:31:14.466Z", - "updatedAt": "2021-06-08T08:48:10.045Z", - "id": "204", - "name": "HelpScout:Mailbox:getAll get:Customer:create get update getAll properties:Conversation:create get getAll delete:Thread:create getAll", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "134a1cd7-83e3-4237-b289-20302a26d111" - }, - { - "parameters": { - "resource": "customer", - "additionalFields": { - "firstName": "=Fname_{{(new Date).toISOString()}}" - } - }, - "name": "HelpScout", - "type": "n8n-nodes-base.helpScout", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "helpScoutOAuth2Api": { - "id": "163", - "name": "HelpScout OAuth2 API creds" - } - }, - "id": "d338cf1d-360e-499d-8c97-f3256b62cde4" - }, - { - "parameters": { - "resource": "customer", - "operation": "get", - "customerId": "={{$node[\"HelpScout\"].json[\"id\"]}}" - }, - "name": "HelpScout1", - "type": "n8n-nodes-base.helpScout", - "typeVersion": 1, - "position": [ - 600, - 300 - ], - "credentials": { - "helpScoutOAuth2Api": { - "id": "163", - "name": "HelpScout OAuth2 API creds" - } - }, - "id": "aec33ae5-41da-476a-80b6-052bb06e6d13" - }, - { - "parameters": { - "resource": "customer", - "operation": "update", - "customerId": "={{$node[\"HelpScout\"].json[\"id\"]}}", - "updateFields": { - "jobTitle": "=UpdatedJobTitle" - } - }, - "name": "HelpScout2", - "type": "n8n-nodes-base.helpScout", - "typeVersion": 1, - "position": [ - 750, - 300 - ], - "credentials": { - "helpScoutOAuth2Api": { - "id": "163", - "name": "HelpScout OAuth2 API creds" - } - }, - "id": "895e41cb-bd06-454f-8c1f-68f632829c18" - }, - { - "parameters": { - "resource": "customer", - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "HelpScout3", - "type": "n8n-nodes-base.helpScout", - "typeVersion": 1, - "position": [ - 900, - 300 - ], - "credentials": { - "helpScoutOAuth2Api": { - "id": "163", - "name": "HelpScout OAuth2 API creds" - } - }, - "id": "5b52d840-a8bd-4cb7-b1f8-f451a5be3d76" - }, - { - "parameters": { - "resource": "customer", - "operation": "properties" - }, - "name": "HelpScout4", - "type": "n8n-nodes-base.helpScout", - "typeVersion": 1, - "position": [ - 1050, - 300 - ], - "credentials": { - "helpScoutOAuth2Api": { - "id": "163", - "name": "HelpScout OAuth2 API creds" - } - }, - "id": "31ebb207-80e5-417d-89ca-a1aeef540218" - }, - { - "parameters": { - "mailboxId": 224189, - "status": "active", - "subject": "=Subject_{{(new Date).toISOString()}}", - "type": "chat", - "additionalFields": { - "customerId": "={{$node[\"HelpScout\"].json[\"id\"]}}" - }, - "threadsUi": { - "threadsValues": [ - { - "type": "chat", - "text": "Initial Thread" - } - ] - } - }, - "name": "HelpScout5", - "type": "n8n-nodes-base.helpScout", - "typeVersion": 1, - "position": [ - 600, - 450 - ], - "credentials": { - "helpScoutOAuth2Api": { - "id": "163", - "name": "HelpScout OAuth2 API creds" - } - }, - "notes": "IGNORED_PROPERTIES=preview", - "id": "dac34f58-aadc-4c27-bb53-797160518e38" - }, - { - "parameters": { - "operation": "get", - "conversationId": "={{$node[\"HelpScout5\"].json[\"id\"]}}" - }, - "name": "HelpScout6", - "type": "n8n-nodes-base.helpScout", - "typeVersion": 1, - "position": [ - 750, - 450 - ], - "credentials": { - "helpScoutOAuth2Api": { - "id": "163", - "name": "HelpScout OAuth2 API creds" - } - }, - "notes": "IGNORED_PROPERTIES=preview", - "id": "54b304e7-e089-4b9e-ab0b-b8d768b2bb57" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "HelpScout7", - "type": "n8n-nodes-base.helpScout", - "typeVersion": 1, - "position": [ - 900, - 450 - ], - "credentials": { - "helpScoutOAuth2Api": { - "id": "163", - "name": "HelpScout OAuth2 API creds" - } - }, - "id": "fef75568-538b-4ce2-83c5-07d779e6393e" - }, - { - "parameters": { - "operation": "delete", - "conversationId": "={{$node[\"HelpScout5\"].json[\"id\"]}}" - }, - "name": "HelpScout8", - "type": "n8n-nodes-base.helpScout", - "typeVersion": 1, - "position": [ - 1050, - 450 - ], - "credentials": { - "helpScoutOAuth2Api": { - "id": "163", - "name": "HelpScout OAuth2 API creds" - } - }, - "id": "b082f9a9-352c-4624-a287-c167aa820875" - }, - { - "parameters": { - "resource": "mailbox", - "operation": "getAll", - "limit": 1 - }, - "name": "HelpScout9", - "type": "n8n-nodes-base.helpScout", - "typeVersion": 1, - "position": [ - 450, - 150 - ], - "credentials": { - "helpScoutOAuth2Api": { - "id": "163", - "name": "HelpScout OAuth2 API creds" - } - }, - "id": "4c07019c-6818-484d-8865-ef7bcef8ff39" - }, - { - "parameters": { - "resource": "mailbox", - "mailboxId": "={{$node[\"HelpScout9\"].json[\"id\"]}}" - }, - "name": "HelpScout10", - "type": "n8n-nodes-base.helpScout", - "typeVersion": 1, - "position": [ - 600, - 150 - ], - "credentials": { - "helpScoutOAuth2Api": { - "id": "163", - "name": "HelpScout OAuth2 API creds" - } - }, - "id": "89e6ba09-db18-444c-99da-91bf95d2353b" - }, - { - "parameters": { - "resource": "thread", - "conversationId": "={{$node[\"HelpScout5\"].json[\"id\"]}}", - "type": "chat", - "text": "=Thread_{{(new Date).toISOString()}}", - "additionalFields": { - "customerId": "={{$node[\"HelpScout\"].json[\"id\"]}}" - } - }, - "name": "HelpScout11", - "type": "n8n-nodes-base.helpScout", - "typeVersion": 1, - "position": [ - 750, - 600 - ], - "credentials": { - "helpScoutOAuth2Api": { - "id": "163", - "name": "HelpScout OAuth2 API creds" - } - }, - "id": "6bc6666d-dda1-485b-97de-a4b08407f22f" - }, - { - "parameters": { - "resource": "thread", - "operation": "getAll", - "conversationId": "={{$node[\"HelpScout5\"].json[\"id\"]}}", - "limit": 1 - }, - "name": "HelpScout12", - "type": "n8n-nodes-base.helpScout", - "typeVersion": 1, - "position": [ - 900, - 600 - ], - "credentials": { - "helpScoutOAuth2Api": { - "id": "163", - "name": "HelpScout OAuth2 API creds" - } - }, - "id": "740d4be3-b1b7-4383-a2ce-716270774df7" - } - ], - "connections": { - "HelpScout": { - "main": [ - [ - { - "node": "HelpScout5", - "type": "main", - "index": 0 - } - ] - ] - }, - "HelpScout1": { - "main": [ - [ - { - "node": "HelpScout2", - "type": "main", - "index": 0 - } - ] - ] - }, - "HelpScout2": { - "main": [ - [ - { - "node": "HelpScout3", - "type": "main", - "index": 0 - } - ] - ] - }, - "HelpScout3": { - "main": [ - [ - { - "node": "HelpScout4", - "type": "main", - "index": 0 - } - ] - ] - }, - "HelpScout5": { - "main": [ - [ - { - "node": "HelpScout11", - "type": "main", - "index": 0 - } - ] - ] - }, - "HelpScout6": { - "main": [ - [ - { - "node": "HelpScout7", - "type": "main", - "index": 0 - } - ] - ] - }, - "HelpScout7": { - "main": [ - [ - { - "node": "HelpScout8", - "type": "main", - "index": 0 - } - ] - ] - }, - "HelpScout8": { - "main": [ - [ - { - "node": "HelpScout1", - "type": "main", - "index": 0 - } - ] - ] - }, - "HelpScout9": { - "main": [ - [ - { - "node": "HelpScout10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "HelpScout", - "type": "main", - "index": 0 - }, - { - "node": "HelpScout9", - "type": "main", - "index": 0 - } - ] - ] - }, - "HelpScout11": { - "main": [ - [ - { - "node": "HelpScout12", - "type": "main", - "index": 0 - } - ] - ] - }, - "HelpScout12": { - "main": [ - [ - { - "node": "HelpScout6", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/205.json b/test-workflows/workflows/205.json deleted file mode 100644 index c041af3bd2b..00000000000 --- a/test-workflows/workflows/205.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "createdAt": "2021-05-14T09:46:06.853Z", - "updatedAt": "2021-05-14T09:46:06.853Z", - "id": "205", - "name": "Pushover:Message:push", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "b67fccde-5dac-406f-98f4-d5c58ac8aa37" - }, - { - "parameters": { - "userKey": "uwwjqj8g3kbj4mbsmcwi8ov7ocofrx", - "message": "=Message_{{(new Date).toISOString()}}", - "additionalFields": { - "title": "=NodeQa Test_{{(new Date).toISOString()}}" - } - }, - "name": "Pushover", - "type": "n8n-nodes-base.pushover", - "typeVersion": 1, - "position": [ - 510, - 300 - ], - "credentials": { - "pushoverApi": { - "id": "177", - "name": "Pushover API creds" - } - }, - "id": "1036f288-8058-48b9-9d2e-3a915bfadb12" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Pushover", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/206.json b/test-workflows/workflows/206.json deleted file mode 100644 index a75bd3080a0..00000000000 --- a/test-workflows/workflows/206.json +++ /dev/null @@ -1,490 +0,0 @@ -{ - "createdAt": "2021-05-17T15:09:40.220Z", - "updatedAt": "2021-05-18T07:57:05.962Z", - "id": "206", - "name": "Keap:Company:create getAll:Contact:upsert get getAll delete:ContactNote:create get update getAll delete:ContactTag:create getAll delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "9489a524-46de-44e4-b4f9-e5ff8202cc3e" - }, - { - "parameters": { - "companyName": "=Company_{{(new Date).toISOString()}}", - "additionalFields": {} - }, - "name": "Keap", - "type": "n8n-nodes-base.keap", - "typeVersion": 1, - "position": [ - 600, - 200 - ], - "credentials": { - "keapOAuth2Api": { - "id": "178", - "name": "Keap OAuth2 API creds" - } - }, - "id": "690b0194-0a2a-41a3-a6bd-b67ce0345f42" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "Keap1", - "type": "n8n-nodes-base.keap", - "typeVersion": 1, - "position": [ - 750, - 200 - ], - "credentials": { - "keapOAuth2Api": { - "id": "178", - "name": "Keap OAuth2 API creds" - } - }, - "id": "07a5aca1-73a9-4812-9a35-0e62d814c540" - }, - { - "parameters": { - "resource": "contact", - "additionalFields": { - "companyId": "={{$node[\"Keap\"].json[\"id\"]}}" - }, - "addressesUi": { - "addressesValues": [] - }, - "emailsUi": { - "emailsValues": [ - { - "field": "EMAIL1", - "email": "=fakeemail{{Date.now()}}@test.com" - } - ] - } - }, - "name": "Keap2", - "type": "n8n-nodes-base.keap", - "typeVersion": 1, - "position": [ - 750, - 350 - ], - "credentials": { - "keapOAuth2Api": { - "id": "178", - "name": "Keap OAuth2 API creds" - } - }, - "id": "44871399-7e52-4d49-9090-32a07fc55440" - }, - { - "parameters": { - "resource": "contact", - "operation": "get", - "contactId": "={{$node[\"Keap2\"].json[\"id\"]}}", - "options": {} - }, - "name": "Keap3", - "type": "n8n-nodes-base.keap", - "typeVersion": 1, - "position": [ - 900, - 350 - ], - "credentials": { - "keapOAuth2Api": { - "id": "178", - "name": "Keap OAuth2 API creds" - } - }, - "id": "17a7232c-8cc9-448c-a2c0-bd1084fdd771" - }, - { - "parameters": { - "resource": "contact", - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "Keap4", - "type": "n8n-nodes-base.keap", - "typeVersion": 1, - "position": [ - 1040, - 350 - ], - "credentials": { - "keapOAuth2Api": { - "id": "178", - "name": "Keap OAuth2 API creds" - } - }, - "id": "7007df2b-c66a-4a7b-b690-9d0124e73357" - }, - { - "parameters": { - "resource": "contact", - "operation": "delete", - "contactId": "={{$node[\"Keap2\"].json[\"id\"]}}" - }, - "name": "Keap5", - "type": "n8n-nodes-base.keap", - "typeVersion": 1, - "position": [ - 1200, - 350 - ], - "credentials": { - "keapOAuth2Api": { - "id": "178", - "name": "Keap OAuth2 API creds" - } - }, - "id": "f61df6f5-ab1c-4344-8ab5-8f09ceddbe8b" - }, - { - "parameters": { - "resource": "contactNote", - "userId": 1, - "contactId": "={{$node[\"Keap2\"].json[\"id\"]}}", - "additionalFields": { - "body": "", - "title": "=Note{Date.now()}}" - } - }, - "name": "Keap6", - "type": "n8n-nodes-base.keap", - "typeVersion": 1, - "position": [ - 900, - 510 - ], - "credentials": { - "keapOAuth2Api": { - "id": "178", - "name": "Keap OAuth2 API creds" - } - }, - "id": "1af7e3bf-9135-4ffe-a875-b6ae453a44b1" - }, - { - "parameters": { - "resource": "contactNote", - "operation": "get", - "noteId": "={{$node[\"Keap6\"].json[\"id\"]}}" - }, - "name": "Keap7", - "type": "n8n-nodes-base.keap", - "typeVersion": 1, - "position": [ - 1050, - 510 - ], - "credentials": { - "keapOAuth2Api": { - "id": "178", - "name": "Keap OAuth2 API creds" - } - }, - "id": "d8252291-bbf9-4ee1-a9d4-093ae967ef12" - }, - { - "parameters": { - "resource": "contactNote", - "operation": "update", - "noteId": "={{$node[\"Keap6\"].json[\"id\"]}}", - "additionalFields": { - "title": "Updated Title" - } - }, - "name": "Keap8", - "type": "n8n-nodes-base.keap", - "typeVersion": 1, - "position": [ - 1200, - 510 - ], - "credentials": { - "keapOAuth2Api": { - "id": "178", - "name": "Keap OAuth2 API creds" - } - }, - "id": "54756d28-a79f-4427-8d5d-5c2d80ac5b17" - }, - { - "parameters": { - "resource": "contactNote", - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "Keap9", - "type": "n8n-nodes-base.keap", - "typeVersion": 1, - "position": [ - 1360, - 510 - ], - "credentials": { - "keapOAuth2Api": { - "id": "178", - "name": "Keap OAuth2 API creds" - } - }, - "id": "81bdce10-1de6-4d11-8624-1a0516931e49" - }, - { - "parameters": { - "resource": "contactNote", - "operation": "delete", - "noteId": "={{$node[\"Keap6\"].json[\"id\"]}}" - }, - "name": "Keap10", - "type": "n8n-nodes-base.keap", - "typeVersion": 1, - "position": [ - 1500, - 510 - ], - "credentials": { - "keapOAuth2Api": { - "id": "178", - "name": "Keap OAuth2 API creds" - } - }, - "id": "a8cb848a-36d8-4fb6-b845-37674c6c7733" - }, - { - "parameters": { - "resource": "contactTag", - "contactId": "={{$node[\"Keap2\"].json[\"id\"]}}", - "tagIds": [ - 93 - ] - }, - "name": "Keap11", - "type": "n8n-nodes-base.keap", - "typeVersion": 1, - "position": [ - 900, - 660 - ], - "credentials": { - "keapOAuth2Api": { - "id": "178", - "name": "Keap OAuth2 API creds" - } - }, - "id": "c81d1109-4fbb-4dde-afe4-386710f9f624" - }, - { - "parameters": { - "resource": "contactTag", - "operation": "getAll", - "contactId": "={{$node[\"Keap2\"].json[\"id\"]}}", - "limit": 1 - }, - "name": "Keap12", - "type": "n8n-nodes-base.keap", - "typeVersion": 1, - "position": [ - 1050, - 660 - ], - "credentials": { - "keapOAuth2Api": { - "id": "178", - "name": "Keap OAuth2 API creds" - } - }, - "id": "b0c03850-0004-4680-9da0-9ea9ded1a525" - }, - { - "parameters": { - "resource": "contactTag", - "operation": "delete", - "contactId": "={{$node[\"Keap2\"].json[\"id\"]}}", - "tagIds": "93," - }, - "name": "Keap13", - "type": "n8n-nodes-base.keap", - "typeVersion": 1, - "position": [ - 1190, - 660 - ], - "credentials": { - "keapOAuth2Api": { - "id": "178", - "name": "Keap OAuth2 API creds" - } - }, - "id": "311e758c-48f7-4738-862d-b34299ac6d08" - } - ], - "connections": { - "Keap": { - "main": [ - [ - { - "node": "Keap1", - "type": "main", - "index": 0 - }, - { - "node": "Keap2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Keap2": { - "main": [ - [ - { - "node": "Keap6", - "type": "main", - "index": 0 - }, - { - "node": "Keap11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Keap3": { - "main": [ - [ - { - "node": "Keap4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Keap4": { - "main": [ - [ - { - "node": "Keap5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Keap6": { - "main": [ - [ - { - "node": "Keap7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Keap7": { - "main": [ - [ - { - "node": "Keap8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Keap8": { - "main": [ - [ - { - "node": "Keap9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Keap9": { - "main": [ - [ - { - "node": "Keap10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Keap10": { - "main": [ - [ - { - "node": "Keap3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Keap11": { - "main": [ - [ - { - "node": "Keap12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Keap12": { - "main": [ - [ - { - "node": "Keap13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Keap", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/207.json b/test-workflows/workflows/207.json deleted file mode 100644 index 4182a0297b0..00000000000 --- a/test-workflows/workflows/207.json +++ /dev/null @@ -1,531 +0,0 @@ -{ - "createdAt": "2021-05-17T22:14:56.419Z", - "updatedAt": "2021-05-18T07:56:45.273Z", - "id": "207", - "name": "Keap:EcommerceOrder:create get getAll delete:EcommerceProduct:create get getAll delete:Email:createRecord getAll:File:upload getAll delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "71dbf38c-e75d-48af-b045-fa5e0e30d2a5" - }, - { - "parameters": { - "resource": "ecommerceProduct", - "productName": "=Producct_{{(new Date).toISOString()}}", - "additionalFields": {} - }, - "name": "Keap", - "type": "n8n-nodes-base.keap", - "typeVersion": 1, - "position": [ - 650, - 180 - ], - "credentials": { - "keapOAuth2Api": { - "id": "178", - "name": "Keap OAuth2 API creds" - } - }, - "id": "e5a3ddc7-1681-4d8e-b841-9a4d052519e3" - }, - { - "parameters": { - "resource": "ecommerceProduct", - "operation": "get", - "productId": "={{$node[\"Keap\"].json[\"id\"]}}" - }, - "name": "Keap1", - "type": "n8n-nodes-base.keap", - "typeVersion": 1, - "position": [ - 810, - 180 - ], - "credentials": { - "keapOAuth2Api": { - "id": "178", - "name": "Keap OAuth2 API creds" - } - }, - "id": "ac092a34-c9c2-49fe-af12-9ba28a1274f2" - }, - { - "parameters": { - "resource": "ecommerceProduct", - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "Keap2", - "type": "n8n-nodes-base.keap", - "typeVersion": 1, - "position": [ - 970, - 180 - ], - "credentials": { - "keapOAuth2Api": { - "id": "178", - "name": "Keap OAuth2 API creds" - } - }, - "id": "a54a5785-8586-4df5-91e6-24877ea0f1c5" - }, - { - "parameters": { - "resource": "ecommerceProduct", - "operation": "delete", - "productId": "={{$node[\"Keap\"].json[\"id\"]}}" - }, - "name": "Keap3", - "type": "n8n-nodes-base.keap", - "typeVersion": 1, - "position": [ - 1120, - 180 - ], - "credentials": { - "keapOAuth2Api": { - "id": "178", - "name": "Keap OAuth2 API creds" - } - }, - "id": "1afec710-031b-4a72-9164-4bb166d06000" - }, - { - "parameters": { - "resource": "email", - "sentToAddress": "test@gmail.com", - "sentFromAddress": "fromtest@gmail.com", - "additionalFields": {} - }, - "name": "Keap4", - "type": "n8n-nodes-base.keap", - "typeVersion": 1, - "position": [ - 650, - 350 - ], - "credentials": { - "keapOAuth2Api": { - "id": "178", - "name": "Keap OAuth2 API creds" - } - }, - "id": "d2463a1b-c677-4d81-a69f-f6db3a72a1dc" - }, - { - "parameters": { - "resource": "email", - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "Keap5", - "type": "n8n-nodes-base.keap", - "typeVersion": 1, - "position": [ - 800, - 350 - ], - "credentials": { - "keapOAuth2Api": { - "id": "178", - "name": "Keap OAuth2 API creds" - } - }, - "id": "b1f2a62a-5479-4f5c-a569-1d6140dad42c" - }, - { - "parameters": { - "resource": "email", - "operation": "send", - "userId": 1, - "contactIds": "={{$node[\"Keap7\"].json[\"id\"]}},", - "subject": "Test", - "additionalFields": { - "addressField": "node8qa@gmail.com,", - "plainContent": "Text content" - } - }, - "name": "Keap6", - "type": "n8n-nodes-base.keap", - "typeVersion": 1, - "position": [ - 950, - 350 - ], - "credentials": { - "keapOAuth2Api": { - "id": "178", - "name": "Keap OAuth2 API creds" - } - }, - "disabled": true, - "id": "90739296-0d0d-44db-8a7e-904d0d39018d" - }, - { - "parameters": { - "resource": "contact", - "additionalFields": {}, - "emailsUi": { - "emailsValues": [ - { - "field": "EMAIL1", - "email": "node8qa@gmail.com" - } - ] - } - }, - "name": "Keap7", - "type": "n8n-nodes-base.keap", - "typeVersion": 1, - "position": [ - 490, - 280 - ], - "credentials": { - "keapOAuth2Api": { - "id": "178", - "name": "Keap OAuth2 API creds" - } - }, - "id": "9fc45e7d-9070-4517-99a2-c22d9ce3e5dd" - }, - { - "parameters": { - "resource": "ecommerceOrder", - "contactId": "={{$node[\"Keap7\"].json[\"id\"]}}", - "orderDate": "2021-05-18T07:35:03.000Z", - "orderTitle": "=Title{{Date.now()}}", - "orderType": "offline", - "additionalFields": {}, - "orderItemsUi": { - "orderItemsValues": [ - { - "description": "testing", - "price": 6, - "product ID": "={{$node[\"Keap\"].json[\"id\"]}}", - "quantity": 3 - } - ] - } - }, - "name": "Keap8", - "type": "n8n-nodes-base.keap", - "typeVersion": 1, - "position": [ - 810, - 30 - ], - "credentials": { - "keapOAuth2Api": { - "id": "178", - "name": "Keap OAuth2 API creds" - } - }, - "id": "17058118-db69-4fab-baa7-19aa39562b94" - }, - { - "parameters": { - "resource": "ecommerceOrder", - "operation": "get", - "orderId": "={{$node[\"Keap8\"].json[\"id\"]}}" - }, - "name": "Keap9", - "type": "n8n-nodes-base.keap", - "typeVersion": 1, - "position": [ - 970, - 30 - ], - "credentials": { - "keapOAuth2Api": { - "id": "178", - "name": "Keap OAuth2 API creds" - } - }, - "id": "6d4cf1c3-e89c-4fb9-8868-718c23734cd9" - }, - { - "parameters": { - "resource": "ecommerceOrder", - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "Keap10", - "type": "n8n-nodes-base.keap", - "typeVersion": 1, - "position": [ - 1130, - 30 - ], - "credentials": { - "keapOAuth2Api": { - "id": "178", - "name": "Keap OAuth2 API creds" - } - }, - "id": "fc63b45d-7b7c-4ac1-bddc-7061065d607e" - }, - { - "parameters": { - "resource": "ecommerceOrder", - "operation": "delete", - "orderId": "={{$node[\"Keap8\"].json[\"id\"]}}" - }, - "name": "Keap11", - "type": "n8n-nodes-base.keap", - "typeVersion": 1, - "position": [ - 1290, - 30 - ], - "credentials": { - "keapOAuth2Api": { - "id": "178", - "name": "Keap OAuth2 API creds" - } - }, - "id": "4b41db09-652f-4f92-8dba-72c48d9f5403" - }, - { - "parameters": { - "resource": "file", - "operation": "upload", - "fileAssociation": "contact", - "contactId": "={{$node[\"Keap7\"].json[\"id\"]}}", - "fileName": "test.csv", - "fileData": "IyB0aGlzIGlzIGEgdGVzdCBmaWxl" - }, - "name": "Keap12", - "type": "n8n-nodes-base.keap", - "typeVersion": 1, - "position": [ - 650, - 520 - ], - "credentials": { - "keapOAuth2Api": { - "id": "178", - "name": "Keap OAuth2 API creds" - } - }, - "id": "267fe3f8-4cee-46f5-b430-e925e491a838" - }, - { - "parameters": { - "resource": "file", - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "Keap13", - "type": "n8n-nodes-base.keap", - "typeVersion": 1, - "position": [ - 810, - 520 - ], - "credentials": { - "keapOAuth2Api": { - "id": "178", - "name": "Keap OAuth2 API creds" - } - }, - "id": "810f3780-5787-4642-ab29-ede18374d118" - }, - { - "parameters": { - "resource": "file", - "fileId": "={{$node[\"Keap12\"].json[\"file_descriptor\"][\"id\"]}}" - }, - "name": "Keap14", - "type": "n8n-nodes-base.keap", - "typeVersion": 1, - "position": [ - 970, - 520 - ], - "credentials": { - "keapOAuth2Api": { - "id": "178", - "name": "Keap OAuth2 API creds" - } - }, - "id": "35001fb2-12f4-4fcb-91a3-87057ba15d4c" - } - ], - "connections": { - "Keap": { - "main": [ - [ - { - "node": "Keap8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Keap1": { - "main": [ - [ - { - "node": "Keap2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Keap2": { - "main": [ - [ - { - "node": "Keap3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Keap4": { - "main": [ - [ - { - "node": "Keap5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Keap5": { - "main": [ - [ - { - "node": "Keap6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Keap7": { - "main": [ - [ - { - "node": "Keap", - "type": "main", - "index": 0 - }, - { - "node": "Keap4", - "type": "main", - "index": 0 - }, - { - "node": "Keap12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Keap8": { - "main": [ - [ - { - "node": "Keap9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Keap9": { - "main": [ - [ - { - "node": "Keap10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Keap10": { - "main": [ - [ - { - "node": "Keap11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Keap11": { - "main": [ - [ - { - "node": "Keap1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Keap7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Keap12": { - "main": [ - [ - { - "node": "Keap13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Keap13": { - "main": [ - [ - { - "node": "Keap14", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/208.json b/test-workflows/workflows/208.json deleted file mode 100644 index 34f42a9631b..00000000000 --- a/test-workflows/workflows/208.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "createdAt": "2021-05-25T13:01:33.223Z", - "updatedAt": "2021-05-26T13:12:05.308Z", - "id": "208", - "name": "RocketChat:Chat:postMessage", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "57c39841-256a-4e6a-b301-af2c97c0a0a8" - }, - { - "parameters": { - "channel": "general", - "text": "=Message {{(new Date).toISOString()}}", - "options": { - "emoji": ":smile:" - }, - "attachments": [ - { - "color": "#ff6d5a", - "title": "Attachment title" - } - ] - }, - "name": "RocketChat", - "type": "n8n-nodes-base.rocketchat", - "typeVersion": 1, - "position": [ - 500, - 300 - ], - "credentials": { - "rocketchatApi": { - "id": "184", - "name": "Rocket API creds" - } - }, - "id": "c6b5e0b7-4ead-44e3-8ae4-42de8159dd99" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "RocketChat", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/209.json b/test-workflows/workflows/209.json deleted file mode 100644 index 97f93349f77..00000000000 --- a/test-workflows/workflows/209.json +++ /dev/null @@ -1,212 +0,0 @@ -{ - "createdAt": "2021-05-31T08:24:33.353Z", - "updatedAt": "2021-05-31T08:38:47.411Z", - "id": "209", - "name": "AWS Transcribe:TranscriptionJob:create get getAll delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "cb687f80-1046-40f3-bddb-78a67623b70e" - }, - { - "parameters": { - "transcriptionJobName": "={{$node[\"Set job name\"].json[\"job_name\"]}}", - "mediaFileUri": "s3://fixedtestbucket/nodemation.wav", - "options": {} - }, - "name": "AWS Transcribe", - "type": "n8n-nodes-base.awsTranscribe", - "typeVersion": 1, - "position": [ - 550, - 300 - ], - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - }, - "id": "ccdefb6d-7aac-4360-9285-135ddf34449b" - }, - { - "parameters": { - "operation": "get", - "transcriptionJobName": "={{$node[\"Set job name\"].json[\"job_name\"]}}", - "simple": false - }, - "name": "AWS Transcribe1", - "type": "n8n-nodes-base.awsTranscribe", - "typeVersion": 1, - "position": [ - 700, - 300 - ], - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - }, - "id": "3840763a-16d3-4073-a008-9b5dae451d48" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "AWS Transcribe2", - "type": "n8n-nodes-base.awsTranscribe", - "typeVersion": 1, - "position": [ - 850, - 300 - ], - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - }, - "id": "b477493b-0688-47f4-ad5c-4a1f509e672e" - }, - { - "parameters": { - "operation": "delete", - "transcriptionJobName": "={{$node[\"Set job name\"].json[\"job_name\"]}}" - }, - "name": "AWS Transcribe3", - "type": "n8n-nodes-base.awsTranscribe", - "typeVersion": 1, - "position": [ - 1150, - 300 - ], - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - }, - "id": "f7c49172-c16a-4881-951b-c35927fe9ea4" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "job_name", - "value": "=nodemation_job_{{Date.now()}}" - } - ] - }, - "options": {} - }, - "name": "Set job name", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 400, - 300 - ], - "id": "e96a125a-10fb-4d1a-869e-3e31467b1bb6" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(30000);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 30 seconds", - "type": "n8n-nodes-base.function", - "position": [ - 1000, - 300 - ], - "typeVersion": 1, - "id": "93a0b1db-6bda-4e6d-9797-6a3957cf05d0" - } - ], - "connections": { - "AWS Transcribe": { - "main": [ - [ - { - "node": "AWS Transcribe1", - "type": "main", - "index": 0 - } - ] - ] - }, - "AWS Transcribe1": { - "main": [ - [ - { - "node": "AWS Transcribe2", - "type": "main", - "index": 0 - } - ] - ] - }, - "AWS Transcribe2": { - "main": [ - [ - { - "node": "Sleep 30 seconds", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Set job name", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set job name": { - "main": [ - [ - { - "node": "AWS Transcribe", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 30 seconds": { - "main": [ - [ - { - "node": "AWS Transcribe3", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/21.json b/test-workflows/workflows/21.json deleted file mode 100644 index 19e2290e860..00000000000 --- a/test-workflows/workflows/21.json +++ /dev/null @@ -1,469 +0,0 @@ -{ - "createdAt": "2021-02-16T16:12:15.992Z", - "updatedAt": "2021-11-12T12:09:08.000Z", - "id": "21", - "name": "Hubspot:Deal: create update getall search getRecentlyModified getRecentlyCreated get delete:Ticket: create update get All get delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 180, - 300 - ], - "id": "50ba36ae-2d60-4030-8b52-19900aa73d75" - }, - { - "parameters": { - "stage": "appointmentscheduled", - "additionalFields": { - "dealName": "testDeal" - } - }, - "name": "Hubspot", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 370, - 230 - ], - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "id": "45e9896b-745e-45ea-b1e9-56a18bb97280" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "Hubspot1", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 650, - 230 - ], - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "id": "635d61b8-0527-4800-baa6-1b17664fc2d4" - }, - { - "parameters": { - "operation": "get", - "dealId": "={{$json[\"dealId\"]}}", - "additionalFields": {} - }, - "name": "Hubspot2", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 1250, - 230 - ], - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "id": "d935d2bd-67be-4d9a-8acb-627cd9ef3523" - }, - { - "parameters": { - "operation": "search", - "limit": 1, - "filterGroupsUi": { - "filterGroupsValues": [] - }, - "additionalFields": {} - }, - "name": "Hubspot3", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 780, - 230 - ], - "notesInFlow": false, - "alwaysOutputData": true, - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "id": "5d8cead1-67b6-45ad-96c1-99e8120b1073" - }, - { - "parameters": { - "operation": "update", - "dealId": "={{$json[\"dealId\"]}}", - "updateFields": { - "dealName": "dealTestUpdated" - } - }, - "name": "Hubspot4", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 500, - 230 - ], - "notesInFlow": false, - "alwaysOutputData": true, - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "id": "52b97d30-6e05-44c6-a4bc-4cdbf14ed2e8" - }, - { - "parameters": { - "operation": "getRecentlyModified", - "limit": 1, - "filters": {} - }, - "name": "Hubspot5", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 930, - 230 - ], - "notesInFlow": false, - "alwaysOutputData": true, - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "id": "d491514d-4b16-440a-ac45-b770499f9727" - }, - { - "parameters": { - "operation": "delete", - "dealId": "={{$json[\"dealId\"]}}" - }, - "name": "Hubspot6", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 1380, - 230 - ], - "notesInFlow": false, - "alwaysOutputData": true, - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "id": "ef41388b-da7e-4caf-8d28-fb23a8ec3b36" - }, - { - "parameters": { - "operation": "getRecentlyCreated", - "limit": 1, - "filters": {} - }, - "name": "Hubspot7", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 1100, - 230 - ], - "notesInFlow": false, - "alwaysOutputData": true, - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "id": "517e45f8-7554-4fa9-8cdb-77da84b51846" - }, - { - "parameters": { - "resource": "ticket", - "pipelineId": "0", - "stageId": "3", - "ticketName": "testTicket", - "additionalFields": {} - }, - "name": "Hubspot8", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 370, - 400 - ], - "notesInFlow": false, - "alwaysOutputData": true, - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "id": "d6a94b35-974c-4683-8c46-41fbc28a96ff" - }, - { - "parameters": { - "resource": "ticket", - "operation": "update", - "ticketId": "={{$json[\"objectId\"]}}", - "updateFields": {} - }, - "name": "Hubspot9", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 530, - 400 - ], - "notesInFlow": false, - "alwaysOutputData": true, - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "id": "d9f184a9-a4af-4657-963c-a6787997263d" - }, - { - "parameters": { - "resource": "ticket", - "operation": "getAll", - "limit": 1, - "additionalFields": {} - }, - "name": "Hubspot10", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 680, - 400 - ], - "notesInFlow": false, - "alwaysOutputData": true, - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "id": "f70f062d-d0ef-421f-9c42-36209102d837" - }, - { - "parameters": { - "resource": "ticket", - "operation": "get", - "ticketId": "={{$json[\"objectId\"]}}", - "additionalFields": {} - }, - "name": "Hubspot11", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 830, - 400 - ], - "notesInFlow": false, - "alwaysOutputData": true, - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "id": "489a9719-6fd8-4c48-8fbe-9acd0c1508f9" - }, - { - "parameters": { - "resource": "ticket", - "operation": "delete", - "ticketId": "={{$json[\"objectId\"]}}" - }, - "name": "Hubspot12", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 990, - 400 - ], - "notesInFlow": false, - "alwaysOutputData": true, - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "id": "fcdd8b16-ab62-4093-aa90-043bf3b22554" - } - ], - "connections": { - "Hubspot": { - "main": [ - [ - { - "node": "Hubspot4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Hubspot1": { - "main": [ - [ - { - "node": "Hubspot3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Hubspot2": { - "main": [ - [ - { - "node": "Hubspot6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Hubspot3": { - "main": [ - [ - { - "node": "Hubspot5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Hubspot8", - "type": "main", - "index": 0 - }, - { - "node": "Hubspot", - "type": "main", - "index": 0 - } - ] - ] - }, - "Hubspot4": { - "main": [ - [ - { - "node": "Hubspot1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Hubspot5": { - "main": [ - [ - { - "node": "Hubspot7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Hubspot7": { - "main": [ - [ - { - "node": "Hubspot2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Hubspot8": { - "main": [ - [ - { - "node": "Hubspot9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Hubspot9": { - "main": [ - [ - { - "node": "Hubspot10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Hubspot10": { - "main": [ - [ - { - "node": "Hubspot11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Hubspot11": { - "main": [ - [ - { - "node": "Hubspot12", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/212.json b/test-workflows/workflows/212.json deleted file mode 100644 index c023e689945..00000000000 --- a/test-workflows/workflows/212.json +++ /dev/null @@ -1,456 +0,0 @@ -{ - "createdAt": "2021-06-01T08:10:39.407Z", - "updatedAt": "2021-11-12T13:08:28.130Z", - "id": "212", - "name": "Git:*", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 260, - 300 - ], - "id": "f3928b9a-a76a-4b22-8c13-3eeb6ffc5dab" - }, - { - "parameters": { - "authentication": "gitPassword", - "operation": "clone", - "repositoryPath": "/tmp/nodeQA", - "sourceRepository": "https://github.com/nodemationqa/nodeQA" - }, - "name": "Git", - "type": "n8n-nodes-base.git", - "typeVersion": 1, - "position": [ - 550, - 250 - ], - "credentials": { - "gitPassword": { - "id": "193", - "name": "Git creds" - } - }, - "id": "73803968-9a2a-4408-9c35-cdb3fea58573" - }, - { - "parameters": { - "operation": "listConfig", - "repositoryPath": "/tmp/nodeQA" - }, - "name": "Git1", - "type": "n8n-nodes-base.git", - "typeVersion": 1, - "position": [ - 700, - 250 - ], - "notes": "CAP_RESULTS_LENGTH=1\nKEEP_ONLY_PROPERTIES=_file", - "id": "c8635d48-0bbd-496a-8cd0-5cf43795707d" - }, - { - "parameters": { - "operation": "addConfig", - "repositoryPath": "/tmp/nodeQA", - "key": "user.email", - "value": "nodeqa@n8n.io", - "options": { - "mode": "set" - } - }, - "name": "Git2", - "type": "n8n-nodes-base.git", - "typeVersion": 1, - "position": [ - 850, - 250 - ], - "id": "815b5424-cbc3-4f29-9f12-81e7538bb925" - }, - { - "parameters": { - "operation": "add", - "repositoryPath": "/tmp/nodeQA", - "pathsToAdd": "/tmp/nodeQA/gitnode_added_file.md" - }, - "name": "Git3", - "type": "n8n-nodes-base.git", - "typeVersion": 1, - "position": [ - 550, - 450 - ], - "id": "d2110a10-424a-48ef-9bfa-5b6eb541f96c" - }, - { - "parameters": { - "operation": "status", - "repositoryPath": "/tmp/nodeQA" - }, - "name": "Git4", - "type": "n8n-nodes-base.git", - "typeVersion": 1, - "position": [ - 700, - 450 - ], - "id": "317691ba-e08a-4fcb-bb2d-771d14a13eb4" - }, - { - "parameters": { - "operation": "commit", - "repositoryPath": "/tmp/nodeQA", - "message": "=GitNode commit {{(new Date).toUTCString()}}", - "options": {} - }, - "name": "Git5", - "type": "n8n-nodes-base.git", - "typeVersion": 1, - "position": [ - 850, - 450 - ], - "id": "4ab79985-9685-4c47-b4c4-2f859ce036c0" - }, - { - "parameters": { - "repositoryPath": "/tmp/nodeQA", - "limit": 1, - "options": {} - }, - "name": "Git6", - "type": "n8n-nodes-base.git", - "typeVersion": 1, - "position": [ - 1000, - 450 - ], - "id": "7ed13447-be70-41e3-b054-4107b175d5a8" - }, - { - "parameters": { - "operation": "addConfig", - "repositoryPath": "/tmp/nodeQA", - "key": "user.name", - "value": "nodemationqa", - "options": { - "mode": "set" - } - }, - "name": "Git7", - "type": "n8n-nodes-base.git", - "typeVersion": 1, - "position": [ - 1000, - 250 - ], - "id": "8dabf47e-ba7c-460d-a2de-a4f54f5211e1" - }, - { - "parameters": { - "operation": "tag", - "repositoryPath": "/tmp/nodeQA", - "name": "=GitNode-tag-{{Date.now()}}" - }, - "name": "Git8", - "type": "n8n-nodes-base.git", - "typeVersion": 1, - "position": [ - 1150, - 450 - ], - "id": "f4317e1d-694d-4d62-9b60-de9ef0e94418" - }, - { - "parameters": { - "operation": "pushTags", - "repositoryPath": "/tmp/nodeQA" - }, - "name": "Git9", - "type": "n8n-nodes-base.git", - "typeVersion": 1, - "position": [ - 550, - 650 - ], - "disabled": true, - "id": "8ac866c6-9938-4d0f-9f54-6e3d5b1dbf11" - }, - { - "parameters": { - "operation": "push", - "repositoryPath": "/tmp/nodeQA", - "options": {} - }, - "name": "Git10", - "type": "n8n-nodes-base.git", - "typeVersion": 1, - "position": [ - 700, - 650 - ], - "disabled": true, - "id": "880d7f5f-744a-496a-9064-0a09a1dfe5ce" - }, - { - "parameters": { - "operation": "pull", - "repositoryPath": "/tmp/nodeQA" - }, - "name": "Git11", - "type": "n8n-nodes-base.git", - "typeVersion": 1, - "position": [ - 850, - 650 - ], - "disabled": true, - "id": "5a5c9cd0-0e77-4ed9-960f-54f12d449683" - }, - { - "parameters": { - "operation": "fetch", - "repositoryPath": "/tmp/nodeQA" - }, - "name": "Git12", - "type": "n8n-nodes-base.git", - "typeVersion": 1, - "position": [ - 1000, - 650 - ], - "id": "e042e225-b5b6-4882-b879-d11d103c7004" - }, - { - "parameters": { - "operation": "userSetup", - "repositoryPath": "/tmp/nodeQA" - }, - "name": "Git13", - "type": "n8n-nodes-base.git", - "typeVersion": 1, - "position": [ - 1150, - 650 - ], - "disabled": true, - "id": "7b5a93b5-08bc-4449-a7ef-23232d6440a2" - }, - { - "parameters": { - "command": "if [ -d \"/tmp/nodeQA\" ]; then rm -Rf /tmp/nodeQA; fi" - }, - "name": "Delete existing dir", - "type": "n8n-nodes-base.executeCommand", - "typeVersion": 1, - "position": [ - 400, - 250 - ], - "id": "312b664a-f6b4-4419-aae4-455930d7ca05" - }, - { - "parameters": { - "command": "=echo \"File added to repo at {{(new Date).toUTCString()}} using Git node\" > /tmp/nodeQA/gitnode_added_file.md" - }, - "name": "Add file to dir", - "type": "n8n-nodes-base.executeCommand", - "typeVersion": 1, - "position": [ - 1150, - 250 - ], - "id": "a5ad152a-056e-4d4e-81f8-626209e7cfb8" - } - ], - "connections": { - "Git": { - "main": [ - [ - { - "node": "Git1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Delete existing dir", - "type": "main", - "index": 0 - } - ] - ] - }, - "Git1": { - "main": [ - [ - { - "node": "Git2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Git2": { - "main": [ - [ - { - "node": "Git7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Git3": { - "main": [ - [ - { - "node": "Git4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Git4": { - "main": [ - [ - { - "node": "Git5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Git5": { - "main": [ - [ - { - "node": "Git6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Git7": { - "main": [ - [ - { - "node": "Add file to dir", - "type": "main", - "index": 0 - } - ] - ] - }, - "Git6": { - "main": [ - [ - { - "node": "Git8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Git8": { - "main": [ - [ - { - "node": "Git9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Git9": { - "main": [ - [ - { - "node": "Git10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Git10": { - "main": [ - [ - { - "node": "Git11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Git11": { - "main": [ - [ - { - "node": "Git12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Git12": { - "main": [ - [ - { - "node": "Git13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Delete existing dir": { - "main": [ - [ - { - "node": "Git", - "type": "main", - "index": 0 - } - ] - ] - }, - "Add file to dir": { - "main": [ - [ - { - "node": "Git3", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/214.json b/test-workflows/workflows/214.json deleted file mode 100644 index 19a6a1bd04e..00000000000 --- a/test-workflows/workflows/214.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "createdAt": "2021-06-03T11:22:25.194Z", - "updatedAt": "2021-07-15T14:18:39.385Z", - "id": "214", - "name": "Discord:sendMessage", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "51494395-ea61-4b02-9a5d-e9f3f97bddbe" - }, - { - "parameters": { - "webhookUri": "https://discord.com/api/webhooks/853902674536955924/2gqWRIwqBexuMwlQmTNLYFizoX6JMjz5acCKN-6NwaVxfw30qZfy0nguukpLPk0zvnaK", - "text": "=Posted At {{(new Date).toUTCString()}}" - }, - "name": "Discord", - "type": "n8n-nodes-base.discord", - "typeVersion": 1, - "position": [ - 490, - 300 - ], - "id": "ffb4c420-0c18-4cc9-a2fe-5898b93815aa" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Discord", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/215.json b/test-workflows/workflows/215.json deleted file mode 100644 index 4d0b0a715b3..00000000000 --- a/test-workflows/workflows/215.json +++ /dev/null @@ -1,392 +0,0 @@ -{ - "createdAt": "2021-06-04T11:16:11.926Z", - "updatedAt": "2021-07-16T09:34:37.952Z", - "id": "215", - "name": "EditImage:ALL", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "42877422-da89-4a28-a056-65fae3293498" - }, - { - "parameters": { - "operation": "blur", - "blur": 4, - "options": {} - }, - "name": "Edit Image", - "type": "n8n-nodes-base.editImage", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "id": "afe688e3-fa5c-4a6f-a998-06ac9feb4713" - }, - { - "parameters": { - "filePath": "/tmp/n8n-logo.png" - }, - "name": "Read Binary File", - "type": "n8n-nodes-base.readBinaryFile", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "id": "94cee769-2dd7-4066-a489-79d3efc8b699" - }, - { - "parameters": { - "options": {} - }, - "name": "Edit Image1", - "type": "n8n-nodes-base.editImage", - "typeVersion": 1, - "position": [ - 850, - 300 - ], - "id": "73af2807-4dbb-4653-9421-d43e18d6b3dd" - }, - { - "parameters": { - "operation": "composite", - "dataPropertyNameComposite": "data", - "positionX": 100, - "positionY": 50, - "options": {} - }, - "name": "Edit Image2", - "type": "n8n-nodes-base.editImage", - "typeVersion": 1, - "position": [ - 2400, - 280 - ], - "id": "9119f721-2eb0-4972-8c7d-d5b32022a340" - }, - { - "parameters": { - "operation": "create", - "width": 1000, - "height": 1000, - "options": {} - }, - "name": "Edit Image3", - "type": "n8n-nodes-base.editImage", - "typeVersion": 1, - "position": [ - 1050, - 450 - ], - "id": "db874150-8b35-4db7-9f04-8fd6a0da0edc" - }, - { - "parameters": { - "operation": "draw", - "options": {} - }, - "name": "Edit Image4", - "type": "n8n-nodes-base.editImage", - "typeVersion": 1, - "position": [ - 1250, - 450 - ], - "id": "ec763bc5-8acf-4a6c-8377-180f9d67337d" - }, - { - "parameters": { - "operation": "resize", - "options": {} - }, - "name": "Edit Image5", - "type": "n8n-nodes-base.editImage", - "typeVersion": 1, - "position": [ - 1450, - 450 - ], - "id": "b59007d8-29c5-4a08-a04f-76837cb041ba" - }, - { - "parameters": { - "operation": "information" - }, - "name": "Edit Image6", - "type": "n8n-nodes-base.editImage", - "typeVersion": 1, - "position": [ - 850, - 450 - ], - "notes": "CAP_RESULTS_LENGTH=1\nIGNORED_PROPERTIES=User Time", - "id": "b5e4bfc7-16e9-4793-a309-190df1e57444" - }, - { - "parameters": { - "operation": "rotate", - "rotate": 45, - "options": {} - }, - "name": "Edit Image7", - "type": "n8n-nodes-base.editImage", - "typeVersion": 1, - "position": [ - 1650, - 450 - ], - "id": "4e3d7eb5-33ae-4867-8130-ef928b61ecee" - }, - { - "parameters": { - "operation": "shear", - "degreesX": 15, - "degreesY": 30, - "options": {} - }, - "name": "Edit Image8", - "type": "n8n-nodes-base.editImage", - "typeVersion": 1, - "position": [ - 1850, - 450 - ], - "id": "a45b3d3f-95f0-4bbc-b1df-a5c42f8102c9" - }, - { - "parameters": { - "operation": "text", - "text": "Testing", - "options": {} - }, - "name": "Edit Image9", - "type": "n8n-nodes-base.editImage", - "typeVersion": 1, - "position": [ - 2050, - 450 - ], - "id": "d12a6f88-9b7a-4359-ae24-5f098cb438be" - }, - { - "parameters": { - "operation": "crop", - "options": {} - }, - "name": "Edit Image10", - "type": "n8n-nodes-base.editImage", - "typeVersion": 1, - "position": [ - 2250, - 450 - ], - "id": "0be43f04-569f-40f2-8f1c-c4cbfbb228d0" - }, - { - "parameters": { - "operation": "multiStep", - "operations": { - "operations": [ - { - "operation": "blur", - "blur": 3 - }, - { - "operation": "border", - "borderWidth": 3, - "borderHeight": 3, - "borderColor": "#FF7410" - }, - { - "operation": "draw", - "color": "#4b4b4b00", - "cornerRadius": 50 - }, - { - "operation": "rotate", - "rotate": 180 - }, - { - "operation": "text", - "text": "Reversed" - }, - { - "operation": "resize" - }, - { - "operation": "shear", - "degreesX": 5, - "degreesY": 10 - } - ] - }, - "options": {} - }, - "name": "Edit Image11", - "type": "n8n-nodes-base.editImage", - "typeVersion": 1, - "position": [ - 650, - 450 - ], - "notes": "IGNORED_PROPERTIES=User Time", - "id": "620d342b-8f65-492e-9caf-a77b9b037fa5" - } - ], - "connections": { - "Edit Image": { - "main": [ - [ - { - "node": "Edit Image1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Read Binary File": { - "main": [ - [ - { - "node": "Edit Image", - "type": "main", - "index": 0 - }, - { - "node": "Edit Image11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Read Binary File", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Image1": { - "main": [ - [ - { - "node": "Edit Image3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Image3": { - "main": [ - [ - { - "node": "Edit Image4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Image4": { - "main": [ - [ - { - "node": "Edit Image5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Image5": { - "main": [ - [ - { - "node": "Edit Image7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Image7": { - "main": [ - [ - { - "node": "Edit Image8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Image8": { - "main": [ - [ - { - "node": "Edit Image9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Image9": { - "main": [ - [ - { - "node": "Edit Image10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Image10": { - "main": [ - [ - { - "node": "Edit Image2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Edit Image11": { - "main": [ - [ - { - "node": "Edit Image6", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/216.json b/test-workflows/workflows/216.json deleted file mode 100644 index fb1cfe0610c..00000000000 --- a/test-workflows/workflows/216.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "createdAt": "2021-06-15T18:29:42.709Z", - "updatedAt": "2021-06-15T18:38:55.872Z", - "id": "216", - "name": "FunctionItem:JSON,Binary and Static data", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "83a507fd-bf96-45fd-8513-1c0ef484ec76" - }, - { - "parameters": { - "functionCode": "// interact with item JSON attributes\n\n// array\nitem.arr = [1,2,3,4,5,6,7,8,9,10]\n// string\nitem.str= \"Testing Function Item node\"\n// number\nitem.num = 1337 \n// object\nitem.obj = {\n attr1: \"Testing\",\n attr2: [1,2,3,4,5],\n attr3: 7331,\n attr4: {\n subattr1: \"Test\",\n subattr2: [1,2,3],\n subattr3: 8,\n subattr4: {\n }\n }\n};\n\nreturn item;" - }, - "name": "Handle JSON data", - "type": "n8n-nodes-base.functionItem", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "id": "2f7fca94-f885-4f41-90e0-5455afe8266d" - }, - { - "parameters": { - "functionCode": "// interact with item Binary data\n\nitem.binaryData = getBinaryData() ?? 'NIL' ;\n\nbinaryData = {\n data: {\n\t\t\t\tdata: 'SGVsbG8gZnJvbSBuOG4gRnVuY3Rpb24gaXRlbSB0ZXN0aW5nIHdvcmtmbG93', // Base64 encoded binary data (required)\n\t\t\t\tmimeType: 'text', // Optional but should be set if possible (optional)\n\t\t\t\tfileExtension: 'text', // Optional but should be set if possible (optional)\n\t\t\t\tfileName: 'testfile', // Optional but should be set if possible (optional)\n\t\t\t}\n}\nsetBinaryData(binaryData);\n\n\nreturn item;" - }, - "name": "Handle Binary data", - "type": "n8n-nodes-base.functionItem", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "id": "28f7d4f0-a2d7-46d5-8683-4f624588fc32" - }, - { - "parameters": { - "functionCode": "// interact with static data\n\n\n// Global\n\nconst GSD = getWorkflowStaticData('global');\n\nif ( GSD && GSD.message ){\n console.log(GSD);\n} else {\n GSD.message = \"Hello, Global Static Data\";\n}\n\n// Local (node)\n\nconst LSD = getWorkflowStaticData('node');\n\nif ( LSD && LSD.message ){\n console.log(LSD);\n} else {\n LSD.message = \"Hello, Node Static Data\";\n}\n\nitem.globalStaticMessage = GSD.message;\nitem.nodeStaticMessage = LSD.message;\n\n\nreturn item;" - }, - "name": "Handle Static data", - "type": "n8n-nodes-base.functionItem", - "typeVersion": 1, - "position": [ - 850, - 300 - ], - "id": "8794c6b1-1149-4b6d-96cb-0e3d5fd0ffbd" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Handle JSON data", - "type": "main", - "index": 0 - } - ] - ] - }, - "Handle JSON data": { - "main": [ - [ - { - "node": "Handle Binary data", - "type": "main", - "index": 0 - } - ] - ] - }, - "Handle Binary data": { - "main": [ - [ - { - "node": "Handle Static data", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/217.json b/test-workflows/workflows/217.json deleted file mode 100644 index 32ce289bce5..00000000000 --- a/test-workflows/workflows/217.json +++ /dev/null @@ -1,160 +0,0 @@ -{ - "createdAt": "2021-06-15T18:44:19.942Z", - "updatedAt": "2021-06-15T19:09:29.328Z", - "id": "217", - "name": "ExecuteWorkflow: Database, URL, Local File, Parameter", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "f98e5ef3-5e54-4296-83c0-15abef56962d" - }, - { - "parameters": { - "source": "parameter", - "workflowJson": "{\n \"nodes\": [\n {\n \"parameters\": {},\n \"name\": \"Start\",\n \"type\": \"n8n-nodes-base.start\",\n \"typeVersion\": 1,\n \"position\": [\n 250,\n 300\n ]\n },\n {\n \"parameters\": {\n \"functionCode\": \"\\nitems = [\\n{\\n json:{\\n message: \\\"Hello from a sub workflow, passed as parameter\\\"\\n }\\n}\\n\\n]\\nreturn items;\"\n },\n \"name\": \"Generate items data\",\n \"type\": \"n8n-nodes-base.function\",\n \"typeVersion\": 1,\n \"position\": [\n 500,\n 300\n ]\n }\n ],\n \"connections\": {\n \"Start\": {\n \"main\": [\n [\n {\n \"node\": \"Generate items data\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n }\n }\n}" - }, - "name": "Execute parameter - workflow", - "type": "n8n-nodes-base.executeWorkflow", - "typeVersion": 1, - "position": [ - 500, - 250 - ], - "id": "2c2df62e-bed9-4633-aa3a-c1a80f643540" - }, - { - "parameters": { - "source": "url", - "workflowUrl": "https://raw.githubusercontent.com/n8n-io/test-workflows/main/workflows/95.json" - }, - "name": "Execute URL workflow", - "type": "n8n-nodes-base.executeWorkflow", - "typeVersion": 1, - "position": [ - 500, - 90 - ], - "id": "e5232923-8233-42c7-98bf-ba473a56a788" - }, - { - "parameters": { - "url": "https://raw.githubusercontent.com/n8n-io/test-workflows/main/workflows/93.json", - "responseFormat": "file", - "options": {} - }, - "name": "HTTP Request", - "type": "n8n-nodes-base.httpRequest", - "typeVersion": 1, - "position": [ - 500, - 550 - ], - "id": "d1e66066-2d60-48d5-bde2-003715d38e1b" - }, - { - "parameters": { - "fileName": "/tmp/testworkflowfile.json" - }, - "name": "Write Binary File", - "type": "n8n-nodes-base.writeBinaryFile", - "typeVersion": 1, - "position": [ - 700, - 550 - ], - "id": "f82165ff-9ce4-4f80-8b9d-043bb98252bb" - }, - { - "parameters": { - "source": "localFile", - "workflowPath": "/tmp/testworkflowfile.json" - }, - "name": "Execute local file workflow", - "type": "n8n-nodes-base.executeWorkflow", - "typeVersion": 1, - "position": [ - 900, - 550 - ], - "id": "af481068-77a8-4c83-8473-3f20d2fba53e" - }, - { - "parameters": { - "workflowId": "94" - }, - "name": "Execute Workflow ID 94", - "type": "n8n-nodes-base.executeWorkflow", - "typeVersion": 1, - "position": [ - 500, - 400 - ], - "id": "c65ee4ea-afc8-4674-90d1-12d6c1685209" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Execute Workflow ID 94", - "type": "main", - "index": 0 - }, - { - "node": "Execute parameter - workflow", - "type": "main", - "index": 0 - }, - { - "node": "Execute URL workflow", - "type": "main", - "index": 0 - }, - { - "node": "HTTP Request", - "type": "main", - "index": 0 - } - ] - ] - }, - "HTTP Request": { - "main": [ - [ - { - "node": "Write Binary File", - "type": "main", - "index": 0 - } - ] - ] - }, - "Write Binary File": { - "main": [ - [ - { - "node": "Execute local file workflow", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/218.json b/test-workflows/workflows/218.json deleted file mode 100644 index 621d47f28a4..00000000000 --- a/test-workflows/workflows/218.json +++ /dev/null @@ -1,159 +0,0 @@ -{ - "createdAt": "2021-07-08T14:10:14.879Z", - "updatedAt": "2021-07-08T14:14:36.514Z", - "id": "218", - "name": "Bannerbear:Image:create get:Template:get getAll", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "f26a5bfe-df4f-4716-aa45-f2fe142d5845" - }, - { - "parameters": { - "templateId": "0MkzgpZ46zEDyVrmlP", - "additionalFields": { - "waitForImage": true - }, - "modificationsUi": { - "modificationsValues": [ - { - "name": "message", - "text": "Testing n8n qa", - "color": "#0911A0", - "background": "#EEEEEE" - } - ] - } - }, - "name": "Bannerbear", - "type": "n8n-nodes-base.bannerbear", - "typeVersion": 1, - "position": [ - 500, - 300 - ], - "credentials": { - "bannerbearApi": { - "id": "211", - "name": "Bannerbear API creds" - } - }, - "id": "3f8c4976-b1c4-44b7-83ac-fcd90a1fea72" - }, - { - "parameters": { - "operation": "get", - "imageId": "={{$node[\"Bannerbear\"].json[\"uid\"]}}" - }, - "name": "Bannerbear1", - "type": "n8n-nodes-base.bannerbear", - "typeVersion": 1, - "position": [ - 700, - 300 - ], - "credentials": { - "bannerbearApi": { - "id": "211", - "name": "Bannerbear API creds" - } - }, - "id": "cc376054-599f-42f9-8d13-aca26f93043f" - }, - { - "parameters": { - "resource": "template", - "operation": "getAll" - }, - "name": "Bannerbear2", - "type": "n8n-nodes-base.bannerbear", - "typeVersion": 1, - "position": [ - 900, - 400 - ], - "credentials": { - "bannerbearApi": { - "id": "211", - "name": "Bannerbear API creds" - } - }, - "id": "a76b8466-0c76-4eba-bd95-db664ee77b00" - }, - { - "parameters": { - "resource": "template", - "templateId": "0MkzgpZ46zEDyVrmlP" - }, - "name": "Bannerbear3", - "type": "n8n-nodes-base.bannerbear", - "typeVersion": 1, - "position": [ - 900, - 250 - ], - "credentials": { - "bannerbearApi": { - "id": "211", - "name": "Bannerbear API creds" - } - }, - "id": "cb9a1de6-9dd7-41c9-aa8b-d71e605ee8b9" - } - ], - "connections": { - "Bannerbear": { - "main": [ - [ - { - "node": "Bannerbear1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Bannerbear1": { - "main": [ - [ - { - "node": "Bannerbear2", - "type": "main", - "index": 0 - }, - { - "node": "Bannerbear3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Bannerbear", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/219.json b/test-workflows/workflows/219.json deleted file mode 100644 index 25e580edb86..00000000000 --- a/test-workflows/workflows/219.json +++ /dev/null @@ -1,393 +0,0 @@ -{ - "createdAt": "2021-06-25T06:08:38.364Z", - "updatedAt": "2021-07-08T15:34:23.744Z", - "id": "219", - "name": "Automizy:List:create get update getAll delete:Contact:create get update getAll delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 270, - 380 - ], - "id": "b4a081a6-9a54-4e52-8e77-18d8d3df627c" - }, - { - "parameters": { - "resource": "list", - "name": "=List{{Date.now()}}" - }, - "name": "Automizy", - "type": "n8n-nodes-base.automizy", - "typeVersion": 1, - "position": [ - 440, - 380 - ], - "credentials": { - "automizyApi": { - "id": "212", - "name": "Automizy API creds" - } - }, - "id": "b1dceb9d-e1b8-4b55-9e64-158a2b8729cb" - }, - { - "parameters": { - "resource": "list", - "operation": "get", - "listId": "={{$node[\"Automizy\"].json[\"id\"]}}" - }, - "name": "Automizy1", - "type": "n8n-nodes-base.automizy", - "typeVersion": 1, - "position": [ - 640, - 380 - ], - "credentials": { - "automizyApi": { - "id": "212", - "name": "Automizy API creds" - } - }, - "id": "2c8e8668-1982-443f-8047-4291009cb7a9" - }, - { - "parameters": { - "resource": "list", - "operation": "update", - "listId": "={{$node[\"Automizy\"].json[\"id\"]}}", - "name": "=UpdatedList{{Date.now()}}" - }, - "name": "Automizy2", - "type": "n8n-nodes-base.automizy", - "typeVersion": 1, - "position": [ - 790, - 380 - ], - "credentials": { - "automizyApi": { - "id": "212", - "name": "Automizy API creds" - } - }, - "id": "3fd15d30-4310-4556-86d8-d065af81e1f8" - }, - { - "parameters": { - "resource": "list", - "operation": "getAll", - "limit": 1, - "additionalFields": { - "direction": "desc", - "fields": "id,name", - "sortBy": "name" - } - }, - "name": "Automizy3", - "type": "n8n-nodes-base.automizy", - "typeVersion": 1, - "position": [ - 940, - 380 - ], - "credentials": { - "automizyApi": { - "id": "212", - "name": "Automizy API creds" - } - }, - "id": "c1fbd84b-5857-4309-948e-514684bdeb9a" - }, - { - "parameters": { - "resource": "list", - "operation": "delete", - "listId": "={{$node[\"Automizy\"].json[\"id\"]}}" - }, - "name": "Automizy4", - "type": "n8n-nodes-base.automizy", - "typeVersion": 1, - "position": [ - 1090, - 380 - ], - "credentials": { - "automizyApi": { - "id": "212", - "name": "Automizy API creds" - } - }, - "id": "35dd2b7a-d40d-4714-a689-b0c8983538df" - }, - { - "parameters": { - "email": "=fakeemail{{Date.now()}}@gmail.com", - "listId": "={{$node[\"Automizy\"].json[\"id\"]}}", - "additionalFields": { - "customFieldsUi": { - "customFieldsValues": [ - { - "key": 3, - "value": "=Company{{Date.now()}}" - }, - { - "key": 1, - "value": "=Firstname{{Date.now()}}" - }, - { - "key": 2, - "value": "=Second{{Date.now()}}" - }, - { - "key": 4, - "value": "=Position{{Date.now()}}" - } - ] - }, - "status": "ACTIVE", - "tags": [ - "test" - ] - } - }, - "name": "Automizy5", - "type": "n8n-nodes-base.automizy", - "typeVersion": 1, - "position": [ - 590, - 530 - ], - "credentials": { - "automizyApi": { - "id": "212", - "name": "Automizy API creds" - } - }, - "id": "f5681b6a-76c6-464c-bdfe-778fc2ebdec3" - }, - { - "parameters": { - "operation": "get", - "contactId": "={{$node[\"Automizy5\"].json[\"id\"]}}" - }, - "name": "Automizy6", - "type": "n8n-nodes-base.automizy", - "typeVersion": 1, - "position": [ - 740, - 530 - ], - "credentials": { - "automizyApi": { - "id": "212", - "name": "Automizy API creds" - } - }, - "id": "23c3ebef-deab-48bf-a0f6-bdbb172d3634" - }, - { - "parameters": { - "operation": "update", - "email": "={{$node[\"Automizy5\"].json[\"email\"]}}", - "updateFields": { - "customFieldsUi": { - "customFieldsValues": [ - { - "key": 3, - "value": "UpdatedCompany" - } - ] - }, - "removeTags": [ - "test" - ], - "status": "BANNED" - } - }, - "name": "Automizy7", - "type": "n8n-nodes-base.automizy", - "typeVersion": 1, - "position": [ - 890, - 530 - ], - "credentials": { - "automizyApi": { - "id": "212", - "name": "Automizy API creds" - } - }, - "id": "2c376196-e422-411f-b84d-9a6e86898061" - }, - { - "parameters": { - "operation": "getAll", - "listId": "={{$node[\"Automizy\"].json[\"id\"]}}", - "limit": 1, - "additionalFields": { - "fields": "id,status" - } - }, - "name": "Automizy8", - "type": "n8n-nodes-base.automizy", - "typeVersion": 1, - "position": [ - 1040, - 530 - ], - "credentials": { - "automizyApi": { - "id": "212", - "name": "Automizy API creds" - } - }, - "id": "dcef5e3c-3ae9-49c9-81cf-70197ae5cf9f" - }, - { - "parameters": { - "operation": "delete", - "contactId": "={{$node[\"Automizy5\"].json[\"id\"]}}" - }, - "name": "Automizy9", - "type": "n8n-nodes-base.automizy", - "typeVersion": 1, - "position": [ - 1190, - 530 - ], - "credentials": { - "automizyApi": { - "id": "212", - "name": "Automizy API creds" - } - }, - "id": "9e848425-9b56-497d-bc56-a934e80ec686" - } - ], - "connections": { - "Automizy": { - "main": [ - [ - { - "node": "Automizy5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Automizy1": { - "main": [ - [ - { - "node": "Automizy2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Automizy2": { - "main": [ - [ - { - "node": "Automizy3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Automizy3": { - "main": [ - [ - { - "node": "Automizy4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Automizy5": { - "main": [ - [ - { - "node": "Automizy6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Automizy6": { - "main": [ - [ - { - "node": "Automizy7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Automizy7": { - "main": [ - [ - { - "node": "Automizy8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Automizy8": { - "main": [ - [ - { - "node": "Automizy9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Automizy9": { - "main": [ - [ - { - "node": "Automizy1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Automizy", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/22.json b/test-workflows/workflows/22.json deleted file mode 100644 index ed51062e287..00000000000 --- a/test-workflows/workflows/22.json +++ /dev/null @@ -1,207 +0,0 @@ -{ - "createdAt": "2021-02-16T16:30:25.114Z", - "updatedAt": "2021-02-16T19:02:02.611Z", - "id": "22", - "name": "Hubspot:ContactList:add remove:Form:getFields submit", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "89975e09-da30-4c6d-8d61-9650d57b9c3d" - }, - { - "parameters": { - "resource": "form", - "formId": "a3c94446-bea8-49be-80a7-c862efe7ceb6" - }, - "name": "Hubspot", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 490, - 210 - ], - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "id": "3211fe29-82cf-4b3e-95a8-9a35f9daab8a" - }, - { - "parameters": { - "resource": "form", - "operation": "submit", - "formId": "a3c94446-bea8-49be-80a7-c862efe7ceb6", - "additionalFields": {}, - "lengalConsentUi": { - "lengalConsentValues": { - "consentToProcess": true, - "text": "test", - "communicationsUi": { - "communicationValues": [] - } - } - } - }, - "name": "Hubspot1", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 890, - 210 - ], - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "id": "dfae8bbd-deb9-4584-b5d0-c054d7c68d45" - }, - { - "parameters": { - "resource": "contactList" - }, - "name": "Hubspot2", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 1220, - 290 - ], - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "disabled": true, - "id": "c05ef08b-1a37-4e96-a4ed-79d07375d395" - }, - { - "parameters": { - "resource": "contactList", - "email": "nodeqa@n8n.io", - "listId": "2" - }, - "name": "Hubspot3", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 500, - 410 - ], - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "id": "d442252a-bb6c-455d-91c0-7e84b2acd2d0" - }, - { - "parameters": { - "resource": "contactList", - "operation": "remove", - "id": "={{$json[\"updated\"][0]}}", - "listId": "2" - }, - "name": "Hubspot4", - "type": "n8n-nodes-base.hubspot", - "typeVersion": 1, - "position": [ - 700, - 410 - ], - "credentials": { - "hubspotApi": { - "id": "11", - "name": "hubsport api key" - } - }, - "id": "80251cfe-7af7-4f16-a8c9-7d9a07ecf296" - }, - { - "parameters": { - "functionCode": "return [{json:{\n email:`test${Date.now().toString().substr(5)}@gmail.com`,\n firstname:'Test first',\n lastname:'Test last',\n message:'Message'\n}}];" - }, - "name": "Function", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 690, - 210 - ], - "notesInFlow": true, - "notes": "Turn field into single json", - "id": "957f2262-d3e3-4f6f-894d-834aa2e12e31" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Hubspot", - "type": "main", - "index": 0 - }, - { - "node": "Hubspot3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Hubspot": { - "main": [ - [ - { - "node": "Function", - "type": "main", - "index": 0 - } - ] - ] - }, - "Hubspot3": { - "main": [ - [ - { - "node": "Hubspot4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Function": { - "main": [ - [ - { - "node": "Hubspot1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/220.json b/test-workflows/workflows/220.json deleted file mode 100644 index 3f28a5963e2..00000000000 --- a/test-workflows/workflows/220.json +++ /dev/null @@ -1,348 +0,0 @@ -{ - "createdAt": "2021-06-25T06:40:20.761Z", - "updatedAt": "2021-07-16T09:01:07.467Z", - "id": "220", - "name": "Autopilot:List:create getAll:Contact:upsert get getAll delete:ContactList:add exist getAll remove", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "0615b7a0-0786-4868-b269-2a2b0cb2a2fc" - }, - { - "parameters": { - "email": "=Fakeemail{{Date.now()}}@gmail.com", - "additionalFields": {} - }, - "name": "Autopilot", - "type": "n8n-nodes-base.autopilot", - "typeVersion": 1, - "position": [ - 500, - 300 - ], - "credentials": { - "autopilotApi": { - "id": "213", - "name": "Autopilot API creds" - } - }, - "id": "1b66282f-b944-486c-ac84-e0947f8253db" - }, - { - "parameters": { - "operation": "get", - "contactId": "={{$node[\"Autopilot\"].json[\"contact_id\"]}}" - }, - "name": "Autopilot1", - "type": "n8n-nodes-base.autopilot", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "credentials": { - "autopilotApi": { - "id": "213", - "name": "Autopilot API creds" - } - }, - "id": "1575e003-c7f1-40af-831b-90fe1eaf7fba" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1 - }, - "name": "Autopilot2", - "type": "n8n-nodes-base.autopilot", - "typeVersion": 1, - "position": [ - 800, - 300 - ], - "credentials": { - "autopilotApi": { - "id": "213", - "name": "Autopilot API creds" - } - }, - "id": "09f19a0d-0839-4cbe-9c73-5a90ff409606" - }, - { - "parameters": { - "operation": "delete", - "contactId": "={{$node[\"Autopilot\"].json[\"contact_id\"]}}" - }, - "name": "Autopilot3", - "type": "n8n-nodes-base.autopilot", - "typeVersion": 1, - "position": [ - 1000, - 300 - ], - "credentials": { - "autopilotApi": { - "id": "213", - "name": "Autopilot API creds" - } - }, - "id": "9a3fa0ff-117b-4515-bd5f-a573ee304885" - }, - { - "parameters": { - "resource": "list", - "name": "=List{{Date.now()}}" - }, - "name": "Autopilot4", - "type": "n8n-nodes-base.autopilot", - "typeVersion": 1, - "position": [ - 500, - 100 - ], - "credentials": { - "autopilotApi": { - "id": "213", - "name": "Autopilot API creds" - } - }, - "notes": "IGNORED_PROPERTIES=list_id,name,message", - "id": "6b2022b3-cc2e-41a0-9420-83859ad48e64" - }, - { - "parameters": { - "resource": "list", - "operation": "getAll", - "limit": 1 - }, - "name": "Autopilot5", - "type": "n8n-nodes-base.autopilot", - "typeVersion": 1, - "position": [ - 650, - 100 - ], - "credentials": { - "autopilotApi": { - "id": "213", - "name": "Autopilot API creds" - } - }, - "id": "ed2a8101-9083-469f-81d1-5c92a530bb2d" - }, - { - "parameters": { - "resource": "contactList", - "listId": "={{$node[\"Autopilot5\"].json[\"list_id\"]}}", - "contactId": "={{$node[\"Autopilot\"].json[\"contact_id\"]}}" - }, - "name": "Autopilot6", - "type": "n8n-nodes-base.autopilot", - "typeVersion": 1, - "position": [ - 950, - 450 - ], - "credentials": { - "autopilotApi": { - "id": "213", - "name": "Autopilot API creds" - } - }, - "id": "018aaf92-3c41-4a82-92a6-d67c7681a9de" - }, - { - "parameters": { - "resource": "contactList", - "operation": "exist", - "listId": "={{$node[\"Autopilot4\"].json[\"list_id\"]}}", - "contactId": "={{$node[\"Autopilot\"].json[\"contact_id\"]}}" - }, - "name": "Autopilot7", - "type": "n8n-nodes-base.autopilot", - "typeVersion": 1, - "position": [ - 1100, - 450 - ], - "credentials": { - "autopilotApi": { - "id": "213", - "name": "Autopilot API creds" - } - }, - "id": "9942b084-4991-4d0c-bb43-4a1417c5353c" - }, - { - "parameters": { - "resource": "contactList", - "operation": "getAll", - "listId": "={{$node[\"Autopilot5\"].json[\"list_id\"]}}", - "limit": 1 - }, - "name": "Autopilot8", - "type": "n8n-nodes-base.autopilot", - "typeVersion": 1, - "position": [ - 1250, - 450 - ], - "credentials": { - "autopilotApi": { - "id": "213", - "name": "Autopilot API creds" - } - }, - "id": "a130470d-1b45-4077-b7a1-3814443d93a8" - }, - { - "parameters": { - "resource": "contactList", - "operation": "remove", - "listId": "={{$node[\"Autopilot5\"].json[\"list_id\"]}}", - "contactId": "={{$node[\"Autopilot\"].json[\"contact_id\"]}}" - }, - "name": "Autopilot9", - "type": "n8n-nodes-base.autopilot", - "typeVersion": 1, - "position": [ - 1400, - 450 - ], - "credentials": { - "autopilotApi": { - "id": "213", - "name": "Autopilot API creds" - } - }, - "id": "76538b0d-f96e-4bbf-83dd-fafb0f1e3edf" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Autopilot4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Autopilot": { - "main": [ - [ - { - "node": "Autopilot1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Autopilot1": { - "main": [ - [ - { - "node": "Autopilot2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Autopilot2": { - "main": [ - [ - { - "node": "Autopilot6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Autopilot4": { - "main": [ - [ - { - "node": "Autopilot5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Autopilot5": { - "main": [ - [ - { - "node": "Autopilot", - "type": "main", - "index": 0 - } - ] - ] - }, - "Autopilot6": { - "main": [ - [ - { - "node": "Autopilot7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Autopilot7": { - "main": [ - [ - { - "node": "Autopilot8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Autopilot8": { - "main": [ - [ - { - "node": "Autopilot9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Autopilot9": { - "main": [ - [ - { - "node": "Autopilot3", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/221.json b/test-workflows/workflows/221.json deleted file mode 100644 index 63c049d3971..00000000000 --- a/test-workflows/workflows/221.json +++ /dev/null @@ -1,930 +0,0 @@ -{ - "createdAt": "2021-06-25T10:58:54.559Z", - "updatedAt": "2021-07-09T10:01:28.338Z", - "id": "221", - "name": "Copper:Company:*:Person:*:Opportunity:*:Project:*:Task:*:CustomerSource:getAll:User:getAll", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "3524ea35-2975-49aa-8a25-0980af2d16ff" - }, - { - "parameters": { - "name": "=Company{{Date.now()}}", - "additionalFields": { - "address": { - "addressFields": { - "street": "street", - "city": "city", - "state": "state", - "postal_code": "1001", - "country": "country" - } - }, - "details": "Description ", - "email_domain": "=Test{{Date.now()}}", - "phone_numbers": { - "phoneFields": [ - { - "number": "42424242", - "category": "mobile" - } - ] - } - } - }, - "name": "Copper", - "type": "n8n-nodes-base.copper", - "typeVersion": 1, - "position": [ - 500, - 130 - ], - "credentials": { - "copperApi": { - "id": "214", - "name": "Copper API creds" - } - }, - "id": "c7d44454-2d3f-446a-a21f-ba97dee874c2" - }, - { - "parameters": { - "operation": "get", - "companyId": "={{$node[\"Copper\"].json[\"id\"]}}" - }, - "name": "Copper1", - "type": "n8n-nodes-base.copper", - "typeVersion": 1, - "position": [ - 650, - 130 - ], - "credentials": { - "copperApi": { - "id": "214", - "name": "Copper API creds" - } - }, - "id": "80a08b49-e665-4b05-93b3-f4354d107800" - }, - { - "parameters": { - "operation": "update", - "companyId": "={{$node[\"Copper\"].json[\"id\"]}}", - "updateFields": { - "address": { - "addressFields": { - "street": "UpdateStreet", - "city": "UpdatedCity", - "state": "UpdateState", - "postal_code": "1002", - "country": "UpdateCountry" - } - }, - "name": "=Updated{{$node[\"Copper1\"].json[\"name\"]}}" - } - }, - "name": "Copper2", - "type": "n8n-nodes-base.copper", - "typeVersion": 1, - "position": [ - 800, - 130 - ], - "credentials": { - "copperApi": { - "id": "214", - "name": "Copper API creds" - } - }, - "id": "c3ada9b0-26af-4531-b932-e2f0a4c672d9" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "filterFields": { - "name": "={{$node[\"Copper2\"].json[\"name\"]}}" - } - }, - "name": "Copper3", - "type": "n8n-nodes-base.copper", - "typeVersion": 1, - "position": [ - 950, - 130 - ], - "credentials": { - "copperApi": { - "id": "214", - "name": "Copper API creds" - } - }, - "id": "ee32ed20-d5f4-40e3-8288-a678df7c9c98" - }, - { - "parameters": { - "operation": "delete", - "companyId": "={{$node[\"Copper\"].json[\"id\"]}}" - }, - "name": "Copper4", - "type": "n8n-nodes-base.copper", - "typeVersion": 1, - "position": [ - 1100, - 130 - ], - "credentials": { - "copperApi": { - "id": "214", - "name": "Copper API creds" - } - }, - "id": "b4c3643c-e8d5-41ce-87fd-9edd54201956" - }, - { - "parameters": { - "resource": "customerSource", - "limit": 1 - }, - "name": "Copper5", - "type": "n8n-nodes-base.copper", - "typeVersion": 1, - "position": [ - 650, - 440 - ], - "credentials": { - "copperApi": { - "id": "214", - "name": "Copper API creds" - } - }, - "id": "ec0a392e-77a5-4c30-a1f1-31554e924160" - }, - { - "parameters": { - "resource": "person", - "name": "=Person{{Date.now()}}", - "additionalFields": { - "details": "Person description - Test" - } - }, - "name": "Copper6", - "type": "n8n-nodes-base.copper", - "typeVersion": 1, - "position": [ - 500, - 290 - ], - "credentials": { - "copperApi": { - "id": "214", - "name": "Copper API creds" - } - }, - "id": "de249aff-db75-4937-a878-25ad37c5b160" - }, - { - "parameters": { - "resource": "person", - "operation": "get", - "personId": "={{$node[\"Copper6\"].json[\"id\"]}}" - }, - "name": "Copper7", - "type": "n8n-nodes-base.copper", - "typeVersion": 1, - "position": [ - 750, - 290 - ], - "credentials": { - "copperApi": { - "id": "214", - "name": "Copper API creds" - } - }, - "id": "2ab13b8a-2012-4b79-8b66-c01e2e539168" - }, - { - "parameters": { - "resource": "person", - "operation": "update", - "personId": "={{$node[\"Copper6\"].json[\"id\"]}}", - "updateFields": { - "name": "=Updated{{$node[\"Copper7\"].json[\"name\"]}}" - } - }, - "name": "Copper8", - "type": "n8n-nodes-base.copper", - "typeVersion": 1, - "position": [ - 900, - 290 - ], - "credentials": { - "copperApi": { - "id": "214", - "name": "Copper API creds" - } - }, - "id": "036bce7e-3450-4dc5-a8d9-09031be7b283" - }, - { - "parameters": { - "resource": "person", - "operation": "getAll", - "limit": 1, - "filterFields": {} - }, - "name": "Copper9", - "type": "n8n-nodes-base.copper", - "typeVersion": 1, - "position": [ - 1050, - 290 - ], - "credentials": { - "copperApi": { - "id": "214", - "name": "Copper API creds" - } - }, - "id": "0ee23c1e-c3fc-44d2-ab7f-962fcb519d5f" - }, - { - "parameters": { - "resource": "person", - "operation": "delete", - "personId": "={{$node[\"Copper6\"].json[\"id\"]}}" - }, - "name": "Copper10", - "type": "n8n-nodes-base.copper", - "typeVersion": 1, - "position": [ - 1200, - 290 - ], - "credentials": { - "copperApi": { - "id": "214", - "name": "Copper API creds" - } - }, - "id": "23ceb77e-bc3d-4e38-8d9c-339149e82555" - }, - { - "parameters": { - "resource": "project", - "name": "=Project{{Date.now()}}", - "additionalFields": { - "details": "Detail projects - Test", - "status": "Open" - } - }, - "name": "Copper11", - "type": "n8n-nodes-base.copper", - "typeVersion": 1, - "position": [ - 500, - 590 - ], - "credentials": { - "copperApi": { - "id": "214", - "name": "Copper API creds" - } - }, - "id": "987fcbb0-1be5-49b7-88cc-706e091200c4" - }, - { - "parameters": { - "resource": "project", - "operation": "get", - "projectId": "={{$node[\"Copper11\"].json[\"id\"]}}" - }, - "name": "Copper12", - "type": "n8n-nodes-base.copper", - "typeVersion": 1, - "position": [ - 650, - 590 - ], - "credentials": { - "copperApi": { - "id": "214", - "name": "Copper API creds" - } - }, - "id": "8c6eab76-1955-46f8-99c0-f6e7cba6d089" - }, - { - "parameters": { - "resource": "project", - "operation": "update", - "projectId": "={{$node[\"Copper11\"].json[\"id\"]}}", - "updateFields": { - "details": "Completed Update", - "name": "=Upated{{$node[\"Copper12\"].json[\"name\"]}}", - "status": "Completed" - } - }, - "name": "Copper13", - "type": "n8n-nodes-base.copper", - "typeVersion": 1, - "position": [ - 800, - 590 - ], - "credentials": { - "copperApi": { - "id": "214", - "name": "Copper API creds" - } - }, - "id": "bb59c271-79e0-48f1-8f7c-2495fa913b16" - }, - { - "parameters": { - "resource": "project", - "operation": "getAll", - "limit": 1, - "filterFields": {} - }, - "name": "Copper14", - "type": "n8n-nodes-base.copper", - "typeVersion": 1, - "position": [ - 950, - 590 - ], - "credentials": { - "copperApi": { - "id": "214", - "name": "Copper API creds" - } - }, - "id": "322d58e4-799a-43f4-893a-93ef541e1250" - }, - { - "parameters": { - "resource": "project", - "operation": "delete", - "projectId": "={{$node[\"Copper11\"].json[\"id\"]}}" - }, - "name": "Copper15", - "type": "n8n-nodes-base.copper", - "typeVersion": 1, - "position": [ - 1100, - 590 - ], - "credentials": { - "copperApi": { - "id": "214", - "name": "Copper API creds" - } - }, - "id": "3319110f-6cee-48da-a712-02e462c6eb63" - }, - { - "parameters": { - "resource": "task", - "name": "=Task{{Date.now()}}", - "additionalFields": { - "details": "Task description", - "priority": "High", - "status": "Open" - } - }, - "name": "Copper16", - "type": "n8n-nodes-base.copper", - "typeVersion": 1, - "position": [ - 500, - 740 - ], - "credentials": { - "copperApi": { - "id": "214", - "name": "Copper API creds" - } - }, - "id": "cf53821f-74de-44c4-9e18-da30dbebba9e" - }, - { - "parameters": { - "resource": "task", - "operation": "get", - "taskId": "={{$node[\"Copper16\"].json[\"id\"]}}" - }, - "name": "Copper17", - "type": "n8n-nodes-base.copper", - "typeVersion": 1, - "position": [ - 650, - 740 - ], - "credentials": { - "copperApi": { - "id": "214", - "name": "Copper API creds" - } - }, - "id": "564d21cd-fc4c-4b55-8068-bd4c559aa73d" - }, - { - "parameters": { - "resource": "task", - "operation": "update", - "taskId": "={{$node[\"Copper16\"].json[\"id\"]}}", - "updateFields": { - "details": "Update task description", - "name": "=Updated{{$node[\"Copper17\"].json[\"name\"]}}", - "priority": "None", - "status": "Completed" - } - }, - "name": "Copper18", - "type": "n8n-nodes-base.copper", - "typeVersion": 1, - "position": [ - 800, - 740 - ], - "credentials": { - "copperApi": { - "id": "214", - "name": "Copper API creds" - } - }, - "id": "1e015bc3-f684-42da-80ff-d523ba36fa5d" - }, - { - "parameters": { - "resource": "task", - "operation": "getAll", - "limit": 1, - "filterFields": { - "project_ids": "={{$node[\"Copper18\"].json[\"id\"]}}," - } - }, - "name": "Copper19", - "type": "n8n-nodes-base.copper", - "typeVersion": 1, - "position": [ - 950, - 740 - ], - "credentials": { - "copperApi": { - "id": "214", - "name": "Copper API creds" - } - }, - "id": "e8986a4b-02b9-4596-9512-078f88be2431" - }, - { - "parameters": { - "resource": "task", - "operation": "delete", - "taskId": "={{$node[\"Copper16\"].json[\"id\"]}}" - }, - "name": "Copper20", - "type": "n8n-nodes-base.copper", - "typeVersion": 1, - "position": [ - 1100, - 740 - ], - "credentials": { - "copperApi": { - "id": "214", - "name": "Copper API creds" - } - }, - "id": "b5cd7438-3115-4146-8607-34b67476f5b3" - }, - { - "parameters": { - "resource": "user", - "limit": 1 - }, - "name": "Copper21", - "type": "n8n-nodes-base.copper", - "typeVersion": 1, - "position": [ - 500, - -10 - ], - "credentials": { - "copperApi": { - "id": "214", - "name": "Copper API creds" - } - }, - "id": "94cdc07a-0c7e-4f25-a1c0-e1385358a455" - }, - { - "parameters": { - "resource": "opportunity", - "name": "=Opportunity{{Date.now()}}", - "customerSourceId": "={{$node[\"Copper5\"].json[\"id\"]}}", - "primaryContactId": "={{$node[\"Copper6\"].json[\"id\"]}}" - }, - "name": "Copper22", - "type": "n8n-nodes-base.copper", - "typeVersion": 1, - "position": [ - 800, - 440 - ], - "credentials": { - "copperApi": { - "id": "214", - "name": "Copper API creds" - } - }, - "id": "c8d1ed81-1892-4687-9506-4df121ba7b53" - }, - { - "parameters": { - "resource": "opportunity", - "operation": "get", - "opportunityId": "={{$node[\"Copper22\"].json[\"id\"]}}" - }, - "name": "Copper23", - "type": "n8n-nodes-base.copper", - "typeVersion": 1, - "position": [ - 950, - 440 - ], - "credentials": { - "copperApi": { - "id": "214", - "name": "Copper API creds" - } - }, - "id": "8aa793b5-49d9-4329-9f59-95d265d9df92" - }, - { - "parameters": { - "resource": "opportunity", - "operation": "update", - "opportunityId": "={{$node[\"Copper22\"].json[\"id\"]}}", - "updateFields": { - "name": "=Updated{{$node[\"Copper23\"].json[\"name\"]}}" - } - }, - "name": "Copper24", - "type": "n8n-nodes-base.copper", - "typeVersion": 1, - "position": [ - 1100, - 440 - ], - "credentials": { - "copperApi": { - "id": "214", - "name": "Copper API creds" - } - }, - "id": "64ded247-0c6f-4256-9689-dbc4738df63a" - }, - { - "parameters": { - "resource": "opportunity", - "operation": "getAll", - "limit": 1, - "filterFields": {} - }, - "name": "Copper25", - "type": "n8n-nodes-base.copper", - "typeVersion": 1, - "position": [ - 1250, - 440 - ], - "credentials": { - "copperApi": { - "id": "214", - "name": "Copper API creds" - } - }, - "id": "3834c3ed-308c-46c7-9aa6-3bc441d11897" - }, - { - "parameters": { - "resource": "opportunity", - "operation": "delete", - "opportunityId": "={{$node[\"Copper22\"].json[\"id\"]}}" - }, - "name": "Copper26", - "type": "n8n-nodes-base.copper", - "typeVersion": 1, - "position": [ - 1400, - 440 - ], - "credentials": { - "copperApi": { - "id": "214", - "name": "Copper API creds" - } - }, - "id": "6c2b484c-d78f-412a-ac33-eb5637fd30fa" - } - ], - "connections": { - "Copper": { - "main": [ - [ - { - "node": "Copper1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Copper1": { - "main": [ - [ - { - "node": "Copper2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Copper2": { - "main": [ - [ - { - "node": "Copper3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Copper3": { - "main": [ - [ - { - "node": "Copper4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Copper6": { - "main": [ - [ - { - "node": "Copper5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Copper7": { - "main": [ - [ - { - "node": "Copper8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Copper8": { - "main": [ - [ - { - "node": "Copper9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Copper9": { - "main": [ - [ - { - "node": "Copper10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Copper11": { - "main": [ - [ - { - "node": "Copper12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Copper12": { - "main": [ - [ - { - "node": "Copper13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Copper13": { - "main": [ - [ - { - "node": "Copper14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Copper14": { - "main": [ - [ - { - "node": "Copper15", - "type": "main", - "index": 0 - } - ] - ] - }, - "Copper16": { - "main": [ - [ - { - "node": "Copper17", - "type": "main", - "index": 0 - } - ] - ] - }, - "Copper17": { - "main": [ - [ - { - "node": "Copper18", - "type": "main", - "index": 0 - } - ] - ] - }, - "Copper18": { - "main": [ - [ - { - "node": "Copper19", - "type": "main", - "index": 0 - } - ] - ] - }, - "Copper19": { - "main": [ - [ - { - "node": "Copper20", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Copper", - "type": "main", - "index": 0 - }, - { - "node": "Copper6", - "type": "main", - "index": 0 - }, - { - "node": "Copper11", - "type": "main", - "index": 0 - }, - { - "node": "Copper16", - "type": "main", - "index": 0 - }, - { - "node": "Copper21", - "type": "main", - "index": 0 - } - ] - ] - }, - "Copper5": { - "main": [ - [ - { - "node": "Copper22", - "type": "main", - "index": 0 - } - ] - ] - }, - "Copper22": { - "main": [ - [ - { - "node": "Copper23", - "type": "main", - "index": 0 - } - ] - ] - }, - "Copper23": { - "main": [ - [ - { - "node": "Copper24", - "type": "main", - "index": 0 - } - ] - ] - }, - "Copper24": { - "main": [ - [ - { - "node": "Copper25", - "type": "main", - "index": 0 - } - ] - ] - }, - "Copper25": { - "main": [ - [ - { - "node": "Copper26", - "type": "main", - "index": 0 - } - ] - ] - }, - "Copper26": { - "main": [ - [ - { - "node": "Copper7", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/222.json b/test-workflows/workflows/222.json deleted file mode 100644 index 35b31e505b1..00000000000 --- a/test-workflows/workflows/222.json +++ /dev/null @@ -1,336 +0,0 @@ -{ - "createdAt": "2021-07-02T07:59:24.159Z", - "updatedAt": "2021-07-09T10:56:03.728Z", - "id": "222", - "name": "Lemlist:Lead:create get unsubscribe delete:Campaign:getAll:Activity:getAll:Team:get:Unsubscribe:add getAll delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "3fd92007-e246-4af4-a0bd-af520944645a" - }, - { - "parameters": { - "limit": 1, - "filters": { - "campaignId": "={{$node[\"Lemlist1\"].json[\"_id\"]}}" - } - }, - "name": "Lemlist", - "type": "n8n-nodes-base.lemlist", - "typeVersion": 1, - "position": [ - 590, - 300 - ], - "credentials": { - "lemlistApi": { - "id": "215", - "name": "Lemlist API creds" - } - }, - "id": "487b4ba3-99b4-468f-b462-d0c7afb9c13f" - }, - { - "parameters": { - "resource": "campaign", - "limit": 1 - }, - "name": "Lemlist1", - "type": "n8n-nodes-base.lemlist", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "lemlistApi": { - "id": "215", - "name": "Lemlist API creds" - } - }, - "id": "7d261b8d-cff1-4d87-b356-7a4f3be78428" - }, - { - "parameters": { - "resource": "team" - }, - "name": "Lemlist2", - "type": "n8n-nodes-base.lemlist", - "typeVersion": 1, - "position": [ - 450, - 150 - ], - "credentials": { - "lemlistApi": { - "id": "215", - "name": "Lemlist API creds" - } - }, - "id": "df32604f-1d9a-4a7f-9add-1b154962f7ac" - }, - { - "parameters": { - "resource": "lead", - "campaignId": "={{$node[\"Lemlist1\"].json[\"_id\"]}}", - "email": "=fake{{Date.now()}}@gmail.com", - "additionalFields": {} - }, - "name": "Lemlist3", - "type": "n8n-nodes-base.lemlist", - "typeVersion": 1, - "position": [ - 600, - 150 - ], - "credentials": { - "lemlistApi": { - "id": "215", - "name": "Lemlist API creds" - } - }, - "id": "1432df44-c5b6-4637-a3f2-379e34f75fae" - }, - { - "parameters": { - "resource": "lead", - "operation": "get", - "email": "={{$node[\"Lemlist3\"].json[\"email\"]}}" - }, - "name": "Lemlist4", - "type": "n8n-nodes-base.lemlist", - "typeVersion": 1, - "position": [ - 750, - 150 - ], - "credentials": { - "lemlistApi": { - "id": "215", - "name": "Lemlist API creds" - } - }, - "id": "ded2cabd-92e8-4881-ab92-a469efccaef1" - }, - { - "parameters": { - "resource": "lead", - "operation": "unsubscribe", - "campaignId": "={{$node[\"Lemlist1\"].json[\"_id\"]}}", - "email": "={{$node[\"Lemlist3\"].json[\"email\"]}}" - }, - "name": "Lemlist5", - "type": "n8n-nodes-base.lemlist", - "typeVersion": 1, - "position": [ - 900, - 150 - ], - "credentials": { - "lemlistApi": { - "id": "215", - "name": "Lemlist API creds" - } - }, - "id": "de9bdf0c-0f64-4d90-bd11-4f11fb1e7184" - }, - { - "parameters": { - "resource": "lead", - "operation": "delete", - "campaignId": "={{$node[\"Lemlist1\"].json[\"_id\"]}}", - "email": "={{$node[\"Lemlist3\"].json[\"email\"]}}" - }, - "name": "Lemlist6", - "type": "n8n-nodes-base.lemlist", - "typeVersion": 1, - "position": [ - 1050, - 150 - ], - "credentials": { - "lemlistApi": { - "id": "215", - "name": "Lemlist API creds" - } - }, - "id": "364bf6ff-2417-46b0-a0ee-5a4727cf7228" - }, - { - "parameters": { - "resource": "unsubscribe", - "email": "=fakeemail{{Date.now()}}@mail.test" - }, - "name": "Lemlist7", - "type": "n8n-nodes-base.lemlist", - "typeVersion": 1, - "position": [ - 450, - 450 - ], - "credentials": { - "lemlistApi": { - "id": "215", - "name": "Lemlist API creds" - } - }, - "id": "2d0091c7-b0d9-43ff-b523-7e31bd14c872" - }, - { - "parameters": { - "resource": "unsubscribe", - "operation": "getAll", - "limit": 1 - }, - "name": "Lemlist9", - "type": "n8n-nodes-base.lemlist", - "typeVersion": 1, - "position": [ - 600, - 450 - ], - "credentials": { - "lemlistApi": { - "id": "215", - "name": "Lemlist API creds" - } - }, - "id": "a9b87222-01ce-42d8-9d58-21c82f3fd2eb" - }, - { - "parameters": { - "resource": "unsubscribe", - "operation": "delete", - "email": "={{$node[\"Lemlist7\"].json[\"email\"]}}" - }, - "name": "Lemlist10", - "type": "n8n-nodes-base.lemlist", - "typeVersion": 1, - "position": [ - 750, - 450 - ], - "credentials": { - "lemlistApi": { - "id": "215", - "name": "Lemlist API creds" - } - }, - "id": "d967d1a8-66ac-46f7-9930-10509859fe1c" - } - ], - "connections": { - "Lemlist": { - "main": [ - [] - ] - }, - "Lemlist1": { - "main": [ - [ - { - "node": "Lemlist", - "type": "main", - "index": 0 - }, - { - "node": "Lemlist3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Lemlist3": { - "main": [ - [ - { - "node": "Lemlist4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Lemlist4": { - "main": [ - [ - { - "node": "Lemlist5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Lemlist5": { - "main": [ - [ - { - "node": "Lemlist6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Lemlist1", - "type": "main", - "index": 0 - }, - { - "node": "Lemlist2", - "type": "main", - "index": 0 - }, - { - "node": "Lemlist7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Lemlist7": { - "main": [ - [ - { - "node": "Lemlist9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Lemlist9": { - "main": [ - [ - { - "node": "Lemlist10", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/223.json b/test-workflows/workflows/223.json deleted file mode 100644 index f5dd403bb62..00000000000 --- a/test-workflows/workflows/223.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "createdAt": "2021-07-02T10:27:33.975Z", - "updatedAt": "2021-07-09T11:10:22.318Z", - "id": "223", - "name": "LingvaNex:Translate", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "61781654-9992-4dd9-8224-943ecf740806" - }, - { - "parameters": { - "text": "automation", - "translateTo": "de_DE", - "options": { - "from": "en_US" - } - }, - "name": "LingvaNex", - "type": "n8n-nodes-base.lingvaNex", - "typeVersion": 1, - "position": [ - 500, - 300 - ], - "credentials": { - "lingvaNexApi": { - "id": "216", - "name": "LingvaNex API creds" - } - }, - "id": "68e11f02-34e0-47d6-a175-81abf5002b28" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "LingvaNex", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/224.json b/test-workflows/workflows/224.json deleted file mode 100644 index 55f9eb00665..00000000000 --- a/test-workflows/workflows/224.json +++ /dev/null @@ -1,404 +0,0 @@ -{ - "createdAt": "2021-07-05T14:32:19.990Z", - "updatedAt": "2021-07-09T12:39:46.228Z", - "id": "224", - "name": "QuickBase:Record:create update getAll upsert:Report:run get:Field:getAll:File:download", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 250 - ], - "id": "bf5f914e-83a9-4ad6-a539-d2eda48cf8ea" - }, - { - "parameters": { - "resource": "field", - "tableId": "brkf6p68v", - "limit": 1, - "options": {} - }, - "name": "Quick Base", - "type": "n8n-nodes-base.quickbase", - "typeVersion": 1, - "position": [ - 450, - 90 - ], - "credentials": { - "quickbaseApi": { - "id": "217", - "name": "Quick Base API creds" - } - }, - "id": "f5a894fe-fd72-43d9-8d19-a3913ad04c56" - }, - { - "parameters": { - "tableId": "brkf6p68v", - "columns": "name", - "simple": false, - "options": { - "fields": [ - 2, - 1, - 6, - 3 - ] - } - }, - "name": "Quick Base1", - "type": "n8n-nodes-base.quickbase", - "typeVersion": 1, - "position": [ - 590, - 240 - ], - "credentials": { - "quickbaseApi": { - "id": "217", - "name": "Quick Base API creds" - } - }, - "id": "873001c3-3c1f-4311-9b5a-a04d3bdf5321" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "name", - "value": "=TestRecordName{{Date.now()}}" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 450, - 240 - ], - "id": "c4613406-ddd6-4f8e-bef9-cf65f1250840" - }, - { - "parameters": { - "operation": "update", - "tableId": "brkf6p68v", - "columns": "name", - "updateKey": "=name", - "simple": false, - "options": { - "fields": [ - 2, - 1, - 6, - 3 - ] - } - }, - "name": "Quick Base2", - "type": "n8n-nodes-base.quickbase", - "typeVersion": 1, - "position": [ - 890, - 240 - ], - "credentials": { - "quickbaseApi": { - "id": "217", - "name": "Quick Base API creds" - } - }, - "id": "0a93b666-c58c-4b85-950b-1abb94fe66d8" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "name", - "value": "=UpdatedTestRecordName{{Date.now()}}" - } - ] - }, - "options": {} - }, - "name": "Set1", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 740, - 240 - ], - "id": "72a5922b-dbb9-4e44-85d1-6bb89eef35b0" - }, - { - "parameters": { - "operation": "getAll", - "tableId": "brkf6p68v", - "limit": 1, - "options": { - "select": [ - 6, - 3 - ] - } - }, - "name": "Quick Base3", - "type": "n8n-nodes-base.quickbase", - "typeVersion": 1, - "position": [ - 1040, - 240 - ], - "credentials": { - "quickbaseApi": { - "id": "217", - "name": "Quick Base API creds" - } - }, - "id": "8529e62b-8274-46d2-be2f-bdba8dae2765" - }, - { - "parameters": { - "operation": "upsert", - "tableId": "brkf6p68v", - "columns": "name", - "updateKey": "name", - "options": { - "fields": [ - 6, - 3 - ] - } - }, - "name": "Quick Base4", - "type": "n8n-nodes-base.quickbase", - "typeVersion": 1, - "position": [ - 1340, - 240 - ], - "credentials": { - "quickbaseApi": { - "id": "217", - "name": "Quick Base API creds" - } - }, - "id": "ff322a95-9fe6-4432-98fe-e655c69c212a" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "name", - "value": "=TestUpsertRecordName{{Date.now()}}" - } - ] - }, - "options": {} - }, - "name": "Set2", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 1190, - 240 - ], - "id": "7df37b96-5357-4f1b-ae79-deaa537b7a79" - }, - { - "parameters": { - "resource": "report", - "operation": "run", - "tableId": "brkf6p68v", - "reportId": "1", - "returnAll": false, - "limit": 1 - }, - "name": "Quick Base5", - "type": "n8n-nodes-base.quickbase", - "typeVersion": 1, - "position": [ - 450, - 390 - ], - "credentials": { - "quickbaseApi": { - "id": "217", - "name": "Quick Base API creds" - } - }, - "id": "2b8bbaa2-0983-4074-932e-4ba02d74448b" - }, - { - "parameters": { - "resource": "report", - "tableId": "brkf6p68v", - "reportId": "1" - }, - "name": "Quick Base6", - "type": "n8n-nodes-base.quickbase", - "typeVersion": 1, - "position": [ - 600, - 390 - ], - "credentials": { - "quickbaseApi": { - "id": "217", - "name": "Quick Base API creds" - } - }, - "id": "4b2c54e4-17c3-4648-aa4a-6bd9052a8364" - }, - { - "parameters": { - "resource": "file", - "tableId": "brkf6p68v", - "recordId": "1", - "fieldId": "9" - }, - "name": "Quick Base7", - "type": "n8n-nodes-base.quickbase", - "typeVersion": 1, - "position": [ - 450, - 540 - ], - "credentials": { - "quickbaseApi": { - "id": "217", - "name": "Quick Base API creds" - } - }, - "id": "70bd2916-790b-4791-8bd3-964ecca4d109" - } - ], - "connections": { - "Set": { - "main": [ - [ - { - "node": "Quick Base1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Quick Base1": { - "main": [ - [ - { - "node": "Set1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set1": { - "main": [ - [ - { - "node": "Quick Base2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Quick Base2": { - "main": [ - [ - { - "node": "Quick Base3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Quick Base3": { - "main": [ - [ - { - "node": "Set2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set2": { - "main": [ - [ - { - "node": "Quick Base4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - }, - { - "node": "Quick Base", - "type": "main", - "index": 0 - }, - { - "node": "Quick Base5", - "type": "main", - "index": 0 - }, - { - "node": "Quick Base7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Quick Base5": { - "main": [ - [ - { - "node": "Quick Base6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Quick Base7": { - "main": [ - [] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/225.json b/test-workflows/workflows/225.json deleted file mode 100644 index e3eadfe61ad..00000000000 --- a/test-workflows/workflows/225.json +++ /dev/null @@ -1,546 +0,0 @@ -{ - "createdAt": "2021-07-06T12:49:19.325Z", - "updatedAt": "2021-07-09T13:11:16.807Z", - "id": "225", - "name": "Salesmate:Company:*:Deal:*:Activity:*", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "d47537bc-67a1-47ac-9410-957dda70e3f4" - }, - { - "parameters": { - "resource": "company", - "name": "=Company{{Date.now()}}", - "owner": 1, - "additionalFields": { - "description": "descrip company" - } - }, - "name": "Salesmate", - "type": "n8n-nodes-base.salesmate", - "typeVersion": 1, - "position": [ - 450, - 150 - ], - "credentials": { - "salesmateApi": { - "id": "218", - "name": "Salesmate API creds" - } - }, - "id": "9e381841-e89b-4231-a1ca-b58c2b894dfc" - }, - { - "parameters": { - "resource": "company", - "operation": "get", - "id": "={{$node[\"Salesmate\"].json[\"id\"]}}" - }, - "name": "Salesmate1", - "type": "n8n-nodes-base.salesmate", - "typeVersion": 1, - "position": [ - 600, - 150 - ], - "credentials": { - "salesmateApi": { - "id": "218", - "name": "Salesmate API creds" - } - }, - "id": "da6626ca-4b9e-4cec-bf60-103a042ac6f3" - }, - { - "parameters": { - "resource": "company", - "operation": "update", - "id": "={{$node[\"Salesmate\"].json[\"id\"]}}", - "updateFields": { - "name": "=Updated{{$node[\"Salesmate\"].json[\"name\"]}}", - "description": "=Updated - {{$node[\"Salesmate\"].json[\"description\"]}}" - } - }, - "name": "Salesmate2", - "type": "n8n-nodes-base.salesmate", - "typeVersion": 1, - "position": [ - 750, - 150 - ], - "credentials": { - "salesmateApi": { - "id": "218", - "name": "Salesmate API creds" - } - }, - "id": "9aed3a7e-ec9c-4ff0-81b7-feec1f0ecb19" - }, - { - "parameters": { - "resource": "company", - "operation": "getAll", - "limit": 1, - "options": { - "fields": "id,name,description", - "sortBy": "" - }, - "filters": { - "filtersUi": { - "conditions": { - "conditionsUi": [ - { - "condition": "STARTS_WITH", - "value": "Updated" - } - ] - } - } - } - }, - "name": "Salesmate3", - "type": "n8n-nodes-base.salesmate", - "typeVersion": 1, - "position": [ - 900, - 150 - ], - "credentials": { - "salesmateApi": { - "id": "218", - "name": "Salesmate API creds" - } - }, - "id": "1473e087-a4e1-42da-8ef9-a3bbd86727ce" - }, - { - "parameters": { - "resource": "company", - "operation": "delete", - "id": "={{$node[\"Salesmate\"].json[\"id\"]}}" - }, - "name": "Salesmate4", - "type": "n8n-nodes-base.salesmate", - "typeVersion": 1, - "position": [ - 1050, - 150 - ], - "credentials": { - "salesmateApi": { - "id": "218", - "name": "Salesmate API creds" - } - }, - "id": "85405bf3-34f5-495b-9f56-3cc5c6825b89" - }, - { - "parameters": { - "resource": "deal", - "title": "=Deal{{Date.now()}}", - "owner": 1, - "primaryContact": 2, - "pipeline": "Sales", - "stage": "New (Untouched)", - "currency": "USD", - "additionalFields": { - "description": "description", - "dealValue": 100 - } - }, - "name": "Salesmate5", - "type": "n8n-nodes-base.salesmate", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "salesmateApi": { - "id": "218", - "name": "Salesmate API creds" - } - }, - "id": "30c81868-cea1-44bd-bacf-a08b131e4a42" - }, - { - "parameters": { - "resource": "deal", - "operation": "get", - "id": "={{$node[\"Salesmate5\"].json[\"id\"]}}" - }, - "name": "Salesmate6", - "type": "n8n-nodes-base.salesmate", - "typeVersion": 1, - "position": [ - 600, - 300 - ], - "credentials": { - "salesmateApi": { - "id": "218", - "name": "Salesmate API creds" - } - }, - "id": "4959dbb6-bc71-4b26-87f6-9bb86829dc53" - }, - { - "parameters": { - "resource": "deal", - "operation": "update", - "id": "={{$node[\"Salesmate5\"].json[\"id\"]}}", - "updateFields": { - "title": "=Updated{{$node[\"Salesmate6\"].json[\"title\"]}}", - "status": "Lost", - "stage": "Contacted" - } - }, - "name": "Salesmate7", - "type": "n8n-nodes-base.salesmate", - "typeVersion": 1, - "position": [ - 750, - 300 - ], - "credentials": { - "salesmateApi": { - "id": "218", - "name": "Salesmate API creds" - } - }, - "id": "0af25087-9407-4327-bb19-85a7c468ae19" - }, - { - "parameters": { - "resource": "deal", - "operation": "getAll", - "limit": 1, - "options": { - "sortBy": "createdAt", - "sortOrder": "desc" - } - }, - "name": "Salesmate8", - "type": "n8n-nodes-base.salesmate", - "typeVersion": 1, - "position": [ - 900, - 300 - ], - "credentials": { - "salesmateApi": { - "id": "218", - "name": "Salesmate API creds" - } - }, - "id": "9ec365f7-9638-42dd-9aa6-9342a4dacd46" - }, - { - "parameters": { - "resource": "deal", - "operation": "delete", - "id": "={{$node[\"Salesmate5\"].json[\"id\"]}}" - }, - "name": "Salesmate9", - "type": "n8n-nodes-base.salesmate", - "typeVersion": 1, - "position": [ - 1050, - 300 - ], - "credentials": { - "salesmateApi": { - "id": "218", - "name": "Salesmate API creds" - } - }, - "id": "97f624b7-65f4-4192-8e9d-3801ea3ca34c" - }, - { - "parameters": { - "title": "=Activity{{Date.now()}}", - "owner": 1, - "type": "meeting", - "additionalFields": { - "description": "act descrp", - "duration": 30 - } - }, - "name": "Salesmate10", - "type": "n8n-nodes-base.salesmate", - "typeVersion": 1, - "position": [ - 450, - 450 - ], - "credentials": { - "salesmateApi": { - "id": "218", - "name": "Salesmate API creds" - } - }, - "id": "766fead2-c755-41cc-b43d-394a57791d74" - }, - { - "parameters": { - "operation": "get", - "id": "={{$node[\"Salesmate10\"].json[\"id\"]}}" - }, - "name": "Salesmate11", - "type": "n8n-nodes-base.salesmate", - "typeVersion": 1, - "position": [ - 600, - 450 - ], - "credentials": { - "salesmateApi": { - "id": "218", - "name": "Salesmate API creds" - } - }, - "id": "7df4f89c-f88d-49d4-b22c-9c5caf9bef69" - }, - { - "parameters": { - "operation": "update", - "id": "={{$node[\"Salesmate10\"].json[\"id\"]}}", - "updateFields": { - "title": "=Updated{{$node[\"Salesmate11\"].json[\"title\"]}}", - "description": "Updated description", - "isCompleted": true - } - }, - "name": "Salesmate12", - "type": "n8n-nodes-base.salesmate", - "typeVersion": 1, - "position": [ - 750, - 450 - ], - "credentials": { - "salesmateApi": { - "id": "218", - "name": "Salesmate API creds" - } - }, - "id": "f4498a03-3082-4bba-9531-ff896042b330" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "options": { - "sortBy": "createdAt", - "sortOrder": "desc" - } - }, - "name": "Salesmate13", - "type": "n8n-nodes-base.salesmate", - "typeVersion": 1, - "position": [ - 900, - 450 - ], - "credentials": { - "salesmateApi": { - "id": "218", - "name": "Salesmate API creds" - } - }, - "id": "c2f0236f-1e0f-47bd-b53a-daf3f468e3ba" - }, - { - "parameters": { - "operation": "delete", - "id": "={{$node[\"Salesmate10\"].json[\"id\"]}}" - }, - "name": "Salesmate14", - "type": "n8n-nodes-base.salesmate", - "typeVersion": 1, - "position": [ - 1050, - 450 - ], - "credentials": { - "salesmateApi": { - "id": "218", - "name": "Salesmate API creds" - } - }, - "id": "d602aba4-2d19-42cd-9e1c-735f2ffae4c4" - } - ], - "connections": { - "Salesmate": { - "main": [ - [ - { - "node": "Salesmate1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesmate1": { - "main": [ - [ - { - "node": "Salesmate2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesmate2": { - "main": [ - [ - { - "node": "Salesmate3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesmate3": { - "main": [ - [ - { - "node": "Salesmate4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesmate5": { - "main": [ - [ - { - "node": "Salesmate6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesmate6": { - "main": [ - [ - { - "node": "Salesmate7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesmate7": { - "main": [ - [ - { - "node": "Salesmate8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesmate8": { - "main": [ - [ - { - "node": "Salesmate9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesmate10": { - "main": [ - [ - { - "node": "Salesmate11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesmate11": { - "main": [ - [ - { - "node": "Salesmate12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesmate12": { - "main": [ - [ - { - "node": "Salesmate13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Salesmate13": { - "main": [ - [ - { - "node": "Salesmate14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Salesmate", - "type": "main", - "index": 0 - }, - { - "node": "Salesmate5", - "type": "main", - "index": 0 - }, - { - "node": "Salesmate10", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/226.json b/test-workflows/workflows/226.json deleted file mode 100644 index 9fae96f322c..00000000000 --- a/test-workflows/workflows/226.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "createdAt": "2021-07-07T14:29:45.509Z", - "updatedAt": "2021-07-09T13:40:17.209Z", - "id": "226", - "name": "UnleashedSoftware:SakesOrder:getAll:StockOnHand:getAll get", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "e60708c7-7fc5-4b69-9181-7dd94ce4c511" - }, - { - "parameters": { - "limit": 1, - "filters": {} - }, - "name": "Unleashed Software", - "type": "n8n-nodes-base.unleashedSoftware", - "typeVersion": 1, - "position": [ - 500, - 230 - ], - "credentials": { - "unleashedSoftwareApi": { - "id": "219", - "name": "Unleashed API creds" - } - }, - "id": "76856236-9d00-497b-a162-71621943085d" - }, - { - "parameters": { - "resource": "stockOnHand", - "limit": 1, - "filters": {} - }, - "name": "Unleashed Software1", - "type": "n8n-nodes-base.unleashedSoftware", - "typeVersion": 1, - "position": [ - 500, - 380 - ], - "credentials": { - "unleashedSoftwareApi": { - "id": "219", - "name": "Unleashed API creds" - } - }, - "id": "f5f1e555-171a-4a6c-a2c0-52c2cd763a9a" - }, - { - "parameters": { - "resource": "stockOnHand", - "operation": "get", - "productId": "={{$node[\"Unleashed Software1\"].json[\"Guid\"]}}" - }, - "name": "Unleashed Software2", - "type": "n8n-nodes-base.unleashedSoftware", - "typeVersion": 1, - "position": [ - 650, - 380 - ], - "credentials": { - "unleashedSoftwareApi": { - "id": "219", - "name": "Unleashed API creds" - } - }, - "id": "f0e49947-de25-46b8-8e00-0cc1967832a1" - } - ], - "connections": { - "Unleashed Software1": { - "main": [ - [ - { - "node": "Unleashed Software2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Unleashed Software", - "type": "main", - "index": 0 - }, - { - "node": "Unleashed Software1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/227.json b/test-workflows/workflows/227.json deleted file mode 100644 index 103556acd5d..00000000000 --- a/test-workflows/workflows/227.json +++ /dev/null @@ -1,165 +0,0 @@ -{ - "createdAt": "2021-07-08T14:10:14.879Z", - "updatedAt": "2021-07-09T14:05:22.996Z", - "id": "227", - "name": "Flow:Task:create get getAll update", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "077a12f0-e2c8-4990-bf0c-3705208c8ada" - }, - { - "parameters": { - "workspaceId": "473181", - "name": "=Task{{Date.now()}}", - "additionalFields": { - "noteContent": "Task content", - "noteMimeType": "text/plain", - "position": 1 - } - }, - "name": "Flow", - "type": "n8n-nodes-base.flow", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "flowApi": { - "id": "220", - "name": "Flow API creds" - } - }, - "id": "2a76f52f-0b77-4c76-bbca-c54e6581d13e" - }, - { - "parameters": { - "operation": "get", - "taskId": "={{$node[\"Flow\"].json[\"id\"]}}", - "filters": {} - }, - "name": "Flow1", - "type": "n8n-nodes-base.flow", - "typeVersion": 1, - "position": [ - 600, - 300 - ], - "credentials": { - "flowApi": { - "id": "220", - "name": "Flow API creds" - } - }, - "id": "c1f80e78-bad4-457f-8b00-a239a070ca09" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "Flow2", - "type": "n8n-nodes-base.flow", - "typeVersion": 1, - "position": [ - 750, - 300 - ], - "credentials": { - "flowApi": { - "id": "220", - "name": "Flow API creds" - } - }, - "id": "5ea201ba-164f-4ed0-be1d-d893930d6568" - }, - { - "parameters": { - "operation": "update", - "workspaceId": "473181", - "taskId": "={{$node[\"Flow\"].json[\"id\"]}}", - "updateFields": { - "name": "=Updated{{$node[\"Flow1\"].json[\"task\"][\"name\"]}}", - "completed": true - } - }, - "name": "Flow3", - "type": "n8n-nodes-base.flow", - "typeVersion": 1, - "position": [ - 900, - 300 - ], - "credentials": { - "flowApi": { - "id": "220", - "name": "Flow API creds" - } - }, - "id": "df48712d-b64d-43b8-8493-f053d5b52804" - } - ], - "connections": { - "Flow": { - "main": [ - [ - { - "node": "Flow1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Flow1": { - "main": [ - [ - { - "node": "Flow2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Flow2": { - "main": [ - [ - { - "node": "Flow3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Flow", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/229.json b/test-workflows/workflows/229.json deleted file mode 100644 index a5697ea2aba..00000000000 --- a/test-workflows/workflows/229.json +++ /dev/null @@ -1,731 +0,0 @@ -{ - "createdAt": "2022-09-23T13:17:35.393Z", - "updatedAt": "2022-09-23T13:17:42.056Z", - "id": "229", - "name": "GoogleDrive:Folder:create share delete:File:upload share list download copy delete copy (RL)", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 450 - ], - "id": "af503bcd-fa8c-4eaa-9c50-632c7692c6e8" - }, - { - "parameters": { - "resource": "folder", - "name": "testFolder", - "options": {} - }, - "name": "Google Drive", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 500, - 290 - ], - "id": "8b134518-c868-4ea9-8811-0a687f2485af", - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - } - }, - { - "parameters": { - "resource": "folder", - "operation": "share", - "fileId": "={{$node[\"Google Drive\"].json[\"id\"]}}", - "permissionsUi": { - "permissionsValues": { - "role": "reader", - "type": "anyone" - } - }, - "options": {} - }, - "name": "Google Drive1", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 670, - 290 - ], - "id": "b31303e6-a55d-4844-b829-35ec7b5ecfef", - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - } - }, - { - "parameters": { - "resource": "folder", - "operation": "delete", - "fileId": "={{$node[\"Google Drive\"].json[\"id\"]}}" - }, - "name": "Google Drive2", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 830, - 290 - ], - "id": "6868f66e-f772-4219-b633-774b1c2b621f", - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - } - }, - { - "parameters": { - "fileContent": "Test File Content", - "name": "testFile", - "options": {} - }, - "name": "Google Drive3", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 500, - 460 - ], - "id": "5a748249-c5e0-4d69-93dc-175b9f8d6416", - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - } - }, - { - "parameters": { - "operation": "share", - "fileId": "={{$node[\"Google Drive3\"].json[\"id\"]}}", - "permissionsUi": { - "permissionsValues": { - "role": "reader", - "type": "anyone" - } - }, - "options": {} - }, - "name": "Google Drive4", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 660, - 460 - ], - "id": "de39ddca-a217-4c46-b4d9-52a7eba74223", - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - } - }, - { - "parameters": { - "operation": "list", - "limit": 1, - "options": {} - }, - "name": "Google Drive5", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 820, - 460 - ], - "id": "46ef5f25-0096-4ee9-9930-ad476fcd0cb3", - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - } - }, - { - "parameters": { - "operation": "download", - "fileId": "={{$node[\"Google Drive3\"].json[\"id\"]}}", - "options": {} - }, - "name": "Google Drive6", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 960, - 460 - ], - "id": "a169ecfe-389b-41a3-8e27-e1f8e85afbc9", - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - } - }, - { - "parameters": { - "operation": "copy", - "fileId": "={{$node[\"Google Drive3\"].json[\"id\"]}}", - "options": {} - }, - "name": "Google Drive7", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 1100, - 460 - ], - "id": "f4a9acb4-c943-4e96-b830-6081a55ef14b", - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - } - }, - { - "parameters": { - "operation": "delete", - "fileId": "={{$node[\"Google Drive3\"].json[\"id\"]}}" - }, - "name": "Google Drive8", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 1240, - 460 - ], - "id": "b8dcbf39-f49f-4a58-8101-8effab64eb3e", - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - } - }, - { - "parameters": { - "operation": "delete", - "fileId": "={{$node[\"Google Drive7\"].json[\"id\"]}}" - }, - "name": "Google Drive9", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 1380, - 460 - ], - "id": "bea4ea40-6bd8-4378-a0b0-ad17b9bd237f", - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - } - }, - { - "parameters": { - "content": "## Legacy mode", - "height": 494.0510948905113, - "width": 1240.9160583941607 - }, - "id": "4a46fffc-779d-4d3e-865c-dd165caf1b0e", - "name": "Note", - "type": "n8n-nodes-base.stickyNote", - "typeVersion": 1, - "position": [ - 340, - 160 - ] - }, - { - "parameters": { - "operation": "delete", - "fileId": { - "__rl": true, - "value": "={{$node[\"Google Drive18\"].json[\"id\"]}}", - "mode": "id" - } - }, - "name": "Google Drive10", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 1400, - 980 - ], - "id": "b93f0486-16e4-4d59-9894-7e57cabb3a29", - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - } - }, - { - "parameters": { - "resource": "folder", - "name": "testFolder", - "options": {} - }, - "name": "Google Drive11", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 520, - 820 - ], - "id": "9785352c-2a2d-4ca1-baa7-0a310fd04413", - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - } - }, - { - "parameters": { - "resource": "folder", - "operation": "share", - "fileId": { - "__rl": true, - "value": "={{$node[\"Google Drive11\"].json[\"id\"]}}", - "mode": "id" - }, - "permissionsUi": { - "permissionsValues": { - "role": "reader", - "type": "anyone" - } - }, - "options": {} - }, - "name": "Google Drive12", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 680, - 820 - ], - "id": "a3fba084-d9c2-4311-a893-f2280313a784", - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - } - }, - { - "parameters": { - "resource": "folder", - "operation": "delete", - "fileId": { - "__rl": true, - "value": "={{$node[\"Google Drive11\"].json[\"id\"]}}", - "mode": "id" - } - }, - "name": "Google Drive13", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 840, - 820 - ], - "id": "2f78286f-efd2-4284-b5d4-7f58abebf896", - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - } - }, - { - "parameters": { - "fileContent": "Test File Content", - "name": "testFile", - "options": {} - }, - "name": "Google Drive14", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 520, - 980 - ], - "id": "c85b7694-685b-4fb3-bd63-46c2d5099c2e", - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - } - }, - { - "parameters": { - "operation": "share", - "fileId": { - "__rl": true, - "value": "={{$node[\"Google Drive14\"].json[\"id\"]}}", - "mode": "id" - }, - "permissionsUi": { - "permissionsValues": { - "role": "reader", - "type": "anyone" - } - }, - "options": {} - }, - "name": "Google Drive15", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 680, - 980 - ], - "id": "be2a8cd4-1e04-47cf-8073-109b7f7af275", - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - } - }, - { - "parameters": { - "operation": "list", - "limit": 1, - "options": {} - }, - "name": "Google Drive16", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 840, - 980 - ], - "id": "47d4441f-8694-46fa-8100-8b9119782ec1", - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - } - }, - { - "parameters": { - "operation": "download", - "fileId": { - "__rl": true, - "value": "={{$node[\"Google Drive14\"].json[\"id\"]}}", - "mode": "id" - }, - "options": {} - }, - "name": "Google Drive17", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 980, - 980 - ], - "id": "e4717e9d-3336-4654-9a1c-9839d6e52f92", - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - } - }, - { - "parameters": { - "operation": "copy", - "fileId": { - "__rl": true, - "value": "={{$node[\"Google Drive14\"].json[\"id\"]}}", - "mode": "id" - }, - "options": {} - }, - "name": "Google Drive18", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 1120, - 980 - ], - "id": "91da5b53-a560-49dd-aac0-fe16f6c5fc09", - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - } - }, - { - "parameters": { - "operation": "delete", - "fileId": { - "__rl": true, - "value": "={{$node[\"Google Drive14\"].json[\"id\"]}}", - "mode": "id" - } - }, - "name": "Google Drive19", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 1260, - 980 - ], - "id": "560163a2-ece9-48c4-a3c2-bdc8387626c1", - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - } - }, - { - "parameters": { - "content": "## With new RL mode", - "height": 494.0510948905113, - "width": 1240.9160583941607 - }, - "id": "3c49a1f7-7b5a-42fd-9b27-0b80f853e879", - "name": "Note1", - "type": "n8n-nodes-base.stickyNote", - "typeVersion": 1, - "position": [ - 340, - 680 - ] - } - ], - "connections": { - "Google Drive": { - "main": [ - [ - { - "node": "Google Drive1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Drive1": { - "main": [ - [ - { - "node": "Google Drive2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Google Drive11", - "type": "main", - "index": 0 - }, - { - "node": "Google Drive14", - "type": "main", - "index": 0 - }, - { - "node": "Google Drive3", - "type": "main", - "index": 0 - }, - { - "node": "Google Drive", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Drive3": { - "main": [ - [ - { - "node": "Google Drive4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Drive4": { - "main": [ - [ - { - "node": "Google Drive5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Drive5": { - "main": [ - [ - { - "node": "Google Drive6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Drive6": { - "main": [ - [ - { - "node": "Google Drive7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Drive7": { - "main": [ - [ - { - "node": "Google Drive8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Drive8": { - "main": [ - [ - { - "node": "Google Drive9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Drive11": { - "main": [ - [ - { - "node": "Google Drive12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Drive12": { - "main": [ - [ - { - "node": "Google Drive13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Drive14": { - "main": [ - [ - { - "node": "Google Drive15", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Drive15": { - "main": [ - [ - { - "node": "Google Drive16", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Drive16": { - "main": [ - [ - { - "node": "Google Drive17", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Drive17": { - "main": [ - [ - { - "node": "Google Drive18", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Drive18": { - "main": [ - [ - { - "node": "Google Drive19", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Drive19": { - "main": [ - [ - { - "node": "Google Drive10", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": {}, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/230.json b/test-workflows/workflows/230.json deleted file mode 100644 index 47baf59937a..00000000000 --- a/test-workflows/workflows/230.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "createdAt": "2023-11-14T13:58:21.079Z", - "updatedAt": "2023-11-14T14:13:25.000Z", - "id": "230", - "name": "CredentialOnlyNodes", - "active": false, - "nodes": [ - { - "parameters": {}, - "id": "d4c2fa93-d956-4b90-86ab-e8d7e1f89057", - "name": "When clicking \"Execute Workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 1360, - 720 - ] - }, - { - "parameters": { - "curlImport": "", - "httpVariantWarning": "", - "method": "GET", - "url": "https://www.virustotal.com/api/v3/popular_threat_categories", - "": "", - "authentication": "predefinedCredentialType", - "nodeCredentialType": "virusTotalApi", - "sendQuery": false, - "sendHeaders": false, - "sendBody": false, - "options": {}, - "infoMessage": "" - }, - "id": "11ba670f-87d9-4d4a-ae47-da3fe5bb7715", - "name": "VirusTotal HTTP Request", - "type": "n8n-nodes-base.httpRequest", - "typeVersion": 4.1, - "position": [ - 1580, - 720 - ], - "extendsCredential": "virusTotalApi", - "credentials": { - "virusTotalApi": { - "id": "q80wx3kiggmjWdY9", - "name": "VirusTotal account" - } - } - } - ], - "connections": { - "When clicking \"Execute Workflow\"": { - "main": [ - [ - { - "node": "VirusTotal HTTP Request", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": { - "executionOrder": "v1" - }, - "staticData": null, - "meta": null, - "pinData": {}, - "versionId": "0a529bae-c8b3-416a-95fe-933383d51e59", - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/231.json b/test-workflows/workflows/231.json deleted file mode 100644 index 6ab26a1fb8b..00000000000 --- a/test-workflows/workflows/231.json +++ /dev/null @@ -1,171 +0,0 @@ -{ - "createdAt": "2024-02-14T09:47:52.177Z", - "updatedAt": "2024-02-14T09:47:52.177Z", - "id": "231", - "name": "HTTP:InvalidHostHeader HTTP:CrossDomainRedirect", - "active": false, - "nodes": [ - { - "parameters": {}, - "id": "3d7ec041-6d7c-4516-b7a0-b89dd41aca5a", - "name": "When clicking \"Test workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [-180, 660] - }, - { - "parameters": {}, - "id": "15c4faaf-6241-4215-8919-b66cc80f90aa", - "name": "Success", - "type": "n8n-nodes-base.noOp", - "typeVersion": 1, - "position": [720, 680] - }, - { - "parameters": { - "errorMessage": "Request was not sent, internal SSL error!" - }, - "id": "a98994f5-ad55-4a43-8121-78286e7a85b3", - "name": "Stop and Error", - "type": "n8n-nodes-base.stopAndError", - "typeVersion": 1, - "position": [680, 460] - }, - { - "parameters": { - "conditions": { - "options": { - "caseSensitive": true, - "leftValue": "", - "typeValidation": "strict" - }, - "conditions": [ - { - "id": "e4bed74d-e103-4029-ab3c-77d5ff464b36", - "leftValue": "={{ $json.error.status }}", - "rightValue": 403, - "operator": { - "type": "number", - "operation": "notExists", - "singleValue": true - } - }, - { - "id": "be1eb71b-cccc-4433-95d2-4d4e7c19a2e8", - "leftValue": "={{ $json.error.message }}", - "rightValue": "ssl", - "operator": { - "type": "string", - "operation": "contains" - } - } - ], - "combinator": "and" - }, - "options": {} - }, - "id": "acea7bc3-c611-432e-aa30-74b3a550db5f", - "name": "Internal SSL Error?", - "type": "n8n-nodes-base.if", - "typeVersion": 2, - "position": [480, 660] - }, - { - "parameters": { - "url": "https://n8n.io", - "sendHeaders": true, - "headerParameters": { - "parameters": [ - { - "name": "Host", - "value": "internal.domain" - } - ] - }, - "options": {} - }, - "id": "e3c40b1d-1d18-4dd9-9168-35a801057836", - "name": "Invalid Host header", - "type": "n8n-nodes-base.httpRequest", - "typeVersion": 4.1, - "position": [260, 660], - "onError": "continueRegularOutput" - }, - { - "parameters": { - "url": "https://httpbin.org/redirect-to", - "sendQuery": true, - "queryParameters": { - "parameters": [ - { - "name": "url", - "value": "https://n8n.io" - } - ] - }, - "options": {} - }, - "id": "69d69a4d-2786-4f74-bb92-6109814eb56e", - "name": "Cross Domain Redirect", - "type": "n8n-nodes-base.httpRequest", - "typeVersion": 4.1, - "position": [260, 860] - } - ], - "connections": { - "When clicking \"Test workflow\"": { - "main": [ - [ - { - "node": "Invalid Host header", - "type": "main", - "index": 0 - }, - { - "node": "Cross Domain Redirect", - "type": "main", - "index": 0 - } - ] - ] - }, - "Internal SSL Error?": { - "main": [ - [ - { - "node": "Stop and Error", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Success", - "type": "main", - "index": 0 - } - ] - ] - }, - "Invalid Host header": { - "main": [ - [ - { - "node": "Internal SSL Error?", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": { - "executionOrder": "v1" - }, - "staticData": null, - "meta": null, - "pinData": {}, - "versionId": "0a529bae-c8b3-416a-95fe-933383d51e59", - "triggerCount": 0, - "tags": [] -} diff --git a/test-workflows/workflows/233.json b/test-workflows/workflows/233.json deleted file mode 100644 index 6a19eb7a966..00000000000 --- a/test-workflows/workflows/233.json +++ /dev/null @@ -1,586 +0,0 @@ -{ - "createdAt": "2024-03-04T16:50:04.477Z", - "updatedAt": "2024-03-04T17:07:18.000Z", - "id": "233", - "name": "QdrantVectorStore:*", - "active": false, - "nodes": [ - { - "parameters": {}, - "id": "ec7323e1-1c71-4115-8791-dd8c572756da", - "name": "When clicking \"Test workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - -300, - 1080 - ] - }, - { - "parameters": { - "jsCode": "return {\n text: `Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9`\n}" - }, - "id": "8d9f25e2-7e5a-48bb-88a9-094b3b6c4496", - "name": "Code", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - -80, - 1080 - ] - }, - { - "parameters": { - "model": "text-embedding-3-small", - "options": {} - }, - "id": "83756a50-a3cc-4cf7-ba40-7aa1d7636280", - "name": "Embeddings OpenAI4", - "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi", - "typeVersion": 1, - "position": [ - 300, - 1260 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "options": { - "metadata": { - "metadataValues": [ - { - "name": "some-meta", - "value": "test" - }, - { - "name": "other-meta", - "value": "test2" - } - ] - } - } - }, - "id": "f6f7ddd4-5c9c-43dc-934d-960cb7f7b9bf", - "name": "Default Data Loader1", - "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader", - "typeVersion": 1, - "position": [ - 280, - 1460 - ] - }, - { - "parameters": { - "chunkSize": 500, - "chunkOverlap": 100 - }, - "id": "408bcff8-96bb-4801-bed1-9fcee602f6ba", - "name": "Token Splitter1", - "type": "@n8n/n8n-nodes-langchain.textSplitterTokenSplitter", - "typeVersion": 1, - "position": [ - 280, - 1620 - ] - }, - { - "parameters": { - "method": "DELETE", - "url": "=https://568ce518-4756-4bdf-92f8-4a35b1113346.us-east4-0.gcp.cloud.qdrant.io:6333/collections/bitcoin_wf_test_{{ $execution.id }}", - "authentication": "predefinedCredentialType", - "nodeCredentialType": "qdrantApi", - "options": {} - }, - "id": "57467b4f-9dc5-4d58-8e0d-d336b39c554b", - "name": "Delete Collection", - "type": "n8n-nodes-base.httpRequest", - "typeVersion": 4.1, - "position": [ - 2200, - 1080 - ], - "credentials": { - "qdrantApi": { - "id": "Ohl5AdteUC94gDYj", - "name": "QdrantApi account" - } - } - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "5f9a8751-2eb2-4ab6-8f12-b7856d9baa8a", - "name": "output_length_matches", - "value": "={{ $items().length === 12 }}", - "type": "boolean" - }, - { - "id": "a5a61e4e-ff4d-4da5-a174-9788c22cddfd", - "name": "has_content", - "value": "={{ $json.pageContent.length > 100 }}", - "type": "boolean" - }, - { - "id": "bceaea49-b29f-47d7-8a5a-14d4e02477ec", - "name": "has_meta", - "value": "={{ $items().every(i => i.json.metadata['some-meta'] === 'test' && i.json.metadata['other-meta'] === 'test2') }}", - "type": "boolean" - } - ] - }, - "options": {} - }, - "id": "f4e0bc37-c969-4df0-8e03-954143c4198f", - "name": "Check Vector Store Populated1", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 680, - 1080 - ], - "executeOnce": true - }, - { - "parameters": { - "amount": 20, - "unit": "seconds" - }, - "id": "076664b6-978a-4ac9-bb9d-46a9edbf5f1a", - "name": "Wait1", - "type": "n8n-nodes-base.wait", - "typeVersion": 1, - "position": [ - 920, - 1080 - ], - "webhookId": "c3d05369-6071-4592-87eb-36d57c60851b" - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "5f9a8751-2eb2-4ab6-8f12-b7856d9baa8a", - "name": "output_length_matches", - "value": "={{ $items().length === 4 }}", - "type": "boolean" - }, - { - "id": "a5a61e4e-ff4d-4da5-a174-9788c22cddfd", - "name": "has_content", - "value": "={{ $json.document.pageContent.length > 100 }}", - "type": "boolean" - }, - { - "id": "bceaea49-b29f-47d7-8a5a-14d4e02477ec", - "name": "has_meta", - "value": "={{ $items().every(i => i.json.document.metadata['some-meta'] === 'test' && i.json.document.metadata['other-meta'] === 'test2') }}", - "type": "boolean" - } - ] - }, - "options": {} - }, - "id": "bf2e6350-6d64-41cc-bcc4-8b07d6f02d63", - "name": "Check Vector Store Retrieval1", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 1500, - 1080 - ], - "executeOnce": true - }, - { - "parameters": { - "promptType": "define", - "text": "What is the size of a block header with no transactions? Respond only with number of bytes." - }, - "id": "5dbcc385-e3e9-4208-9bef-72fdfee4eb3e", - "name": "Question and Answer Chain1", - "type": "@n8n/n8n-nodes-langchain.chainRetrievalQa", - "typeVersion": 1.5, - "position": [ - 1700, - 1080 - ] - }, - { - "parameters": { - "model": "gpt-3.5-turbo-0125", - "options": { - "temperature": 0 - } - }, - "id": "2ff4fe0e-e9f5-4250-a36f-5290dd5c7940", - "name": "OpenAI Chat Model1", - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 1700, - 1280 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": {}, - "id": "b192d5f4-0d57-4dac-99c8-bef2b3b4d20a", - "name": "Vector Store Retriever1", - "type": "@n8n/n8n-nodes-langchain.retrieverVectorStore", - "typeVersion": 1, - "position": [ - 1780, - 1280 - ] - }, - { - "parameters": { - "model": "text-embedding-3-small", - "options": {} - }, - "id": "a97eac02-2008-46a4-a21c-3f4ddb473f21", - "name": "Embeddings OpenAI3", - "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi", - "typeVersion": 1, - "position": [ - 1720, - 1580 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "d998ae3e-192c-45ff-a3ff-ad3ed3a20304", - "name": "output_matches", - "value": "={{ $json.response.includes('80') }}", - "type": "boolean" - } - ] - }, - "options": {} - }, - "id": "969f8ee8-b3be-4a66-8088-8d9629867c22", - "name": "Edit Fields1", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 2040, - 1080 - ] - }, - { - "parameters": { - "model": "text-embedding-3-small", - "options": {} - }, - "id": "a8fce256-50b2-4d70-b3a3-ee5aa9fa2c9b", - "name": "Embeddings OpenAI5", - "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi", - "typeVersion": 1, - "position": [ - 1140, - 1300 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "mode": "insert", - "qdrantCollection": { - "__rl": true, - "value": "=bitcoin_wf_test_{{ $execution.id }}", - "mode": "id" - }, - "options": {} - }, - "id": "69a471a7-969f-47ef-9e52-4667c943a69f", - "name": "Qdrant Vector Store", - "type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant", - "typeVersion": 1, - "position": [ - 280, - 1080 - ], - "credentials": { - "qdrantApi": { - "id": "Ohl5AdteUC94gDYj", - "name": "QdrantApi account" - } - } - }, - { - "parameters": { - "qdrantCollection": { - "__rl": true, - "value": "=bitcoin_wf_test_{{ $execution.id }}", - "mode": "id" - } - }, - "id": "43ac7a37-abd1-4b7c-bfdc-e096bda87de6", - "name": "Qdrant Vector Store2", - "type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant", - "typeVersion": 1, - "position": [ - 1720, - 1440 - ], - "credentials": { - "qdrantApi": { - "id": "Ohl5AdteUC94gDYj", - "name": "QdrantApi account" - } - } - }, - { - "parameters": { - "mode": "load", - "qdrantCollection": { - "__rl": true, - "value": "=bitcoin_wf_test_{{ $execution.id }}", - "mode": "id" - }, - "prompt": "Security risks" - }, - "id": "f1a6871e-cc9f-4f36-93f8-15dba0d4687f", - "name": "Qdrant Vector Store1", - "type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant", - "typeVersion": 1, - "position": [ - 1140, - 1080 - ], - "credentials": { - "qdrantApi": { - "id": "Ohl5AdteUC94gDYj", - "name": "QdrantApi account" - } - } - } - ], - "connections": { - "When clicking \"Test workflow\"": { - "main": [ - [ - { - "node": "Code", - "type": "main", - "index": 0 - } - ] - ] - }, - "Embeddings OpenAI4": { - "ai_embedding": [ - [ - { - "node": "Qdrant Vector Store", - "type": "ai_embedding", - "index": 0 - } - ] - ] - }, - "Default Data Loader1": { - "ai_document": [ - [ - { - "node": "Qdrant Vector Store", - "type": "ai_document", - "index": 0 - } - ] - ] - }, - "Token Splitter1": { - "ai_textSplitter": [ - [ - { - "node": "Default Data Loader1", - "type": "ai_textSplitter", - "index": 0 - } - ] - ] - }, - "Check Vector Store Populated1": { - "main": [ - [ - { - "node": "Wait1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wait1": { - "main": [ - [ - { - "node": "Qdrant Vector Store1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Check Vector Store Retrieval1": { - "main": [ - [ - { - "node": "Question and Answer Chain1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Question and Answer Chain1": { - "main": [ - [ - { - "node": "Edit Fields1", - "type": "main", - "index": 0 - } - ] - ] - }, - "OpenAI Chat Model1": { - "ai_languageModel": [ - [ - { - "node": "Question and Answer Chain1", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "Vector Store Retriever1": { - "ai_retriever": [ - [ - { - "node": "Question and Answer Chain1", - "type": "ai_retriever", - "index": 0 - } - ] - ] - }, - "Embeddings OpenAI3": { - "ai_embedding": [ - [ - { - "node": "Qdrant Vector Store2", - "type": "ai_embedding", - "index": 0 - } - ] - ] - }, - "Edit Fields1": { - "main": [ - [ - { - "node": "Delete Collection", - "type": "main", - "index": 0 - } - ] - ] - }, - "Embeddings OpenAI5": { - "ai_embedding": [ - [ - { - "node": "Qdrant Vector Store1", - "type": "ai_embedding", - "index": 0 - } - ] - ] - }, - "Qdrant Vector Store": { - "main": [ - [ - { - "node": "Check Vector Store Populated1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Qdrant Vector Store2": { - "ai_vectorStore": [ - [ - { - "node": "Vector Store Retriever1", - "type": "ai_vectorStore", - "index": 0 - } - ] - ] - }, - "Qdrant Vector Store1": { - "main": [ - [ - { - "node": "Check Vector Store Retrieval1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Code": { - "main": [ - [ - { - "node": "Qdrant Vector Store", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": { - "executionOrder": "v1" - }, - "staticData": null, - "meta": { - "templateCredsSetupCompleted": true - }, - "pinData": {}, - "versionId": "163d5463-a0ba-476b-bdf1-75ff7d306534", - "triggerCount": 0, - "tags": [] -} diff --git a/test-workflows/workflows/234.json b/test-workflows/workflows/234.json deleted file mode 100644 index cc59cf691cb..00000000000 --- a/test-workflows/workflows/234.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "createdAt": "2024-03-04T20:43:54.193Z", - "updatedAt": "2024-03-04T20:43:57.000Z", - "id": "234", - "name": "BasicLLMChain:MistralChat", - "active": false, - "nodes": [ - { - "parameters": { - "model": "mistral-tiny", - "options": { - "temperature": 0 - } - }, - "id": "e825ced6-f1d5-47ab-8aa7-b6c6959732f9", - "name": "Mistral Cloud Chat Model", - "type": "@n8n/n8n-nodes-langchain.lmChatMistralCloud", - "typeVersion": 1, - "position": [ - 1180, - 720 - ], - "credentials": { - "mistralCloudApi": { - "id": "Rl7R5orXMm9FvxZS", - "name": "Mistral Cloud account" - } - } - }, - { - "parameters": { - "promptType": "define", - "text": "How much is 1+1? Only provide the numerical answer without any other text.\n" - }, - "id": "32c781c6-ce33-4ab5-bbd8-14651968daab", - "name": "Mistral Cloud Chat", - "type": "@n8n/n8n-nodes-langchain.chainLlm", - "typeVersion": 1.5, - "position": [ - 1160, - 560 - ] - }, - { - "parameters": {}, - "id": "72dd7380-7254-4934-9562-f278a776dedd", - "name": "When clicking \"Test workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 980, - 560 - ] - } - ], - "connections": { - "Mistral Cloud Chat Model": { - "ai_languageModel": [ - [ - { - "node": "Mistral Cloud Chat", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "When clicking \"Test workflow\"": { - "main": [ - [ - { - "node": "Mistral Cloud Chat", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": { - "executionOrder": "v1" - }, - "staticData": null, - "meta": { - "templateCredsSetupCompleted": true - }, - "pinData": {}, - "versionId": "4bd59e87-bd2e-42ad-976d-6bf03535cf86", - "triggerCount": 0, - "tags": [] -} diff --git a/test-workflows/workflows/235.json b/test-workflows/workflows/235.json deleted file mode 100644 index 0da017bd99e..00000000000 --- a/test-workflows/workflows/235.json +++ /dev/null @@ -1,231 +0,0 @@ -{ - "createdAt": "2024-03-04T20:39:24.374Z", - "updatedAt": "2024-03-04T20:39:59.000Z", - "id": "235", - "name": "SummarizationChain:Simple:Map", - "active": false, - "nodes": [ - { - "parameters": {}, - "id": "7040b003-e694-4251-9dad-f4245966cfdf", - "name": "When clicking \"Test workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 1120, - 600 - ] - }, - { - "parameters": { - "jsCode": "return {\n text: `The dancing plague of 1518, or dance epidemic of 1518 (French: Γ‰pidΓ©mie dansante de 1518), was a case of dancing mania that occurred in Strasbourg, Alsace (modern-day France), in the Holy Roman Empire from July 1518 to September 1518. Somewhere between 50 and 400 people took to dancing for weeks. There are many theories behind the phenomenon, the most popular being stress-induced mass hysteria, suggested by John Waller. Other theories include ergot and religious explanations. There is controversy concerning the number of deaths.\n\nHistory\nEvents\nThe outbreak began in July 1518 when a woman called Frau Troffea began to dance fervently and uncontrollably in a street in Strasbourg. Troffea kept up the constant dancing for a week. Soon, three dozen others joined in. By August, the \"dancing plague\" had claimed 400 victims. Dancers were beginning to collapse. It is said some even died from a stroke or heart attack. No one knew what caused this reaction, which meant no one understood how to remedy it. By early September, the outbreak began to subside, when the dancers were sent to a mountain shrine to pray for absolution.\n\nHistorical documents, including \"physician notes, cathedral sermons, local and regional chronicles, and even notes issued by the Strasbourg city council\" are clear that the victims danced; it is not known why. Historical sources agree that there was an outbreak of dancing after a single woman started dancing, and the dancing did not seem to die down. It lasted for such a long time that it even attracted the attention of the authorities; until the council gave up authority to the physicians, who prescribed the afflicted to \"dance themselves free of it.\" There are claims that guild halls were refurbished to accommodate the dancing, as well as musicians and strong people to help keep those dealing with the dancing mania to stay upright. This backfired, and the council was forced to ban public dancing as people danced in fear it was a punishment from Saint Vitus; and to be \"free of sin\" many joined in on the dancing epidemic. The council went as far as to ban music, as well. Those who danced were then ordered to go to the shrine of Saint Vitus, wore red shoes that were sprinkled with holy water and had painted crosses on the tops and soles. They also had to hold small crosses in their hands; and incense and Latin incantations were part of this \"ritual.\" Apparently \"forgiven by Vitus,\" word was spread of a successful ritual and the Dancing Plague had ended.\n\nEvents similar to this are said to have occurred throughout the medieval age including 11th century in KΓΆlbigk, Saxony, where it was believed to be the result of divine judgment . In 15th century Apulia, Italy, a woman was bitten by a tarantula, the venom making her dance convulsively. The only way to cure the bite was to \"shimmy\" and to have the right sort of music available, which was an accepted remedy by scholars like Athanasius Kircher.\n\nContemporaneous explanations included demonic possession and overheated blood.\n\nVeracity of deaths\nControversy exists over whether people ultimately danced to their deaths. Some sources claim that for a period the plague killed around fifteen people per day, but the sources of the city of Strasbourg at the time of the events did not mention the number of deaths, or even if there were fatalities. There do not appear to be any sources related to the events that make note of any fatalities. Ned Pennant-Rea also claims that the final death toll is not known, but if the claims of fifteen people dying per day were true then the toll could be \"into the hundreds.\"\n\nThe main source for the claim is John Waller, who has written several journal articles on the subject and the book A Time to Dance, a Time to Die: The Extraordinary Story of the Dancing Plague of 1518. The sources cited by Waller that mention deaths were all from later accounts of the events. There is also uncertainty around the identity of the initial dancer (either an unnamed woman or \"Frau Troffea\") and the number of dancers involved (somewhere between 50 and 400). Of the six chronicle accounts, four support Lady Troffea as the first dancer.\n\nModern theories\nFood poisoning\nSome believe the dancing could have been brought on by food poisoning caused by the toxic and psychoactive chemical products of ergot fungi (ergotism), which grows commonly on grains (such as rye) used for baking bread. Ergotamine is the main psychoactive product of ergot fungi; it is structurally related to the drug lysergic acid diethylamide (LSD-25) and is the substance from which LSD-25 was originally synthesized. The same fungus has also been implicated in other major historical anomalies, including the Salem witch trials.\n\nIn The Lancet, John Waller argues that \"this theory does not seem tenable, since it is unlikely that those poisoned by ergot could have danced for days at a time. Nor would so many people have reacted to its psychotropic chemicals in the same way. The ergotism theory also fails to explain why almost every outbreak occurred somewhere along the Rhine and Moselle rivers, areas linked by water but with quite different climates and crops\".\n\nStress-induced mass hysteria\nThis could have been an example of fully developed cases of psychogenic movement disorder happening in mass hysteria or mass psychogenic illness, which involves many individuals suddenly exhibiting the same bizarre behavior. The behavior spreads rapidly and broadly in an epidemic pattern. This kind of comportment could have been caused by elevated levels of psychological stress, caused by the ruthless years (even by the rough standards of the early modern period) the people of Alsace were suffering.\n\nWaller speculates that the dancing was \"stress-induced psychosis\" on a mass level, since the region where the people danced was riddled with starvation and disease, and the inhabitants tended to be superstitious. Seven other cases of dancing plague were reported in the same region during the medieval era.\n\nThis psychogenic illness could have created a chorea (from the Greek khoreia meaning \"to dance\"), a situation comprising random and intricate unintentional movements that flit from body part to body part. Diverse choreas (St. Vitus' dance, St. John's dance, and tarantism) were labeled in the Middle Ages referring to the independent epidemics of \"dancing mania\" that happened in central Europe, particularly at the time of the plague.\n\nPop culture and media\nThe event inspired Jonathan Glazer's 2020 short film Strasbourg 1518.\n\nIt was also the inspiration behind the 2022 choral song \"Choreomania\" by Florence and the Machine. It was the third track on the album Dance Fever, which took its title from the song.\n\nThe book series \"A Collection of Utter Speculation\" released a title \"The Dancing Plague: A Collection of Utter Speculation\" in 2022. It is a fictional account about the events that happened in Strasbourg.\n\nThe 2023 novel, The Dance Tree, by Kiran Millwood Hargrave is a fictionalized version of the summer of 1518 in Strasbourg.\n\nThe event is featured as part of the first season of Watcher Entertainment's \"Puppet History\" in the episode \"The Dancing Plague\".`\n}" - }, - "id": "97eb5104-6741-4330-ac11-4c5776aedd79", - "name": "Set Article", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 1540, - 600 - ] - }, - { - "parameters": { - "model": "gpt-3.5-turbo-0125", - "options": { - "temperature": 0 - } - }, - "id": "42de18cf-1320-4f45-bb11-d28523c88a43", - "name": "OpenAI Chat Model", - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 1760, - 760 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "6fa592a3-1cfe-42d7-8d45-a7ec80871e52", - "name": "baseline_summary", - "value": "The dancing plague of 1518 in Strasbourg, Alsace involved between 50 and 400 people dancing uncontrollably for weeks. The cause is unknown, with theories including stress-induced mass hysteria and ergot poisoning. The outbreak ended when the dancers prayed for absolution at a shrine. There is controversy over the number of deaths, with some sources claiming up to fifteen deaths per day, but historical documents do not confirm any fatalities. Similar events have been reported throughout history, inspiring various works of pop culture.", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "b7f4e65c-2f5b-41eb-bffd-aeb1ec9919b4", - "name": "Set Baseline", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 1340, - 600 - ] - }, - { - "parameters": { - "chunkSize": 4000, - "options": {} - }, - "id": "584d9374-ce54-42df-9c88-b996754e8967", - "name": "Summary - Simple - Map", - "type": "@n8n/n8n-nodes-langchain.chainSummarization", - "typeVersion": 2, - "position": [ - 1740, - 600 - ] - }, - { - "parameters": { - "model": "gpt-3.5-turbo-0125", - "options": { - "temperature": 0 - } - }, - "id": "beaf320b-b14d-44a9-b7f3-1d4379875531", - "name": "OpenAI Chat Model1", - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 2080, - 760 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "code": { - "execute": { - "code": "const { loadEvaluator } = require(\"langchain/evaluation\");\n\nconst llm = await this.getInputConnectionData('ai_languageModel', 0);\nconst inputData = this.getInputData();\nconst inputSummary = inputData[0].json.response.text;\nconst baselineSummary = $('Set Baseline').item.json.baseline_summary\n\nconst evaluator = await loadEvaluator(\"labeled_criteria\", { criteria: 'helpfulness', llm });\n\nconst result = await evaluator.evaluateStrings({\n input: \"Summarize Wikipedia article about the dancing plague of 1518\",\n prediction: inputSummary,\n reference: baselineSummary,\n});\n\n\nreturn [ {json: { ...result } } ];" - } - }, - "inputs": { - "input": [ - { - "type": "main", - "maxConnections": 1, - "required": true - }, - { - "type": "ai_languageModel", - "maxConnections": 1, - "required": true - } - ] - }, - "outputs": { - "output": [ - { - "type": "main" - } - ] - } - }, - "id": "b3f8e974-8f56-4cfe-ae9d-dd0906bb87c4", - "name": "Evaluate to Baseline", - "type": "@n8n/n8n-nodes-langchain.code", - "typeVersion": 1, - "position": [ - 2060, - 600 - ] - } - ], - "connections": { - "When clicking \"Test workflow\"": { - "main": [ - [ - { - "node": "Set Baseline", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set Article": { - "main": [ - [ - { - "node": "Summary - Simple - Map", - "type": "main", - "index": 0 - } - ] - ] - }, - "OpenAI Chat Model": { - "ai_languageModel": [ - [ - { - "node": "Summary - Simple - Map", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "Set Baseline": { - "main": [ - [ - { - "node": "Set Article", - "type": "main", - "index": 0 - } - ] - ] - }, - "Summary - Simple - Map": { - "main": [ - [ - { - "node": "Evaluate to Baseline", - "type": "main", - "index": 0 - } - ] - ] - }, - "OpenAI Chat Model1": { - "ai_languageModel": [ - [ - { - "node": "Evaluate to Baseline", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - } - }, - "settings": { - "executionOrder": "v1" - }, - "staticData": null, - "meta": { - "templateCredsSetupCompleted": true - }, - "pinData": {}, - "versionId": "1a8926d6-06a6-4c15-8384-bd74ae4bd8df", - "triggerCount": 0, - "tags": [] -} diff --git a/test-workflows/workflows/236.json b/test-workflows/workflows/236.json deleted file mode 100644 index 3099e44a9e9..00000000000 --- a/test-workflows/workflows/236.json +++ /dev/null @@ -1,258 +0,0 @@ -{ - "createdAt": "2024-03-04T20:41:16.554Z", - "updatedAt": "2024-03-04T20:41:34.000Z", - "id": "236", - "name": "SummarizationChain:Simple:Map:Binary", - "active": false, - "nodes": [ - { - "parameters": {}, - "id": "a7c6c0bc-acbc-49bd-8ec8-5075e638d0b9", - "name": "When clicking \"Test workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 280, - 880 - ] - }, - { - "parameters": { - "jsCode": "return {\n text: `The dancing plague of 1518, or dance epidemic of 1518 (French: Γ‰pidΓ©mie dansante de 1518), was a case of dancing mania that occurred in Strasbourg, Alsace (modern-day France), in the Holy Roman Empire from July 1518 to September 1518. Somewhere between 50 and 400 people took to dancing for weeks. There are many theories behind the phenomenon, the most popular being stress-induced mass hysteria, suggested by John Waller. Other theories include ergot and religious explanations. There is controversy concerning the number of deaths.\n\nHistory\nEvents\nThe outbreak began in July 1518 when a woman called Frau Troffea began to dance fervently and uncontrollably in a street in Strasbourg. Troffea kept up the constant dancing for a week. Soon, three dozen others joined in. By August, the \"dancing plague\" had claimed 400 victims. Dancers were beginning to collapse. It is said some even died from a stroke or heart attack. No one knew what caused this reaction, which meant no one understood how to remedy it. By early September, the outbreak began to subside, when the dancers were sent to a mountain shrine to pray for absolution.\n\nHistorical documents, including \"physician notes, cathedral sermons, local and regional chronicles, and even notes issued by the Strasbourg city council\" are clear that the victims danced; it is not known why. Historical sources agree that there was an outbreak of dancing after a single woman started dancing, and the dancing did not seem to die down. It lasted for such a long time that it even attracted the attention of the authorities; until the council gave up authority to the physicians, who prescribed the afflicted to \"dance themselves free of it.\" There are claims that guild halls were refurbished to accommodate the dancing, as well as musicians and strong people to help keep those dealing with the dancing mania to stay upright. This backfired, and the council was forced to ban public dancing as people danced in fear it was a punishment from Saint Vitus; and to be \"free of sin\" many joined in on the dancing epidemic. The council went as far as to ban music, as well. Those who danced were then ordered to go to the shrine of Saint Vitus, wore red shoes that were sprinkled with holy water and had painted crosses on the tops and soles. They also had to hold small crosses in their hands; and incense and Latin incantations were part of this \"ritual.\" Apparently \"forgiven by Vitus,\" word was spread of a successful ritual and the Dancing Plague had ended.\n\nEvents similar to this are said to have occurred throughout the medieval age including 11th century in KΓΆlbigk, Saxony, where it was believed to be the result of divine judgment . In 15th century Apulia, Italy, a woman was bitten by a tarantula, the venom making her dance convulsively. The only way to cure the bite was to \"shimmy\" and to have the right sort of music available, which was an accepted remedy by scholars like Athanasius Kircher.\n\nContemporaneous explanations included demonic possession and overheated blood.\n\nVeracity of deaths\nControversy exists over whether people ultimately danced to their deaths. Some sources claim that for a period the plague killed around fifteen people per day, but the sources of the city of Strasbourg at the time of the events did not mention the number of deaths, or even if there were fatalities. There do not appear to be any sources related to the events that make note of any fatalities. Ned Pennant-Rea also claims that the final death toll is not known, but if the claims of fifteen people dying per day were true then the toll could be \"into the hundreds.\"\n\nThe main source for the claim is John Waller, who has written several journal articles on the subject and the book A Time to Dance, a Time to Die: The Extraordinary Story of the Dancing Plague of 1518. The sources cited by Waller that mention deaths were all from later accounts of the events. There is also uncertainty around the identity of the initial dancer (either an unnamed woman or \"Frau Troffea\") and the number of dancers involved (somewhere between 50 and 400). Of the six chronicle accounts, four support Lady Troffea as the first dancer.\n\nModern theories\nFood poisoning\nSome believe the dancing could have been brought on by food poisoning caused by the toxic and psychoactive chemical products of ergot fungi (ergotism), which grows commonly on grains (such as rye) used for baking bread. Ergotamine is the main psychoactive product of ergot fungi; it is structurally related to the drug lysergic acid diethylamide (LSD-25) and is the substance from which LSD-25 was originally synthesized. The same fungus has also been implicated in other major historical anomalies, including the Salem witch trials.\n\nIn The Lancet, John Waller argues that \"this theory does not seem tenable, since it is unlikely that those poisoned by ergot could have danced for days at a time. Nor would so many people have reacted to its psychotropic chemicals in the same way. The ergotism theory also fails to explain why almost every outbreak occurred somewhere along the Rhine and Moselle rivers, areas linked by water but with quite different climates and crops\".\n\nStress-induced mass hysteria\nThis could have been an example of fully developed cases of psychogenic movement disorder happening in mass hysteria or mass psychogenic illness, which involves many individuals suddenly exhibiting the same bizarre behavior. The behavior spreads rapidly and broadly in an epidemic pattern. This kind of comportment could have been caused by elevated levels of psychological stress, caused by the ruthless years (even by the rough standards of the early modern period) the people of Alsace were suffering.\n\nWaller speculates that the dancing was \"stress-induced psychosis\" on a mass level, since the region where the people danced was riddled with starvation and disease, and the inhabitants tended to be superstitious. Seven other cases of dancing plague were reported in the same region during the medieval era.\n\nThis psychogenic illness could have created a chorea (from the Greek khoreia meaning \"to dance\"), a situation comprising random and intricate unintentional movements that flit from body part to body part. Diverse choreas (St. Vitus' dance, St. John's dance, and tarantism) were labeled in the Middle Ages referring to the independent epidemics of \"dancing mania\" that happened in central Europe, particularly at the time of the plague.\n\nPop culture and media\nThe event inspired Jonathan Glazer's 2020 short film Strasbourg 1518.\n\nIt was also the inspiration behind the 2022 choral song \"Choreomania\" by Florence and the Machine. It was the third track on the album Dance Fever, which took its title from the song.\n\nThe book series \"A Collection of Utter Speculation\" released a title \"The Dancing Plague: A Collection of Utter Speculation\" in 2022. It is a fictional account about the events that happened in Strasbourg.\n\nThe 2023 novel, The Dance Tree, by Kiran Millwood Hargrave is a fictionalized version of the summer of 1518 in Strasbourg.\n\nThe event is featured as part of the first season of Watcher Entertainment's \"Puppet History\" in the episode \"The Dancing Plague\".`\n}" - }, - "id": "6b758d00-fd86-465e-abc6-9a4d97a611a9", - "name": "Set Article", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 700, - 880 - ] - }, - { - "parameters": { - "model": "gpt-3.5-turbo-0125", - "options": { - "temperature": 0 - } - }, - "id": "d3f2e53d-c5dd-42b8-b10f-2b2fa2f37ef6", - "name": "OpenAI Chat Model4", - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 1140, - 1020 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "model": "gpt-3.5-turbo-0125", - "options": { - "temperature": 0 - } - }, - "id": "418a75ed-c4aa-46a1-96d9-f2a3f9c55ab9", - "name": "OpenAI Chat Model5", - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 1500, - 1020 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "operation": "toJson", - "options": {} - }, - "id": "99c931ba-5d76-443a-bd26-1115b4e59474", - "name": "Convert to File", - "type": "n8n-nodes-base.convertToFile", - "typeVersion": 1.1, - "position": [ - 900, - 880 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "6fa592a3-1cfe-42d7-8d45-a7ec80871e52", - "name": "baseline_summary", - "value": "The dancing plague of 1518 in Strasbourg, Alsace involved between 50 and 400 people dancing uncontrollably for weeks. The cause is unknown, with theories including stress-induced mass hysteria and ergot poisoning. The outbreak ended when the dancers prayed for absolution at a shrine. There is controversy over the number of deaths, with some sources claiming up to fifteen deaths per day, but historical documents do not confirm any fatalities. Similar events have been reported throughout history, inspiring various works of pop culture.", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "1c363506-92cd-40d2-b7bd-8245a532cd27", - "name": "Set Baseline", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 500, - 880 - ] - }, - { - "parameters": { - "operationMode": "nodeInputBinary", - "chunkSize": 4000, - "chunkOverlap": 100, - "options": {} - }, - "id": "9d6d0cac-034e-42ed-90fb-d9c2cfe0166f", - "name": "Summary - Simple - Map - Binary", - "type": "@n8n/n8n-nodes-langchain.chainSummarization", - "typeVersion": 2, - "position": [ - 1120, - 880 - ] - }, - { - "parameters": { - "code": { - "execute": { - "code": "const { loadEvaluator } = require(\"langchain/evaluation\");\n\nconst llm = await this.getInputConnectionData('ai_languageModel', 0);\nconst inputData = this.getInputData();\nconst inputSummary = inputData[0].json.response.text;\nconst baselineSummary = $('Set Baseline').item.json.baseline_summary\n\n\nconst evaluator = await loadEvaluator(\"labeled_criteria\", { criteria: 'helpfulness', llm });\n\nconst result = await evaluator.evaluateStrings({\n input: \"Summarize Wikipedia article about the dancing plague of 1518\",\n prediction: inputSummary,\n reference: baselineSummary,\n});\n\n\nreturn [ {json: { ...result } } ];" - } - }, - "inputs": { - "input": [ - { - "type": "main", - "maxConnections": 1, - "required": true - }, - { - "type": "ai_languageModel", - "maxConnections": 1, - "required": true - } - ] - }, - "outputs": { - "output": [ - { - "type": "main" - } - ] - } - }, - "id": "f7e12c5f-6445-4924-8fc7-c426d21549ed", - "name": "Evaluate to Baseline", - "type": "@n8n/n8n-nodes-langchain.code", - "typeVersion": 1, - "position": [ - 1480, - 880 - ] - } - ], - "connections": { - "When clicking \"Test workflow\"": { - "main": [ - [ - { - "node": "Set Baseline", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set Article": { - "main": [ - [ - { - "node": "Convert to File", - "type": "main", - "index": 0 - } - ] - ] - }, - "OpenAI Chat Model4": { - "ai_languageModel": [ - [ - { - "node": "Summary - Simple - Map - Binary", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "OpenAI Chat Model5": { - "ai_languageModel": [ - [ - { - "node": "Evaluate to Baseline", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "Convert to File": { - "main": [ - [ - { - "node": "Summary - Simple - Map - Binary", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set Baseline": { - "main": [ - [ - { - "node": "Set Article", - "type": "main", - "index": 0 - } - ] - ] - }, - "Summary - Simple - Map - Binary": { - "main": [ - [ - { - "node": "Evaluate to Baseline", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": { - "executionOrder": "v1" - }, - "staticData": null, - "meta": { - "templateCredsSetupCompleted": true - }, - "pinData": {}, - "versionId": "240bf55b-10e5-451c-9b81-3567130e2ef1", - "triggerCount": 0, - "tags": [] -} diff --git a/test-workflows/workflows/237.json b/test-workflows/workflows/237.json deleted file mode 100644 index 5471aac0d63..00000000000 --- a/test-workflows/workflows/237.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "createdAt": "2024-03-04T20:43:01.452Z", - "updatedAt": "2024-03-04T20:43:03.000Z", - "id": "237", - "name": "BasicLLMChain:AzureChat", - "active": false, - "nodes": [ - { - "parameters": { - "model": "gpt4", - "options": { - "temperature": 0 - } - }, - "id": "982999e9-1191-4c74-8292-9f43d19a602b", - "name": "Azure OpenAI Chat Model", - "type": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi", - "typeVersion": 1, - "position": [ - 700, - 600 - ], - "credentials": { - "azureOpenAiApi": { - "id": "RNAgogiex4JxTr44", - "name": "Azure Open AI account" - } - } - }, - { - "parameters": { - "promptType": "define", - "text": "How much is 1+1? Only provide the numerical answer without any other text.\n" - }, - "id": "6684c985-3943-4099-a7b1-c8cc51f3d9f8", - "name": "Azure OpenAI Chat", - "type": "@n8n/n8n-nodes-langchain.chainLlm", - "typeVersion": 1.5, - "position": [ - 680, - 460 - ] - }, - { - "parameters": {}, - "id": "fa8334bf-da22-4d69-b3f4-97b62c278158", - "name": "When clicking \"Test workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 460, - 460 - ] - } - ], - "connections": { - "Azure OpenAI Chat Model": { - "ai_languageModel": [ - [ - { - "node": "Azure OpenAI Chat", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "When clicking \"Test workflow\"": { - "main": [ - [ - { - "node": "Azure OpenAI Chat", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": { - "executionOrder": "v1" - }, - "staticData": null, - "meta": { - "templateCredsSetupCompleted": true - }, - "pinData": {}, - "versionId": "3272c26f-5a33-4f48-99ac-bfef95f28dcf", - "triggerCount": 0, - "tags": [] -} diff --git a/test-workflows/workflows/238.json b/test-workflows/workflows/238.json deleted file mode 100644 index 836849eb106..00000000000 --- a/test-workflows/workflows/238.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "createdAt": "2024-03-04T20:44:21.362Z", - "updatedAt": "2024-03-04T20:44:21.362Z", - "id": "238", - "name": "BasicLLMChain:OpenAIInstruct", - "active": false, - "nodes": [ - { - "parameters": { - "model": { - "__rl": true, - "mode": "list", - "value": "gpt-3.5-turbo-instruct" - }, - "options": { - "temperature": 0 - } - }, - "id": "086e03aa-f941-4dbc-9794-d418893efd48", - "name": "OpenAI Model", - "type": "@n8n/n8n-nodes-langchain.lmOpenAi", - "typeVersion": 1, - "position": [ - 660, - 600 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "promptType": "define", - "text": "How much is 1+1? Only provide the numerical answer without any other text.\n\n" - }, - "id": "3d36ca4b-ca52-4c76-8729-2d1416b97254", - "name": "Open AI Instruct", - "type": "@n8n/n8n-nodes-langchain.chainLlm", - "typeVersion": 1.5, - "position": [ - 640, - 460 - ] - }, - { - "parameters": {}, - "id": "6b6a91f3-cb8a-474b-8db8-e4309bd25d92", - "name": "When clicking \"Test workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 460, - 460 - ] - } - ], - "connections": { - "OpenAI Model": { - "ai_languageModel": [ - [ - { - "node": "Open AI Instruct", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "When clicking \"Test workflow\"": { - "main": [ - [ - { - "node": "Open AI Instruct", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": { - "executionOrder": "v1" - }, - "staticData": null, - "meta": { - "templateCredsSetupCompleted": true - }, - "pinData": {}, - "versionId": "c923851b-a7a2-4c7f-895c-d90f994d3e3a", - "triggerCount": 0, - "tags": [] -} diff --git a/test-workflows/workflows/239.json b/test-workflows/workflows/239.json deleted file mode 100644 index 0b976e1741d..00000000000 --- a/test-workflows/workflows/239.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "createdAt": "2024-03-04T20:32:15.867Z", - "updatedAt": "2024-03-13T13:43:09.000Z", - "id": "239", - "name": "Agent:PlanAndExecute", - "active": false, - "nodes": [ - { - "parameters": { - "model": "gpt-4-turbo-preview", - "options": { - "temperature": 0 - } - }, - "id": "9ecb9fc6-c634-4915-ae30-f4a40679200c", - "name": "OpenAI Chat Model3", - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 1020, - 760 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - }, - "notes": "IGNORED_PROPERTIES=messages" - }, - { - "parameters": {}, - "id": "28f13be4-fc17-4e04-8518-bf98272ea7b7", - "name": "Calculator3", - "type": "@n8n/n8n-nodes-langchain.toolCalculator", - "typeVersion": 1, - "position": [ - 1180, - 780 - ] - }, - { - "parameters": {}, - "id": "ebd19bad-5412-4e5b-9cbc-92d85e98f517", - "name": "When clicking \"Test workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 760, - 620 - ] - }, - { - "parameters": { - "agent": "planAndExecuteAgent", - "promptType": "define", - "text": "What is the result of 30 + (10002200 / 100)? Only respond with a number.", - "options": {} - }, - "id": "1b397e30-5061-44dd-b6fc-c7100c8c791d", - "name": "AI Agent3", - "type": "@n8n/n8n-nodes-langchain.agent", - "typeVersion": 1.4, - "position": [ - 1000, - 620 - ] - } - ], - "connections": { - "OpenAI Chat Model3": { - "ai_languageModel": [ - [ - { - "node": "AI Agent3", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "Calculator3": { - "ai_tool": [ - [ - { - "node": "AI Agent3", - "type": "ai_tool", - "index": 0 - } - ] - ] - }, - "When clicking \"Test workflow\"": { - "main": [ - [ - { - "node": "AI Agent3", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": { - "executionOrder": "v1" - }, - "staticData": null, - "meta": { - "templateCredsSetupCompleted": true - }, - "pinData": {}, - "versionId": "d420104e-1ac2-45a5-b173-e97a7726178f", - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/240.json b/test-workflows/workflows/240.json deleted file mode 100644 index e9b6a223524..00000000000 --- a/test-workflows/workflows/240.json +++ /dev/null @@ -1,237 +0,0 @@ -{ - "createdAt": "2024-03-04T20:38:02.224Z", - "updatedAt": "2024-03-04T20:38:20.000Z", - "id": "240", - "name": "SummarizationChain:Simpe:Refine", - "active": false, - "nodes": [ - { - "parameters": { - "model": "gpt-3.5-turbo-0125", - "options": { - "temperature": 0 - } - }, - "id": "45a1f508-8bdc-4a59-8245-b910beddac70", - "name": "OpenAI Chat Model2", - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 1440, - 640 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": {}, - "id": "b1cb6eaf-16f0-4f57-b09d-6893e5c52570", - "name": "When clicking \"Test workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 620, - 500 - ] - }, - { - "parameters": { - "jsCode": "return {\n text: `The dancing plague of 1518, or dance epidemic of 1518 (French: Γ‰pidΓ©mie dansante de 1518), was a case of dancing mania that occurred in Strasbourg, Alsace (modern-day France), in the Holy Roman Empire from July 1518 to September 1518. Somewhere between 50 and 400 people took to dancing for weeks. There are many theories behind the phenomenon, the most popular being stress-induced mass hysteria, suggested by John Waller. Other theories include ergot and religious explanations. There is controversy concerning the number of deaths.\n\nHistory\nEvents\nThe outbreak began in July 1518 when a woman called Frau Troffea began to dance fervently and uncontrollably in a street in Strasbourg. Troffea kept up the constant dancing for a week. Soon, three dozen others joined in. By August, the \"dancing plague\" had claimed 400 victims. Dancers were beginning to collapse. It is said some even died from a stroke or heart attack. No one knew what caused this reaction, which meant no one understood how to remedy it. By early September, the outbreak began to subside, when the dancers were sent to a mountain shrine to pray for absolution.\n\nHistorical documents, including \"physician notes, cathedral sermons, local and regional chronicles, and even notes issued by the Strasbourg city council\" are clear that the victims danced; it is not known why. Historical sources agree that there was an outbreak of dancing after a single woman started dancing, and the dancing did not seem to die down. It lasted for such a long time that it even attracted the attention of the authorities; until the council gave up authority to the physicians, who prescribed the afflicted to \"dance themselves free of it.\" There are claims that guild halls were refurbished to accommodate the dancing, as well as musicians and strong people to help keep those dealing with the dancing mania to stay upright. This backfired, and the council was forced to ban public dancing as people danced in fear it was a punishment from Saint Vitus; and to be \"free of sin\" many joined in on the dancing epidemic. The council went as far as to ban music, as well. Those who danced were then ordered to go to the shrine of Saint Vitus, wore red shoes that were sprinkled with holy water and had painted crosses on the tops and soles. They also had to hold small crosses in their hands; and incense and Latin incantations were part of this \"ritual.\" Apparently \"forgiven by Vitus,\" word was spread of a successful ritual and the Dancing Plague had ended.\n\nEvents similar to this are said to have occurred throughout the medieval age including 11th century in KΓΆlbigk, Saxony, where it was believed to be the result of divine judgment . In 15th century Apulia, Italy, a woman was bitten by a tarantula, the venom making her dance convulsively. The only way to cure the bite was to \"shimmy\" and to have the right sort of music available, which was an accepted remedy by scholars like Athanasius Kircher.\n\nContemporaneous explanations included demonic possession and overheated blood.\n\nVeracity of deaths\nControversy exists over whether people ultimately danced to their deaths. Some sources claim that for a period the plague killed around fifteen people per day, but the sources of the city of Strasbourg at the time of the events did not mention the number of deaths, or even if there were fatalities. There do not appear to be any sources related to the events that make note of any fatalities. Ned Pennant-Rea also claims that the final death toll is not known, but if the claims of fifteen people dying per day were true then the toll could be \"into the hundreds.\"\n\nThe main source for the claim is John Waller, who has written several journal articles on the subject and the book A Time to Dance, a Time to Die: The Extraordinary Story of the Dancing Plague of 1518. The sources cited by Waller that mention deaths were all from later accounts of the events. There is also uncertainty around the identity of the initial dancer (either an unnamed woman or \"Frau Troffea\") and the number of dancers involved (somewhere between 50 and 400). Of the six chronicle accounts, four support Lady Troffea as the first dancer.\n\nModern theories\nFood poisoning\nSome believe the dancing could have been brought on by food poisoning caused by the toxic and psychoactive chemical products of ergot fungi (ergotism), which grows commonly on grains (such as rye) used for baking bread. Ergotamine is the main psychoactive product of ergot fungi; it is structurally related to the drug lysergic acid diethylamide (LSD-25) and is the substance from which LSD-25 was originally synthesized. The same fungus has also been implicated in other major historical anomalies, including the Salem witch trials.\n\nIn The Lancet, John Waller argues that \"this theory does not seem tenable, since it is unlikely that those poisoned by ergot could have danced for days at a time. Nor would so many people have reacted to its psychotropic chemicals in the same way. The ergotism theory also fails to explain why almost every outbreak occurred somewhere along the Rhine and Moselle rivers, areas linked by water but with quite different climates and crops\".\n\nStress-induced mass hysteria\nThis could have been an example of fully developed cases of psychogenic movement disorder happening in mass hysteria or mass psychogenic illness, which involves many individuals suddenly exhibiting the same bizarre behavior. The behavior spreads rapidly and broadly in an epidemic pattern. This kind of comportment could have been caused by elevated levels of psychological stress, caused by the ruthless years (even by the rough standards of the early modern period) the people of Alsace were suffering.\n\nWaller speculates that the dancing was \"stress-induced psychosis\" on a mass level, since the region where the people danced was riddled with starvation and disease, and the inhabitants tended to be superstitious. Seven other cases of dancing plague were reported in the same region during the medieval era.\n\nThis psychogenic illness could have created a chorea (from the Greek khoreia meaning \"to dance\"), a situation comprising random and intricate unintentional movements that flit from body part to body part. Diverse choreas (St. Vitus' dance, St. John's dance, and tarantism) were labeled in the Middle Ages referring to the independent epidemics of \"dancing mania\" that happened in central Europe, particularly at the time of the plague.\n\nPop culture and media\nThe event inspired Jonathan Glazer's 2020 short film Strasbourg 1518.\n\nIt was also the inspiration behind the 2022 choral song \"Choreomania\" by Florence and the Machine. It was the third track on the album Dance Fever, which took its title from the song.\n\nThe book series \"A Collection of Utter Speculation\" released a title \"The Dancing Plague: A Collection of Utter Speculation\" in 2022. It is a fictional account about the events that happened in Strasbourg.\n\nThe 2023 novel, The Dance Tree, by Kiran Millwood Hargrave is a fictionalized version of the summer of 1518 in Strasbourg.\n\nThe event is featured as part of the first season of Watcher Entertainment's \"Puppet History\" in the episode \"The Dancing Plague\".`\n}" - }, - "id": "33936a84-0d38-4fee-9811-7dc020970e73", - "name": "Set Article", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 1040, - 500 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "6fa592a3-1cfe-42d7-8d45-a7ec80871e52", - "name": "baseline_summary", - "value": "The dancing plague of 1518 in Strasbourg, Alsace involved between 50 and 400 people dancing uncontrollably for weeks. The cause is unknown, with theories including stress-induced mass hysteria and ergot poisoning. The outbreak ended when the dancers prayed for absolution at a shrine. There is controversy over the number of deaths, with some sources claiming up to fifteen deaths per day, but historical documents do not confirm any fatalities. Similar events have been reported throughout history, inspiring various works of pop culture.", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "0b869175-1a99-4a50-a29b-79aefb30159f", - "name": "Set Baseline", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 840, - 500 - ] - }, - { - "parameters": { - "model": "gpt-3.5-turbo-0125", - "options": { - "temperature": 0 - } - }, - "id": "57d75d06-da61-4a0a-a917-b076cd1e291e", - "name": "OpenAI Chat Model9", - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 1760, - 660 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "chunkSize": 4000, - "options": { - "summarizationMethodAndPrompts": { - "values": { - "summarizationMethod": "refine" - } - } - } - }, - "id": "eec9288f-1e8e-4331-9ee6-e57fa207be5b", - "name": "Summary - Simple - Refine", - "type": "@n8n/n8n-nodes-langchain.chainSummarization", - "typeVersion": 2, - "position": [ - 1420, - 500 - ] - }, - { - "parameters": { - "code": { - "execute": { - "code": "const { loadEvaluator } = require(\"langchain/evaluation\");\n\nconst llm = await this.getInputConnectionData('ai_languageModel', 0);\nconst inputData = this.getInputData();\nconst inputSummary = inputData[0].json.response.text;\nconst baselineSummary = $('Set Baseline').item.json.baseline_summary;\n\nconst evaluator = await loadEvaluator(\"labeled_criteria\", { criteria: 'helpfulness', llm });\n\nconst result = await evaluator.evaluateStrings({\n input: \"Summarize Wikipedia article about the dancing plague of 1518\",\n prediction: inputSummary,\n reference: baselineSummary,\n});\n\n\nreturn [ {json: { ...result } } ];" - } - }, - "inputs": { - "input": [ - { - "type": "main", - "maxConnections": 1, - "required": true - }, - { - "type": "ai_languageModel", - "maxConnections": 1, - "required": true - } - ] - }, - "outputs": { - "output": [ - { - "type": "main" - } - ] - } - }, - "id": "2102e067-5b8a-44aa-9362-4db63fac06c2", - "name": "Evaluate to Baseline4", - "type": "@n8n/n8n-nodes-langchain.code", - "typeVersion": 1, - "position": [ - 1740, - 500 - ] - } - ], - "connections": { - "OpenAI Chat Model2": { - "ai_languageModel": [ - [ - { - "node": "Summary - Simple - Refine", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "When clicking \"Test workflow\"": { - "main": [ - [ - { - "node": "Set Baseline", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set Article": { - "main": [ - [ - { - "node": "Summary - Simple - Refine", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set Baseline": { - "main": [ - [ - { - "node": "Set Article", - "type": "main", - "index": 0 - } - ] - ] - }, - "OpenAI Chat Model9": { - "ai_languageModel": [ - [ - { - "node": "Evaluate to Baseline4", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "Summary - Simple - Refine": { - "main": [ - [ - { - "node": "Evaluate to Baseline4", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": { - "executionOrder": "v1" - }, - "staticData": null, - "meta": { - "templateCredsSetupCompleted": true - }, - "pinData": {}, - "versionId": "f5380d94-5641-4fce-857c-f5903700382c", - "triggerCount": 0, - "tags": [] -} diff --git a/test-workflows/workflows/241.json b/test-workflows/workflows/241.json deleted file mode 100644 index 141ceef3f1e..00000000000 --- a/test-workflows/workflows/241.json +++ /dev/null @@ -1,157 +0,0 @@ -{ - "createdAt": "2024-03-04T20:33:51.500Z", - "updatedAt": "2024-03-13T13:41:47.000Z", - "id": "241", - "name": "Agent:OpenAiFunctions", - "active": false, - "nodes": [ - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "a2807ad9-7402-47a8-baf8-3ba8feea2494", - "name": "calculator_called", - "value": "={{ $json.intermediateSteps.filter(a => a.action.tool === 'calculator').length >= 1 }}", - "type": "boolean" - }, - { - "id": "29ca8b14-ce95-4497-85eb-687db33ecd06", - "name": "has_correct_output", - "value": "={{ $json.output.includes('100052') }}", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "19c7f30c-1234-4dac-8635-59f3101a9dd5", - "name": "Edit Fields", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 1240, - 760 - ] - }, - { - "parameters": { - "options": { - "temperature": 0 - } - }, - "id": "704163e9-dee9-4d4f-97b8-9681b050af21", - "name": "OpenAI Chat Model", - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 920, - 900 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - }, - "notes": "IGNORED_PROPERTIES=messages" - }, - { - "parameters": {}, - "id": "44f670cc-c4e9-44fc-8870-18955f727be1", - "name": "Calculator", - "type": "@n8n/n8n-nodes-langchain.toolCalculator", - "typeVersion": 1, - "position": [ - 1080, - 920 - ] - }, - { - "parameters": {}, - "id": "f036de64-49fa-4854-89b7-2679f6e3cf59", - "name": "When clicking \"Test workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 700, - 760 - ] - }, - { - "parameters": { - "agent": "openAiFunctionsAgent", - "promptType": "define", - "text": "What is the result of 30 + (10002200 / 100)? Only respond with a number.", - "options": { - "returnIntermediateSteps": true - } - }, - "id": "f0129970-11c7-45c6-9665-28498c9c87dd", - "name": "AI Agent", - "type": "@n8n/n8n-nodes-langchain.agent", - "typeVersion": 1.7, - "position": [ - 900, - 760 - ] - } - ], - "connections": { - "OpenAI Chat Model": { - "ai_languageModel": [ - [ - { - "node": "AI Agent", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "Calculator": { - "ai_tool": [ - [ - { - "node": "AI Agent", - "type": "ai_tool", - "index": 0 - } - ] - ] - }, - "When clicking \"Test workflow\"": { - "main": [ - [ - { - "node": "AI Agent", - "type": "main", - "index": 0 - } - ] - ] - }, - "AI Agent": { - "main": [ - [ - { - "node": "Edit Fields", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": { - "executionOrder": "v1" - }, - "staticData": null, - "meta": { - "templateCredsSetupCompleted": true - }, - "pinData": {}, - "versionId": "92205881-151a-4e66-acd1-31f2d4e3a58c", - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/242.json b/test-workflows/workflows/242.json deleted file mode 100644 index 11254c5ce46..00000000000 --- a/test-workflows/workflows/242.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - "createdAt": "2024-03-04T20:50:20.300Z", - "updatedAt": "2024-03-04T20:55:07.000Z", - "id": "242", - "name": "BasicLLMChain:OutputParser", - "active": false, - "nodes": [ - { - "parameters": { - "options": { - "temperature": 0 - } - }, - "id": "e130434b-6283-473c-a61d-fbbe26b63acb", - "name": "OpenAI Chat Model1", - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 1380, - 720 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": {}, - "id": "b712a9c6-575e-4026-a6a0-83590c959267", - "name": "When clicking \"Test workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 1180, - 560 - ] - }, - { - "parameters": { - "jsonSchema": "{\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"state_name\": \"string\",\n \"capital\": \"string\",\n \"electoral_college_votes\": \"number\"\n }\n }\n}" - }, - "id": "6db310a2-11ca-4097-92cb-ec9a6a6da51e", - "name": "Structured Output Parser1", - "type": "@n8n/n8n-nodes-langchain.outputParserStructured", - "typeVersion": 1.2, - "position": [ - 1540, - 720 - ] - }, - { - "parameters": { - "promptType": "define", - "text": "What are the top 5 states of US by population?", - "hasOutputParser": true - }, - "id": "2a8ca922-5da0-4065-b999-640fd678b0d3", - "name": "Open AI Chat - Output Parsing", - "type": "@n8n/n8n-nodes-langchain.chainLlm", - "typeVersion": 1.5, - "position": [ - 1360, - 560 - ] - } - ], - "connections": { - "OpenAI Chat Model1": { - "ai_languageModel": [ - [ - { - "node": "Open AI Chat - Output Parsing", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "When clicking \"Test workflow\"": { - "main": [ - [ - { - "node": "Open AI Chat - Output Parsing", - "type": "main", - "index": 0 - } - ] - ] - }, - "Structured Output Parser1": { - "ai_outputParser": [ - [ - { - "node": "Open AI Chat - Output Parsing", - "type": "ai_outputParser", - "index": 0 - } - ] - ] - } - }, - "settings": { - "executionOrder": "v1" - }, - "staticData": null, - "meta": { - "templateCredsSetupCompleted": true - }, - "pinData": {}, - "versionId": "e3bbc2b0-e9cd-431d-89b4-c39db2989e8f", - "triggerCount": 0, - "tags": [] -} diff --git a/test-workflows/workflows/243.json b/test-workflows/workflows/243.json deleted file mode 100644 index 193f871ac71..00000000000 --- a/test-workflows/workflows/243.json +++ /dev/null @@ -1,157 +0,0 @@ -{ - "createdAt": "2024-03-04T20:32:40.367Z", - "updatedAt": "2024-03-13T13:41:09.000Z", - "id": "243", - "name": "Agent:ReAct", - "active": false, - "nodes": [ - { - "parameters": {}, - "id": "35b58a63-6835-4724-807f-47e24215f4c2", - "name": "When clicking \"Test workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 840, - 900 - ] - }, - { - "parameters": { - "options": { - "temperature": 0 - } - }, - "id": "9dd9723f-2e8f-463b-b88e-20ba4298f538", - "name": "OpenAI Chat Model2", - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 1060, - 1040 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - }, - "notes": "IGNORED_PROPERTIES=messages" - }, - { - "parameters": {}, - "id": "223ed022-94bd-4b31-bf12-5c79d9b635a9", - "name": "Calculator2", - "type": "@n8n/n8n-nodes-langchain.toolCalculator", - "typeVersion": 1, - "position": [ - 1220, - 1060 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "a2807ad9-7402-47a8-baf8-3ba8feea2494", - "name": "calculator_called", - "value": "={{ $json.intermediateSteps.filter(a => a.action.tool === 'calculator').length >= 1 }}", - "type": "boolean" - }, - { - "id": "29ca8b14-ce95-4497-85eb-687db33ecd06", - "name": "has_correct_output", - "value": "={{ $json.output.includes('100052') }}", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "473e1db4-8d90-49e3-99ae-444d7c5d8cf0", - "name": "Edit Fields2", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 1380, - 900 - ] - }, - { - "parameters": { - "agent": "reActAgent", - "promptType": "define", - "text": "What is the result of 30 + (10002200 / 100)? Only respond with a number.", - "options": { - "returnIntermediateSteps": true - } - }, - "id": "3fa65db7-000e-427f-aab9-14af134d0d78", - "name": "AI Agent2", - "type": "@n8n/n8n-nodes-langchain.agent", - "typeVersion": 1.4, - "position": [ - 1040, - 900 - ] - } - ], - "connections": { - "OpenAI Chat Model2": { - "ai_languageModel": [ - [ - { - "node": "AI Agent2", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "Calculator2": { - "ai_tool": [ - [ - { - "node": "AI Agent2", - "type": "ai_tool", - "index": 0 - } - ] - ] - }, - "When clicking \"Test workflow\"": { - "main": [ - [ - { - "node": "AI Agent2", - "type": "main", - "index": 0 - } - ] - ] - }, - "AI Agent2": { - "main": [ - [ - { - "node": "Edit Fields2", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": { - "executionOrder": "v1" - }, - "staticData": null, - "meta": { - "templateCredsSetupCompleted": true - }, - "pinData": {}, - "versionId": "aeb32e87-d821-4885-ab26-58321ad2d0a4", - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/244.json b/test-workflows/workflows/244.json deleted file mode 100644 index d1d44e1f05f..00000000000 --- a/test-workflows/workflows/244.json +++ /dev/null @@ -1,351 +0,0 @@ -{ - "createdAt": "2024-03-04T20:35:31.373Z", - "updatedAt": "2024-03-04T20:36:25.000Z", - "id": "244", - "name": "Agent:WorkflowTool", - "active": false, - "nodes": [ - { - "parameters": {}, - "id": "e01e31b1-1114-4384-b88d-522337a0010b", - "name": "Execute Workflow Trigger", - "type": "n8n-nodes-base.executeWorkflowTrigger", - "typeVersion": 1, - "position": [ - 200, - 800 - ] - }, - { - "parameters": { - "rules": { - "values": [ - { - "conditions": { - "options": { - "caseSensitive": true, - "leftValue": "", - "typeValidation": "strict" - }, - "conditions": [ - { - "leftValue": "={{ $json.tool }}", - "rightValue": "get_weather", - "operator": { - "type": "string", - "operation": "equals" - } - } - ], - "combinator": "and" - }, - "renameOutput": true, - "outputKey": "Weather" - }, - { - "conditions": { - "options": { - "caseSensitive": true, - "leftValue": "", - "typeValidation": "strict" - }, - "conditions": [ - { - "id": "a164188f-3b5b-4c24-b1bb-e589f4f9219f", - "leftValue": "={{ $json.tool }}", - "rightValue": "get_events", - "operator": { - "type": "string", - "operation": "equals", - "name": "filter.operator.equals" - } - } - ], - "combinator": "and" - }, - "renameOutput": true, - "outputKey": "Events" - } - ] - }, - "options": {} - }, - "id": "a8741e96-bff4-463c-9dd0-ffba5b9877b3", - "name": "Switch", - "type": "n8n-nodes-base.switch", - "typeVersion": 3, - "position": [ - 420, - 800 - ] - }, - { - "parameters": { - "name": "get_weather_data", - "description": "Call this tool to get weather information for a specific city. Input should be a single string in format: \"$CITY, $COUNTRY\". So for example to get data about Prague, \"Prague, Czechia\".", - "workflowId": "={{ $workflow.id }}", - "fields": { - "values": [ - { - "name": "tool", - "stringValue": "get_weather" - } - ] - } - }, - "id": "d35195a4-f609-467d-9cca-b659e5f76c2b", - "name": "Get Weather", - "type": "@n8n/n8n-nodes-langchain.toolWorkflow", - "typeVersion": 1, - "position": [ - 620, - 620 - ] - }, - { - "parameters": { - "name": "get_evens", - "description": "Call this tool to get upcoming events for a specific city. Input should be a single string in format: \"$CITY, $COUNTRY\". So for example to get data about Prague, \"Prague, Czechia\".", - "workflowId": "={{ $workflow.id }}", - "fields": { - "values": [ - { - "name": "tool", - "stringValue": "get_events" - } - ] - } - }, - "id": "8214ad91-530b-49a1-874b-42d31d1d9e87", - "name": "Get Events", - "type": "@n8n/n8n-nodes-langchain.toolWorkflow", - "typeVersion": 1, - "position": [ - 720, - 620 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "fc61cf88-967d-4433-9cfd-7cdad1a43e75", - "name": "response", - "value": "={\n \"created\": \"2024-03-04T09:26:23+01:00\",\n \"symbolCode\": {\n \"next1Hour\": \"fog\"\n },\n \"temperature\": {\n \"value\": 5.1,\n \"feelsLike\": 4\n },\n \"precipitation\": {\n \"value\": 0.0\n },\n \"wind\": {\n \"direction\": 275,\n \"speed\": 1.7\n },\n \"status\": {\n \"code\": \"Ok\"\n }\n}", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "cdb19b9d-9665-4b66-bda7-1b4f8191dad0", - "name": "Edit Fields4", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 700, - 760 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "0434695d-b245-4947-8b6e-7676a5c92904", - "name": "response", - "value": "=[\n {\n \"description\": \"***Movie Barf* is a new English friendly film night presented by film journalist and blogger Ryan Keating-Lambert, dedicated to screening a diverse variety of award-winning films both contemporary and classic. Ryan’s late night shows includes intriguing chats with various guests (in person or over Skype in the case of the international ones) and special drink offers at the bar.**\\n\\n*Dune: Part Two* / Denis Villeneuve / Canada, USA 2024 / 166 min – Paul Atreides unites with Chani and the Fremen while seeking revenge against the conspirators who destroyed his family.\",\n \"name\": \"Movie Barf: Dune – Part Two\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n },\n {\n \"description\": \"LuboΕ‘ PospΓ­Ε‘il will perform with the renewed band 5P on March 14 at the cultural house of BarikadnΓ­k.\",\n \"name\": \"LuboΕ‘ PospΓ­Ε‘il & 5P\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n },\n {\n \"description\": \"An insomniac office worker looking for a way to change his life crosses paths with a devil-may-care soap maker and they form an underground fight club that evolves into something much, much more...\",\n \"name\": \"Fight Club\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n },\n {\n \"description\": \"From filmmaker Yorgos Lanthimos and producer Emma Stone comes the incredible tale and fantastical evolution of Bella Baxter (Stone), a young woman brought back to life by the brilliant and unorthodox scientist Dr. Godwin Baxter (Willem Dafoe). Under Baxter's protection, Bella is eager to learn. Hungry for the worldliness she is lacking, she runs off with Duncan Wedderburn (Mark Ruffalo), a slick and debauched lawyer, on a whirlwind adventure across the continents. Free from the prejudices of her times, Bella grows steadfast in her purpose to stand for equality and liberation.\",\n \"name\": \"Poor Things\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n },\n {\n \"description\": \"Concert of Bharata RajnoΕ‘ek, who decided to do something very brave - pay tribute to king of the pop, Michael Jackson in jazz.\",\n \"name\": \"Tribute to World Legends: Michael Jackson\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n }\n]", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "44e58855-7ff7-4f80-9092-f6ed72274874", - "name": "Edit Fields5", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 700, - 920 - ] - }, - { - "parameters": { - "model": "gpt-4-turbo-preview", - "options": { - "temperature": 0 - } - }, - "id": "2fecb46d-8bff-4884-9e73-bd787a6b1ece", - "name": "OpenAI Chat Model4", - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 480, - 620 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - }, - "notes": "IGNORED_PROPERTIES=messages" - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "414caf45-02aa-4c0a-9cdb-e6da9ec03d80", - "name": "has_weather", - "value": "={{ $json.output.includes('5.1') }}", - "type": "boolean" - }, - { - "id": "4f055fa4-10eb-4b7e-b1dc-37a7ef7185fc", - "name": "has_movie", - "value": "={{ $json.output.includes('Dune') }}", - "type": "boolean" - } - ] - }, - "options": {} - }, - "id": "32628916-d991-459a-8ad6-07396f0c629e", - "name": "Edit Fields6", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 840, - 460 - ] - }, - { - "parameters": { - "agent": "reActAgent", - "promptType": "define", - "text": "Help me plan my day in Berlin, Germany\n1. Check current the weather \n2. Get the upcoming events\n3. Respond with weather and details about the upcoming events\n\nEach tool should only be called once.", - "options": {} - }, - "id": "367e796c-9c91-42a6-9585-bb9f19c2969a", - "name": "AI Agent4", - "type": "@n8n/n8n-nodes-langchain.agent", - "typeVersion": 1.5, - "position": [ - 460, - 460 - ] - }, - { - "parameters": {}, - "id": "84833733-c87b-442c-9be1-26315056a205", - "name": "When clicking \"Test workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 200, - 460 - ] - } - ], - "connections": { - "Execute Workflow Trigger": { - "main": [ - [ - { - "node": "Switch", - "type": "main", - "index": 0 - } - ] - ] - }, - "Switch": { - "main": [ - [ - { - "node": "Edit Fields4", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Edit Fields5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Get Weather": { - "ai_tool": [ - [ - { - "node": "AI Agent4", - "type": "ai_tool", - "index": 0 - } - ] - ] - }, - "Get Events": { - "ai_tool": [ - [ - { - "node": "AI Agent4", - "type": "ai_tool", - "index": 0 - } - ] - ] - }, - "OpenAI Chat Model4": { - "ai_languageModel": [ - [ - { - "node": "AI Agent4", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "AI Agent4": { - "main": [ - [ - { - "node": "Edit Fields6", - "type": "main", - "index": 0 - } - ] - ] - }, - "When clicking \"Test workflow\"": { - "main": [ - [ - { - "node": "AI Agent4", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": { - "executionOrder": "v1" - }, - "staticData": null, - "meta": { - "templateCredsSetupCompleted": true - }, - "pinData": {}, - "versionId": "058fe472-fd5e-4fab-8f4d-1363d4adbbdb", - "triggerCount": 0, - "tags": [] -} diff --git a/test-workflows/workflows/245.json b/test-workflows/workflows/245.json deleted file mode 100644 index cd6325f7354..00000000000 --- a/test-workflows/workflows/245.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "createdAt": "2024-03-04T20:43:29.800Z", - "updatedAt": "2024-03-04T20:43:37.000Z", - "id": "245", - "name": "BasicLLMChain:AwsBedrockChat", - "active": false, - "nodes": [ - { - "parameters": { - "model": "amazon.titan-text-lite-v1", - "options": { - "temperature": 0 - } - }, - "id": "6610aac2-0d86-4d20-a625-072403cc1d15", - "name": "AWS Bedrock Chat Model", - "type": "@n8n/n8n-nodes-langchain.lmChatAwsBedrock", - "typeVersion": 1, - "position": [ - 680, - 600 - ], - "credentials": { - "aws": { - "id": "124", - "name": "AWS creds" - } - } - }, - { - "parameters": {}, - "id": "9e52b4d5-5e83-4d6a-a31e-e9408728bb77", - "name": "When clicking \"Test workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 460, - 460 - ] - }, - { - "parameters": { - "promptType": "define", - "text": "How much is 1+1? Only provide the numerical answer without any other text.\n" - }, - "id": "8899ab4b-9fab-4c92-8e17-7601117fc3fc", - "name": "AWS Bedrock Chat", - "type": "@n8n/n8n-nodes-langchain.chainLlm", - "typeVersion": 1.5, - "position": [ - 660, - 460 - ] - } - ], - "connections": { - "AWS Bedrock Chat Model": { - "ai_languageModel": [ - [ - { - "node": "AWS Bedrock Chat", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "When clicking \"Test workflow\"": { - "main": [ - [ - { - "node": "AWS Bedrock Chat", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": { - "executionOrder": "v1" - }, - "staticData": null, - "meta": { - "templateCredsSetupCompleted": true - }, - "pinData": {}, - "versionId": "ed68041a-90c9-4900-8307-74bede290f62", - "triggerCount": 0, - "tags": [] -} diff --git a/test-workflows/workflows/246.json b/test-workflows/workflows/246.json deleted file mode 100644 index 8783a14996e..00000000000 --- a/test-workflows/workflows/246.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "createdAt": "2024-03-04T20:44:38.763Z", - "updatedAt": "2024-03-04T20:44:44.000Z", - "id": "246", - "name": "BasicLLMChain:OpenAIChat", - "active": false, - "nodes": [ - { - "parameters": { - "model": "gpt-3.5-turbo-0125", - "options": { - "temperature": 0 - } - }, - "id": "7b0bb72a-9a3e-4dbf-a875-cdc429bf333a", - "name": "OpenAI Chat Model", - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 640, - 600 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": {}, - "id": "4832e182-9823-45c4-9289-51299debbe4c", - "name": "When clicking \"Test workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 460, - 460 - ] - }, - { - "parameters": { - "promptType": "define", - "text": "How much is 1+1? Only provide the numerical answer without any other text.\n" - }, - "id": "6f978929-e85a-44cc-999b-8e670bd65314", - "name": "Open AI Chat", - "type": "@n8n/n8n-nodes-langchain.chainLlm", - "typeVersion": 1.5, - "position": [ - 620, - 460 - ] - } - ], - "connections": { - "OpenAI Chat Model": { - "ai_languageModel": [ - [ - { - "node": "Open AI Chat", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "When clicking \"Test workflow\"": { - "main": [ - [ - { - "node": "Open AI Chat", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": { - "executionOrder": "v1" - }, - "staticData": null, - "meta": { - "templateCredsSetupCompleted": true - }, - "pinData": {}, - "versionId": "76b6f624-b785-4b06-9cb0-57deed8b47a0", - "triggerCount": 0, - "tags": [] -} diff --git a/test-workflows/workflows/247.json b/test-workflows/workflows/247.json deleted file mode 100644 index 42d542d5da8..00000000000 --- a/test-workflows/workflows/247.json +++ /dev/null @@ -1,256 +0,0 @@ -{ - "createdAt": "2024-03-04T20:38:50.212Z", - "updatedAt": "2024-03-04T20:39:11.000Z", - "id": "247", - "name": "SummarizationChain:Advanced:Map", - "active": false, - "nodes": [ - { - "parameters": {}, - "id": "0d9a3d32-b54b-4353-8886-50390461f967", - "name": "When clicking \"Test workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 660, - 380 - ] - }, - { - "parameters": { - "jsCode": "return {\n text: `The dancing plague of 1518, or dance epidemic of 1518 (French: Γ‰pidΓ©mie dansante de 1518), was a case of dancing mania that occurred in Strasbourg, Alsace (modern-day France), in the Holy Roman Empire from July 1518 to September 1518. Somewhere between 50 and 400 people took to dancing for weeks. There are many theories behind the phenomenon, the most popular being stress-induced mass hysteria, suggested by John Waller. Other theories include ergot and religious explanations. There is controversy concerning the number of deaths.\n\nHistory\nEvents\nThe outbreak began in July 1518 when a woman called Frau Troffea began to dance fervently and uncontrollably in a street in Strasbourg. Troffea kept up the constant dancing for a week. Soon, three dozen others joined in. By August, the \"dancing plague\" had claimed 400 victims. Dancers were beginning to collapse. It is said some even died from a stroke or heart attack. No one knew what caused this reaction, which meant no one understood how to remedy it. By early September, the outbreak began to subside, when the dancers were sent to a mountain shrine to pray for absolution.\n\nHistorical documents, including \"physician notes, cathedral sermons, local and regional chronicles, and even notes issued by the Strasbourg city council\" are clear that the victims danced; it is not known why. Historical sources agree that there was an outbreak of dancing after a single woman started dancing, and the dancing did not seem to die down. It lasted for such a long time that it even attracted the attention of the authorities; until the council gave up authority to the physicians, who prescribed the afflicted to \"dance themselves free of it.\" There are claims that guild halls were refurbished to accommodate the dancing, as well as musicians and strong people to help keep those dealing with the dancing mania to stay upright. This backfired, and the council was forced to ban public dancing as people danced in fear it was a punishment from Saint Vitus; and to be \"free of sin\" many joined in on the dancing epidemic. The council went as far as to ban music, as well. Those who danced were then ordered to go to the shrine of Saint Vitus, wore red shoes that were sprinkled with holy water and had painted crosses on the tops and soles. They also had to hold small crosses in their hands; and incense and Latin incantations were part of this \"ritual.\" Apparently \"forgiven by Vitus,\" word was spread of a successful ritual and the Dancing Plague had ended.\n\nEvents similar to this are said to have occurred throughout the medieval age including 11th century in KΓΆlbigk, Saxony, where it was believed to be the result of divine judgment . In 15th century Apulia, Italy, a woman was bitten by a tarantula, the venom making her dance convulsively. The only way to cure the bite was to \"shimmy\" and to have the right sort of music available, which was an accepted remedy by scholars like Athanasius Kircher.\n\nContemporaneous explanations included demonic possession and overheated blood.\n\nVeracity of deaths\nControversy exists over whether people ultimately danced to their deaths. Some sources claim that for a period the plague killed around fifteen people per day, but the sources of the city of Strasbourg at the time of the events did not mention the number of deaths, or even if there were fatalities. There do not appear to be any sources related to the events that make note of any fatalities. Ned Pennant-Rea also claims that the final death toll is not known, but if the claims of fifteen people dying per day were true then the toll could be \"into the hundreds.\"\n\nThe main source for the claim is John Waller, who has written several journal articles on the subject and the book A Time to Dance, a Time to Die: The Extraordinary Story of the Dancing Plague of 1518. The sources cited by Waller that mention deaths were all from later accounts of the events. There is also uncertainty around the identity of the initial dancer (either an unnamed woman or \"Frau Troffea\") and the number of dancers involved (somewhere between 50 and 400). Of the six chronicle accounts, four support Lady Troffea as the first dancer.\n\nModern theories\nFood poisoning\nSome believe the dancing could have been brought on by food poisoning caused by the toxic and psychoactive chemical products of ergot fungi (ergotism), which grows commonly on grains (such as rye) used for baking bread. Ergotamine is the main psychoactive product of ergot fungi; it is structurally related to the drug lysergic acid diethylamide (LSD-25) and is the substance from which LSD-25 was originally synthesized. The same fungus has also been implicated in other major historical anomalies, including the Salem witch trials.\n\nIn The Lancet, John Waller argues that \"this theory does not seem tenable, since it is unlikely that those poisoned by ergot could have danced for days at a time. Nor would so many people have reacted to its psychotropic chemicals in the same way. The ergotism theory also fails to explain why almost every outbreak occurred somewhere along the Rhine and Moselle rivers, areas linked by water but with quite different climates and crops\".\n\nStress-induced mass hysteria\nThis could have been an example of fully developed cases of psychogenic movement disorder happening in mass hysteria or mass psychogenic illness, which involves many individuals suddenly exhibiting the same bizarre behavior. The behavior spreads rapidly and broadly in an epidemic pattern. This kind of comportment could have been caused by elevated levels of psychological stress, caused by the ruthless years (even by the rough standards of the early modern period) the people of Alsace were suffering.\n\nWaller speculates that the dancing was \"stress-induced psychosis\" on a mass level, since the region where the people danced was riddled with starvation and disease, and the inhabitants tended to be superstitious. Seven other cases of dancing plague were reported in the same region during the medieval era.\n\nThis psychogenic illness could have created a chorea (from the Greek khoreia meaning \"to dance\"), a situation comprising random and intricate unintentional movements that flit from body part to body part. Diverse choreas (St. Vitus' dance, St. John's dance, and tarantism) were labeled in the Middle Ages referring to the independent epidemics of \"dancing mania\" that happened in central Europe, particularly at the time of the plague.\n\nPop culture and media\nThe event inspired Jonathan Glazer's 2020 short film Strasbourg 1518.\n\nIt was also the inspiration behind the 2022 choral song \"Choreomania\" by Florence and the Machine. It was the third track on the album Dance Fever, which took its title from the song.\n\nThe book series \"A Collection of Utter Speculation\" released a title \"The Dancing Plague: A Collection of Utter Speculation\" in 2022. It is a fictional account about the events that happened in Strasbourg.\n\nThe 2023 novel, The Dance Tree, by Kiran Millwood Hargrave is a fictionalized version of the summer of 1518 in Strasbourg.\n\nThe event is featured as part of the first season of Watcher Entertainment's \"Puppet History\" in the episode \"The Dancing Plague\".`\n}" - }, - "id": "a5c7a7c0-442c-4ffd-bbf2-1ee98bab0a23", - "name": "Set Article", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 1080, - 380 - ] - }, - { - "parameters": { - "model": "gpt-3.5-turbo-0125", - "options": { - "temperature": 0 - } - }, - "id": "3b01b603-8e9e-4f91-bd86-04820f2234dc", - "name": "OpenAI Chat Model1", - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 1480, - 520 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "chunkSize": 300, - "chunkOverlap": 50 - }, - "id": "b4c73920-090e-4668-9fa7-7ea124373409", - "name": "Token Splitter", - "type": "@n8n/n8n-nodes-langchain.textSplitterTokenSplitter", - "typeVersion": 1, - "position": [ - 1620, - 520 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "6fa592a3-1cfe-42d7-8d45-a7ec80871e52", - "name": "baseline_summary", - "value": "The dancing plague of 1518 in Strasbourg, Alsace involved between 50 and 400 people dancing uncontrollably for weeks. The cause is unknown, with theories including stress-induced mass hysteria and ergot poisoning. The outbreak ended when the dancers prayed for absolution at a shrine. There is controversy over the number of deaths, with some sources claiming up to fifteen deaths per day, but historical documents do not confirm any fatalities. Similar events have been reported throughout history, inspiring various works of pop culture.", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "ca8694fd-7788-41f1-8aa7-11c9c1682358", - "name": "Set Baseline", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 880, - 380 - ] - }, - { - "parameters": { - "model": "gpt-3.5-turbo-0125", - "options": { - "temperature": 0 - } - }, - "id": "57a4de1c-f385-439b-8809-8a1172bab713", - "name": "OpenAI Chat Model8", - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 1800, - 520 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "chunkingMode": "advanced", - "options": {} - }, - "id": "5ad67153-eef9-4d4a-94af-4974d33c2076", - "name": "Summary - Advanced", - "type": "@n8n/n8n-nodes-langchain.chainSummarization", - "typeVersion": 2, - "position": [ - 1460, - 380 - ] - }, - { - "parameters": { - "code": { - "execute": { - "code": "const { loadEvaluator } = require(\"langchain/evaluation\");\n\nconst llm = await this.getInputConnectionData('ai_languageModel', 0);\nconst inputData = this.getInputData();\nconst inputSummary = inputData[0].json.response.text;\nconst baselineSummary = $('Set Baseline').item.json.baseline_summary\n\nconst evaluator = await loadEvaluator(\"labeled_criteria\", { criteria: 'helpfulness', llm });\n\nconst result = await evaluator.evaluateStrings({\n input: \"Summarize Wikipedia article about the dancing plague of 1518\",\n prediction: inputSummary,\n reference: baselineSummary,\n});\n\n\nreturn [ {json: { ...result } } ];" - } - }, - "inputs": { - "input": [ - { - "type": "main", - "maxConnections": 1, - "required": true - }, - { - "type": "ai_languageModel", - "maxConnections": 1, - "required": true - } - ] - }, - "outputs": { - "output": [ - { - "type": "main" - } - ] - } - }, - "id": "cdad3056-57aa-4d84-98b2-5077793b883f", - "name": "Evaluate to Baseline3", - "type": "@n8n/n8n-nodes-langchain.code", - "typeVersion": 1, - "position": [ - 1780, - 380 - ] - } - ], - "connections": { - "When clicking \"Test workflow\"": { - "main": [ - [ - { - "node": "Set Baseline", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set Article": { - "main": [ - [ - { - "node": "Summary - Advanced", - "type": "main", - "index": 0 - } - ] - ] - }, - "OpenAI Chat Model1": { - "ai_languageModel": [ - [ - { - "node": "Summary - Advanced", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "Token Splitter": { - "ai_textSplitter": [ - [ - { - "node": "Summary - Advanced", - "type": "ai_textSplitter", - "index": 0 - } - ] - ] - }, - "Set Baseline": { - "main": [ - [ - { - "node": "Set Article", - "type": "main", - "index": 0 - } - ] - ] - }, - "OpenAI Chat Model8": { - "ai_languageModel": [ - [ - { - "node": "Evaluate to Baseline3", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "Summary - Advanced": { - "main": [ - [ - { - "node": "Evaluate to Baseline3", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": { - "executionOrder": "v1" - }, - "staticData": null, - "meta": { - "templateCredsSetupCompleted": true - }, - "pinData": {}, - "versionId": "0397921a-1101-44f9-a4ad-19377cd11aa8", - "triggerCount": 0, - "tags": [] -} diff --git a/test-workflows/workflows/248.json b/test-workflows/workflows/248.json deleted file mode 100644 index 579bf79f7b4..00000000000 --- a/test-workflows/workflows/248.json +++ /dev/null @@ -1,521 +0,0 @@ -{ - "createdAt": "2024-03-04T17:02:06.139Z", - "updatedAt": "2024-03-04T17:07:12.000Z", - "id": "248", - "name": "InMemoryVectorStore:*", - "active": false, - "nodes": [ - { - "parameters": { - "model": "text-embedding-3-small", - "options": {} - }, - "id": "79cfd86e-b657-49de-bc61-13415ffa725b", - "name": "Embeddings OpenAI6", - "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi", - "typeVersion": 1, - "position": [ - 660, - 1480 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "options": { - "metadata": { - "metadataValues": [ - { - "name": "some-meta", - "value": "test" - }, - { - "name": "other-meta", - "value": "test2" - } - ] - } - } - }, - "id": "76ee3d77-836c-417d-8d8e-9822cddfe936", - "name": "Default Data Loader2", - "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader", - "typeVersion": 1, - "position": [ - 640, - 1620 - ] - }, - { - "parameters": { - "chunkSize": 500, - "chunkOverlap": 100 - }, - "id": "1edacf5b-b7e4-4486-b98f-c78b338ac38e", - "name": "Token Splitter2", - "type": "@n8n/n8n-nodes-langchain.textSplitterTokenSplitter", - "typeVersion": 1, - "position": [ - 640, - 1780 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "5f9a8751-2eb2-4ab6-8f12-b7856d9baa8a", - "name": "output_length_matches", - "value": "={{ $items().length === 12 }}", - "type": "boolean" - }, - { - "id": "a5a61e4e-ff4d-4da5-a174-9788c22cddfd", - "name": "has_content", - "value": "={{ $json.pageContent.length > 100 }}", - "type": "boolean" - }, - { - "id": "bceaea49-b29f-47d7-8a5a-14d4e02477ec", - "name": "has_meta", - "value": "={{ $items().every(i => i.json.metadata['some-meta'] === 'test' && i.json.metadata['other-meta'] === 'test2') }}", - "type": "boolean" - } - ] - }, - "options": {} - }, - "id": "e49fd92f-0a97-44a4-bbf5-c9aa94496ce1", - "name": "Check Vector Store Populated2", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 1020, - 1340 - ], - "executeOnce": true - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "5f9a8751-2eb2-4ab6-8f12-b7856d9baa8a", - "name": "output_length_matches", - "value": "={{ $items().length === 4 }}", - "type": "boolean" - }, - { - "id": "a5a61e4e-ff4d-4da5-a174-9788c22cddfd", - "name": "has_content", - "value": "={{ $json.document.pageContent.length > 100 }}", - "type": "boolean" - }, - { - "id": "bceaea49-b29f-47d7-8a5a-14d4e02477ec", - "name": "has_meta", - "value": "={{ $items().every(i => i.json.document.metadata['some-meta'] === 'test' && i.json.document.metadata['other-meta'] === 'test2') }}", - "type": "boolean" - } - ] - }, - "options": {} - }, - "id": "b32d000c-ed3b-48c4-99b8-98cf72cc0a88", - "name": "Check Vector Store Retrieval2", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 1880, - 1340 - ], - "executeOnce": true - }, - { - "parameters": { - "promptType": "define", - "text": "What is the size of a block header with no transactions? Respond only with number of bytes." - }, - "id": "fe162de8-6021-4ae6-a874-01c831f79724", - "name": "Question and Answer Chain2", - "type": "@n8n/n8n-nodes-langchain.chainRetrievalQa", - "typeVersion": 1.5, - "position": [ - 2100, - 1340 - ] - }, - { - "parameters": { - "model": "gpt-3.5-turbo-0125", - "options": { - "temperature": 0 - } - }, - "id": "93ff6597-cac9-4847-8efd-e1d03520b4b9", - "name": "OpenAI Chat Model2", - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 2120, - 1500 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": {}, - "id": "8985b238-8814-4aab-bbf3-801fb52c7757", - "name": "Vector Store Retriever2", - "type": "@n8n/n8n-nodes-langchain.retrieverVectorStore", - "typeVersion": 1, - "position": [ - 2100, - 1620 - ] - }, - { - "parameters": { - "model": "text-embedding-3-small", - "options": {} - }, - "id": "b2ef63c3-2e18-49dc-8241-ee71eabdd6cb", - "name": "Embeddings OpenAI7", - "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi", - "typeVersion": 1, - "position": [ - 2040, - 1880 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "d998ae3e-192c-45ff-a3ff-ad3ed3a20304", - "name": "output_matches", - "value": "={{ $json.response.includes('80') }}", - "type": "boolean" - } - ] - }, - "options": {} - }, - "id": "046edb77-d0cd-4e8b-9db3-706c249e557f", - "name": "Edit Fields2", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 2440, - 1340 - ] - }, - { - "parameters": { - "model": "text-embedding-3-small", - "options": {} - }, - "id": "2f1e6e26-d43e-4254-acef-ea69cd628a9a", - "name": "Embeddings OpenAI8", - "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi", - "typeVersion": 1, - "position": [ - 1520, - 1540 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "memoryKey": "bitcoin_wf_test" - }, - "id": "11262bc3-f1db-4162-94c8-5f2d5b279900", - "name": "In-Memory Vector Store2", - "type": "@n8n/n8n-nodes-langchain.vectorStoreInMemory", - "typeVersion": 1, - "position": [ - 2040, - 1760 - ] - }, - { - "parameters": {}, - "id": "f4ff0f49-ac8b-4f7c-9cd4-90f0f9534772", - "name": "When clicking \"Test workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 180, - 1340 - ] - }, - { - "parameters": { - "jsCode": "return {\n text: `Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9`\n}" - }, - "id": "06c12027-e965-441d-b1d8-b711eabbeb02", - "name": "Code", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 400, - 1340 - ] - }, - { - "parameters": { - "amount": 10 - }, - "id": "a2510c9b-bdaa-4fa0-85e6-aa7adef9194b", - "name": "Wait", - "type": "n8n-nodes-base.wait", - "typeVersion": 1.1, - "position": [ - 1240, - 1340 - ], - "webhookId": "a5bb0b0d-1527-414f-9abd-46e7f2be4f7f" - }, - { - "parameters": { - "mode": "insert", - "memoryKey": "bitcoin_wf_test", - "clearStore": true - }, - "id": "569a716b-c369-461e-b522-4f890af4fa34", - "name": "In-Memory Vector Store", - "type": "@n8n/n8n-nodes-langchain.vectorStoreInMemory", - "typeVersion": 1, - "position": [ - 660, - 1340 - ] - }, - { - "parameters": { - "mode": "load", - "memoryKey": "bitcoin_wf_test", - "prompt": "Security risks" - }, - "id": "8e51401b-9cd7-4d53-9c34-99b6e82a7b06", - "name": "In-Memory Vector Store1", - "type": "@n8n/n8n-nodes-langchain.vectorStoreInMemory", - "typeVersion": 1, - "position": [ - 1500, - 1340 - ] - } - ], - "connections": { - "Embeddings OpenAI6": { - "ai_embedding": [ - [ - { - "node": "In-Memory Vector Store", - "type": "ai_embedding", - "index": 0 - } - ] - ] - }, - "Default Data Loader2": { - "ai_document": [ - [ - { - "node": "In-Memory Vector Store", - "type": "ai_document", - "index": 0 - } - ] - ] - }, - "Token Splitter2": { - "ai_textSplitter": [ - [ - { - "node": "Default Data Loader2", - "type": "ai_textSplitter", - "index": 0 - } - ] - ] - }, - "Check Vector Store Populated2": { - "main": [ - [ - { - "node": "Wait", - "type": "main", - "index": 0 - } - ] - ] - }, - "Check Vector Store Retrieval2": { - "main": [ - [ - { - "node": "Question and Answer Chain2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Question and Answer Chain2": { - "main": [ - [ - { - "node": "Edit Fields2", - "type": "main", - "index": 0 - } - ] - ] - }, - "OpenAI Chat Model2": { - "ai_languageModel": [ - [ - { - "node": "Question and Answer Chain2", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "Vector Store Retriever2": { - "ai_retriever": [ - [ - { - "node": "Question and Answer Chain2", - "type": "ai_retriever", - "index": 0 - } - ] - ] - }, - "Embeddings OpenAI7": { - "ai_embedding": [ - [ - { - "node": "In-Memory Vector Store2", - "type": "ai_embedding", - "index": 0 - } - ] - ] - }, - "Embeddings OpenAI8": { - "ai_embedding": [ - [ - { - "node": "In-Memory Vector Store1", - "type": "ai_embedding", - "index": 0 - } - ] - ] - }, - "In-Memory Vector Store2": { - "ai_vectorStore": [ - [ - { - "node": "Vector Store Retriever2", - "type": "ai_vectorStore", - "index": 0 - } - ] - ] - }, - "When clicking \"Test workflow\"": { - "main": [ - [ - { - "node": "Code", - "type": "main", - "index": 0 - } - ] - ] - }, - "Code": { - "main": [ - [ - { - "node": "In-Memory Vector Store", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wait": { - "main": [ - [ - { - "node": "In-Memory Vector Store1", - "type": "main", - "index": 0 - } - ] - ] - }, - "In-Memory Vector Store": { - "main": [ - [ - { - "node": "Check Vector Store Populated2", - "type": "main", - "index": 0 - } - ] - ] - }, - "In-Memory Vector Store1": { - "main": [ - [ - { - "node": "Check Vector Store Retrieval2", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": { - "executionOrder": "v1" - }, - "staticData": null, - "meta": { - "templateCredsSetupCompleted": true - }, - "pinData": {}, - "versionId": "88e46c9d-ed01-4d44-909c-6bd94f1ec42a", - "triggerCount": 0, - "tags": [] -} diff --git a/test-workflows/workflows/249.json b/test-workflows/workflows/249.json deleted file mode 100644 index 170972efe00..00000000000 --- a/test-workflows/workflows/249.json +++ /dev/null @@ -1,236 +0,0 @@ -{ - "createdAt": "2024-03-04T20:40:09.997Z", - "updatedAt": "2024-03-04T20:40:57.000Z", - "id": "249", - "name": "SummarizationChain:Simple:Stuff", - "active": false, - "nodes": [ - { - "parameters": {}, - "id": "3adce5bb-a3e6-4d62-ba40-ff2835b7c4fe", - "name": "When clicking \"Test workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 1260, - 480 - ] - }, - { - "parameters": { - "jsCode": "return {\n text: `The dancing plague of 1518, or dance epidemic of 1518 (French: Γ‰pidΓ©mie dansante de 1518), was a case of dancing mania that occurred in Strasbourg, Alsace (modern-day France), in the Holy Roman Empire from July 1518 to September 1518. Somewhere between 50 and 400 people took to dancing for weeks. There are many theories behind the phenomenon, the most popular being stress-induced mass hysteria, suggested by John Waller. Other theories include ergot and religious explanations. There is controversy concerning the number of deaths.\n\nHistory\nEvents\nThe outbreak began in July 1518 when a woman called Frau Troffea began to dance fervently and uncontrollably in a street in Strasbourg. Troffea kept up the constant dancing for a week. Soon, three dozen others joined in. By August, the \"dancing plague\" had claimed 400 victims. Dancers were beginning to collapse. It is said some even died from a stroke or heart attack. No one knew what caused this reaction, which meant no one understood how to remedy it. By early September, the outbreak began to subside, when the dancers were sent to a mountain shrine to pray for absolution.\n\nHistorical documents, including \"physician notes, cathedral sermons, local and regional chronicles, and even notes issued by the Strasbourg city council\" are clear that the victims danced; it is not known why. Historical sources agree that there was an outbreak of dancing after a single woman started dancing, and the dancing did not seem to die down. It lasted for such a long time that it even attracted the attention of the authorities; until the council gave up authority to the physicians, who prescribed the afflicted to \"dance themselves free of it.\" There are claims that guild halls were refurbished to accommodate the dancing, as well as musicians and strong people to help keep those dealing with the dancing mania to stay upright. This backfired, and the council was forced to ban public dancing as people danced in fear it was a punishment from Saint Vitus; and to be \"free of sin\" many joined in on the dancing epidemic. The council went as far as to ban music, as well. Those who danced were then ordered to go to the shrine of Saint Vitus, wore red shoes that were sprinkled with holy water and had painted crosses on the tops and soles. They also had to hold small crosses in their hands; and incense and Latin incantations were part of this \"ritual.\" Apparently \"forgiven by Vitus,\" word was spread of a successful ritual and the Dancing Plague had ended.\n\nEvents similar to this are said to have occurred throughout the medieval age including 11th century in KΓΆlbigk, Saxony, where it was believed to be the result of divine judgment . In 15th century Apulia, Italy, a woman was bitten by a tarantula, the venom making her dance convulsively. The only way to cure the bite was to \"shimmy\" and to have the right sort of music available, which was an accepted remedy by scholars like Athanasius Kircher.\n\nContemporaneous explanations included demonic possession and overheated blood.\n\nVeracity of deaths\nControversy exists over whether people ultimately danced to their deaths. Some sources claim that for a period the plague killed around fifteen people per day, but the sources of the city of Strasbourg at the time of the events did not mention the number of deaths, or even if there were fatalities. There do not appear to be any sources related to the events that make note of any fatalities. Ned Pennant-Rea also claims that the final death toll is not known, but if the claims of fifteen people dying per day were true then the toll could be \"into the hundreds.\"\n\nThe main source for the claim is John Waller, who has written several journal articles on the subject and the book A Time to Dance, a Time to Die: The Extraordinary Story of the Dancing Plague of 1518. The sources cited by Waller that mention deaths were all from later accounts of the events. There is also uncertainty around the identity of the initial dancer (either an unnamed woman or \"Frau Troffea\") and the number of dancers involved (somewhere between 50 and 400). Of the six chronicle accounts, four support Lady Troffea as the first dancer.\n\nModern theories\nFood poisoning\nSome believe the dancing could have been brought on by food poisoning caused by the toxic and psychoactive chemical products of ergot fungi (ergotism), which grows commonly on grains (such as rye) used for baking bread. Ergotamine is the main psychoactive product of ergot fungi; it is structurally related to the drug lysergic acid diethylamide (LSD-25) and is the substance from which LSD-25 was originally synthesized. The same fungus has also been implicated in other major historical anomalies, including the Salem witch trials.\n\nIn The Lancet, John Waller argues that \"this theory does not seem tenable, since it is unlikely that those poisoned by ergot could have danced for days at a time. Nor would so many people have reacted to its psychotropic chemicals in the same way. The ergotism theory also fails to explain why almost every outbreak occurred somewhere along the Rhine and Moselle rivers, areas linked by water but with quite different climates and crops\".\n\nStress-induced mass hysteria\nThis could have been an example of fully developed cases of psychogenic movement disorder happening in mass hysteria or mass psychogenic illness, which involves many individuals suddenly exhibiting the same bizarre behavior. The behavior spreads rapidly and broadly in an epidemic pattern. This kind of comportment could have been caused by elevated levels of psychological stress, caused by the ruthless years (even by the rough standards of the early modern period) the people of Alsace were suffering.\n\nWaller speculates that the dancing was \"stress-induced psychosis\" on a mass level, since the region where the people danced was riddled with starvation and disease, and the inhabitants tended to be superstitious. Seven other cases of dancing plague were reported in the same region during the medieval era.\n\nThis psychogenic illness could have created a chorea (from the Greek khoreia meaning \"to dance\"), a situation comprising random and intricate unintentional movements that flit from body part to body part. Diverse choreas (St. Vitus' dance, St. John's dance, and tarantism) were labeled in the Middle Ages referring to the independent epidemics of \"dancing mania\" that happened in central Europe, particularly at the time of the plague.\n\nPop culture and media\nThe event inspired Jonathan Glazer's 2020 short film Strasbourg 1518.\n\nIt was also the inspiration behind the 2022 choral song \"Choreomania\" by Florence and the Machine. It was the third track on the album Dance Fever, which took its title from the song.\n\nThe book series \"A Collection of Utter Speculation\" released a title \"The Dancing Plague: A Collection of Utter Speculation\" in 2022. It is a fictional account about the events that happened in Strasbourg.\n\nThe 2023 novel, The Dance Tree, by Kiran Millwood Hargrave is a fictionalized version of the summer of 1518 in Strasbourg.\n\nThe event is featured as part of the first season of Watcher Entertainment's \"Puppet History\" in the episode \"The Dancing Plague\".`\n}" - }, - "id": "2af3f215-852e-44d1-a16b-1122861abc2c", - "name": "Set Article", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 1640, - 480 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "6fa592a3-1cfe-42d7-8d45-a7ec80871e52", - "name": "baseline_summary", - "value": "The dancing plague of 1518 in Strasbourg, Alsace involved between 50 and 400 people dancing uncontrollably for weeks. The cause is unknown, with theories including stress-induced mass hysteria and ergot poisoning. The outbreak ended when the dancers prayed for absolution at a shrine. There is controversy over the number of deaths, with some sources claiming up to fifteen deaths per day, but historical documents do not confirm any fatalities. Similar events have been reported throughout history, inspiring various works of pop culture.", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "835cd65e-5233-43cf-9e56-f938bbf90ccf", - "name": "Set Baseline", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 1440, - 480 - ] - }, - { - "parameters": { - "options": { - "summarizationMethodAndPrompts": { - "values": { - "summarizationMethod": "stuff" - } - } - } - }, - "id": "d81d65f9-3152-435a-be81-e1f68a75eb6f", - "name": "Summary - Simple - Stuff", - "type": "@n8n/n8n-nodes-langchain.chainSummarization", - "typeVersion": 2, - "position": [ - 1820, - 480 - ] - }, - { - "parameters": { - "model": "gpt-3.5-turbo-0125", - "options": { - "temperature": 0 - } - }, - "id": "54a03de0-5c56-4ee7-a72a-2d3fe7ca3659", - "name": "OpenAI Chat Model", - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 1840, - 620 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "model": "gpt-3.5-turbo-0125", - "options": { - "temperature": 0 - } - }, - "id": "314362b4-e5b1-4372-9edb-432857a9039c", - "name": "OpenAI Chat Model1", - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 2160, - 620 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "code": { - "execute": { - "code": "const { loadEvaluator } = require(\"langchain/evaluation\");\n\nconst llm = await this.getInputConnectionData('ai_languageModel', 0);\nconst inputData = this.getInputData();\nconst inputSummary = inputData[0].json.response.text;\nconst baselineSummary = $('Set Baseline').item.json.baseline_summary\n\nconst evaluator = await loadEvaluator(\"labeled_criteria\", { criteria: 'helpfulness', llm });\n\nconst result = await evaluator.evaluateStrings({\n input: \"Summarize Wikipedia article about the dancing plague of 1518\",\n prediction: inputSummary,\n reference: baselineSummary,\n});\n\n\nreturn [ {json: { ...result } } ];" - } - }, - "inputs": { - "input": [ - { - "type": "main", - "maxConnections": 1, - "required": true - }, - { - "type": "ai_languageModel", - "maxConnections": 1, - "required": true - } - ] - }, - "outputs": { - "output": [ - { - "type": "main" - } - ] - } - }, - "id": "6e3eafab-40d3-4329-a500-0a2e4d81a308", - "name": "Evaluate to Baseline", - "type": "@n8n/n8n-nodes-langchain.code", - "typeVersion": 1, - "position": [ - 2140, - 480 - ] - } - ], - "connections": { - "When clicking \"Test workflow\"": { - "main": [ - [ - { - "node": "Set Baseline", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set Article": { - "main": [ - [ - { - "node": "Summary - Simple - Stuff", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set Baseline": { - "main": [ - [ - { - "node": "Set Article", - "type": "main", - "index": 0 - } - ] - ] - }, - "Summary - Simple - Stuff": { - "main": [ - [ - { - "node": "Evaluate to Baseline", - "type": "main", - "index": 0 - } - ] - ] - }, - "OpenAI Chat Model": { - "ai_languageModel": [ - [ - { - "node": "Summary - Simple - Stuff", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "OpenAI Chat Model1": { - "ai_languageModel": [ - [ - { - "node": "Evaluate to Baseline", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - } - }, - "settings": { - "executionOrder": "v1" - }, - "staticData": null, - "meta": { - "templateCredsSetupCompleted": true - }, - "pinData": {}, - "versionId": "7b286328-f8b2-4225-8f25-072239ac0731", - "triggerCount": 0, - "tags": [] -} diff --git a/test-workflows/workflows/250.json b/test-workflows/workflows/250.json deleted file mode 100644 index edb3171cf19..00000000000 --- a/test-workflows/workflows/250.json +++ /dev/null @@ -1,564 +0,0 @@ -{ - "createdAt": "2024-03-04T17:01:47.077Z", - "updatedAt": "2024-03-04T17:07:23.000Z", - "id": "250", - "name": "PineconeVectorStore:*", - "active": false, - "nodes": [ - { - "parameters": {}, - "id": "94fcb304-1724-46e1-91cf-039ac12ff094", - "name": "When clicking \"Test workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 380, - 1180 - ] - }, - { - "parameters": { - "jsCode": "return {\n text: `Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9`\n}" - }, - "id": "72553fda-2372-4f50-a71c-43d99ff9bc81", - "name": "Code", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 600, - 1180 - ] - }, - { - "parameters": { - "model": "text-embedding-3-small", - "options": {} - }, - "id": "86dbd078-2724-4acc-ad29-182603ab8fbb", - "name": "Embeddings OpenAI", - "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi", - "typeVersion": 1, - "position": [ - 860, - 1360 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "options": { - "metadata": { - "metadataValues": [ - { - "name": "some-meta", - "value": "test" - }, - { - "name": "other-meta", - "value": "test2" - } - ] - } - } - }, - "id": "5402877d-e03d-49d5-aa3a-ca5f911811c7", - "name": "Default Data Loader", - "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader", - "typeVersion": 1, - "position": [ - 840, - 1560 - ] - }, - { - "parameters": { - "chunkSize": 500, - "chunkOverlap": 100 - }, - "id": "554a499c-04d1-4644-a05a-93c9fb4a6fa6", - "name": "Token Splitter", - "type": "@n8n/n8n-nodes-langchain.textSplitterTokenSplitter", - "typeVersion": 1, - "position": [ - 840, - 1720 - ] - }, - { - "parameters": { - "amount": 15, - "unit": "seconds" - }, - "id": "4953b654-157e-4048-8c8c-e9cdc0112bba", - "name": "Wait", - "type": "n8n-nodes-base.wait", - "typeVersion": 1, - "position": [ - 1480, - 1180 - ], - "webhookId": "c3d05369-6071-4592-87eb-36d57c60851b" - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "5f9a8751-2eb2-4ab6-8f12-b7856d9baa8a", - "name": "output_length_matches", - "value": "={{ $items().length === 4 }}", - "type": "boolean" - }, - { - "id": "a5a61e4e-ff4d-4da5-a174-9788c22cddfd", - "name": "has_content", - "value": "={{ $json.document.pageContent.length > 100 }}", - "type": "boolean" - }, - { - "id": "bceaea49-b29f-47d7-8a5a-14d4e02477ec", - "name": "has_meta", - "value": "={{ $items().every(i => i.json.document.metadata['some-meta'] === 'test' && i.json.document.metadata['other-meta'] === 'test2') }}", - "type": "boolean" - } - ] - }, - "options": {} - }, - "id": "b7f64fff-c9e7-42c4-80a2-9eec4ab86d75", - "name": "Check Vector Store Retrieval", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 2060, - 1180 - ], - "executeOnce": true - }, - { - "parameters": { - "promptType": "define", - "text": "What is the size of a block header with no transactions? Respond only with number of bytes." - }, - "id": "a18395f0-240d-40c4-84c2-6aaee560aab0", - "name": "Question and Answer Chain", - "type": "@n8n/n8n-nodes-langchain.chainRetrievalQa", - "typeVersion": 1.5, - "position": [ - 2260, - 1180 - ] - }, - { - "parameters": { - "model": "gpt-3.5-turbo-0125", - "options": { - "temperature": 0 - } - }, - "id": "7c6ba271-7628-4f90-8c09-53764c4d18d4", - "name": "OpenAI Chat Model", - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 2260, - 1380 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": {}, - "id": "25862b21-175a-4126-97e9-69c5b2623937", - "name": "Vector Store Retriever", - "type": "@n8n/n8n-nodes-langchain.retrieverVectorStore", - "typeVersion": 1, - "position": [ - 2340, - 1380 - ] - }, - { - "parameters": { - "model": "text-embedding-3-small", - "options": {} - }, - "id": "21a318d1-8d44-43c1-85b9-102cf320e0ed", - "name": "Embeddings OpenAI9", - "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi", - "typeVersion": 1, - "position": [ - 2280, - 1680 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "d998ae3e-192c-45ff-a3ff-ad3ed3a20304", - "name": "output_matches", - "value": "={{ $json.response.includes('80') }}", - "type": "boolean" - } - ] - }, - "options": {} - }, - "id": "abfc59fb-d887-407d-aca4-da476b92619a", - "name": "Edit Fields", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 2600, - 1180 - ] - }, - { - "parameters": { - "model": "text-embedding-3-small", - "options": {} - }, - "id": "c784fb20-7fa0-496c-87ee-512f83276fd0", - "name": "Embeddings OpenAI10", - "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi", - "typeVersion": 1, - "position": [ - 1700, - 1400 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "mode": "insert", - "pineconeIndex": { - "__rl": true, - "value": "n8n", - "mode": "list", - "cachedResultName": "n8n" - }, - "options": { - "clearNamespace": true, - "pineconeNamespace": "bitcoin_wf_test" - } - }, - "id": "ba43d67a-0573-4452-bb9e-e73d58ef75e2", - "name": "Pinecone Vector Store", - "type": "@n8n/n8n-nodes-langchain.vectorStorePinecone", - "typeVersion": 1, - "position": [ - 840, - 1180 - ], - "credentials": { - "pineconeApi": { - "id": "IoeAsZR3eD1OS0oY", - "name": "PineconeApi account" - } - } - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "5f9a8751-2eb2-4ab6-8f12-b7856d9baa8a", - "name": "output_length_matches", - "value": "={{ $items().length === 12 }}", - "type": "boolean" - }, - { - "id": "a5a61e4e-ff4d-4da5-a174-9788c22cddfd", - "name": "has_content", - "value": "={{ $json.pageContent.length > 100 }}", - "type": "boolean" - }, - { - "id": "bceaea49-b29f-47d7-8a5a-14d4e02477ec", - "name": "has_meta", - "value": "={{ $items().every(i => i.json.metadata['some-meta'] === 'test' && i.json.metadata['other-meta'] === 'test2') }}", - "type": "boolean" - } - ] - }, - "options": {} - }, - "id": "92b37ec8-a093-48d3-be9b-21ecc1de7e30", - "name": "Check Vector Store Populated", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 1220, - 1180 - ], - "executeOnce": true - }, - { - "parameters": { - "pineconeIndex": { - "__rl": true, - "value": "n8n", - "mode": "list", - "cachedResultName": "n8n" - }, - "options": { - "pineconeNamespace": "bitcoin_wf_test" - } - }, - "id": "db229cc9-ccf7-405d-8549-5a82e4137103", - "name": "Pinecone Vector Store2", - "type": "@n8n/n8n-nodes-langchain.vectorStorePinecone", - "typeVersion": 1, - "position": [ - 2280, - 1560 - ], - "credentials": { - "pineconeApi": { - "id": "IoeAsZR3eD1OS0oY", - "name": "PineconeApi account" - } - } - }, - { - "parameters": { - "mode": "load", - "pineconeIndex": { - "__rl": true, - "value": "n8n", - "mode": "list", - "cachedResultName": "n8n" - }, - "prompt": "What is bitcoin?", - "options": { - "pineconeNamespace": "bitcoin_wf_test" - } - }, - "id": "387518ca-2c63-40b5-bd96-8b5958a2a0d8", - "name": "Pinecone Vector Store1", - "type": "@n8n/n8n-nodes-langchain.vectorStorePinecone", - "typeVersion": 1, - "position": [ - 1680, - 1180 - ], - "credentials": { - "pineconeApi": { - "id": "IoeAsZR3eD1OS0oY", - "name": "PineconeApi account" - } - } - } - ], - "connections": { - "When clicking \"Test workflow\"": { - "main": [ - [ - { - "node": "Code", - "type": "main", - "index": 0 - } - ] - ] - }, - "Code": { - "main": [ - [ - { - "node": "Pinecone Vector Store", - "type": "main", - "index": 0 - } - ] - ] - }, - "Embeddings OpenAI": { - "ai_embedding": [ - [ - { - "node": "Pinecone Vector Store", - "type": "ai_embedding", - "index": 0 - } - ] - ] - }, - "Default Data Loader": { - "ai_document": [ - [ - { - "node": "Pinecone Vector Store", - "type": "ai_document", - "index": 0 - } - ] - ] - }, - "Token Splitter": { - "ai_textSplitter": [ - [ - { - "node": "Default Data Loader", - "type": "ai_textSplitter", - "index": 0 - } - ] - ] - }, - "Wait": { - "main": [ - [ - { - "node": "Pinecone Vector Store1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Check Vector Store Retrieval": { - "main": [ - [ - { - "node": "Question and Answer Chain", - "type": "main", - "index": 0 - } - ] - ] - }, - "Question and Answer Chain": { - "main": [ - [ - { - "node": "Edit Fields", - "type": "main", - "index": 0 - } - ] - ] - }, - "OpenAI Chat Model": { - "ai_languageModel": [ - [ - { - "node": "Question and Answer Chain", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "Vector Store Retriever": { - "ai_retriever": [ - [ - { - "node": "Question and Answer Chain", - "type": "ai_retriever", - "index": 0 - } - ] - ] - }, - "Embeddings OpenAI9": { - "ai_embedding": [ - [ - { - "node": "Pinecone Vector Store2", - "type": "ai_embedding", - "index": 0 - } - ] - ] - }, - "Embeddings OpenAI10": { - "ai_embedding": [ - [ - { - "node": "Pinecone Vector Store1", - "type": "ai_embedding", - "index": 0 - } - ] - ] - }, - "Pinecone Vector Store": { - "main": [ - [ - { - "node": "Check Vector Store Populated", - "type": "main", - "index": 0 - } - ] - ] - }, - "Check Vector Store Populated": { - "main": [ - [ - { - "node": "Wait", - "type": "main", - "index": 0 - } - ] - ] - }, - "Pinecone Vector Store2": { - "ai_vectorStore": [ - [ - { - "node": "Vector Store Retriever", - "type": "ai_vectorStore", - "index": 0 - } - ] - ] - }, - "Pinecone Vector Store1": { - "main": [ - [ - { - "node": "Check Vector Store Retrieval", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": { - "executionOrder": "v1" - }, - "staticData": null, - "meta": { - "templateCredsSetupCompleted": true - }, - "pinData": {}, - "versionId": "deeaa4bb-3780-4150-8eea-291722411f08", - "triggerCount": 0, - "tags": [] -} diff --git a/test-workflows/workflows/251.json b/test-workflows/workflows/251.json deleted file mode 100644 index 312cc578279..00000000000 --- a/test-workflows/workflows/251.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "createdAt": "2024-03-04T20:33:10.367Z", - "updatedAt": "2024-03-13T13:40:25.000Z", - "id": "251", - "name": "Agent:Conversational", - "active": false, - "nodes": [ - { - "parameters": { - "options": { - "temperature": 0 - } - }, - "id": "b8fb087e-fb91-4b67-b1fe-7c8f94db59bc", - "name": "OpenAI Chat Model1", - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 1000, - 580 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - }, - "notes": "IGNORED_PROPERTIES=messages" - }, - { - "parameters": {}, - "id": "0ccb184e-0fd7-4da4-a25c-2b95e0793e8b", - "name": "Calculator1", - "type": "@n8n/n8n-nodes-langchain.toolCalculator", - "typeVersion": 1, - "position": [ - 1160, - 580 - ] - }, - { - "parameters": {}, - "id": "e0db9899-2439-4662-a212-738d48cd08d8", - "name": "When clicking \"Test workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 800, - 420 - ] - }, - { - "parameters": { - "promptType": "define", - "text": "What is the result of 30 + (10002200 / 100)? Only respond with a number.", - "options": { - "returnIntermediateSteps": true - } - }, - "id": "5f23aaf0-0649-4e26-926d-9bdf59e89aa7", - "name": "AI Agent1", - "type": "@n8n/n8n-nodes-langchain.agent", - "typeVersion": 1.4, - "position": [ - 980, - 420 - ] - } - ], - "connections": { - "OpenAI Chat Model1": { - "ai_languageModel": [ - [ - { - "node": "AI Agent1", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "Calculator1": { - "ai_tool": [ - [ - { - "node": "AI Agent1", - "type": "ai_tool", - "index": 0 - } - ] - ] - }, - "When clicking \"Test workflow\"": { - "main": [ - [ - { - "node": "AI Agent1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": { - "executionOrder": "v1" - }, - "staticData": null, - "meta": { - "templateCredsSetupCompleted": true - }, - "pinData": {}, - "versionId": "da23ae8e-c1e2-4f3c-a585-8e89696633b2", - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/252.json b/test-workflows/workflows/252.json deleted file mode 100644 index 43cc10b26cc..00000000000 --- a/test-workflows/workflows/252.json +++ /dev/null @@ -1,899 +0,0 @@ -{ - "createdAt": "2024-10-03T09:40:13.616Z", - "updatedAt": "2024-10-03T10:45:47.000Z", - "id": "252", - "name": "vectorStorePGVector:*", - "active": false, - "nodes": [ - { - "parameters": {}, - "id": "e2e07751-023d-46b8-8538-3da9cb4a4d56", - "name": "When clicking \"Test workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 180, - 600 - ] - }, - { - "parameters": { - "jsCode": "return {\n text: `Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9`\n}" - }, - "id": "b9ece201-2b70-4cae-8191-278ed54fbf75", - "name": "Code", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 640, - 600 - ] - }, - { - "parameters": { - "model": "text-embedding-3-small", - "options": {} - }, - "id": "802fa1b1-e696-4def-94a3-95fbd779c730", - "name": "Embeddings OpenAI4", - "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi", - "typeVersion": 1, - "position": [ - 1180, - 720 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "options": { - "metadata": { - "metadataValues": [ - { - "name": "purpose", - "value": "qa_chain" - } - ] - } - } - }, - "id": "b22de442-b45d-4684-9329-7c63999501ad", - "name": "Default Data Loader1", - "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader", - "typeVersion": 1, - "position": [ - 1300, - 760 - ] - }, - { - "parameters": { - "chunkSize": 500, - "chunkOverlap": 100 - }, - "id": "dd5b5ba1-ce62-47ae-9fdc-a5b75389a434", - "name": "Token Splitter1", - "type": "@n8n/n8n-nodes-langchain.textSplitterTokenSplitter", - "typeVersion": 1, - "position": [ - 1320, - 860 - ] - }, - { - "parameters": { - "promptType": "define", - "text": "What is the size of a block header with no transactions? Respond only with number of bytes.", - "options": {} - }, - "id": "31e9699d-1959-46db-8745-a107f83986c5", - "name": "Question and Answer Chain1", - "type": "@n8n/n8n-nodes-langchain.chainRetrievalQa", - "typeVersion": 1.5, - "position": [ - 1140, - 2420 - ] - }, - { - "parameters": { - "model": "gpt-4o-mini", - "options": { - "temperature": 0 - } - }, - "id": "300e7bb4-18a4-4208-8b82-b6533fe0f980", - "name": "OpenAI Chat Model1", - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 1140, - 2620 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "topK": 40 - }, - "id": "1c5a4e2d-0220-4647-9cd9-10bcf2e59ee2", - "name": "Vector Store Retriever1", - "type": "@n8n/n8n-nodes-langchain.retrieverVectorStore", - "typeVersion": 1, - "position": [ - 1220, - 2620 - ] - }, - { - "parameters": { - "model": "text-embedding-3-small", - "options": {} - }, - "id": "81cb4196-e753-426f-bae5-2f1b963b16b8", - "name": "Embeddings OpenAI3", - "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi", - "typeVersion": 1, - "position": [ - 1140, - 2920 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "d998ae3e-192c-45ff-a3ff-ad3ed3a20304", - "name": "output_matches", - "value": "={{ $json.response.includes('80') }}", - "type": "boolean" - } - ] - }, - "options": {} - }, - "id": "c6fc002c-592e-481c-90fe-19ee523a8336", - "name": "Edit Fields1", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 1480, - 2420 - ] - }, - { - "parameters": { - "operation": "deleteTable", - "schema": { - "__rl": true, - "mode": "list", - "value": "public" - }, - "table": { - "__rl": true, - "value": "n8n_vectors", - "mode": "name" - }, - "deleteCommand": "drop", - "options": {} - }, - "id": "73de13c8-9b83-450d-afd3-c409720b0843", - "name": "Postgres", - "type": "n8n-nodes-base.postgres", - "typeVersion": 2.5, - "position": [ - 1120, - 3460 - ], - "credentials": { - "postgres": { - "id": "pHGfJmTMIpWliDSS", - "name": "PGVector account" - } - } - }, - { - "parameters": { - "model": "text-embedding-3-small", - "options": {} - }, - "id": "01711e02-6d7c-4afa-9d61-d3f7c7ba4466", - "name": "Embeddings OpenAI", - "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi", - "typeVersion": 1, - "position": [ - 1120, - 2160 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "model": "text-embedding-3-small", - "options": {} - }, - "id": "63ae1d1c-adb1-4b88-9885-704d3d31ebda", - "name": "Embeddings OpenAI8", - "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi", - "typeVersion": 1, - "position": [ - 1160, - 1160 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "options": { - "metadata": { - "metadataValues": [ - { - "name": "purpose", - "value": "retriever" - } - ] - } - } - }, - "id": "c9631a79-8fb8-4e78-8f91-cac5040c23f7", - "name": "Default Data Loader3", - "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader", - "typeVersion": 1, - "position": [ - 1260, - 1160 - ] - }, - { - "parameters": { - "chunkSize": 500, - "chunkOverlap": 100 - }, - "id": "00345fc9-0c4f-4db8-82e5-e809c69980cd", - "name": "Token Splitter3", - "type": "@n8n/n8n-nodes-langchain.textSplitterTokenSplitter", - "typeVersion": 1, - "position": [ - 1260, - 1300 - ] - }, - { - "parameters": { - "model": "text-embedding-3-small", - "options": {} - }, - "id": "6f64e063-03a0-451b-a93a-377a5f49b1ef", - "name": "Embeddings OpenAI9", - "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi", - "typeVersion": 1, - "position": [ - 1120, - 1540 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "options": { - "metadata": { - "metadataValues": [ - { - "name": "purpose", - "value": "get_all" - } - ] - } - } - }, - "id": "b39c08af-2700-4c7a-9a43-b8842307ea32", - "name": "Default Data Loader4", - "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader", - "typeVersion": 1, - "position": [ - 1220, - 1540 - ] - }, - { - "parameters": { - "chunkSize": 500, - "chunkOverlap": 100 - }, - "id": "c02b660b-4301-4a82-986e-d29f12257243", - "name": "Token Splitter4", - "type": "@n8n/n8n-nodes-langchain.textSplitterTokenSplitter", - "typeVersion": 1, - "position": [ - 1220, - 1660 - ] - }, - { - "parameters": { - "mode": "insert", - "options": {} - }, - "id": "ef5cb549-6c57-475f-a574-6969ba51626e", - "name": "Postgres PGVector Store", - "type": "@n8n/n8n-nodes-langchain.vectorStorePGVector", - "typeVersion": 1, - "position": [ - 1200, - 600 - ], - "credentials": { - "postgres": { - "id": "pHGfJmTMIpWliDSS", - "name": "PGVector account" - } - } - }, - { - "parameters": { - "mode": "insert", - "options": {} - }, - "id": "93302c27-5e2f-4497-8b2b-a544f71f0b4c", - "name": "Postgres PGVector Store6", - "type": "@n8n/n8n-nodes-langchain.vectorStorePGVector", - "typeVersion": 1, - "position": [ - 1200, - 1040 - ], - "credentials": { - "postgres": { - "id": "pHGfJmTMIpWliDSS", - "name": "PGVector account" - } - } - }, - { - "parameters": { - "code": { - "execute": { - "code": "const { PromptTemplate } = require('@langchain/core/prompts');\n\nconst vectorStore = await this.getInputConnectionData('ai_vectorStore', 0);\nconst retriever = vectorStore.asRetriever(40);\n\nconst documents = await retriever.invoke('Some query');\nreturn [ {json: { documents } } ];" - } - }, - "inputs": { - "input": [ - { - "type": "main", - "maxConnections": 1, - "required": true - }, - { - "type": "ai_vectorStore", - "maxConnections": 1, - "required": true - } - ] - }, - "outputs": { - "output": [ - { - "type": "main" - } - ] - } - }, - "id": "547331e8-808f-4015-854c-06cf8a876e12", - "name": "LangChain Code", - "type": "@n8n/n8n-nodes-langchain.code", - "typeVersion": 1, - "position": [ - 1160, - 1840 - ], - "executeOnce": true - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "5a9bd52c-f383-4f1c-9a6c-dc1f326775ce", - "name": "has_correct_length", - "value": "={{ $json.documents.length === 12 }}", - "type": "boolean" - } - ] - }, - "options": {} - }, - "id": "e0771a3b-5765-481a-a05c-a56331078797", - "name": "Edit Fields", - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [ - 1540, - 1840 - ] - }, - { - "parameters": { - "mode": "insert", - "options": {} - }, - "id": "8d013334-cfba-4e04-bac8-ae282500366d", - "name": "Postgres PGVector Store7", - "type": "@n8n/n8n-nodes-langchain.vectorStorePGVector", - "typeVersion": 1, - "position": [ - 1180, - 1420 - ], - "executeOnce": true, - "credentials": { - "postgres": { - "id": "pHGfJmTMIpWliDSS", - "name": "PGVector account" - } - } - }, - { - "parameters": { - "model": "text-embedding-3-small", - "options": {} - }, - "id": "22fdcb8c-e4d6-457b-8635-cb8d4f84189b", - "name": "Embeddings OpenAI5", - "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi", - "typeVersion": 1, - "position": [ - 1120, - 3280 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "5a9bd52c-f383-4f1c-9a6c-dc1f326775ce", - "name": "has_correct_length", - "value": "={{ $json.documents.length === 12 }}", - "type": "boolean" - } - ] - }, - "options": {} - }, - "id": "be8de136-11c8-4656-b94f-132286f7a84c", - "name": "Edit Fields2", - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [ - 1700, - 3120 - ] - }, - { - "parameters": { - "aggregate": "aggregateAllItemData", - "destinationFieldName": "documents", - "options": {} - }, - "id": "c3625b63-5e97-4a1c-b0f2-40abcccdcf68", - "name": "Aggregate", - "type": "n8n-nodes-base.aggregate", - "typeVersion": 1, - "position": [ - 1500, - 3120 - ] - }, - { - "parameters": { - "mode": "load", - "prompt": "n8n_vectors", - "topK": 40, - "options": { - "metadata": { - "metadataValues": [ - { - "name": "purpose", - "value": "get_all" - } - ] - } - } - }, - "id": "da78ec78-5970-495c-a597-33b4f1ec8fc4", - "name": "Postgres PGVector Store1", - "type": "@n8n/n8n-nodes-langchain.vectorStorePGVector", - "typeVersion": 1, - "position": [ - 1120, - 3120 - ], - "credentials": { - "postgres": { - "id": "pHGfJmTMIpWliDSS", - "name": "PGVector account" - } - } - }, - { - "parameters": { - "options": { - "metadata": { - "metadataValues": [ - { - "name": "purpose", - "value": "retriever" - } - ] - } - } - }, - "id": "a90f2fe9-e51b-43cc-a345-fd581a67b204", - "name": "Postgres PGVector Store2", - "type": "@n8n/n8n-nodes-langchain.vectorStorePGVector", - "typeVersion": 1, - "position": [ - 1140, - 2800 - ], - "credentials": { - "postgres": { - "id": "pHGfJmTMIpWliDSS", - "name": "PGVector account" - } - } - }, - { - "parameters": { - "options": { - "metadata": { - "metadataValues": [ - { - "name": "purpose", - "value": "retriever" - } - ] - } - } - }, - "id": "7111c549-0a33-4662-b574-10eac290bc2e", - "name": "Postgres PGVector Store3", - "type": "@n8n/n8n-nodes-langchain.vectorStorePGVector", - "typeVersion": 1, - "position": [ - 1120, - 2040 - ], - "credentials": { - "postgres": { - "id": "pHGfJmTMIpWliDSS", - "name": "PGVector account" - } - } - } - ], - "connections": { - "When clicking \"Test workflow\"": { - "main": [ - [ - { - "node": "Code", - "type": "main", - "index": 0 - } - ] - ] - }, - "Token Splitter1": { - "ai_textSplitter": [ - [ - { - "node": "Default Data Loader1", - "type": "ai_textSplitter", - "index": 0 - } - ] - ] - }, - "Question and Answer Chain1": { - "main": [ - [ - { - "node": "Edit Fields1", - "type": "main", - "index": 0 - } - ] - ] - }, - "OpenAI Chat Model1": { - "ai_languageModel": [ - [ - { - "node": "Question and Answer Chain1", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "Vector Store Retriever1": { - "ai_retriever": [ - [ - { - "node": "Question and Answer Chain1", - "type": "ai_retriever", - "index": 0 - } - ] - ] - }, - "Code": { - "main": [ - [ - { - "node": "Postgres PGVector Store", - "type": "main", - "index": 0 - }, - { - "node": "Postgres PGVector Store6", - "type": "main", - "index": 0 - }, - { - "node": "Postgres PGVector Store7", - "type": "main", - "index": 0 - }, - { - "node": "LangChain Code", - "type": "main", - "index": 0 - }, - { - "node": "Question and Answer Chain1", - "type": "main", - "index": 0 - }, - { - "node": "Postgres PGVector Store1", - "type": "main", - "index": 0 - }, - { - "node": "Postgres", - "type": "main", - "index": 0 - } - ] - ] - }, - "Embeddings OpenAI4": { - "ai_embedding": [ - [ - { - "node": "Postgres PGVector Store", - "type": "ai_embedding", - "index": 0 - } - ] - ] - }, - "Default Data Loader1": { - "ai_document": [ - [ - { - "node": "Postgres PGVector Store", - "type": "ai_document", - "index": 0 - } - ] - ] - }, - "Embeddings OpenAI3": { - "ai_embedding": [ - [ - { - "node": "Postgres PGVector Store2", - "type": "ai_embedding", - "index": 0 - } - ] - ] - }, - "Embeddings OpenAI": { - "ai_embedding": [ - [ - { - "node": "Postgres PGVector Store3", - "type": "ai_embedding", - "index": 0 - } - ] - ] - }, - "Embeddings OpenAI8": { - "ai_embedding": [ - [ - { - "node": "Postgres PGVector Store6", - "type": "ai_embedding", - "index": 0 - } - ] - ] - }, - "Default Data Loader3": { - "ai_document": [ - [ - { - "node": "Postgres PGVector Store6", - "type": "ai_document", - "index": 0 - } - ] - ] - }, - "Token Splitter3": { - "ai_textSplitter": [ - [ - { - "node": "Default Data Loader3", - "type": "ai_textSplitter", - "index": 0 - } - ] - ] - }, - "Embeddings OpenAI9": { - "ai_embedding": [ - [ - { - "node": "Postgres PGVector Store7", - "type": "ai_embedding", - "index": 0 - } - ] - ] - }, - "Default Data Loader4": { - "ai_document": [ - [ - { - "node": "Postgres PGVector Store7", - "type": "ai_document", - "index": 0 - } - ] - ] - }, - "Token Splitter4": { - "ai_textSplitter": [ - [ - { - "node": "Default Data Loader4", - "type": "ai_textSplitter", - "index": 0 - } - ] - ] - }, - "LangChain Code": { - "main": [ - [ - { - "node": "Edit Fields", - "type": "main", - "index": 0 - } - ] - ] - }, - "Embeddings OpenAI5": { - "ai_embedding": [ - [ - { - "node": "Postgres PGVector Store1", - "type": "ai_embedding", - "index": 0 - } - ] - ] - }, - "Aggregate": { - "main": [ - [ - { - "node": "Edit Fields2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Postgres PGVector Store1": { - "main": [ - [ - { - "node": "Aggregate", - "type": "main", - "index": 0 - } - ] - ] - }, - "Postgres PGVector Store2": { - "ai_vectorStore": [ - [ - { - "node": "Vector Store Retriever1", - "type": "ai_vectorStore", - "index": 0 - } - ] - ] - }, - "Postgres PGVector Store3": { - "ai_vectorStore": [ - [ - { - "node": "LangChain Code", - "type": "ai_vectorStore", - "index": 0 - } - ] - ] - } - }, - "settings": { - "executionOrder": "v1" - }, - "staticData": null, - "meta": { - "templateCredsSetupCompleted": true, - "instanceId": "27cc9b56542ad45b38725555722c50a1c3fee1670bbb67980558314ee08517c4" - }, - "pinData": {}, - "versionId": "85e0e2ac-b253-4c25-8cdb-2cfc2d1b87f7", - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/253.json b/test-workflows/workflows/253.json deleted file mode 100644 index d3bac12651c..00000000000 --- a/test-workflows/workflows/253.json +++ /dev/null @@ -1,1074 +0,0 @@ -{ - "createdAt": "2024-09-25T08:48:42.324Z", - "updatedAt": "2024-09-25T11:23:25.000Z", - "id": "253", - "name": "Agent:Tools:OpenAI", - "active": false, - "nodes": [ - { - "parameters": {}, - "id": "a731e388-a711-44c4-a03a-acfd0667e10f", - "name": "Execute Workflow Trigger", - "type": "n8n-nodes-base.executeWorkflowTrigger", - "typeVersion": 1, - "position": [ - 240, - 980 - ] - }, - { - "parameters": { - "name": "get_weather_data", - "description": "Call this tool to get weather information for a specific city. Input should be a single string in format: \"$CITY, $COUNTRY\". So for example to get data about Prague, \"Prague, Czechia\".", - "workflowId": "={{ $workflow.id }}", - "fields": { - "values": [ - { - "name": "tool", - "stringValue": "get_weather" - } - ] - } - }, - "id": "e082d1ac-db5e-4122-bb0e-4dbb08296463", - "name": "Get Weather", - "type": "@n8n/n8n-nodes-langchain.toolWorkflow", - "typeVersion": 1, - "position": [ - 640, - 700 - ] - }, - { - "parameters": { - "name": "get_evens", - "description": "Call this tool to get upcoming events for a specific city. Input should be a single string in format: \"$CITY, $COUNTRY\". So for example to get data about Prague, \"Prague, Czechia\".", - "workflowId": "={{ $workflow.id }}", - "fields": { - "values": [ - { - "name": "tool", - "stringValue": "get_events" - } - ] - } - }, - "id": "ff4cae49-b5d5-4825-a59b-875375933c59", - "name": "Get Events", - "type": "@n8n/n8n-nodes-langchain.toolWorkflow", - "typeVersion": 1, - "position": [ - 760, - 700 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "fc61cf88-967d-4433-9cfd-7cdad1a43e75", - "name": "response", - "value": "={\n \"created\": \"2024-03-04T09:26:23+01:00\",\n \"symbolCode\": {\n \"next1Hour\": \"fog\"\n },\n \"temperature\": {\n \"value\": 5.1,\n \"feelsLike\": 4\n },\n \"precipitation\": {\n \"value\": 0.0\n },\n \"wind\": {\n \"direction\": 275,\n \"speed\": 1.7\n },\n \"status\": {\n \"code\": \"Ok\"\n }\n}", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "8f707bcc-0635-43b8-aa29-0ecd9ceecbbb", - "name": "Edit Fields4", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 740, - 920 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "0434695d-b245-4947-8b6e-7676a5c92904", - "name": "response", - "value": "=[\n {\n \"description\": \"***Movie Barf* is a new English friendly film night presented by film journalist and blogger Ryan Keating-Lambert, dedicated to screening a diverse variety of award-winning films both contemporary and classic. Ryan’s late night shows includes intriguing chats with various guests (in person or over Skype in the case of the international ones) and special drink offers at the bar.**\\n\\n*Dune: Part Two* / Denis Villeneuve / Canada, USA 2024 / 166 min – Paul Atreides unites with Chani and the Fremen while seeking revenge against the conspirators who destroyed his family.\",\n \"name\": \"Movie Barf: Dune – Part Two\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n },\n {\n \"description\": \"LuboΕ‘ PospΓ­Ε‘il will perform with the renewed band 5P on March 14 at the cultural house of BarikadnΓ­k.\",\n \"name\": \"LuboΕ‘ PospΓ­Ε‘il & 5P\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n },\n {\n \"description\": \"An insomniac office worker looking for a way to change his life crosses paths with a devil-may-care soap maker and they form an underground fight club that evolves into something much, much more...\",\n \"name\": \"Fight Club\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n },\n {\n \"description\": \"From filmmaker Yorgos Lanthimos and producer Emma Stone comes the incredible tale and fantastical evolution of Bella Baxter (Stone), a young woman brought back to life by the brilliant and unorthodox scientist Dr. Godwin Baxter (Willem Dafoe). Under Baxter's protection, Bella is eager to learn. Hungry for the worldliness she is lacking, she runs off with Duncan Wedderburn (Mark Ruffalo), a slick and debauched lawyer, on a whirlwind adventure across the continents. Free from the prejudices of her times, Bella grows steadfast in her purpose to stand for equality and liberation.\",\n \"name\": \"Poor Things\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n },\n {\n \"description\": \"Concert of Bharata RajnoΕ‘ek, who decided to do something very brave - pay tribute to king of the pop, Michael Jackson in jazz.\",\n \"name\": \"Tribute to World Legends: Michael Jackson\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n }\n]", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "0086c025-54ad-41c2-bc7b-ce12fbe05fb2", - "name": "Edit Fields5", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 740, - 1100 - ] - }, - { - "parameters": { - "model": "gpt-4o-mini", - "options": { - "temperature": 0 - } - }, - "id": "956d7763-aa7a-4089-8ba6-4ea55d9f7daf", - "name": "OpenAI Chat Model4", - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 540, - 540 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - }, - "notes": "IGNORED_PROPERTIES=messages" - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "414caf45-02aa-4c0a-9cdb-e6da9ec03d80", - "name": "has_weather", - "value": "={{ $json.output.includes('5.1') }}", - "type": "boolean" - }, - { - "id": "4f055fa4-10eb-4b7e-b1dc-37a7ef7185fc", - "name": "has_movie", - "value": "={{ $json.output.includes('Dune') }}", - "type": "boolean" - } - ] - }, - "options": {} - }, - "id": "653e99b2-80c8-4b15-8b3b-818940e28365", - "name": "Edit Fields6", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 900, - 380 - ] - }, - { - "parameters": {}, - "id": "5f16c9cf-cab4-45ba-8974-5a366ef64677", - "name": "When clicking \"Test workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - -40, - -180 - ] - }, - { - "parameters": { - "content": "## Multiple Tools Calling", - "height": 80, - "width": 335 - }, - "id": "32ebc991-eb8a-48de-a8e4-5aef5c6ba7ae", - "name": "Sticky Note", - "type": "n8n-nodes-base.stickyNote", - "typeVersion": 1, - "position": [ - 500, - 320 - ] - }, - { - "parameters": { - "content": "## Output Parsing\n", - "height": 88, - "width": 386 - }, - "id": "00ffa66d-4359-4b9b-9cd2-f53e64b5f9d2", - "name": "Sticky Note1", - "type": "n8n-nodes-base.stickyNote", - "typeVersion": 1, - "position": [ - 500, - -240 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "0434695d-b245-4947-8b6e-7676a5c92904", - "name": "response", - "value": "=Maurits Cornelis Escher (Dutch pronunciation: [ˈmʌurΙͺts kΙ”rˈneːlΙͺs ΛˆΙ›Ι•Ι™r]; 17 June 1898 – 27 March 1972) was a Dutch graphic artist who made woodcuts, lithographs, and mezzotints, many of which were inspired by mathematics. Despite wide popular interest, for most of his life Escher was neglected in the art world, even in his native Netherlands. He was 70 before a retrospective exhibition was held. In the late twentieth century, he became more widely appreciated, and in the twenty-first century he has been celebrated in exhibitions around the world.\n\nHis work features mathematical objects and operations including impossible objects, explorations of infinity, reflection, symmetry, perspective, truncated and stellated polyhedra, hyperbolic geometry, and tessellations. Although Escher believed he had no mathematical ability, he interacted with the mathematicians George PΓ³lya, Roger Penrose, and Donald Coxeter, and the crystallographer Friedrich Haag, and conducted his own research into tessellation.\n\nEarly in his career, he drew inspiration from nature, making studies of insects, landscapes, and plants such as lichens, all of which he used as details in his artworks. He traveled in Italy and Spain, sketching buildings, townscapes, architecture and the tilings of the Alhambra and the Mezquita of Cordoba, and became steadily more interested in their mathematical structure.\n\nEscher's art became well known among scientists and mathematicians, and in popular culture, especially after it was featured by Martin Gardner in his April 1966 Mathematical Games column in Scientific American. Apart from being used in a variety of technical papers, his work has appeared on the covers of many books and albums. He was one of the major inspirations for Douglas Hofstadter's Pulitzer Prize-winning 1979 book GΓΆdel, Escher, Bach.\n\nExhibitions\n\nPoster advertising the first major exhibition of Escher's work in Britain (Dulwich Picture Gallery, 14 October 2015 – 17 January 2016). The image, which shows Escher and his interest in geometric distortion and multiple levels of distance from reality, is based on his Hand with Reflecting Sphere, 1935.[62][22]\nDespite wide popular interest, Escher was for a long time somewhat neglected in the art world; even in his native Netherlands, he was 70 before a retrospective exhibition was held.[43][k] In the twenty-first century, major exhibitions have been held in cities around the world.[63][64][65] An exhibition of his work in Rio de Janeiro attracted more than 573,000 visitors in 2011;[63] its daily visitor count of 9,677 made it the most visited museum exhibition of the year, anywhere in the world.[66] No major exhibition of Escher's work was held in Britain until 2015, when the Scottish National Gallery of Modern Art ran one in Edinburgh from June to September 2015,[64] moving in October 2015 to the Dulwich Picture Gallery, London. The exhibition poster is based on Hand with Reflecting Sphere, 1935, which shows Escher in his house reflected in a handheld sphere, thus illustrating the artist, his interest in levels of reality in art (e.g., is the hand in the foreground more real than the reflected one?), perspective, and spherical geometry.[22][62][67] The exhibition moved to Italy in 2015–2016, attracting over 500,000 visitors in Rome and Bologna,[65] and then Milan.[68][69][70]", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "d827a4a6-dbaa-4af9-a3c2-123c3b37b81a", - "name": "Edit Fields", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 740, - 1280 - ] - }, - { - "parameters": { - "rules": { - "values": [ - { - "conditions": { - "options": { - "caseSensitive": true, - "leftValue": "", - "typeValidation": "strict" - }, - "conditions": [ - { - "leftValue": "={{ $json.tool }}", - "rightValue": "get_weather", - "operator": { - "type": "string", - "operation": "equals" - } - } - ], - "combinator": "and" - }, - "renameOutput": true, - "outputKey": "Weather" - }, - { - "conditions": { - "options": { - "caseSensitive": true, - "leftValue": "", - "typeValidation": "strict" - }, - "conditions": [ - { - "id": "a164188f-3b5b-4c24-b1bb-e589f4f9219f", - "leftValue": "={{ $json.tool }}", - "rightValue": "get_events", - "operator": { - "type": "string", - "operation": "equals", - "name": "filter.operator.equals" - } - } - ], - "combinator": "and" - }, - "renameOutput": true, - "outputKey": "Events" - }, - { - "conditions": { - "options": { - "caseSensitive": true, - "leftValue": "", - "typeValidation": "strict" - }, - "conditions": [ - { - "id": "64f3dd1b-57e3-4183-a1d6-6b9b58fd1d81", - "leftValue": "={{ $json.tool }}", - "rightValue": "search_wiki", - "operator": { - "type": "string", - "operation": "equals", - "name": "filter.operator.equals" - } - } - ], - "combinator": "and" - }, - "renameOutput": true, - "outputKey": "search_wiki" - } - ] - }, - "options": {} - }, - "id": "46387d9e-d93f-443c-93b6-6f61013839ae", - "name": "Switch", - "type": "n8n-nodes-base.switch", - "typeVersion": 3, - "position": [ - 460, - 980 - ] - }, - { - "parameters": { - "name": "get_evens", - "description": "Call this tool to search Wikipedia.", - "workflowId": "={{ $workflow.id }}", - "fields": { - "values": [ - { - "name": "tool", - "stringValue": "search_wiki" - } - ] - } - }, - "id": "7a52053b-bcdd-4c55-badb-9cf4739f1804", - "name": "Search Wiki", - "type": "@n8n/n8n-nodes-langchain.toolWorkflow", - "typeVersion": 1, - "position": [ - 660, - 60 - ] - }, - { - "parameters": { - "model": "gpt-4o-mini", - "options": { - "temperature": 0.1 - } - }, - "id": "fb451b3f-1c18-4f58-953a-5787d7dc27a5", - "name": "OpenAI Chat Model", - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 540, - 0 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "schemaType": "manual", - "inputSchema": "{\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"description\": \"Full name of the artist\"\n },\n \"birthDate\": {\n \"type\": \"string\",\n \"format\": \"date\",\n \"description\": \"Date of birth\"\n },\n \"deathDate\": {\n \"type\": \"string\",\n \"format\": \"date\",\n \"description\": \"Date of death\"\n },\n \"nationality\": {\n \"type\": \"string\",\n \"description\": \"Artist's nationality\"\n },\n \"profession\": {\n \"type\": \"string\",\n \"description\": \"Artist's primary profession\"\n },\n \"notableWorks\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"Notable works created by the artist\"\n }\n },\n \"required\": [\"name\", \"birthDate\", \"deathDate\", \"nationality\", \"profession\", \"notableWorks\"]\n}" - }, - "id": "bba3dd1d-82f1-4bf2-80ba-2b64e6748abb", - "name": "Structured Output Parser", - "type": "@n8n/n8n-nodes-langchain.outputParserStructured", - "typeVersion": 1.2, - "position": [ - 800, - 0 - ] - }, - { - "parameters": { - "promptType": "define", - "text": "Tell me about M.C. Escher", - "hasOutputParser": true, - "options": {} - }, - "id": "7b8eee2b-6677-4935-a102-8a40405b968b", - "name": "AI Agent", - "type": "@n8n/n8n-nodes-langchain.agent", - "typeVersion": 1.6, - "position": [ - 540, - -180 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "414caf45-02aa-4c0a-9cdb-e6da9ec03d80", - "name": "has_birth_date", - "value": "={{ $json.output.birthDate === '1898-06-17' }}", - "type": "boolean" - }, - { - "id": "57513cf6-1ee7-40b7-95fc-316066c62153", - "name": "has_death_date", - "value": "={{ $json.output.deathDate === '1972-03-27' }}", - "type": "string" - }, - { - "id": "357953da-7578-4c7e-b8f8-aa25bd9187a4", - "name": "has_name", - "value": "={{ $json.output.name === 'Maurits Cornelis Escher' }}", - "type": "string" - }, - { - "id": "7cf215ea-f65a-467c-b158-9a80d8de7511", - "name": "has_works", - "value": "={{ $json.output.notableWorks.includes('Hand with Reflecting Sphere') }}", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "857bab38-39a5-4d53-800f-4fe3bd96f666", - "name": "Edit Fields7", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 900, - -180 - ] - }, - { - "parameters": { - "content": "## Code Tool with Schema\n", - "height": 88, - "width": 386 - }, - "id": "cca57c6d-f08e-4032-83b9-3a9a6caf0334", - "name": "Sticky Note2", - "type": "n8n-nodes-base.stickyNote", - "typeVersion": 1, - "position": [ - 500, - -620 - ] - }, - { - "parameters": { - "name": "array_merge", - "description": "Call this tool to merge array of strings to a single string", - "jsCode": "// Example: convert the incoming query to uppercase and return it\nreturn query.strings_array.join(', ');", - "specifyInputSchema": true, - "jsonSchemaExample": "{\n\t\"strings_array\": [\"some_value\", \"some_other_value\"]\n}" - }, - "id": "66abd2b8-45ab-455e-b3e1-d6a4d5f083de", - "name": "Code Tool", - "type": "@n8n/n8n-nodes-langchain.toolCode", - "typeVersion": 1.1, - "position": [ - 740, - -400 - ] - }, - { - "parameters": { - "model": "gpt-4o-mini", - "options": { - "temperature": 0.3 - } - }, - "id": "899ed8b5-2805-4647-870c-ffa80828d195", - "name": "OpenAI Chat Model1", - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 540, - -420 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "promptType": "define", - "text": "Help me plan my day in Berlin, Germany. Check current the weather and get the upcoming events and respond with weather and details about the upcoming events.\n\nEach tool should only be called only once.", - "options": { - "returnIntermediateSteps": false - } - }, - "id": "ab2d9ecf-f338-4e45-b327-667604b21a10", - "name": "AI Agent4", - "type": "@n8n/n8n-nodes-langchain.agent", - "typeVersion": 1.6, - "position": [ - 520, - 380 - ] - }, - { - "parameters": { - "promptType": "define", - "text": "Convert this JSON array to a single string: ['This', 'Is', 'An', 'Array!'].", - "options": { - "returnIntermediateSteps": true - } - }, - "id": "02408929-ec1f-45ab-bd1f-1b9964814281", - "name": "AI Agent1", - "type": "@n8n/n8n-nodes-langchain.agent", - "typeVersion": 1.6, - "position": [ - 540, - -560 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "414caf45-02aa-4c0a-9cdb-e6da9ec03d80", - "name": "passed_array_parameter", - "value": "={{ Array.isArray($json.intermediateSteps[0].action.messageLog[0].kwargs.tool_calls[0].args.strings_array) }}", - "type": "boolean" - }, - { - "id": "069c2fe9-f0f8-4938-9552-1dac5c720add", - "name": "has_correct_length", - "value": "={{ $json.intermediateSteps[0].action.messageLog[0].kwargs.tool_calls[0].args.strings_array.length === 4 }}", - "type": "boolean" - } - ] - }, - "options": {} - }, - "id": "dcae231c-5b1c-49f9-b8e4-c9df4e6fa855", - "name": "Edit Fields8", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 900, - -560 - ] - }, - { - "parameters": { - "content": "## Tool without parameters\n", - "height": 88, - "width": 386 - }, - "id": "b29f9a3d-db79-4d7c-8b2c-0044b56b5a6e", - "name": "Sticky Note3", - "type": "n8n-nodes-base.stickyNote", - "typeVersion": 1, - "position": [ - 560, - -1020 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "414caf45-02aa-4c0a-9cdb-e6da9ec03d80", - "name": "empty_args", - "value": "={{ $ifEmpty($json.intermediateSteps[0].action.messageLog[0].kwargs.tool_calls[0].args, true) }}", - "type": "boolean" - } - ] - }, - "options": {} - }, - "id": "ca926d8b-86d5-4dcd-b23f-aadc5f43d35c", - "name": "Edit Fields9", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 960, - -960 - ] - }, - { - "parameters": { - "toolDescription": "Fetch Example website", - "url": "https://example.com" - }, - "id": "a237cbf1-dab1-4ea9-bb6c-aff17b33e0d3", - "name": "HTTP Request", - "type": "@n8n/n8n-nodes-langchain.toolHttpRequest", - "typeVersion": 1.1, - "position": [ - 800, - -800 - ] - }, - { - "parameters": { - "model": "gpt-4o-mini", - "options": { - "temperature": 0.3 - } - }, - "id": "6aadda49-1d19-4038-90e6-5f7adecc5a1f", - "name": "OpenAI Chat Model2", - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 600, - -800 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "promptType": "define", - "text": "Fetch example website", - "options": { - "returnIntermediateSteps": true - } - }, - "id": "bdcc5d54-9532-4bf3-a2b7-da03c196cb15", - "name": "AI Agent2", - "type": "@n8n/n8n-nodes-langchain.agent", - "typeVersion": 1.6, - "position": [ - 600, - -960 - ] - }, - { - "parameters": { - "sessionIdType": "customKey", - "sessionKey": "memory3", - "contextWindowLength": 10 - }, - "id": "e49bafe2-725a-4146-8023-ecd86952569f", - "name": "Window Buffer Memory1", - "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow", - "typeVersion": 1.3, - "position": [ - 580, - -1220 - ] - }, - { - "parameters": { - "jsonSchemaExample": "{\n\t\"english_answer\": \"California\",\n\t\"czech_answer\": \"California\"\n}" - }, - "id": "ca8a3ac2-9055-4f3f-8ccc-897718885cd4", - "name": "Structured Output Parser1", - "type": "@n8n/n8n-nodes-langchain.outputParserStructured", - "typeVersion": 1.2, - "position": [ - 720, - -1220 - ] - }, - { - "parameters": { - "model": "gpt-4o-mini", - "options": { - "temperature": 0.1 - } - }, - "id": "bc913d5b-c00f-44da-a07c-2dceda473199", - "name": "OpenAI Chat Model3", - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 440, - -1220 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "promptType": "define", - "text": "Can you still remember my name?", - "hasOutputParser": true, - "options": { - "systemMessage": "You are a helpful assistant. Always provide both `english_answer` and `czech_answer` in the final output and be very concise." - } - }, - "id": "c255ee66-3a23-4051-9bc3-09eccdf4a4e8", - "name": "AI Agent3", - "type": "@n8n/n8n-nodes-langchain.agent", - "typeVersion": 1.6, - "position": [ - 960, - -1380 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "492acf62-f7d5-4798-a93c-6a291421ecfb", - "name": "contain_both_answers", - "value": "={{ $json.output.english_answer.length > 0 && $json.output.czech_answer.length > 0 }}", - "type": "boolean" - }, - { - "id": "5c56b6d3-1d59-45c4-bcb8-3d4722493c62", - "name": "recalled_name", - "value": "={{ $json.output.english_answer.includes('Oleg') }}", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "92534d51-0e5b-481d-9e57-165b77ee9f9d", - "name": "Edit Fields1", - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [ - 1300, - -1380 - ] - }, - { - "parameters": { - "promptType": "define", - "text": "Hi, my name is Oleg. Tell me about magnets like I'm 5.", - "hasOutputParser": true, - "options": { - "systemMessage": "You are a helpful assistant. Always provide both `english_answer` and `czech_answer` in the final output and be very concise." - } - }, - "id": "8fbc4e41-29c5-442d-8661-441a7e9f348a", - "name": "AI Agent5", - "type": "@n8n/n8n-nodes-langchain.agent", - "typeVersion": 1.6, - "position": [ - 600, - -1380 - ] - }, - { - "parameters": { - "content": "## Output Parser + Memory\n", - "height": 88, - "width": 386 - }, - "id": "be054b49-a62a-4caa-88b3-6b9d44386431", - "name": "Sticky Note4", - "type": "n8n-nodes-base.stickyNote", - "typeVersion": 1, - "position": [ - 580, - -1440 - ] - } - ], - "connections": { - "Execute Workflow Trigger": { - "main": [ - [ - { - "node": "Switch", - "type": "main", - "index": 0 - } - ] - ] - }, - "Get Weather": { - "ai_tool": [ - [ - { - "node": "AI Agent4", - "type": "ai_tool", - "index": 0 - } - ] - ] - }, - "Get Events": { - "ai_tool": [ - [ - { - "node": "AI Agent4", - "type": "ai_tool", - "index": 0 - } - ] - ] - }, - "OpenAI Chat Model4": { - "ai_languageModel": [ - [ - { - "node": "AI Agent4", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "Switch": { - "main": [ - [ - { - "node": "Edit Fields4", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Edit Fields5", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Edit Fields", - "type": "main", - "index": 0 - } - ] - ] - }, - "Search Wiki": { - "ai_tool": [ - [ - { - "node": "AI Agent", - "type": "ai_tool", - "index": 0 - } - ] - ] - }, - "OpenAI Chat Model": { - "ai_languageModel": [ - [ - { - "node": "AI Agent", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "Structured Output Parser": { - "ai_outputParser": [ - [ - { - "node": "AI Agent", - "type": "ai_outputParser", - "index": 0 - } - ] - ] - }, - "AI Agent": { - "main": [ - [ - { - "node": "Edit Fields7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Code Tool": { - "ai_tool": [ - [ - { - "node": "AI Agent1", - "type": "ai_tool", - "index": 0 - } - ] - ] - }, - "OpenAI Chat Model1": { - "ai_languageModel": [ - [ - { - "node": "AI Agent1", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "When clicking \"Test workflow\"": { - "main": [ - [ - { - "node": "AI Agent1", - "type": "main", - "index": 0 - }, - { - "node": "AI Agent4", - "type": "main", - "index": 0 - }, - { - "node": "AI Agent", - "type": "main", - "index": 0 - }, - { - "node": "AI Agent2", - "type": "main", - "index": 0 - }, - { - "node": "AI Agent5", - "type": "main", - "index": 0 - } - ] - ] - }, - "AI Agent4": { - "main": [ - [ - { - "node": "Edit Fields6", - "type": "main", - "index": 0 - } - ] - ] - }, - "AI Agent1": { - "main": [ - [ - { - "node": "Edit Fields8", - "type": "main", - "index": 0 - } - ] - ] - }, - "HTTP Request": { - "ai_tool": [ - [ - { - "node": "AI Agent2", - "type": "ai_tool", - "index": 0 - } - ] - ] - }, - "OpenAI Chat Model2": { - "ai_languageModel": [ - [ - { - "node": "AI Agent2", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "AI Agent2": { - "main": [ - [ - { - "node": "Edit Fields9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Window Buffer Memory1": { - "ai_memory": [ - [ - { - "node": "AI Agent5", - "type": "ai_memory", - "index": 0 - }, - { - "node": "AI Agent3", - "type": "ai_memory", - "index": 0 - } - ] - ] - }, - "Structured Output Parser1": { - "ai_outputParser": [ - [ - { - "node": "AI Agent5", - "type": "ai_outputParser", - "index": 0 - }, - { - "node": "AI Agent3", - "type": "ai_outputParser", - "index": 0 - } - ] - ] - }, - "OpenAI Chat Model3": { - "ai_languageModel": [ - [ - { - "node": "AI Agent5", - "type": "ai_languageModel", - "index": 0 - }, - { - "node": "AI Agent3", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "AI Agent3": { - "main": [ - [ - { - "node": "Edit Fields1", - "type": "main", - "index": 0 - } - ] - ] - }, - "AI Agent5": { - "main": [ - [ - { - "node": "AI Agent3", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": { - "executionOrder": "v1" - }, - "staticData": null, - "meta": { - "templateCredsSetupCompleted": true, - "instanceId": "27cc9b56542ad45b38725555722c50a1c3fee1670bbb67980558314ee08517c4" - }, - "pinData": {}, - "versionId": "efad4233-0bf7-47f0-9da9-20b335b6b999", - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/254.json b/test-workflows/workflows/254.json deleted file mode 100644 index fe477db5db1..00000000000 --- a/test-workflows/workflows/254.json +++ /dev/null @@ -1,1131 +0,0 @@ -{ - "createdAt": "2024-09-25T09:14:35.108Z", - "updatedAt": "2024-09-25T11:27:58.000Z", - "id": "254", - "name": "Agent:Tools:Anthropic", - "active": false, - "nodes": [ - { - "parameters": {}, - "id": "f9b7ea03-1809-4fef-80dd-521e9d60f3bc", - "name": "Execute Workflow Trigger", - "type": "n8n-nodes-base.executeWorkflowTrigger", - "typeVersion": 1, - "position": [ - 240, - 1100 - ] - }, - { - "parameters": { - "name": "get_weather_data", - "description": "Call this tool to get weather information for a specific city. Input should be a single string in format: \"$CITY, $COUNTRY\". So for example to get data about Prague, \"Prague, Czechia\".", - "workflowId": "={{ $workflow.id }}", - "fields": { - "values": [ - { - "name": "tool", - "stringValue": "get_weather" - } - ] - } - }, - "id": "4275e044-2ce3-4942-a0ed-406bed90debc", - "name": "Get Weather", - "type": "@n8n/n8n-nodes-langchain.toolWorkflow", - "typeVersion": 1, - "position": [ - 640, - 580 - ] - }, - { - "parameters": { - "name": "get_evens", - "description": "Call this tool to get upcoming events for a specific city. Input should be a single string in format: \"$CITY, $COUNTRY\". So for example to get data about Prague, \"Prague, Czechia\".", - "workflowId": "={{ $workflow.id }}", - "fields": { - "values": [ - { - "name": "tool", - "stringValue": "get_events" - } - ] - } - }, - "id": "c28a61c8-be38-4031-a456-76f936ba6721", - "name": "Get Events", - "type": "@n8n/n8n-nodes-langchain.toolWorkflow", - "typeVersion": 1, - "position": [ - 760, - 580 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "fc61cf88-967d-4433-9cfd-7cdad1a43e75", - "name": "response", - "value": "={\n \"created\": \"2024-03-04T09:26:23+01:00\",\n \"symbolCode\": {\n \"next1Hour\": \"fog\"\n },\n \"temperature\": {\n \"value\": 5.1,\n \"feelsLike\": 4\n },\n \"precipitation\": {\n \"value\": 0.0\n },\n \"wind\": {\n \"direction\": 275,\n \"speed\": 1.7\n },\n \"status\": {\n \"code\": \"Ok\"\n }\n}", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "141f2081-39eb-48f4-9ade-924187116c58", - "name": "Edit Fields4", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 1140, - 900 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "0434695d-b245-4947-8b6e-7676a5c92904", - "name": "response", - "value": "=[\n {\n \"description\": \"***Movie Barf* is a new English friendly film night presented by film journalist and blogger Ryan Keating-Lambert, dedicated to screening a diverse variety of award-winning films both contemporary and classic. Ryan’s late night shows includes intriguing chats with various guests (in person or over Skype in the case of the international ones) and special drink offers at the bar.**\\n\\n*Dune: Part Two* / Denis Villeneuve / Canada, USA 2024 / 166 min – Paul Atreides unites with Chani and the Fremen while seeking revenge against the conspirators who destroyed his family.\",\n \"name\": \"Movie Barf: Dune – Part Two\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n },\n {\n \"description\": \"LuboΕ‘ PospΓ­Ε‘il will perform with the renewed band 5P on March 14 at the cultural house of BarikadnΓ­k.\",\n \"name\": \"LuboΕ‘ PospΓ­Ε‘il & 5P\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n },\n {\n \"description\": \"An insomniac office worker looking for a way to change his life crosses paths with a devil-may-care soap maker and they form an underground fight club that evolves into something much, much more...\",\n \"name\": \"Fight Club\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n },\n {\n \"description\": \"From filmmaker Yorgos Lanthimos and producer Emma Stone comes the incredible tale and fantastical evolution of Bella Baxter (Stone), a young woman brought back to life by the brilliant and unorthodox scientist Dr. Godwin Baxter (Willem Dafoe). Under Baxter's protection, Bella is eager to learn. Hungry for the worldliness she is lacking, she runs off with Duncan Wedderburn (Mark Ruffalo), a slick and debauched lawyer, on a whirlwind adventure across the continents. Free from the prejudices of her times, Bella grows steadfast in her purpose to stand for equality and liberation.\",\n \"name\": \"Poor Things\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n },\n {\n \"description\": \"Concert of Bharata RajnoΕ‘ek, who decided to do something very brave - pay tribute to king of the pop, Michael Jackson in jazz.\",\n \"name\": \"Tribute to World Legends: Michael Jackson\",\n \"endDate\": \"Mon Mar 04 2024 23:59:59 GMT+0100 (Central European Standard Time)\"\n }\n]", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "ce0ba26a-5149-436f-aaf6-dc2b64ca02b1", - "name": "Edit Fields5", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 1140, - 1080 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "414caf45-02aa-4c0a-9cdb-e6da9ec03d80", - "name": "has_weather", - "value": "={{ $json.output.includes('weather') }}", - "type": "boolean" - }, - { - "id": "4f055fa4-10eb-4b7e-b1dc-37a7ef7185fc", - "name": "has_movie", - "value": "={{ $json.output.includes('Dune') }}", - "type": "boolean" - } - ] - }, - "options": {} - }, - "id": "4ec6d24d-353c-4534-a9e7-5a19f62f8fde", - "name": "Edit Fields6", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 900, - 260 - ] - }, - { - "parameters": {}, - "id": "e14fcffe-bbf8-429c-b84e-aa749017fb8c", - "name": "When clicking \"Test workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - -40, - -180 - ] - }, - { - "parameters": { - "content": "## Multiple Tools Calling", - "height": 80, - "width": 335 - }, - "id": "62fb5440-b07d-4279-9c0a-722a65fa5322", - "name": "Sticky Note", - "type": "n8n-nodes-base.stickyNote", - "typeVersion": 1, - "position": [ - 500, - 200 - ] - }, - { - "parameters": { - "content": "## Output Parsing\n", - "height": 88, - "width": 386 - }, - "id": "8020da6e-2ab4-4613-8527-b78705f72114", - "name": "Sticky Note1", - "type": "n8n-nodes-base.stickyNote", - "typeVersion": 1, - "position": [ - 480, - -240 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "0434695d-b245-4947-8b6e-7676a5c92904", - "name": "response", - "value": "=Maurits Cornelis Escher (Dutch pronunciation: [ˈmʌurΙͺts kΙ”rˈneːlΙͺs ΛˆΙ›Ι•Ι™r]; 17 June 1898 – 27 March 1972) was a Dutch graphic artist who made woodcuts, lithographs, and mezzotints, many of which were inspired by mathematics. Despite wide popular interest, for most of his life Escher was neglected in the art world, even in his native Netherlands. He was 70 before a retrospective exhibition was held. In the late twentieth century, he became more widely appreciated, and in the twenty-first century he has been celebrated in exhibitions around the world.\n\nHis work features mathematical objects and operations including impossible objects, explorations of infinity, reflection, symmetry, perspective, truncated and stellated polyhedra, hyperbolic geometry, and tessellations. Although Escher believed he had no mathematical ability, he interacted with the mathematicians George PΓ³lya, Roger Penrose, and Donald Coxeter, and the crystallographer Friedrich Haag, and conducted his own research into tessellation.\n\nEarly in his career, he drew inspiration from nature, making studies of insects, landscapes, and plants such as lichens, all of which he used as details in his artworks. He traveled in Italy and Spain, sketching buildings, townscapes, architecture and the tilings of the Alhambra and the Mezquita of Cordoba, and became steadily more interested in their mathematical structure.\n\nEscher's art became well known among scientists and mathematicians, and in popular culture, especially after it was featured by Martin Gardner in his April 1966 Mathematical Games column in Scientific American. Apart from being used in a variety of technical papers, his work has appeared on the covers of many books and albums. He was one of the major inspirations for Douglas Hofstadter's Pulitzer Prize-winning 1979 book GΓΆdel, Escher, Bach.\n\nExhibitions\n\nPoster advertising the first major exhibition of Escher's work in Britain (Dulwich Picture Gallery, 14 October 2015 – 17 January 2016). The image, which shows Escher and his interest in geometric distortion and multiple levels of distance from reality, is based on his Hand with Reflecting Sphere, 1935.[62][22]\nDespite wide popular interest, Escher was for a long time somewhat neglected in the art world; even in his native Netherlands, he was 70 before a retrospective exhibition was held.[43][k] In the twenty-first century, major exhibitions have been held in cities around the world.[63][64][65] An exhibition of his work in Rio de Janeiro attracted more than 573,000 visitors in 2011;[63] its daily visitor count of 9,677 made it the most visited museum exhibition of the year, anywhere in the world.[66] No major exhibition of Escher's work was held in Britain until 2015, when the Scottish National Gallery of Modern Art ran one in Edinburgh from June to September 2015,[64] moving in October 2015 to the Dulwich Picture Gallery, London. The exhibition poster is based on Hand with Reflecting Sphere, 1935, which shows Escher in his house reflected in a handheld sphere, thus illustrating the artist, his interest in levels of reality in art (e.g., is the hand in the foreground more real than the reflected one?), perspective, and spherical geometry.[22][62][67] The exhibition moved to Italy in 2015–2016, attracting over 500,000 visitors in Rome and Bologna,[65] and then Milan.[68][69][70]", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "2a0cdc4d-2ed8-4efe-973f-a633469c8001", - "name": "Edit Fields", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 1140, - 1260 - ] - }, - { - "parameters": { - "name": "get_evens", - "description": "Call this tool to search Wikipedia.", - "workflowId": "={{ $workflow.id }}", - "fields": { - "values": [ - { - "name": "tool", - "stringValue": "search_wiki" - } - ] - } - }, - "id": "e4d9f9bc-45b0-41ce-8f52-539144736ed5", - "name": "Search Wiki", - "type": "@n8n/n8n-nodes-langchain.toolWorkflow", - "typeVersion": 1, - "position": [ - 640, - 60 - ] - }, - { - "parameters": { - "schemaType": "manual", - "inputSchema": "{\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"description\": \"Full name of the artist\"\n },\n \"birthDate\": {\n \"type\": \"string\",\n \"format\": \"date\",\n \"description\": \"Date of birth\"\n },\n \"deathDate\": {\n \"type\": \"string\",\n \"format\": \"date\",\n \"description\": \"Date of death\"\n },\n \"nationality\": {\n \"type\": \"string\",\n \"description\": \"Artist's nationality\"\n },\n \"profession\": {\n \"type\": \"string\",\n \"description\": \"Artist's primary profession\"\n },\n \"notableWorks\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"description\": \"Notable works created by the artist\"\n }\n },\n \"required\": [\"name\", \"birthDate\", \"deathDate\", \"nationality\", \"profession\", \"notableWorks\"]\n}" - }, - "id": "466a8e57-8eb7-47a9-b0f0-f16c52b18c8f", - "name": "Structured Output Parser", - "type": "@n8n/n8n-nodes-langchain.outputParserStructured", - "typeVersion": 1.2, - "position": [ - 780, - 0 - ] - }, - { - "parameters": { - "promptType": "define", - "text": "Tell me about M.C. Escher", - "hasOutputParser": true, - "options": {} - }, - "id": "75babac0-cb8c-401a-a027-49b850166bf3", - "name": "AI Agent", - "type": "@n8n/n8n-nodes-langchain.agent", - "typeVersion": 1.6, - "position": [ - 520, - -180 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "414caf45-02aa-4c0a-9cdb-e6da9ec03d80", - "name": "has_birth_date", - "value": "={{ $json.output.birthDate === '1898-06-17' }}", - "type": "boolean" - }, - { - "id": "57513cf6-1ee7-40b7-95fc-316066c62153", - "name": "has_death_date", - "value": "={{ $json.output.deathDate === '1972-03-27' }}", - "type": "string" - }, - { - "id": "357953da-7578-4c7e-b8f8-aa25bd9187a4", - "name": "has_name", - "value": "={{ $json.output.name.includes('Escher') }}", - "type": "string" - }, - { - "id": "7cf215ea-f65a-467c-b158-9a80d8de7511", - "name": "has_works", - "value": "={{ $json.output.notableWorks.length > 0 }}", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "31344c44-bbfc-4774-92d9-b61762b43238", - "name": "Edit Fields7", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 880, - -180 - ] - }, - { - "parameters": { - "content": "## Code Tool with Schema\n", - "height": 88, - "width": 386 - }, - "id": "54533ef5-039b-4243-a81c-9ac1265ae3ec", - "name": "Sticky Note2", - "type": "n8n-nodes-base.stickyNote", - "typeVersion": 1, - "position": [ - 500, - -620 - ] - }, - { - "parameters": { - "name": "array_merge", - "description": "Call this tool to merge array of strings to a single string", - "jsCode": "// Example: convert the incoming query to uppercase and return it\nreturn query.strings_array.join(', ');", - "specifyInputSchema": true, - "jsonSchemaExample": "{\n\t\"strings_array\": [\"some_value\", \"some_other_value\"]\n}" - }, - "id": "35be87b4-b947-4b05-9380-23570dac701d", - "name": "Code Tool", - "type": "@n8n/n8n-nodes-langchain.toolCode", - "typeVersion": 1.1, - "position": [ - 740, - -400 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "414caf45-02aa-4c0a-9cdb-e6da9ec03d80", - "name": "passed_array_parameter", - "value": "={{ Array.isArray($json.intermediateSteps[0].action.messageLog[0].kwargs.tool_calls[0].args.strings_array) }}", - "type": "boolean" - }, - { - "id": "069c2fe9-f0f8-4938-9552-1dac5c720add", - "name": "has_correct_length", - "value": "={{ $json.intermediateSteps[0].action.messageLog[0].kwargs.tool_calls[0].args.strings_array.length === 4 }}", - "type": "boolean" - } - ] - }, - "options": {} - }, - "id": "33afa806-84d4-4c2e-a004-22e4d4808d47", - "name": "Edit Fields8", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 900, - -560 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "66c36215-8924-4534-8e7b-845d8de29f4a", - "name": "response", - "value": "success", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "b35ef011-376c-4982-b7d9-8ad29eb65cd0", - "name": "Edit Fields1", - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [ - 1140, - 1460 - ] - }, - { - "parameters": { - "promptType": "define", - "text": "Convert this JSON array to a single string: ['This', 'Is', 'An', 'Array!'].", - "options": { - "returnIntermediateSteps": true - } - }, - "id": "ed050ae2-eb67-4b1f-a87b-28bf5952e5da", - "name": "AI Agent1", - "type": "@n8n/n8n-nodes-langchain.agent", - "typeVersion": 1.6, - "position": [ - 540, - -560 - ] - }, - { - "parameters": { - "model": "claude-3-haiku-20240307", - "options": { - "temperature": 0.1 - } - }, - "id": "5aa82a01-8d32-4ede-a7f3-9ea2f24432d2", - "name": "Anthropic Chat Model2", - "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic", - "typeVersion": 1.2, - "position": [ - 520, - 460 - ], - "credentials": { - "anthropicApi": { - "id": "1Dr1Xbrd2xeq7gaq", - "name": "Anthropic account" - } - } - }, - { - "parameters": { - "model": "claude-3-haiku-20240307", - "options": { - "temperature": 0.1 - } - }, - "id": "2bfdb0c4-6bc9-481d-ad3c-51bed0925a78", - "name": "Anthropic Chat Model", - "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic", - "typeVersion": 1.2, - "position": [ - 520, - 20 - ], - "credentials": { - "anthropicApi": { - "id": "1Dr1Xbrd2xeq7gaq", - "name": "Anthropic account" - } - } - }, - { - "parameters": { - "model": "claude-3-haiku-20240307", - "options": { - "temperature": 0.1 - } - }, - "id": "11d7b586-bf4b-42aa-81c1-55aa0e17a3fc", - "name": "Anthropic Chat Model3", - "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic", - "typeVersion": 1.2, - "position": [ - 540, - -400 - ], - "credentials": { - "anthropicApi": { - "id": "1Dr1Xbrd2xeq7gaq", - "name": "Anthropic account" - } - } - }, - { - "parameters": { - "promptType": "define", - "text": "Help me plan my day in Berlin, Germany. Check current the weather and get the upcoming events and respond with weather and details about the upcoming events.\n\nEach tool should only be called only once.", - "options": { - "returnIntermediateSteps": true - } - }, - "id": "59f6625d-fbb2-47f8-ab09-31a6e0f3e527", - "name": "AI Agent4", - "type": "@n8n/n8n-nodes-langchain.agent", - "typeVersion": 1.6, - "position": [ - 520, - 260 - ] - }, - { - "parameters": { - "rules": { - "values": [ - { - "conditions": { - "options": { - "caseSensitive": true, - "leftValue": "", - "typeValidation": "strict", - "version": 1 - }, - "conditions": [ - { - "leftValue": "={{ $json.tool }}", - "rightValue": "get_weather", - "operator": { - "type": "string", - "operation": "equals" - } - } - ], - "combinator": "and" - }, - "renameOutput": true, - "outputKey": "Weather" - }, - { - "conditions": { - "options": { - "caseSensitive": true, - "leftValue": "", - "typeValidation": "strict", - "version": 1 - }, - "conditions": [ - { - "id": "a164188f-3b5b-4c24-b1bb-e589f4f9219f", - "leftValue": "={{ $json.tool }}", - "rightValue": "get_events", - "operator": { - "type": "string", - "operation": "equals", - "name": "filter.operator.equals" - } - } - ], - "combinator": "and" - }, - "renameOutput": true, - "outputKey": "Events" - }, - { - "conditions": { - "options": { - "caseSensitive": true, - "leftValue": "", - "typeValidation": "strict", - "version": 1 - }, - "conditions": [ - { - "id": "64f3dd1b-57e3-4183-a1d6-6b9b58fd1d81", - "leftValue": "={{ $json.tool }}", - "rightValue": "search_wiki", - "operator": { - "type": "string", - "operation": "equals", - "name": "filter.operator.equals" - } - } - ], - "combinator": "and" - }, - "renameOutput": true, - "outputKey": "search_wiki" - }, - { - "conditions": { - "options": { - "caseSensitive": true, - "leftValue": "", - "typeValidation": "strict", - "version": 1 - }, - "conditions": [ - { - "id": "85f031f4-123f-4407-b5d0-fdd90a26667c", - "leftValue": "={{ $json.tool }}", - "rightValue": "no_query", - "operator": { - "type": "string", - "operation": "equals", - "name": "filter.operator.equals" - } - } - ], - "combinator": "and" - }, - "renameOutput": true, - "outputKey": "empty_query" - } - ] - }, - "options": {} - }, - "id": "f4dde342-7945-49a1-8e98-cb967ada7afe", - "name": "Switch", - "type": "n8n-nodes-base.switch", - "typeVersion": 3, - "position": [ - 460, - 1100 - ] - }, - { - "parameters": { - "content": "## Tool without parameters\n", - "height": 88, - "width": 386 - }, - "id": "b5dca644-99e9-4493-9e6a-1fbc03502d5a", - "name": "Sticky Note3", - "type": "n8n-nodes-base.stickyNote", - "typeVersion": 1, - "position": [ - 520, - -1040 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "414caf45-02aa-4c0a-9cdb-e6da9ec03d80", - "name": "empty_args", - "value": "={{ $ifEmpty($json.intermediateSteps[0].action.messageLog[0].kwargs.tool_calls[0].args, true) }}", - "type": "boolean" - } - ] - }, - "options": {} - }, - "id": "2336c95b-f98a-4c4a-89df-d02c7ad00d42", - "name": "Edit Fields9", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 920, - -980 - ] - }, - { - "parameters": { - "model": "claude-3-haiku-20240307", - "options": { - "temperature": 0.1 - } - }, - "id": "7646d5c7-3717-483f-85b5-da0f8eadf609", - "name": "Anthropic Chat Model4", - "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic", - "typeVersion": 1.2, - "position": [ - 560, - -820 - ], - "credentials": { - "anthropicApi": { - "id": "1Dr1Xbrd2xeq7gaq", - "name": "Anthropic account" - } - } - }, - { - "parameters": { - "toolDescription": "Fetch Example website", - "url": "https://example.com" - }, - "id": "1e1f51e8-7668-4efd-95d6-9c8e7cd5dfbc", - "name": "HTTP Request", - "type": "@n8n/n8n-nodes-langchain.toolHttpRequest", - "typeVersion": 1.1, - "position": [ - 740, - -820 - ] - }, - { - "parameters": { - "promptType": "define", - "text": "Fetch example website", - "options": { - "returnIntermediateSteps": true - } - }, - "id": "36e3e45c-8167-4382-87fa-fed3eccc7dff", - "name": "AI Agent2", - "type": "@n8n/n8n-nodes-langchain.agent", - "typeVersion": 1.6, - "position": [ - 560, - -980 - ] - }, - { - "parameters": { - "sessionIdType": "customKey", - "sessionKey": "memory3", - "contextWindowLength": 10 - }, - "id": "7eace01a-7ea1-4175-a989-297a885d6f54", - "name": "Window Buffer Memory1", - "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow", - "typeVersion": 1.3, - "position": [ - 500, - -1240 - ] - }, - { - "parameters": { - "jsonSchemaExample": "{\n\t\"english_answer\": \"California\",\n\t\"czech_answer\": \"California\"\n}" - }, - "id": "58269208-5599-4e2f-b9fe-f63ce1bd73d3", - "name": "Structured Output Parser1", - "type": "@n8n/n8n-nodes-langchain.outputParserStructured", - "typeVersion": 1.2, - "position": [ - 660, - -1240 - ] - }, - { - "parameters": { - "promptType": "define", - "text": "Hi, my name is Oleg. Tell me about magnets like I'm 5.", - "hasOutputParser": true, - "options": { - "systemMessage": "You are a helpful assistant. Always provide both `english_answer` and `czech_answer` in the final output and be very concise." - } - }, - "id": "66af25fe-deed-4aa1-b597-a2b8ec2aa9be", - "name": "AI Agent5", - "type": "@n8n/n8n-nodes-langchain.agent", - "typeVersion": 1.6, - "position": [ - 540, - -1400 - ] - }, - { - "parameters": { - "content": "## Output Parser + Memory\n", - "height": 88, - "width": 386 - }, - "id": "9dbe76ab-c191-404b-a3e6-bd81910923bc", - "name": "Sticky Note4", - "type": "n8n-nodes-base.stickyNote", - "typeVersion": 1, - "position": [ - 520, - -1460 - ] - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "492acf62-f7d5-4798-a93c-6a291421ecfb", - "name": "contain_both_answers", - "value": "={{ $json.output.english_answer.length > 0 && $json.output.czech_answer.length > 0 }}", - "type": "boolean" - }, - { - "id": "5c56b6d3-1d59-45c4-bcb8-3d4722493c62", - "name": "recalled_name", - "value": "={{ $json.output.english_answer.includes('Oleg') }}", - "type": "string" - } - ] - }, - "options": {} - }, - "id": "02cd9756-bc75-4467-a587-e9b063219b94", - "name": "Edit Fields2", - "type": "n8n-nodes-base.set", - "typeVersion": 3.4, - "position": [ - 1240, - -1400 - ] - }, - { - "parameters": { - "model": "claude-3-haiku-20240307", - "options": { - "temperature": 0.1 - } - }, - "id": "acd4aefe-5deb-465c-81c3-28647e4a62c6", - "name": "Anthropic Chat Model5", - "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic", - "typeVersion": 1.2, - "position": [ - 360, - -1240 - ], - "credentials": { - "anthropicApi": { - "id": "1Dr1Xbrd2xeq7gaq", - "name": "Anthropic account" - } - } - }, - { - "parameters": { - "promptType": "define", - "text": "Can you still remember my name?", - "hasOutputParser": true, - "options": { - "systemMessage": "You are a helpful assistant. Always provide both `english_answer` and `czech_answer` in the final output and be very concise." - } - }, - "id": "cd67dbc8-d756-4e0c-8f75-f753e61a4280", - "name": "AI Agent3", - "type": "@n8n/n8n-nodes-langchain.agent", - "typeVersion": 1.6, - "position": [ - 900, - -1400 - ] - } - ], - "connections": { - "Execute Workflow Trigger": { - "main": [ - [ - { - "node": "Switch", - "type": "main", - "index": 0 - } - ] - ] - }, - "Get Weather": { - "ai_tool": [ - [ - { - "node": "AI Agent4", - "type": "ai_tool", - "index": 0 - } - ] - ] - }, - "Get Events": { - "ai_tool": [ - [ - { - "node": "AI Agent4", - "type": "ai_tool", - "index": 0 - } - ] - ] - }, - "Search Wiki": { - "ai_tool": [ - [ - { - "node": "AI Agent", - "type": "ai_tool", - "index": 0 - } - ] - ] - }, - "Structured Output Parser": { - "ai_outputParser": [ - [ - { - "node": "AI Agent", - "type": "ai_outputParser", - "index": 0 - } - ] - ] - }, - "AI Agent": { - "main": [ - [ - { - "node": "Edit Fields7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Code Tool": { - "ai_tool": [ - [ - { - "node": "AI Agent1", - "type": "ai_tool", - "index": 0 - } - ] - ] - }, - "When clicking \"Test workflow\"": { - "main": [ - [ - { - "node": "AI Agent1", - "type": "main", - "index": 0 - }, - { - "node": "AI Agent4", - "type": "main", - "index": 0 - }, - { - "node": "AI Agent", - "type": "main", - "index": 0 - }, - { - "node": "AI Agent2", - "type": "main", - "index": 0 - }, - { - "node": "AI Agent5", - "type": "main", - "index": 0 - } - ] - ] - }, - "AI Agent1": { - "main": [ - [ - { - "node": "Edit Fields8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Anthropic Chat Model2": { - "ai_languageModel": [ - [ - { - "node": "AI Agent4", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "Anthropic Chat Model": { - "ai_languageModel": [ - [ - { - "node": "AI Agent", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "Anthropic Chat Model3": { - "ai_languageModel": [ - [ - { - "node": "AI Agent1", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "AI Agent4": { - "main": [ - [ - { - "node": "Edit Fields6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Switch": { - "main": [ - [ - { - "node": "Edit Fields4", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Edit Fields5", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Edit Fields", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Edit Fields1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Anthropic Chat Model4": { - "ai_languageModel": [ - [ - { - "node": "AI Agent2", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "HTTP Request": { - "ai_tool": [ - [ - { - "node": "AI Agent2", - "type": "ai_tool", - "index": 0 - } - ] - ] - }, - "AI Agent2": { - "main": [ - [ - { - "node": "Edit Fields9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Window Buffer Memory1": { - "ai_memory": [ - [ - { - "node": "AI Agent5", - "type": "ai_memory", - "index": 0 - }, - { - "node": "AI Agent3", - "type": "ai_memory", - "index": 0 - } - ] - ] - }, - "Structured Output Parser1": { - "ai_outputParser": [ - [ - { - "node": "AI Agent5", - "type": "ai_outputParser", - "index": 0 - }, - { - "node": "AI Agent3", - "type": "ai_outputParser", - "index": 0 - } - ] - ] - }, - "AI Agent5": { - "main": [ - [ - { - "node": "AI Agent3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Anthropic Chat Model5": { - "ai_languageModel": [ - [ - { - "node": "AI Agent5", - "type": "ai_languageModel", - "index": 0 - }, - { - "node": "AI Agent3", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "AI Agent3": { - "main": [ - [ - { - "node": "Edit Fields2", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": { - "executionOrder": "v1" - }, - "staticData": null, - "meta": { - "templateCredsSetupCompleted": true, - "instanceId": "27cc9b56542ad45b38725555722c50a1c3fee1670bbb67980558314ee08517c4" - }, - "pinData": {}, - "versionId": "40faa4fb-40b3-4081-8f60-1b226a6294dc", - "triggerCount": 0, - "tags": [] -} diff --git a/test-workflows/workflows/255.json b/test-workflows/workflows/255.json deleted file mode 100644 index caaee181856..00000000000 --- a/test-workflows/workflows/255.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "name": "Sub-node errors:model", - "nodes": [ - { - "parameters": {}, - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 0, - 0 - ], - "id": "077f1a05-32d1-4a9e-abd9-9ef4a1bcfe02", - "name": "When clicking β€˜Test workflow’" - }, - { - "parameters": { - "promptType": "define", - "text": "Hey" - }, - "type": "@n8n/n8n-nodes-langchain.chainLlm", - "typeVersion": 1.5, - "position": [ - 200, - 0 - ], - "id": "5c3f329d-6481-41c5-9747-e9fd53815ca6", - "name": "Basic LLM Chain", - "onError": "continueErrorOutput" - }, - { - "parameters": { - "model": "=gpt-4o-mini123", - "options": {} - }, - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 280, - 220 - ], - "id": "00cb1410-f04f-4b2b-b42e-f2c275ba0b4a", - "name": "OpenAI Chat Model", - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - } - ], - "pinData": {}, - "connections": { - "When clicking β€˜Test workflow’": { - "main": [ - [ - { - "node": "Basic LLM Chain", - "type": "main", - "index": 0 - } - ] - ] - }, - "OpenAI Chat Model": { - "ai_languageModel": [ - [ - { - "node": "Basic LLM Chain", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - } - }, - "active": false, - "settings": { - "executionOrder": "v1" - }, - "versionId": "56e5e220-edbd-4d7a-97f3-96b8cf952202", - "meta": { - "instanceId": "27cc9b56542ad45b38725555722c50a1c3fee1670bbb67980558314ee08517c4" - }, - "id": "255", - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/256.json b/test-workflows/workflows/256.json deleted file mode 100644 index dcbe9b2951f..00000000000 --- a/test-workflows/workflows/256.json +++ /dev/null @@ -1,193 +0,0 @@ -{ - "name": "Nested sub-node errors:model", - "nodes": [ - { - "parameters": { - "promptType": "define", - "text": "What happened yesterday?", - "options": {} - }, - "type": "@n8n/n8n-nodes-langchain.agent", - "typeVersion": 1.7, - "position": [ - 140, - -60 - ], - "id": "17f481ed-343f-4e0f-ace0-ec1a6937f57d", - "name": "AI Agent" - }, - { - "parameters": { - "options": {} - }, - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 100, - 180 - ], - "id": "af60b8a2-f065-46e5-92c6-2b3f54e8b48d", - "name": "OpenAI Chat Model", - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "name": "search_vector_store", - "description": "Retrieves data about past events" - }, - "type": "@n8n/n8n-nodes-langchain.toolVectorStore", - "typeVersion": 1, - "position": [ - 400, - 160 - ], - "id": "3d2dc985-7dc5-4996-90c5-85e777070315", - "name": "Vector Store Tool" - }, - { - "parameters": { - "options": {} - }, - "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi", - "typeVersion": 1.1, - "position": [ - 360, - 520 - ], - "id": "55cfa84c-b2f6-40aa-9eef-43fec740ba6c", - "name": "Embeddings OpenAI", - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "model": "=gpt-4o-mini123", - "options": {} - }, - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 620, - 360 - ], - "id": "46468ea7-318b-4893-b387-b8cc1cca1355", - "name": "OpenAI Chat Model1", - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": {}, - "type": "@n8n/n8n-nodes-langchain.vectorStoreInMemory", - "typeVersion": 1, - "position": [ - 300, - 320 - ], - "id": "e3a35d71-b47d-46fc-976e-eb671cc9c3fc", - "name": "In-Memory Vector Store" - }, - { - "parameters": {}, - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - -60, - -60 - ], - "id": "b42f6a79-4b29-4e17-95ab-5c4fbeda3683", - "name": "When clicking β€˜Test workflow’" - } - ], - "pinData": {}, - "connections": { - "OpenAI Chat Model": { - "ai_languageModel": [ - [ - { - "node": "AI Agent", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "Vector Store Tool": { - "ai_tool": [ - [ - { - "node": "AI Agent", - "type": "ai_tool", - "index": 0 - } - ] - ] - }, - "Embeddings OpenAI": { - "ai_embedding": [ - [ - { - "node": "In-Memory Vector Store", - "type": "ai_embedding", - "index": 0 - } - ] - ] - }, - "OpenAI Chat Model1": { - "ai_languageModel": [ - [ - { - "node": "Vector Store Tool", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "In-Memory Vector Store": { - "ai_vectorStore": [ - [ - { - "node": "Vector Store Tool", - "type": "ai_vectorStore", - "index": 0 - } - ] - ] - }, - "When clicking β€˜Test workflow’": { - "main": [ - [ - { - "node": "AI Agent", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "active": false, - "settings": { - "executionOrder": "v1" - }, - "versionId": "5b6e4b0f-73c8-4254-8b3e-aa36f3e5ae4e", - "meta": { - "instanceId": "27cc9b56542ad45b38725555722c50a1c3fee1670bbb67980558314ee08517c4" - }, - "id": "256", - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/257.json b/test-workflows/workflows/257.json deleted file mode 100644 index 205f93c58f9..00000000000 --- a/test-workflows/workflows/257.json +++ /dev/null @@ -1,262 +0,0 @@ -{ - "createdAt": "2025-03-11T17:56:22.329Z", - "updatedAt": "2025-03-11T17:57:14.000Z", - "id": "257", - "name": "Agent:auto-fix:anthropic", - "active": false, - "nodes": [ - { - "parameters": {}, - "id": "f53b691d-beaa-4d60-a9da-d7380bc4c69a", - "name": "When clicking \"Test workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - -460, - 80 - ] - }, - { - "parameters": { - "promptType": "define", - "text": "What time is my check-in?", - "hasOutputParser": true, - "options": {} - }, - "type": "@n8n/n8n-nodes-langchain.agent", - "typeVersion": 1.8, - "position": [ - -140, - 80 - ], - "id": "2ae90e1d-1333-4988-ac49-5e7e8f3026ff", - "name": "AI Agent" - }, - { - "parameters": { - "options": {} - }, - "type": "@n8n/n8n-nodes-langchain.outputParserAutofixing", - "typeVersion": 1, - "position": [ - 100, - 360 - ], - "id": "7e2efbb9-41b2-4c6a-a811-3a4d62181ff5", - "name": "Auto-fixing Output Parser" - }, - { - "parameters": { - "schemaType": "manual", - "inputSchema": "{\n \"type\": \"object\",\n \"properties\": {\n \"resolution\": {\n \"type\": \"string\",\n \"description\": \"The customer-facing resolution or response that should be communicated to the customer\"\n },\n \"reasoning\": {\n \"type\": \"string\",\n \"description\": \"Detailed explanation of the solution and reasoning for internal use\"\n }\n },\n \"additionalProperties\": true,\n \"required\": [\"resolution\", \"reasoning\"]\n}" - }, - "type": "@n8n/n8n-nodes-langchain.outputParserStructured", - "typeVersion": 1.2, - "position": [ - 240, - 500 - ], - "id": "6405c53c-46c2-4c64-84c7-a7db2b127ca6", - "name": "Structured Output Parser" - }, - { - "parameters": { - "sessionIdType": "customKey", - "sessionKey": "memory7" - }, - "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow", - "typeVersion": 1.3, - "position": [ - -120, - 360 - ], - "id": "0b93b732-9529-45c6-a914-83c500ee3a36", - "name": "Simple Memory" - }, - { - "parameters": { - "model": { - "__rl": true, - "mode": "list", - "value": "gpt-4o-mini" - }, - "options": {} - }, - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1.2, - "position": [ - 40, - 500 - ], - "id": "3ebb149d-a83d-4ec1-8e79-e67f87fc5091", - "name": "OpenAI Chat Model1", - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "promptType": "define", - "text": "What time is my check-in?", - "hasOutputParser": true, - "options": {} - }, - "type": "@n8n/n8n-nodes-langchain.agent", - "typeVersion": 1.8, - "position": [ - 260, - 80 - ], - "id": "8237c156-5ec1-4bf9-84a1-ad408d3b6152", - "name": "AI Agent1" - }, - { - "parameters": { - "content": "## Auto-fixing Output Parser + Memory\n", - "height": 88, - "width": 386 - }, - "id": "fb77496b-6d07-4a3c-90a8-bb8788a5f588", - "name": "Sticky Note4", - "type": "n8n-nodes-base.stickyNote", - "typeVersion": 1, - "position": [ - -300, - -40 - ] - }, - { - "parameters": { - "model": { - "__rl": true, - "value": "claude-3-7-sonnet-20250219", - "mode": "list", - "cachedResultName": "Claude 3.7 Sonnet" - }, - "options": {} - }, - "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic", - "typeVersion": 1.3, - "position": [ - -340, - 360 - ], - "id": "b32382ad-d5c6-4b80-b315-5ba9ce48c994", - "name": "Anthropic Chat Model", - "credentials": { - "anthropicApi": { - "id": "1Dr1Xbrd2xeq7gaq", - "name": "Anthropic account" - } - } - } - ], - "connections": { - "When clicking \"Test workflow\"": { - "main": [ - [ - { - "node": "AI Agent", - "type": "main", - "index": 0 - } - ] - ] - }, - "AI Agent": { - "main": [ - [ - { - "node": "AI Agent1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Auto-fixing Output Parser": { - "ai_outputParser": [ - [ - { - "node": "AI Agent", - "type": "ai_outputParser", - "index": 0 - }, - { - "node": "AI Agent1", - "type": "ai_outputParser", - "index": 0 - } - ] - ] - }, - "Structured Output Parser": { - "ai_outputParser": [ - [ - { - "node": "Auto-fixing Output Parser", - "type": "ai_outputParser", - "index": 0 - } - ] - ] - }, - "Simple Memory": { - "ai_memory": [ - [ - { - "node": "AI Agent", - "type": "ai_memory", - "index": 0 - }, - { - "node": "AI Agent1", - "type": "ai_memory", - "index": 0 - } - ] - ] - }, - "OpenAI Chat Model1": { - "ai_languageModel": [ - [ - { - "node": "Auto-fixing Output Parser", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "Anthropic Chat Model": { - "ai_languageModel": [ - [ - { - "node": "AI Agent", - "type": "ai_languageModel", - "index": 0 - }, - { - "node": "AI Agent1", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - } - }, - "settings": { - "executionOrder": "v1" - }, - "staticData": null, - "meta": { - "templateCredsSetupCompleted": true - }, - "pinData": {}, - "versionId": "4ab225eb-8c26-476c-a12f-d2cc00836ca5", - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/258.json b/test-workflows/workflows/258.json deleted file mode 100644 index ffbc318fd61..00000000000 --- a/test-workflows/workflows/258.json +++ /dev/null @@ -1,263 +0,0 @@ -{ - "createdAt": "2025-03-11T17:52:12.078Z", - "updatedAt": "2025-03-11T17:56:05.000Z", - "id": "258", - "name": "Agent:auto-fix:openai", - "active": false, - "nodes": [ - { - "parameters": {}, - "id": "9152fa2f-1cf1-4745-bf52-3d3374e501c5", - "name": "When clicking \"Test workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 160, - 820 - ] - }, - { - "parameters": { - "promptType": "define", - "text": "What time is my check-in?", - "hasOutputParser": true, - "options": {} - }, - "type": "@n8n/n8n-nodes-langchain.agent", - "typeVersion": 1.8, - "position": [ - 480, - 820 - ], - "id": "1c390448-79da-4a49-b7f2-3a7a99a23167", - "name": "AI Agent" - }, - { - "parameters": { - "model": { - "__rl": true, - "value": "gpt-4o-2024-05-13", - "mode": "list", - "cachedResultName": "gpt-4o-2024-05-13" - }, - "options": { - "temperature": 0, - "maxRetries": 3 - } - }, - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1.2, - "position": [ - 240, - 1100 - ], - "id": "71ffd19c-f0eb-4735-bdd5-4c8e9511fcc2", - "name": "OpenAI Chat Model", - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "options": {} - }, - "type": "@n8n/n8n-nodes-langchain.outputParserAutofixing", - "typeVersion": 1, - "position": [ - 720, - 1100 - ], - "id": "72cafb7e-889c-46cf-bfe1-ac71e9803037", - "name": "Auto-fixing Output Parser" - }, - { - "parameters": { - "schemaType": "manual", - "inputSchema": "{\n \"type\": \"object\",\n \"properties\": {\n \"resolution\": {\n \"type\": \"string\",\n \"description\": \"The customer-facing resolution or response that should be communicated to the customer\"\n },\n \"reasoning\": {\n \"type\": \"string\",\n \"description\": \"Detailed explanation of the solution and reasoning for internal use\"\n }\n },\n \"additionalProperties\": true,\n \"required\": [\"resolution\", \"reasoning\"]\n}" - }, - "type": "@n8n/n8n-nodes-langchain.outputParserStructured", - "typeVersion": 1.2, - "position": [ - 860, - 1240 - ], - "id": "58ab5ac8-9f75-4448-a4c9-55a8d2afa8fd", - "name": "Structured Output Parser" - }, - { - "parameters": { - "sessionIdType": "customKey", - "sessionKey": "memory6" - }, - "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow", - "typeVersion": 1.3, - "position": [ - 500, - 1100 - ], - "id": "af4542a6-23e2-4baf-8544-b01aa16d22aa", - "name": "Simple Memory" - }, - { - "parameters": { - "model": { - "__rl": true, - "mode": "list", - "value": "gpt-4o-mini" - }, - "options": {} - }, - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1.2, - "position": [ - 660, - 1240 - ], - "id": "84ebbc2c-ed7f-418b-b4b0-e0f273912d79", - "name": "OpenAI Chat Model1", - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "promptType": "define", - "text": "What time is my check-in?", - "hasOutputParser": true, - "options": {} - }, - "type": "@n8n/n8n-nodes-langchain.agent", - "typeVersion": 1.8, - "position": [ - 880, - 820 - ], - "id": "92c04ad7-f491-4f0f-86de-c32fe82c2148", - "name": "AI Agent1" - }, - { - "parameters": { - "content": "## Auto-fixing Output Parser + Memory\n", - "height": 88, - "width": 386 - }, - "id": "38f59837-adec-49dc-b848-0b97561c3842", - "name": "Sticky Note4", - "type": "n8n-nodes-base.stickyNote", - "typeVersion": 1, - "position": [ - 320, - 700 - ] - } - ], - "connections": { - "When clicking \"Test workflow\"": { - "main": [ - [ - { - "node": "AI Agent", - "type": "main", - "index": 0 - } - ] - ] - }, - "Auto-fixing Output Parser": { - "ai_outputParser": [ - [ - { - "node": "AI Agent", - "type": "ai_outputParser", - "index": 0 - }, - { - "node": "AI Agent1", - "type": "ai_outputParser", - "index": 0 - } - ] - ] - }, - "Structured Output Parser": { - "ai_outputParser": [ - [ - { - "node": "Auto-fixing Output Parser", - "type": "ai_outputParser", - "index": 0 - } - ] - ] - }, - "Simple Memory": { - "ai_memory": [ - [ - { - "node": "AI Agent", - "type": "ai_memory", - "index": 0 - }, - { - "node": "AI Agent1", - "type": "ai_memory", - "index": 0 - } - ] - ] - }, - "OpenAI Chat Model1": { - "ai_languageModel": [ - [ - { - "node": "Auto-fixing Output Parser", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "AI Agent": { - "main": [ - [ - { - "node": "AI Agent1", - "type": "main", - "index": 0 - } - ] - ] - }, - "OpenAI Chat Model": { - "ai_languageModel": [ - [ - { - "node": "AI Agent", - "type": "ai_languageModel", - "index": 0 - }, - { - "node": "AI Agent1", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - } - }, - "settings": { - "executionOrder": "v1" - }, - "staticData": null, - "meta": null, - "pinData": {}, - "versionId": "e00984a3-c69b-42b6-afb9-91b44c6a0e37", - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/259.json b/test-workflows/workflows/259.json deleted file mode 100644 index 3d6d4cecbee..00000000000 --- a/test-workflows/workflows/259.json +++ /dev/null @@ -1,499 +0,0 @@ -{ - "createdAt": "2024-03-04T17:02:06.139Z", - "updatedAt": "2025-03-12T13:18:57.000Z", - "id": "259", - "name": "ChainQA", - "active": false, - "nodes": [ - { - "parameters": { - "model": "text-embedding-3-small", - "options": {} - }, - "id": "79cfd86e-b657-49de-bc61-13415ffa725b", - "name": "Embeddings OpenAI6", - "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi", - "typeVersion": 1, - "position": [ - 1420, - 1580 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "options": { - "metadata": { - "metadataValues": [ - { - "name": "some-meta", - "value": "test" - }, - { - "name": "other-meta", - "value": "test2" - } - ] - } - } - }, - "id": "76ee3d77-836c-417d-8d8e-9822cddfe936", - "name": "Default Data Loader2", - "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader", - "typeVersion": 1, - "position": [ - 1560, - 1580 - ] - }, - { - "parameters": { - "chunkSize": 500, - "chunkOverlap": 100 - }, - "id": "1edacf5b-b7e4-4486-b98f-c78b338ac38e", - "name": "Token Splitter2", - "type": "@n8n/n8n-nodes-langchain.textSplitterTokenSplitter", - "typeVersion": 1, - "position": [ - 1560, - 1760 - ] - }, - { - "parameters": { - "model": "gpt-3.5-turbo-0125", - "options": { - "temperature": 0 - } - }, - "id": "93ff6597-cac9-4847-8efd-e1d03520b4b9", - "name": "OpenAI Chat Model2", - "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", - "typeVersion": 1, - "position": [ - 2100, - 1660 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": {}, - "id": "8985b238-8814-4aab-bbf3-801fb52c7757", - "name": "Vector Store Retriever2", - "type": "@n8n/n8n-nodes-langchain.retrieverVectorStore", - "typeVersion": 1, - "position": [ - 2380, - 1720 - ] - }, - { - "parameters": { - "model": "text-embedding-3-small", - "options": {} - }, - "id": "b2ef63c3-2e18-49dc-8241-ee71eabdd6cb", - "name": "Embeddings OpenAI7", - "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi", - "typeVersion": 1, - "position": [ - 2320, - 1980 - ], - "credentials": { - "openAiApi": { - "id": "Zak03cqeLUOsgkFI", - "name": "OpenAi account" - } - } - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "d998ae3e-192c-45ff-a3ff-ad3ed3a20304", - "name": "output_matches", - "value": "={{ $json.response.text?.includes('80') ?? $json.response.includes('80') }}", - "type": "boolean" - } - ] - }, - "options": {} - }, - "id": "046edb77-d0cd-4e8b-9db3-706c249e557f", - "name": "Edit Fields2", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 3500, - 1360 - ] - }, - { - "parameters": { - "memoryKey": "bitcoin_wf_test" - }, - "id": "11262bc3-f1db-4162-94c8-5f2d5b279900", - "name": "In-Memory Vector Store2", - "type": "@n8n/n8n-nodes-langchain.vectorStoreInMemory", - "typeVersion": 1, - "position": [ - 2320, - 1860 - ] - }, - { - "parameters": {}, - "id": "f4ff0f49-ac8b-4f7c-9cd4-90f0f9534772", - "name": "When clicking \"Test workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [ - 1000, - 1340 - ] - }, - { - "parameters": { - "jsCode": "return {\n text: `Bitcoin: A Peer-to-Peer Electronic Cash System Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone. 1. Introduction Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non- reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party. What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes. 1 2. Transactions We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership. The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 3. Timestamp Server The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 2 Block Item Item ... Hash Block Item Item ... Hash Transaction Owner 1's Public Key Owner 0's Signature Hash Transaction Owner 2's Public Key Owner 1's Signature Hash Verify Transaction Owner 3's Public Key Owner 2's Signature Hash Verify Owner 2's Private Key Owner 1's Private Key SignSign Owner 3's Private Key 4. Proof-of-Work To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof- of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 5. Network The steps to run the network are as follows: 1) New transactions are broadcast to all nodes. 2) Each node collects new transactions into a block. 3) Each node works on finding a difficult proof-of-work for its block. 4) When a node finds a proof-of-work, it broadcasts the block to all nodes. 5) Nodes accept the block only if all transactions in it are valid and not already spent. 6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash. Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one. 3 Block Prev Hash Nonce Tx Tx ... Block Prev Hash Nonce Tx Tx ... New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 6. Incentive By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 7. Reclaiming Disk Space Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored. A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 4 BlockBlock Block Header (Block Hash) Prev Hash Nonce Hash01 Hash0 Hash1 Hash2 Hash3 Hash23 Root Hash Hash01 Hash2 Tx3 Hash23 Block Header (Block Hash) Root Hash Transactions Hashed in a Merkle Tree After Pruning Tx0-2 from the Block Prev Hash Nonce Hash3 Tx0 Tx1 Tx2 Tx3 8. Simplified Payment Verification It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it. As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification. 9. Combining and Splitting Value Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender. It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history. 5 Transaction In ... In Out ... Hash01 Hash2 Hash3 Hash23 Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Block Header Merkle Root Prev Hash Nonce Merkle Branch for Tx3 Longest Proof-of-Work Chain Tx3 10. Privacy The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the \"tape\", is made public, but without telling who the parties were. As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner. 11. Calculations We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent. The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1. The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]: p = probability an honest node finds the next block q = probability the attacker finds the next block q z = probability the attacker will ever catch up from z blocks behind q z = { 1 if p≀q ξ‚žq / pξ‚Ÿ z if pξ‚…q } 6 Identities Transactions Trusted Third Party Counterparty Public Identities Transactions Public New Privacy Model Traditional Privacy Model Given our assumption that p > q, the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind. We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late. The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction. The recipient waits until the transaction has been added to a block and z blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value: =z q p To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point: βˆ‘ k =0 ∞  k e βˆ’ξƒ k ! β‹… { ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’k ξ‚Ÿ if k ≀ z 1 if k ξ‚… z } Rearranging to avoid summing the infinite tail of the distribution... 1βˆ’ βˆ‘ k =0 z  k e βˆ’ξƒ k! ξ‚ž 1βˆ’ξ‚žq / pξ‚Ÿ ξ‚ž zβˆ’ k ξ‚Ÿ ξ‚Ÿ Converting to C code... #include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7 Running some results, we can see the probability drop off exponentially with z. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006 Solving for P less than 0.1%... P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. Conclusion We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism. 8 References [1] W. Dai, \"b-money,\" http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, \"Design of a secure timestamping service with minimal trust requirements,\" In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, \"How to time-stamp a digital document,\" In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, \"Improving the efficiency and reliability of digital time-stamping,\" In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, \"Secure names for bit-strings,\" In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, \"Hashcash - a denial of service counter-measure,\" http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, \"Protocols for public key cryptosystems,\" In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, \"An introduction to probability theory and its applications,\" 1957. 9`\n}" - }, - "id": "06c12027-e965-441d-b1d8-b711eabbeb02", - "name": "Code", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [ - 1220, - 1340 - ] - }, - { - "parameters": { - "mode": "insert", - "memoryKey": "bitcoin_wf_test", - "clearStore": true - }, - "id": "569a716b-c369-461e-b522-4f890af4fa34", - "name": "In-Memory Vector Store", - "type": "@n8n/n8n-nodes-langchain.vectorStoreInMemory", - "typeVersion": 1, - "position": [ - 1480, - 1340 - ] - }, - { - "parameters": { - "promptType": "define", - "text": "What is the size of a block header with no transactions? Respond only with number of bytes.", - "options": {} - }, - "id": "031906b6-9157-4ec4-93ab-55486e5a32f2", - "name": "Question and Answer Chain 1.3", - "type": "@n8n/n8n-nodes-langchain.chainRetrievalQa", - "typeVersion": 1.3, - "position": [ - 2400, - 1080 - ] - }, - { - "parameters": { - "promptType": "define", - "text": "What is the size of a block header with no transactions? Respond only with number of bytes.", - "options": {} - }, - "type": "@n8n/n8n-nodes-langchain.chainRetrievalQa", - "typeVersion": 1.4, - "position": [ - 2660, - 1340 - ], - "id": "412a579e-3531-4270-983a-c938d66362e3", - "name": "Question and Answer Chain 1.4" - }, - { - "parameters": { - "promptType": "define", - "text": "What is the size of a block header with no transactions? Respond only with number of bytes.", - "options": {} - }, - "type": "@n8n/n8n-nodes-langchain.chainRetrievalQa", - "typeVersion": 1.5, - "position": [ - 2800, - 1560 - ], - "id": "e3f4a4e8-ef8e-4204-ac46-f0896126fcbe", - "name": "Question and Answer Chain 1.5" - }, - { - "parameters": { - "numberInputs": 3 - }, - "type": "n8n-nodes-base.merge", - "typeVersion": 3, - "position": [ - 3280, - 1360 - ], - "id": "619f459a-d2a5-41ce-9b92-85f54d3f4017", - "name": "Merge" - }, - { - "parameters": { - "assignments": { - "assignments": [ - { - "id": "5f9a8751-2eb2-4ab6-8f12-b7856d9baa8a", - "name": "output_length_matches", - "value": "={{ $items().length === 12 }}", - "type": "boolean" - }, - { - "id": "a5a61e4e-ff4d-4da5-a174-9788c22cddfd", - "name": "has_content", - "value": "={{ $json.pageContent.length > 100 }}", - "type": "boolean" - }, - { - "id": "bceaea49-b29f-47d7-8a5a-14d4e02477ec", - "name": "has_meta", - "value": "={{ $items().every(i => i.json.metadata['some-meta'] === 'test' && i.json.metadata['other-meta'] === 'test2') }}", - "type": "boolean" - } - ] - }, - "options": {} - }, - "id": "e49fd92f-0a97-44a4-bbf5-c9aa94496ce1", - "name": "Check Vector Store Populated2", - "type": "n8n-nodes-base.set", - "typeVersion": 3.3, - "position": [ - 1940, - 1340 - ], - "executeOnce": true - } - ], - "connections": { - "Embeddings OpenAI6": { - "ai_embedding": [ - [ - { - "node": "In-Memory Vector Store", - "type": "ai_embedding", - "index": 0 - } - ] - ] - }, - "Default Data Loader2": { - "ai_document": [ - [ - { - "node": "In-Memory Vector Store", - "type": "ai_document", - "index": 0 - } - ] - ] - }, - "Token Splitter2": { - "ai_textSplitter": [ - [ - { - "node": "Default Data Loader2", - "type": "ai_textSplitter", - "index": 0 - } - ] - ] - }, - "OpenAI Chat Model2": { - "ai_languageModel": [ - [ - { - "node": "Question and Answer Chain 1.3", - "type": "ai_languageModel", - "index": 0 - }, - { - "node": "Question and Answer Chain 1.4", - "type": "ai_languageModel", - "index": 0 - }, - { - "node": "Question and Answer Chain 1.5", - "type": "ai_languageModel", - "index": 0 - } - ] - ] - }, - "Vector Store Retriever2": { - "ai_retriever": [ - [ - { - "node": "Question and Answer Chain 1.5", - "type": "ai_retriever", - "index": 0 - }, - { - "node": "Question and Answer Chain 1.4", - "type": "ai_retriever", - "index": 0 - }, - { - "node": "Question and Answer Chain 1.3", - "type": "ai_retriever", - "index": 0 - } - ] - ] - }, - "Embeddings OpenAI7": { - "ai_embedding": [ - [ - { - "node": "In-Memory Vector Store2", - "type": "ai_embedding", - "index": 0 - } - ] - ] - }, - "In-Memory Vector Store2": { - "ai_vectorStore": [ - [ - { - "node": "Vector Store Retriever2", - "type": "ai_vectorStore", - "index": 0 - } - ] - ] - }, - "When clicking \"Test workflow\"": { - "main": [ - [ - { - "node": "Code", - "type": "main", - "index": 0 - } - ] - ] - }, - "Code": { - "main": [ - [ - { - "node": "In-Memory Vector Store", - "type": "main", - "index": 0 - } - ] - ] - }, - "In-Memory Vector Store": { - "main": [ - [ - { - "node": "Check Vector Store Populated2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Question and Answer Chain 1.3": { - "main": [ - [ - { - "node": "Merge", - "type": "main", - "index": 0 - } - ] - ] - }, - "Question and Answer Chain 1.4": { - "main": [ - [ - { - "node": "Merge", - "type": "main", - "index": 1 - } - ] - ] - }, - "Question and Answer Chain 1.5": { - "main": [ - [ - { - "node": "Merge", - "type": "main", - "index": 2 - } - ] - ] - }, - "Merge": { - "main": [ - [ - { - "node": "Edit Fields2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Check Vector Store Populated2": { - "main": [ - [ - { - "node": "Question and Answer Chain 1.5", - "type": "main", - "index": 0 - }, - { - "node": "Question and Answer Chain 1.3", - "type": "main", - "index": 0 - }, - { - "node": "Question and Answer Chain 1.4", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": { - "executionOrder": "v1" - }, - "staticData": null, - "meta": { - "templateCredsSetupCompleted": true - }, - "pinData": {}, - "versionId": "3669c4ec-780d-4c3d-88a9-d470593b5ed9", - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/26.json b/test-workflows/workflows/26.json deleted file mode 100644 index cffbc875aee..00000000000 --- a/test-workflows/workflows/26.json +++ /dev/null @@ -1,729 +0,0 @@ -{ - "createdAt": "2021-02-17T09:14:09.452Z", - "updatedAt": "2021-05-21T11:16:43.023Z", - "id": "26", - "name": "ClickUp:Folder:create update getAll get delete:Goal:create update getAll get delete:GoalKeyResult:create update delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "c237659f-9d24-4aa2-9869-8965d9a1591b" - }, - { - "parameters": { - "resource": "folder", - "team": "4651110", - "space": "8716115", - "name": "=testFolder{{Date.now()}}" - }, - "name": "ClickUp", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 460, - 220 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "5034da19-bed1-4282-a8e9-6cf18d227daf" - }, - { - "parameters": { - "resource": "folder", - "operation": "update", - "team": "4651110", - "space": "8716115", - "folder": "={{$node[\"ClickUp\"].json[\"id\"]}}", - "updateFields": { - "name": "=testFolderUpdated{{Date.now()}}" - } - }, - "name": "ClickUp1", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 740, - 220 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "f16090cd-67d3-41bc-b1f5-9449d3334323" - }, - { - "parameters": { - "resource": "folder", - "operation": "getAll", - "team": "4651110", - "space": "8716115", - "limit": 1, - "filters": {} - }, - "name": "ClickUp2", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1050, - 220 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "5ecdc66a-43f2-4ee6-9139-32d43694f4b2" - }, - { - "parameters": { - "resource": "folder", - "operation": "get", - "team": "4651110", - "space": "8716115", - "folder": "={{$node[\"ClickUp\"].json[\"id\"]}}" - }, - "name": "ClickUp3", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1330, - 220 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "fb668fdb-e839-4b50-a683-1583474a2e0a" - }, - { - "parameters": { - "resource": "folder", - "operation": "delete", - "team": "4651110", - "space": "8716115", - "folder": "={{$node[\"ClickUp\"].json[\"id\"]}}" - }, - "name": "ClickUp4", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1610, - 220 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "0c7006d8-7a50-47a1-aa3d-b7d55041a95e" - }, - { - "parameters": { - "resource": "goal", - "team": "4651110", - "name": "=testGoal{{Date.now()}}", - "additionalFields": {} - }, - "name": "ClickUp5", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 450, - 400 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "disabled": true, - "id": "bf9c004a-aec4-44fe-93c3-502b994deb5e" - }, - { - "parameters": { - "resource": "goal", - "operation": "update", - "goal": "={{$node[\"ClickUp5\"].json[\"id\"]}}", - "updateFields": { - "name": "=testGoalUpdated{{Date.now()}}" - } - }, - "name": "ClickUp6", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1630, - 390 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "disabled": true, - "id": "1612db26-06b6-4311-823a-7f333867704c" - }, - { - "parameters": { - "resource": "goal", - "operation": "getAll", - "team": "4651110", - "limit": 1 - }, - "name": "ClickUp7", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1950, - 390 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "disabled": true, - "id": "52f593da-feb7-44e3-b4b1-480a6b3c7b80" - }, - { - "parameters": { - "resource": "goal", - "operation": "get", - "goal": "={{$node[\"ClickUp5\"].json[\"id\"]}}" - }, - "name": "ClickUp8", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 2230, - 390 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "disabled": true, - "id": "e634fee5-7272-483b-81af-2f2edb2a1568" - }, - { - "parameters": { - "resource": "goal", - "operation": "delete", - "goal": "={{$node[\"ClickUp5\"].json[\"id\"]}}" - }, - "name": "ClickUp9", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 2510, - 390 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "disabled": true, - "id": "fa8e6453-a83e-41cf-a447-25dded6c83cd" - }, - { - "parameters": { - "resource": "goalKeyResult", - "goal": "={{$node[\"ClickUp5\"].json[\"id\"]}}", - "name": "=testGoalResult{{Date.now()}}", - "type": "boolean", - "additionalFields": {} - }, - "name": "ClickUp10", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 730, - 510 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "disabled": true, - "id": "f5eca6a5-4ab4-462b-941f-5daafe6950b2" - }, - { - "parameters": { - "resource": "goalKeyResult", - "operation": "update", - "keyResult": "={{$node[\"ClickUp10\"].json[\"id\"]}}", - "updateFields": { - "name": "=Updated Key result{{Date.now()}}" - } - }, - "name": "ClickUp11", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1060, - 510 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "disabled": true, - "id": "6c66b452-6837-4db7-bc40-407dad872c28" - }, - { - "parameters": { - "resource": "goalKeyResult", - "operation": "delete", - "keyResult": "={{$node[\"ClickUp10\"].json[\"id\"]}}" - }, - "name": "ClickUp12", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1340, - 510 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "disabled": true, - "id": "27caaec0-7dd1-4af8-bc0a-61425c6e212f" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds", - "type": "n8n-nodes-base.function", - "position": [ - 590, - 220 - ], - "typeVersion": 1, - "id": "4617b9ef-c630-4c2f-9e38-bc8beb444063" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds1", - "type": "n8n-nodes-base.function", - "position": [ - 890, - 220 - ], - "typeVersion": 1, - "id": "bd5ba78b-2492-4f5e-8c96-4cf38d7de98f" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds2", - "type": "n8n-nodes-base.function", - "position": [ - 1180, - 220 - ], - "typeVersion": 1, - "id": "370f5b9c-91d0-4473-b6d2-75c3b5e22d4d" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds3", - "type": "n8n-nodes-base.function", - "position": [ - 1470, - 220 - ], - "typeVersion": 1, - "id": "10594b96-9cfd-47a8-8195-27c04b33295c" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds4", - "type": "n8n-nodes-base.function", - "position": [ - 580, - 400 - ], - "typeVersion": 1, - "id": "57f1facf-1e6b-45a2-9163-bcf5f35cd956" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds5", - "type": "n8n-nodes-base.function", - "position": [ - 890, - 510 - ], - "typeVersion": 1, - "id": "abad8d7c-4ace-444f-8dd1-3d6f1d1ddc7c" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds6", - "type": "n8n-nodes-base.function", - "position": [ - 1200, - 510 - ], - "typeVersion": 1, - "id": "f5b4c39b-e920-4abb-8b3b-3f2b1fe6725e" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds7", - "type": "n8n-nodes-base.function", - "position": [ - 1500, - 390 - ], - "typeVersion": 1, - "id": "56e8b458-e6e0-4926-a5a3-62945de38f3b" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds8", - "type": "n8n-nodes-base.function", - "position": [ - 1790, - 390 - ], - "typeVersion": 1, - "id": "e0177c72-6a50-499d-a271-4b1a1ea60bd3" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds9", - "type": "n8n-nodes-base.function", - "position": [ - 2090, - 390 - ], - "typeVersion": 1, - "id": "3127e2cf-5e3b-47d7-ad5f-79ad1a1ae8e7" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds10", - "type": "n8n-nodes-base.function", - "position": [ - 2380, - 390 - ], - "typeVersion": 1, - "id": "e6f31f9c-ef3a-49f8-a207-c16085088c71" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "ClickUp", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp": { - "main": [ - [ - { - "node": "Sleep 8 Seconds", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp1": { - "main": [ - [ - { - "node": "Sleep 8 Seconds1", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp2": { - "main": [ - [ - { - "node": "Sleep 8 Seconds2", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp3": { - "main": [ - [ - { - "node": "Sleep 8 Seconds3", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp5": { - "main": [ - [ - { - "node": "Sleep 8 Seconds4", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp6": { - "main": [ - [ - { - "node": "Sleep 8 Seconds8", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp7": { - "main": [ - [ - { - "node": "Sleep 8 Seconds9", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp8": { - "main": [ - [ - { - "node": "Sleep 8 Seconds10", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp10": { - "main": [ - [ - { - "node": "Sleep 8 Seconds5", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp11": { - "main": [ - [ - { - "node": "Sleep 8 Seconds6", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp12": { - "main": [ - [ - { - "node": "Sleep 8 Seconds7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds": { - "main": [ - [ - { - "node": "ClickUp1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds1": { - "main": [ - [ - { - "node": "ClickUp2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds2": { - "main": [ - [ - { - "node": "ClickUp3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds3": { - "main": [ - [ - { - "node": "ClickUp4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds4": { - "main": [ - [ - { - "node": "ClickUp10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds5": { - "main": [ - [ - { - "node": "ClickUp11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds6": { - "main": [ - [ - { - "node": "ClickUp12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds7": { - "main": [ - [ - { - "node": "ClickUp6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds8": { - "main": [ - [ - { - "node": "ClickUp7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds9": { - "main": [ - [ - { - "node": "ClickUp8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds10": { - "main": [ - [ - { - "node": "ClickUp9", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/27.json b/test-workflows/workflows/27.json deleted file mode 100644 index 07b4c751990..00000000000 --- a/test-workflows/workflows/27.json +++ /dev/null @@ -1,892 +0,0 @@ -{ - "createdAt": "2021-02-17T09:32:18.514Z", - "updatedAt": "2021-05-21T11:18:41.858Z", - "id": "27", - "name": "ClickUp:Task:create update member getAll get delete:List:create update customFields member getAll get delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 160, - 420 - ], - "id": "98e4c4b0-c5a3-465e-b621-662cd30ba485" - }, - { - "parameters": { - "resource": "folder", - "team": "4651110", - "space": "8716115", - "name": "=TestFolder{{Date.now()}}" - }, - "name": "ClickUp", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 310, - 310 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "5e4c4ffe-c474-4ee1-a0b7-ca7023c3308d" - }, - { - "parameters": { - "resource": "list", - "operation": "create", - "team": "4651110", - "space": "8716115", - "folder": "={{$json[\"id\"]}}", - "name": "=TestList{{Date.now()}}", - "additionalFields": {} - }, - "name": "ClickUp1", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 580, - 340 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "84597659-cbe6-468b-9229-7eb3e7fc4481" - }, - { - "parameters": { - "resource": "list", - "operation": "update", - "team": "4651110", - "space": "8716115", - "folder": "={{$node[\"ClickUp\"].json[\"id\"]}}", - "list": "={{$node[\"ClickUp1\"].json[\"id\"]}}", - "updateFields": { - "name": "=UpdateTestList{{Date.now()}}" - } - }, - "name": "ClickUp2", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 860, - 660 - ], - "retryOnFail": true, - "waitBetweenTries": 500, - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "37ede561-0fc6-4a18-8909-fd7815004a6c" - }, - { - "parameters": { - "resource": "list", - "team": "4651110", - "space": "8716115", - "folder": "={{$json[\"folder\"][\"id\"]}}", - "list": "={{$json[\"id\"]}}" - }, - "name": "ClickUp3", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1100, - 660 - ], - "alwaysOutputData": true, - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "7653a4d3-5046-4174-a2a2-651003ef4a11" - }, - { - "parameters": { - "resource": "list", - "operation": "member", - "id": "={{$node[\"ClickUp2\"].json[\"id\"]}}", - "returnAll": false, - "limit": 1 - }, - "name": "ClickUp4", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1400, - 660 - ], - "alwaysOutputData": true, - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "b4f551cc-edc7-4fb5-93d2-f2923b43e773" - }, - { - "parameters": { - "resource": "list", - "operation": "getAll", - "team": "4651110", - "space": "8716115", - "folder": "={{$node[\"ClickUp\"].json[\"id\"]}}", - "limit": 1, - "filters": {} - }, - "name": "ClickUp5", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1730, - 660 - ], - "alwaysOutputData": true, - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "2aaf834a-4856-4851-a723-30e92aef06da" - }, - { - "parameters": { - "resource": "list", - "operation": "get", - "team": "4651110", - "space": "8716115", - "folder": "={{$node[\"ClickUp\"].json[\"id\"]}}", - "list": "={{$node[\"ClickUp1\"].json[\"id\"]}}" - }, - "name": "ClickUp6", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 2050, - 660 - ], - "alwaysOutputData": true, - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "8f3cd1df-88e8-490e-956e-fa526e9efc06" - }, - { - "parameters": { - "resource": "list", - "operation": "delete", - "team": "4651110", - "space": "8716115", - "folder": "={{$node[\"ClickUp\"].json[\"id\"]}}", - "list": "={{$node[\"ClickUp1\"].json[\"id\"]}}" - }, - "name": "ClickUp7", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 2380, - 660 - ], - "alwaysOutputData": true, - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "6927c6fa-e5ff-4645-9a41-323ea0f4e0f3" - }, - { - "parameters": { - "resource": "folder", - "operation": "delete", - "team": "4651110", - "space": "8716115", - "folder": "={{$node[\"ClickUp\"].json[\"id\"]}}" - }, - "name": "ClickUp8", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 2670, - 660 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "30e40940-f242-4989-b107-6c570b7383b4" - }, - { - "parameters": { - "team": "4651110", - "space": "8716115", - "folder": "={{$json[\"folder\"][\"id\"]}}", - "list": "={{$json[\"id\"]}}", - "name": "=testTask{{Date.now()}}", - "additionalFields": {} - }, - "name": "ClickUp9", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 850, - 460 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "eaa614eb-b42a-4e87-8778-72f56553f57d" - }, - { - "parameters": { - "operation": "update", - "id": "={{$json[\"id\"]}}", - "updateFields": { - "name": "={{$json[\"name\"]}}Updated{{Date.now()}}" - } - }, - "name": "ClickUp10", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1100, - 460 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "5958b2ae-0eab-4b4d-ad0a-8eb925b6948c" - }, - { - "parameters": { - "operation": "member", - "id": "={{$json[\"id\"]}}", - "returnAll": false, - "limit": 1 - }, - "name": "ClickUp11", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1400, - 460 - ], - "alwaysOutputData": true, - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "9e30c9e7-cf31-4520-a08e-a90990cecd9e" - }, - { - "parameters": { - "operation": "getAll", - "team": "4651110", - "space": "8716115", - "folder": "={{$node[\"ClickUp\"].json[\"id\"]}}", - "list": "={{$node[\"ClickUp1\"].json[\"id\"]}}", - "returnAll": false, - "limit": 1, - "filters": {} - }, - "name": "ClickUp12", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1740, - 460 - ], - "alwaysOutputData": true, - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "75a7b4ee-7d37-4384-8d6b-1f0785d73575" - }, - { - "parameters": { - "operation": "get", - "id": "={{$node[\"ClickUp9\"].json[\"id\"]}}" - }, - "name": "ClickUp13", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 2050, - 460 - ], - "alwaysOutputData": true, - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "6f52a60f-2a79-449e-8a8e-0bd4005bdfbf" - }, - { - "parameters": { - "operation": "delete", - "id": "={{$node[\"ClickUp9\"].json[\"id\"]}}" - }, - "name": "ClickUp14", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 2380, - 460 - ], - "alwaysOutputData": true, - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "2a32012b-e6e5-4b42-8cfd-95318e12b81d" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds", - "type": "n8n-nodes-base.function", - "position": [ - 440, - 310 - ], - "typeVersion": 1, - "id": "b1a45946-ff9a-483d-99b3-42f6dc8d6471" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds1", - "type": "n8n-nodes-base.function", - "position": [ - 710, - 340 - ], - "typeVersion": 1, - "id": "f780613f-41a1-4c01-b7b5-0143f87c6f3a" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds2", - "type": "n8n-nodes-base.function", - "position": [ - 980, - 460 - ], - "typeVersion": 1, - "id": "51af53ab-592e-4417-9601-92c4714c1980" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds3", - "type": "n8n-nodes-base.function", - "position": [ - 1240, - 460 - ], - "typeVersion": 1, - "id": "d5bfeee6-1a7e-4353-a20f-4ed4b5cba689" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds4", - "type": "n8n-nodes-base.function", - "position": [ - 1570, - 460 - ], - "typeVersion": 1, - "id": "9ab01733-73f7-498e-a969-9515ad2b5e32" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds5", - "type": "n8n-nodes-base.function", - "position": [ - 1890, - 460 - ], - "typeVersion": 1, - "id": "aa025cf9-c5e5-4f3b-bb62-3197d973011c" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds6", - "type": "n8n-nodes-base.function", - "position": [ - 2210, - 460 - ], - "typeVersion": 1, - "id": "9d4d54c4-f642-4e4c-b717-10387a49989d" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds7", - "type": "n8n-nodes-base.function", - "position": [ - 980, - 660 - ], - "typeVersion": 1, - "id": "d724d742-235c-43df-ba81-619d2f840dd5" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds8", - "type": "n8n-nodes-base.function", - "position": [ - 1240, - 660 - ], - "typeVersion": 1, - "id": "d0b9f5e5-c66c-479b-bf37-c04b2643742f" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds9", - "type": "n8n-nodes-base.function", - "position": [ - 1550, - 660 - ], - "typeVersion": 1, - "id": "3950ee56-9ec9-4e78-ada3-857ab17aba27" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds10", - "type": "n8n-nodes-base.function", - "position": [ - 1890, - 660 - ], - "typeVersion": 1, - "id": "c3728ed7-486c-4a6d-865e-08a21426368c" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds11", - "type": "n8n-nodes-base.function", - "position": [ - 2210, - 660 - ], - "typeVersion": 1, - "id": "021dbc08-7d4e-4867-808c-58f6844c6634" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds12", - "type": "n8n-nodes-base.function", - "position": [ - 2530, - 660 - ], - "typeVersion": 1, - "id": "be53074b-6bfd-4fef-b359-034dd3be06f4" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds13", - "type": "n8n-nodes-base.function", - "position": [ - 700, - 660 - ], - "typeVersion": 1, - "id": "ce69e0ce-50d7-416f-9349-dc3b5e378fd3" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "ClickUp", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp": { - "main": [ - [ - { - "node": "Sleep 8 Seconds", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp1": { - "main": [ - [ - { - "node": "Sleep 8 Seconds1", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp2": { - "main": [ - [ - { - "node": "Sleep 8 Seconds7", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp3": { - "main": [ - [ - { - "node": "Sleep 8 Seconds8", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp4": { - "main": [ - [ - { - "node": "Sleep 8 Seconds9", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp5": { - "main": [ - [ - { - "node": "Sleep 8 Seconds10", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp6": { - "main": [ - [ - { - "node": "Sleep 8 Seconds11", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp7": { - "main": [ - [ - { - "node": "Sleep 8 Seconds12", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp9": { - "main": [ - [ - { - "node": "Sleep 8 Seconds2", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp10": { - "main": [ - [ - { - "node": "Sleep 8 Seconds3", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp11": { - "main": [ - [ - { - "node": "Sleep 8 Seconds4", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp12": { - "main": [ - [ - { - "node": "Sleep 8 Seconds5", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp13": { - "main": [ - [ - { - "node": "Sleep 8 Seconds6", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp14": { - "main": [ - [ - { - "node": "Sleep 8 Seconds13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds": { - "main": [ - [ - { - "node": "ClickUp1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds1": { - "main": [ - [ - { - "node": "ClickUp9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds2": { - "main": [ - [ - { - "node": "ClickUp10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds3": { - "main": [ - [ - { - "node": "ClickUp11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds4": { - "main": [ - [ - { - "node": "ClickUp12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds5": { - "main": [ - [ - { - "node": "ClickUp13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds6": { - "main": [ - [ - { - "node": "ClickUp14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds7": { - "main": [ - [ - { - "node": "ClickUp3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds8": { - "main": [ - [ - { - "node": "ClickUp4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds9": { - "main": [ - [ - { - "node": "ClickUp5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds10": { - "main": [ - [ - { - "node": "ClickUp6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds11": { - "main": [ - [ - { - "node": "ClickUp7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds12": { - "main": [ - [ - { - "node": "ClickUp8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds13": { - "main": [ - [ - { - "node": "ClickUp2", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/28.json b/test-workflows/workflows/28.json deleted file mode 100644 index cf7b9952284..00000000000 --- a/test-workflows/workflows/28.json +++ /dev/null @@ -1,619 +0,0 @@ -{ - "createdAt": "2021-02-17T10:31:28.487Z", - "updatedAt": "2021-05-21T11:19:34.732Z", - "id": "28", - "name": "ClickUp:CheckList:create update delete:CheckListItem:create update delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "2cd723b8-61fc-43c8-8f3f-1ea7352d0380" - }, - { - "parameters": { - "resource": "folder", - "team": "4651110", - "space": "8716115", - "name": "=test{{Date.now()}}" - }, - "name": "ClickUp", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 440, - 300 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "572a26d0-b9b3-4770-9117-8887e5b44fa6" - }, - { - "parameters": { - "resource": "list", - "operation": "create", - "team": "4651110", - "space": "8716115", - "folder": "={{$node[\"ClickUp\"].json[\"id\"]}}", - "name": "=testingList{{Date.now()}}", - "additionalFields": {} - }, - "name": "ClickUp1", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 720, - 350 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "9eeacdb8-f581-4e85-a1df-2a95c1addfc3" - }, - { - "parameters": { - "team": "4651110", - "space": "8716115", - "folder": "={{$json[\"folder\"][\"id\"]}}", - "list": "={{$json[\"id\"]}}", - "name": "=testingTask{{Date.now()}}", - "additionalFields": {} - }, - "name": "ClickUp2", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1000, - 400 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "268944a2-0717-4eae-89af-fc0b04410f28" - }, - { - "parameters": { - "resource": "checklist", - "task": "={{$json[\"id\"]}}", - "name": "=checkListTest{{Date.now()}}" - }, - "name": "ClickUp3", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1320, - 400 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "ba8f8804-c2c4-4b27-af32-f7cf1b927015" - }, - { - "parameters": { - "resource": "checklist", - "operation": "update", - "checklist": "={{$node[\"ClickUp3\"].json[\"id\"]}}", - "updateFields": { - "name": "=checkListUpdated{{Date.now()}}" - } - }, - "name": "ClickUp5", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 2620, - 400 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "f2497296-0a02-4776-8630-4b60ced78f68" - }, - { - "parameters": { - "resource": "checklist", - "operation": "delete", - "checklist": "={{$node[\"ClickUp3\"].json[\"id\"]}}" - }, - "name": "ClickUp6", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 2900, - 400 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "a683cc12-b055-4e54-9e3b-8de767cc74a6" - }, - { - "parameters": { - "resource": "list", - "operation": "delete", - "team": "4651110", - "space": "8716115", - "folder": "={{$node[\"ClickUp\"].json[\"id\"]}}", - "list": "={{$node[\"ClickUp1\"].json[\"id\"]}}" - }, - "name": "ClickUp4", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 3170, - 350 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "8dd64f31-29d1-4875-8d03-01d0af2c6794" - }, - { - "parameters": { - "resource": "folder", - "operation": "delete", - "team": "4651110", - "space": "8716115", - "folder": "={{$node[\"ClickUp\"].json[\"id\"]}}" - }, - "name": "ClickUp7", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 3450, - 290 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "36227deb-d4d2-418b-8343-e1377555e1f3" - }, - { - "parameters": { - "resource": "checklistItem", - "checklist": "={{$node[\"ClickUp3\"].json[\"id\"]}}", - "name": "=Item{{Date.now()}}", - "additionalFields": {} - }, - "name": "ClickUp8", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1620, - 500 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "f24f0655-5198-4eb7-a940-67ee22c2348a" - }, - { - "parameters": { - "resource": "checklistItem", - "operation": "update", - "checklist": "={{$node[\"ClickUp3\"].json[\"id\"]}}", - "checklistItem": "={{$node[\"ClickUp8\"].json[\"items\"][0][\"id\"]}}", - "updateFields": { - "name": "=UpdatedItem{{Date.now()}}" - } - }, - "name": "ClickUp9", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1940, - 500 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "3810e977-772d-4bce-b194-44e5bd8d011a" - }, - { - "parameters": { - "resource": "checklistItem", - "operation": "delete", - "checklist": "={{$node[\"ClickUp3\"].json[\"id\"]}}", - "checklistItem": "={{$node[\"ClickUp8\"].json[\"items\"][0][\"id\"]}}" - }, - "name": "ClickUp10", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 2280, - 500 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "27d6aa81-4506-4e1d-af70-7261b7451814" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds", - "type": "n8n-nodes-base.function", - "position": [ - 570, - 300 - ], - "typeVersion": 1, - "id": "27b3d626-18a4-41e8-a461-a528119ddabf" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds1", - "type": "n8n-nodes-base.function", - "position": [ - 860, - 400 - ], - "typeVersion": 1, - "id": "71a5ce83-df35-4968-8700-2d78833fc835" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds2", - "type": "n8n-nodes-base.function", - "position": [ - 1150, - 400 - ], - "typeVersion": 1, - "id": "a2a519d7-b353-4bc3-aefc-511ede861469" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds3", - "type": "n8n-nodes-base.function", - "position": [ - 1500, - 500 - ], - "typeVersion": 1, - "id": "34f7d210-cc78-4215-aaef-c9b789897a83" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds4", - "type": "n8n-nodes-base.function", - "position": [ - 1780, - 500 - ], - "typeVersion": 1, - "id": "d6795c16-86a6-4928-99e7-416cd41d1d35" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds5", - "type": "n8n-nodes-base.function", - "position": [ - 2120, - 500 - ], - "typeVersion": 1, - "id": "edd68a24-372b-47bd-b8a5-ed26c5b16289" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds6", - "type": "n8n-nodes-base.function", - "position": [ - 2500, - 400 - ], - "typeVersion": 1, - "id": "36eec449-eacd-490f-b61e-58102b5964e6" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds8", - "type": "n8n-nodes-base.function", - "position": [ - 3050, - 350 - ], - "typeVersion": 1, - "id": "4f7c7d5d-b24a-4651-84e0-b3de2908c9ec" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds9", - "type": "n8n-nodes-base.function", - "position": [ - 3330, - 290 - ], - "typeVersion": 1, - "id": "fdd473de-9eb4-4193-886f-6b2d401ec539" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "ClickUp", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp": { - "main": [ - [ - { - "node": "Sleep 8 Seconds", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp1": { - "main": [ - [ - { - "node": "Sleep 8 Seconds1", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp2": { - "main": [ - [ - { - "node": "Sleep 8 Seconds2", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp3": { - "main": [ - [ - { - "node": "Sleep 8 Seconds3", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp5": { - "main": [ - [ - { - "node": "ClickUp6", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp6": { - "main": [ - [ - { - "node": "Sleep 8 Seconds8", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp4": { - "main": [ - [ - { - "node": "Sleep 8 Seconds9", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp8": { - "main": [ - [ - { - "node": "Sleep 8 Seconds4", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp9": { - "main": [ - [ - { - "node": "Sleep 8 Seconds5", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp10": { - "main": [ - [ - { - "node": "Sleep 8 Seconds6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds": { - "main": [ - [ - { - "node": "ClickUp1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds1": { - "main": [ - [ - { - "node": "ClickUp2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds2": { - "main": [ - [ - { - "node": "ClickUp3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds3": { - "main": [ - [ - { - "node": "ClickUp8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds4": { - "main": [ - [ - { - "node": "ClickUp9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds5": { - "main": [ - [ - { - "node": "ClickUp10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds6": { - "main": [ - [ - { - "node": "ClickUp5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds8": { - "main": [ - [ - { - "node": "ClickUp4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds9": { - "main": [ - [ - { - "node": "ClickUp7", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/29.json b/test-workflows/workflows/29.json deleted file mode 100644 index 68050c43048..00000000000 --- a/test-workflows/workflows/29.json +++ /dev/null @@ -1,470 +0,0 @@ -{ - "createdAt": "2021-02-17T11:06:49.772Z", - "updatedAt": "2021-05-21T11:22:04.303Z", - "id": "29", - "name": "ClickUp:Comment:create update getAll delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "31a422ab-f12f-4746-ae7a-bf991eb8cfb2" - }, - { - "parameters": { - "resource": "folder", - "team": "4651110", - "space": "8716115", - "name": "=Test2{{Date.now()}}" - }, - "name": "ClickUp", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 400, - 300 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "64ab5323-4dc3-4f28-bdb8-da24f78d8017" - }, - { - "parameters": { - "resource": "list", - "operation": "create", - "team": "4651110", - "space": "8716115", - "folder": "={{$node[\"ClickUp\"].json[\"id\"]}}", - "name": "=testingList2{{Date.now()}}", - "additionalFields": {} - }, - "name": "ClickUp1", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 680, - 350 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "f6c32a1e-8187-4e08-8283-a51ec248d1e0" - }, - { - "parameters": { - "resource": "comment", - "commentOn": "list", - "id": "={{$node[\"ClickUp1\"].json[\"id\"]}}", - "commentText": "=CommentOnList2{{Date.now()}}", - "additionalFields": {} - }, - "name": "ClickUp2", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 960, - 420 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "d27edbe8-e7d6-41bd-b9d0-3baaaeb62946" - }, - { - "parameters": { - "resource": "comment", - "operation": "update", - "comment": "={{$node[\"ClickUp2\"].json[\"id\"]}}", - "updateFields": { - "commentText": "=commentUpdated{{Date.now()}}" - } - }, - "name": "ClickUp3", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1230, - 420 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "11679d32-a338-4ace-993e-ade4de313f2d" - }, - { - "parameters": { - "resource": "comment", - "operation": "getAll", - "commentsOn": "list", - "id": "={{$node[\"ClickUp1\"].json[\"id\"]}}", - "limit": 1 - }, - "name": "ClickUp4", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1520, - 420 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "0b4921e6-d3a0-4784-b0ad-bec284c82f0d" - }, - { - "parameters": { - "resource": "comment", - "operation": "delete", - "comment": "={{$node[\"ClickUp4\"].json[\"id\"]}}" - }, - "name": "ClickUp5", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1830, - 420 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "b714cd49-ad36-44d5-8b3b-366fc2dfc678" - }, - { - "parameters": { - "resource": "folder", - "operation": "delete", - "team": "4651110", - "space": "8716115", - "folder": "={{$node[\"ClickUp\"].json[\"id\"]}}" - }, - "name": "ClickUp7", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 2400, - 290 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "2db1799e-fc8d-4025-b620-012fca33414a" - }, - { - "parameters": { - "resource": "list", - "operation": "delete", - "team": "4651110", - "space": "8716115", - "folder": "={{$node[\"ClickUp\"].json[\"id\"]}}", - "list": "={{$node[\"ClickUp1\"].json[\"id\"]}}" - }, - "name": "ClickUp6", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 2130, - 350 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "23a70dfb-25da-4931-80b0-b5dca7d6554d" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds", - "type": "n8n-nodes-base.function", - "position": [ - 550, - 300 - ], - "typeVersion": 1, - "id": "01532975-dbf4-4757-a52b-255765b578bd" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds1", - "type": "n8n-nodes-base.function", - "position": [ - 810, - 400 - ], - "typeVersion": 1, - "id": "50e69461-441f-4e30-be11-e2a426d4ec05" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds2", - "type": "n8n-nodes-base.function", - "position": [ - 1100, - 420 - ], - "typeVersion": 1, - "id": "89191a40-0e4b-482b-a346-c7e04d9dd93f" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds3", - "type": "n8n-nodes-base.function", - "position": [ - 1370, - 420 - ], - "typeVersion": 1, - "id": "fd4dddb0-7f59-42bb-aac0-07c76dea598e" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds4", - "type": "n8n-nodes-base.function", - "position": [ - 1670, - 420 - ], - "typeVersion": 1, - "id": "3179d398-f06c-4902-82ac-3689d262297a" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds5", - "type": "n8n-nodes-base.function", - "position": [ - 2000, - 350 - ], - "typeVersion": 1, - "id": "bfa972c2-e9ac-4500-8ffb-1ede8db29900" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds6", - "type": "n8n-nodes-base.function", - "position": [ - 2270, - 290 - ], - "typeVersion": 1, - "id": "2a6b234c-2bcf-4295-b092-2d7ba6ab7dd1" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "ClickUp", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp": { - "main": [ - [ - { - "node": "Sleep 8 Seconds", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp1": { - "main": [ - [ - { - "node": "Sleep 8 Seconds1", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp2": { - "main": [ - [ - { - "node": "Sleep 8 Seconds2", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp3": { - "main": [ - [ - { - "node": "Sleep 8 Seconds3", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp4": { - "main": [ - [ - { - "node": "Sleep 8 Seconds4", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp5": { - "main": [ - [ - { - "node": "Sleep 8 Seconds5", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp6": { - "main": [ - [ - { - "node": "Sleep 8 Seconds6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds": { - "main": [ - [ - { - "node": "ClickUp1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds1": { - "main": [ - [ - { - "node": "ClickUp2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds2": { - "main": [ - [ - { - "node": "ClickUp3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds3": { - "main": [ - [ - { - "node": "ClickUp4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds4": { - "main": [ - [ - { - "node": "ClickUp5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds5": { - "main": [ - [ - { - "node": "ClickUp6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds6": { - "main": [ - [ - { - "node": "ClickUp7", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/30.json b/test-workflows/workflows/30.json deleted file mode 100644 index 22e5825e1d9..00000000000 --- a/test-workflows/workflows/30.json +++ /dev/null @@ -1,471 +0,0 @@ -{ - "createdAt": "2021-02-17T11:28:33.699Z", - "updatedAt": "2021-05-21T11:22:40.069Z", - "id": "30", - "name": "ClickUp:TaskDependency:create delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "c8338da0-7dbd-4b7b-ad70-c682f23f274b" - }, - { - "parameters": { - "resource": "folder", - "team": "4651110", - "space": "8716115", - "name": "=TestFolder3{{Date.now()}}" - }, - "name": "ClickUp", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 400, - 300 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "49bfdc4c-78c5-4fa0-ad06-749599d37da9" - }, - { - "parameters": { - "resource": "list", - "operation": "create", - "team": "4651110", - "space": "8716115", - "folder": "={{$node[\"ClickUp\"].json[\"id\"]}}", - "name": "=TestList{{Date.now()}}", - "additionalFields": {} - }, - "name": "ClickUp1", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 700, - 350 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "22b07b3b-3d70-4812-8113-ca3414a823fe" - }, - { - "parameters": { - "team": "4651110", - "space": "8716115", - "folder": "={{$node[\"ClickUp\"].json[\"id\"]}}", - "list": "={{$node[\"ClickUp1\"].json[\"id\"]}}", - "name": "=testTask{{Date.now()}}", - "additionalFields": {} - }, - "name": "ClickUp9", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 990, - 400 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "f1468cfb-3736-4be0-b195-1f0c5f755890" - }, - { - "parameters": { - "resource": "taskDependency", - "task": "={{$node[\"ClickUp9\"].json[\"id\"]}}", - "dependsOnTask": "={{$node[\"ClickUp11\"].json[\"id\"]}}" - }, - "name": "ClickUp10", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1530, - 500 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "51f2c6b6-b7a4-41fc-b2e0-ce6185f735a3" - }, - { - "parameters": { - "team": "4651110", - "space": "8716115", - "folder": "={{$node[\"ClickUp\"].json[\"id\"]}}", - "list": "={{$node[\"ClickUp1\"].json[\"id\"]}}", - "name": "=testTask2{{Date.now()}}", - "additionalFields": {} - }, - "name": "ClickUp11", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1250, - 400 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "befbbbf0-82d4-41f2-a557-f58d40499944" - }, - { - "parameters": { - "resource": "taskDependency", - "operation": "delete", - "task": "={{$node[\"ClickUp9\"].json[\"id\"]}}", - "dependsOnTask": "={{$node[\"ClickUp11\"].json[\"id\"]}}" - }, - "name": "ClickUp12", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1810, - 500 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "86f22c06-fcb6-40eb-a5f5-9e2e70bd768a" - }, - { - "parameters": { - "resource": "list", - "operation": "delete", - "team": "4651110", - "space": "8716115", - "folder": "={{$node[\"ClickUp\"].json[\"id\"]}}", - "list": "={{$node[\"ClickUp1\"].json[\"id\"]}}" - }, - "name": "ClickUp7", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 2080, - 350 - ], - "alwaysOutputData": true, - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "e81f92bb-d7a6-49d5-8627-684107126a98" - }, - { - "parameters": { - "resource": "folder", - "operation": "delete", - "team": "4651110", - "space": "8716115", - "folder": "={{$node[\"ClickUp\"].json[\"id\"]}}" - }, - "name": "ClickUp8", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 2370, - 300 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "a5a69ffb-9f8d-40c6-aa84-a19bc6701824" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds", - "type": "n8n-nodes-base.function", - "position": [ - 550, - 300 - ], - "typeVersion": 1, - "id": "7d5fb22c-f448-40ff-981c-ea5d4a9e191c" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds1", - "type": "n8n-nodes-base.function", - "position": [ - 850, - 400 - ], - "typeVersion": 1, - "id": "19cce08a-a818-4749-9b8f-95aa6d36a847" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds2", - "type": "n8n-nodes-base.function", - "position": [ - 1120, - 400 - ], - "typeVersion": 1, - "id": "1a67dc29-5e28-4c23-921b-d8198ab9c4ff" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds3", - "type": "n8n-nodes-base.function", - "position": [ - 1390, - 500 - ], - "typeVersion": 1, - "id": "d80fb697-e532-4fca-a70a-7ba202475d18" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds4", - "type": "n8n-nodes-base.function", - "position": [ - 1670, - 500 - ], - "typeVersion": 1, - "id": "43edd50f-e0fd-433f-ba37-0b5b3c2534a4" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds5", - "type": "n8n-nodes-base.function", - "position": [ - 1950, - 350 - ], - "typeVersion": 1, - "id": "7507f4e6-4a8b-4080-ae36-df0df0d2243a" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds6", - "type": "n8n-nodes-base.function", - "position": [ - 2240, - 300 - ], - "typeVersion": 1, - "id": "a08f6787-67f4-4a5e-92a8-4c0479911f6e" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "ClickUp", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp": { - "main": [ - [ - { - "node": "Sleep 8 Seconds", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp1": { - "main": [ - [ - { - "node": "Sleep 8 Seconds1", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp9": { - "main": [ - [ - { - "node": "Sleep 8 Seconds2", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp10": { - "main": [ - [ - { - "node": "Sleep 8 Seconds4", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp11": { - "main": [ - [ - { - "node": "Sleep 8 Seconds3", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp12": { - "main": [ - [ - { - "node": "Sleep 8 Seconds5", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp7": { - "main": [ - [ - { - "node": "Sleep 8 Seconds6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds": { - "main": [ - [ - { - "node": "ClickUp1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds1": { - "main": [ - [ - { - "node": "ClickUp9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds2": { - "main": [ - [ - { - "node": "ClickUp11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds3": { - "main": [ - [ - { - "node": "ClickUp10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds4": { - "main": [ - [ - { - "node": "ClickUp12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds5": { - "main": [ - [ - { - "node": "ClickUp7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds6": { - "main": [ - [ - { - "node": "ClickUp8", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/31.json b/test-workflows/workflows/31.json deleted file mode 100644 index cd1d6952b37..00000000000 --- a/test-workflows/workflows/31.json +++ /dev/null @@ -1,831 +0,0 @@ -{ - "createdAt": "2021-02-17T11:37:42.892Z", - "updatedAt": "2021-05-21T11:23:28.228Z", - "id": "31", - "name": "ClickUp:TimeEntry:create update start stop getall get delete:TimeEntryTag: add getAll remove", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 180, - 300 - ], - "id": "57e2a34f-32b5-40cf-af01-bd1673d56885" - }, - { - "parameters": { - "resource": "folder", - "team": "4651110", - "space": "8716115", - "name": "=TestFolder3{{Date.now()}}" - }, - "name": "ClickUp", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 340, - 300 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "e54b56d0-3678-4f29-ba16-124c8bab978e" - }, - { - "parameters": { - "resource": "list", - "operation": "create", - "team": "4651110", - "space": "8716115", - "folder": "={{$node[\"ClickUp\"].json[\"id\"]}}", - "name": "=TestList{{Date.now()}}", - "additionalFields": {} - }, - "name": "ClickUp1", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 620, - 350 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "7c895a57-ff70-4d75-bba0-2e909803ce14" - }, - { - "parameters": { - "team": "4651110", - "space": "8716115", - "folder": "={{$node[\"ClickUp\"].json[\"id\"]}}", - "list": "={{$node[\"ClickUp1\"].json[\"id\"]}}", - "name": "={{Date.now()}}task", - "additionalFields": {} - }, - "name": "ClickUp9", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 880, - 400 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "941edfd0-d249-4679-bfb9-7b3de98942cf" - }, - { - "parameters": { - "resource": "timeEntry", - "team": "4651110", - "space": "8716115", - "folder": "={{$node[\"ClickUp\"].json[\"id\"]}}", - "list": "={{$node[\"ClickUp1\"].json[\"id\"]}}", - "start": "={{Date.now()}}", - "duration": 2, - "task": "={{$node[\"ClickUp9\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "ClickUp10", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1230, - 490 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "49d9fddf-92bb-41c2-83be-4fc1307fc00b" - }, - { - "parameters": { - "resource": "timeEntryTag", - "team": "4651110", - "timeEntryIds": "={{$node[\"ClickUp10\"].json[\"id\"]}}", - "tagsUi": { - "tagsValues": [ - { - "name": "n8n", - "tag_bg": "#FF3503", - "tag_fg": "#FFFFFF" - } - ] - } - }, - "name": "ClickUp11", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1530, - 570 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "a9c8efeb-cdfb-4759-84bd-5073734056c8" - }, - { - "parameters": { - "resource": "timeEntryTag", - "operation": "getAll", - "team": "4651110" - }, - "name": "ClickUp12", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 1900, - 570 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "c3c98b7f-7587-4d12-9e2a-5608b35c959c" - }, - { - "parameters": { - "resource": "timeEntryTag", - "operation": "remove", - "team": "4651110", - "timeEntryIds": "={{$node[\"ClickUp10\"].json[\"id\"]}}", - "tagNames": [ - "{\"name\":\"n8n\",\"creator\":8779387,\"tag_bg\":\"#FF3503\",\"tag_fg\":\"#FFFFFF\"}" - ] - }, - "name": "ClickUp13", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 2210, - 570 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "40847957-d93e-4f0c-954f-ae8460fe35c0" - }, - { - "parameters": { - "resource": "timeEntry", - "operation": "update", - "team": "4651110", - "space": "8716115", - "folder": "={{$node[\"ClickUp\"].json[\"id\"]}}", - "list": "={{$node[\"ClickUp1\"].json[\"id\"]}}", - "timeEntry": "={{$node[\"ClickUp10\"].json[\"id\"]}}", - "updateFields": { - "duration": 1 - } - }, - "name": "ClickUp14", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 2490, - 480 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "e52fb5d1-f1bf-4a1d-a8f3-d37a17fc601b" - }, - { - "parameters": { - "resource": "timeEntry", - "operation": "start", - "team": "4651110", - "task": "={{$node[\"ClickUp9\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "ClickUp15", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 2770, - 480 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "55ca7b79-42a1-4029-bf83-3278d6186820" - }, - { - "parameters": { - "resource": "timeEntry", - "operation": "stop", - "team": "4651110" - }, - "name": "ClickUp16", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 3060, - 480 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "660f4dc1-4264-4633-b92a-58ed05f70724" - }, - { - "parameters": { - "resource": "timeEntry", - "operation": "getAll", - "team": "4651110", - "limit": 1, - "filters": {} - }, - "name": "ClickUp17", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 3330, - 480 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "0e143171-62db-4f3e-8d53-fb25c89b9d21" - }, - { - "parameters": { - "resource": "timeEntry", - "operation": "get", - "team": "4651110", - "timeEntry": "={{$node[\"ClickUp10\"].json[\"id\"]}}" - }, - "name": "ClickUp18", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 3600, - 480 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "58c0bb4e-2325-49c2-b121-c3c5e3124276" - }, - { - "parameters": { - "resource": "timeEntry", - "operation": "delete", - "team": "4651110", - "timeEntry": "={{$node[\"ClickUp10\"].json[\"id\"]}}" - }, - "name": "ClickUp19", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 3870, - 480 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "b2c2ab25-d4e3-463b-bb71-8cf8c127fb0c" - }, - { - "parameters": { - "resource": "folder", - "operation": "delete", - "team": "4651110", - "space": "8716115", - "folder": "={{$node[\"ClickUp\"].json[\"id\"]}}" - }, - "name": "ClickUp2", - "type": "n8n-nodes-base.clickUp", - "typeVersion": 1, - "position": [ - 4170, - 330 - ], - "credentials": { - "clickUpApi": { - "id": "13", - "name": "clickup cred" - } - }, - "id": "ae521f8e-61da-427c-9078-bb0d34372a3a" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds", - "type": "n8n-nodes-base.function", - "position": [ - 470, - 300 - ], - "typeVersion": 1, - "id": "cd778215-46cb-4040-b5a8-4eacd1713e50" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds1", - "type": "n8n-nodes-base.function", - "position": [ - 750, - 350 - ], - "typeVersion": 1, - "id": "ac37f999-d0e8-463c-9088-9e530c89c251" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds2", - "type": "n8n-nodes-base.function", - "position": [ - 1020, - 400 - ], - "typeVersion": 1, - "id": "8a0375d2-4cf9-47f7-a096-cfa848791175" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds3", - "type": "n8n-nodes-base.function", - "position": [ - 1370, - 500 - ], - "typeVersion": 1, - "id": "442ac115-e73d-48c8-9db4-152a2593067d" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds4", - "type": "n8n-nodes-base.function", - "position": [ - 1710, - 570 - ], - "typeVersion": 1, - "id": "e5d50f49-fbe6-43bd-b490-089d24588c8d" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds5", - "type": "n8n-nodes-base.function", - "position": [ - 2050, - 570 - ], - "typeVersion": 1, - "id": "3d46fa02-ec36-4965-87b9-a9454fce76e3" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds6", - "type": "n8n-nodes-base.function", - "position": [ - 2360, - 480 - ], - "typeVersion": 1, - "id": "3275a0ae-e00f-4d98-8b16-79946d1e87f3" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds7", - "type": "n8n-nodes-base.function", - "position": [ - 2630, - 480 - ], - "typeVersion": 1, - "id": "a1722ed7-f526-483d-b14c-9658c3823e09" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds8", - "type": "n8n-nodes-base.function", - "position": [ - 2910, - 480 - ], - "typeVersion": 1, - "id": "0b493dec-41b3-418e-a163-5e76ee274146" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds9", - "type": "n8n-nodes-base.function", - "position": [ - 3200, - 480 - ], - "typeVersion": 1, - "id": "bf973582-986d-4962-a3bb-d415384ad5e5" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds10", - "type": "n8n-nodes-base.function", - "position": [ - 3470, - 480 - ], - "typeVersion": 1, - "id": "e6a2b2ac-c798-4ad0-9974-580c871fca4a" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds11", - "type": "n8n-nodes-base.function", - "position": [ - 3730, - 480 - ], - "typeVersion": 1, - "id": "1595390e-6e3f-46d7-8c02-26c52e3a62dd" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 8 Seconds12", - "type": "n8n-nodes-base.function", - "position": [ - 4050, - 330 - ], - "typeVersion": 1, - "id": "73d2d5c3-8485-4828-b2d6-e923259a9235" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "ClickUp", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp": { - "main": [ - [ - { - "node": "Sleep 8 Seconds", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp1": { - "main": [ - [ - { - "node": "Sleep 8 Seconds1", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp9": { - "main": [ - [ - { - "node": "Sleep 8 Seconds2", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp10": { - "main": [ - [ - { - "node": "Sleep 8 Seconds3", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp11": { - "main": [ - [ - { - "node": "Sleep 8 Seconds4", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp12": { - "main": [ - [ - { - "node": "Sleep 8 Seconds5", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp13": { - "main": [ - [ - { - "node": "Sleep 8 Seconds6", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp14": { - "main": [ - [ - { - "node": "Sleep 8 Seconds7", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp15": { - "main": [ - [ - { - "node": "Sleep 8 Seconds8", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp16": { - "main": [ - [ - { - "node": "Sleep 8 Seconds9", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp17": { - "main": [ - [ - { - "node": "Sleep 8 Seconds10", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp18": { - "main": [ - [ - { - "node": "Sleep 8 Seconds11", - "type": "main", - "index": 0 - } - ] - ] - }, - "ClickUp19": { - "main": [ - [ - { - "node": "Sleep 8 Seconds12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds": { - "main": [ - [ - { - "node": "ClickUp1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds1": { - "main": [ - [ - { - "node": "ClickUp9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds2": { - "main": [ - [ - { - "node": "ClickUp10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds3": { - "main": [ - [ - { - "node": "ClickUp11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds4": { - "main": [ - [ - { - "node": "ClickUp12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds5": { - "main": [ - [ - { - "node": "ClickUp13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds6": { - "main": [ - [ - { - "node": "ClickUp14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds7": { - "main": [ - [ - { - "node": "ClickUp15", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds8": { - "main": [ - [ - { - "node": "ClickUp16", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds9": { - "main": [ - [ - { - "node": "ClickUp17", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds10": { - "main": [ - [ - { - "node": "ClickUp18", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds11": { - "main": [ - [ - { - "node": "ClickUp19", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 8 Seconds12": { - "main": [ - [ - { - "node": "ClickUp2", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/32.json b/test-workflows/workflows/32.json deleted file mode 100644 index 848971a2241..00000000000 --- a/test-workflows/workflows/32.json +++ /dev/null @@ -1,158 +0,0 @@ -{ - "createdAt": "2021-02-17T12:54:18.856Z", - "updatedAt": "2021-02-24T12:51:15.701Z", - "id": "32", - "name": "Drif:Contact:create update get delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "a8373e79-8b14-48ae-9baf-79db4bf1a92a" - }, - { - "parameters": { - "email": "=fake{{Date.now()}}@gmail.com", - "additionalFields": { - "name": "=Test{{Date.now()}}" - } - }, - "name": "Drift ", - "type": "n8n-nodes-base.drift", - "typeVersion": 1, - "position": [ - 500, - 300 - ], - "credentials": { - "driftApi": { - "id": "15", - "name": "Drift API credentials" - } - }, - "id": "8cd5c238-7feb-4b60-985a-d99db59390bc" - }, - { - "parameters": { - "operation": "update", - "contactId": "={{$node[\"Drift \"].json[\"id\"]}}", - "updateFields": { - "name": "=node qtest{{Date.now()}}" - } - }, - "name": "Drift 1", - "type": "n8n-nodes-base.drift", - "typeVersion": 1, - "position": [ - 640, - 300 - ], - "credentials": { - "driftApi": { - "id": "15", - "name": "Drift API credentials" - } - }, - "id": "480edf8d-c1f6-4196-a659-f7b54c33e3db" - }, - { - "parameters": { - "operation": "get", - "contactId": "={{$node[\"Drift \"].json[\"id\"]}}" - }, - "name": "Drift 2", - "type": "n8n-nodes-base.drift", - "typeVersion": 1, - "position": [ - 790, - 300 - ], - "credentials": { - "driftApi": { - "id": "15", - "name": "Drift API credentials" - } - }, - "id": "d495bd88-0ed2-4016-acea-78deee947cc7" - }, - { - "parameters": { - "operation": "delete", - "contactId": "={{$node[\"Drift \"].json[\"id\"]}}" - }, - "name": "Drift 3", - "type": "n8n-nodes-base.drift", - "typeVersion": 1, - "position": [ - 940, - 300 - ], - "credentials": { - "driftApi": { - "id": "15", - "name": "Drift API credentials" - } - }, - "id": "2dce7e0c-3abd-45c8-a3d2-61edecd7a2bf" - } - ], - "connections": { - "Drift ": { - "main": [ - [ - { - "node": "Drift 1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Drift 1": { - "main": [ - [ - { - "node": "Drift 2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Drift 2": { - "main": [ - [ - { - "node": "Drift 3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Drift ", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/33.json b/test-workflows/workflows/33.json deleted file mode 100644 index 4b874560c59..00000000000 --- a/test-workflows/workflows/33.json +++ /dev/null @@ -1,190 +0,0 @@ -{ - "createdAt": "2021-02-17T13:25:16.665Z", - "updatedAt": "2021-02-17T13:25:16.665Z", - "id": "33", - "name": "Zoom:Meeting:create update getAll get delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "e177badc-c473-46ec-a4f7-6abe3cf18850" - }, - { - "parameters": { - "topic": "test", - "additionalFields": {} - }, - "name": "Zoom", - "type": "n8n-nodes-base.zoom", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "zoomApi": { - "id": "16", - "name": "Zoom JWT token" - } - }, - "id": "52fd7dd2-0260-4e24-b2e7-2fb0e6e96757" - }, - { - "parameters": { - "operation": "update", - "meetingId": "={{$node[\"Zoom\"].json[\"id\"]}}", - "updateFields": { - "duration": 30 - } - }, - "name": "Zoom1", - "type": "n8n-nodes-base.zoom", - "typeVersion": 1, - "position": [ - 600, - 300 - ], - "credentials": { - "zoomApi": { - "id": "16", - "name": "Zoom JWT token" - } - }, - "id": "c2ccd698-377b-478e-ab75-dff35325ac93" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "Zoom2", - "type": "n8n-nodes-base.zoom", - "typeVersion": 1, - "position": [ - 750, - 300 - ], - "credentials": { - "zoomApi": { - "id": "16", - "name": "Zoom JWT token" - } - }, - "id": "5ca84447-9b5e-4679-b061-8b457ed1423a" - }, - { - "parameters": { - "operation": "get", - "meetingId": "={{$node[\"Zoom\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Zoom3", - "type": "n8n-nodes-base.zoom", - "typeVersion": 1, - "position": [ - 900, - 300 - ], - "credentials": { - "zoomApi": { - "id": "16", - "name": "Zoom JWT token" - } - }, - "id": "bc1c531c-ee12-4f4e-bbde-c2a6a950ab3e" - }, - { - "parameters": { - "operation": "delete", - "meetingId": "={{$node[\"Zoom\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Zoom4", - "type": "n8n-nodes-base.zoom", - "typeVersion": 1, - "position": [ - 1050, - 300 - ], - "credentials": { - "zoomApi": { - "id": "16", - "name": "Zoom JWT token" - } - }, - "id": "05b90102-2196-41d0-ba64-42e8c45d2258" - } - ], - "connections": { - "Zoom": { - "main": [ - [ - { - "node": "Zoom1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Zoom1": { - "main": [ - [ - { - "node": "Zoom2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Zoom2": { - "main": [ - [ - { - "node": "Zoom3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Zoom3": { - "main": [ - [ - { - "node": "Zoom4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Zoom", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/34.json b/test-workflows/workflows/34.json deleted file mode 100644 index 068d44f4b0f..00000000000 --- a/test-workflows/workflows/34.json +++ /dev/null @@ -1,253 +0,0 @@ -{ - "createdAt": "2021-02-17T14:32:51.109Z", - "updatedAt": "2021-06-02T11:29:13.526Z", - "id": "34", - "name": "Strava:Activity:create get update getAll getComments getKudos getLaps", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "afcd2eb5-ee88-4fd8-ad2a-122f2ee05b6d" - }, - { - "parameters": { - "name": "TestActivity", - "type": "Run", - "startDate": "={{Date.now()}}", - "elapsedTime": 5, - "additionalFields": {} - }, - "name": "Strava", - "type": "n8n-nodes-base.strava", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "stravaOAuth2Api": { - "id": "17", - "name": "Strava credentials" - } - }, - "id": "3a0f90c9-47d1-4e97-b2ef-d04ffc09c7ab" - }, - { - "parameters": { - "operation": "update", - "activityId": "={{$node[\"Strava\"].json[\"id\"]}}", - "updateFields": { - "type": "Ride" - } - }, - "name": "Strava1", - "type": "n8n-nodes-base.strava", - "typeVersion": 1, - "position": [ - 750, - 300 - ], - "credentials": { - "stravaOAuth2Api": { - "id": "17", - "name": "Strava credentials" - } - }, - "id": "b7731003-b34b-4cc9-b7cb-d6e1391268f8" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1 - }, - "name": "Strava2", - "type": "n8n-nodes-base.strava", - "typeVersion": 1, - "position": [ - 900, - 300 - ], - "credentials": { - "stravaOAuth2Api": { - "id": "17", - "name": "Strava credentials" - } - }, - "notes": "IGNORED_PROPERTIES=device_watts", - "id": "7619daca-da98-4c79-9575-237c5ac602d2" - }, - { - "parameters": { - "operation": "get", - "activityId": "={{$node[\"Strava\"].json[\"id\"]}}" - }, - "name": "Strava3", - "type": "n8n-nodes-base.strava", - "typeVersion": 1, - "position": [ - 600, - 300 - ], - "credentials": { - "stravaOAuth2Api": { - "id": "17", - "name": "Strava credentials" - } - }, - "id": "a2d40830-1aa4-4ffc-bc4c-de84003490ed" - }, - { - "parameters": { - "operation": "getComments", - "activityId": "={{$node[\"Strava\"].json[\"id\"]}}", - "limit": 1 - }, - "name": "Strava4", - "type": "n8n-nodes-base.strava", - "typeVersion": 1, - "position": [ - 600, - 460 - ], - "alwaysOutputData": true, - "credentials": { - "stravaOAuth2Api": { - "id": "17", - "name": "Strava credentials" - } - }, - "id": "1d83183d-5238-47eb-b89d-4283af3953a8" - }, - { - "parameters": { - "operation": "getKudos", - "activityId": "={{$node[\"Strava\"].json[\"id\"]}}", - "limit": 1 - }, - "name": "Strava5", - "type": "n8n-nodes-base.strava", - "typeVersion": 1, - "position": [ - 750, - 460 - ], - "alwaysOutputData": true, - "credentials": { - "stravaOAuth2Api": { - "id": "17", - "name": "Strava credentials" - } - }, - "id": "cdbc41db-3938-46a2-b167-c714aaa8dd5b" - }, - { - "parameters": { - "operation": "getLaps", - "activityId": "={{$node[\"Strava\"].json[\"id\"]}}", - "limit": 1 - }, - "name": "Strava6", - "type": "n8n-nodes-base.strava", - "typeVersion": 1, - "position": [ - 900, - 460 - ], - "alwaysOutputData": true, - "credentials": { - "stravaOAuth2Api": { - "id": "17", - "name": "Strava credentials" - } - }, - "id": "86be5364-f022-43cb-b567-2b983f422ce7" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Strava", - "type": "main", - "index": 0 - } - ] - ] - }, - "Strava": { - "main": [ - [ - { - "node": "Strava4", - "type": "main", - "index": 0 - }, - { - "node": "Strava3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Strava1": { - "main": [ - [ - { - "node": "Strava2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Strava5": { - "main": [ - [ - { - "node": "Strava6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Strava4": { - "main": [ - [ - { - "node": "Strava5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Strava3": { - "main": [ - [ - { - "node": "Strava1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/35.json b/test-workflows/workflows/35.json deleted file mode 100644 index dda6676f8cd..00000000000 --- a/test-workflows/workflows/35.json +++ /dev/null @@ -1,422 +0,0 @@ -{ - "createdAt": "2021-02-17T16:01:29.116Z", - "updatedAt": "2021-02-17T18:38:58.265Z", - "id": "35", - "name": "Slack:User:getPresence info:UserProfile:get update:Message:post getPermalink update postEphermera l delete:Reaction:add get remove", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 220, - 550 - ], - "id": "994d0931-d8cf-46ec-80dd-afa0d22717a1" - }, - { - "parameters": { - "resource": "userProfile", - "additionalFields": {} - }, - "name": "Slack", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 460, - 450 - ], - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "f4b748aa-95ac-491d-9aae-438e9d4af174" - }, - { - "parameters": { - "resource": "userProfile", - "operation": "update", - "additionalFields": { - "status_text": "Testing..." - } - }, - "name": "Slack1", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 600, - 450 - ], - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "79590777-6621-433a-88b2-555078feb8e1" - }, - { - "parameters": { - "channel": "random", - "text": "=Message at{{(new Date().toString())}}", - "attachments": [], - "otherOptions": {} - }, - "name": "Slack13", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 420, - 630 - ], - "alwaysOutputData": true, - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "1f43049e-8dd6-425f-bb8a-e06edce9418b" - }, - { - "parameters": { - "operation": "getPermalink", - "channelId": "C01MZ82T9TR", - "timestamp": "={{$node[\"Slack13\"].json[\"message\"][\"ts\"]}}" - }, - "name": "Slack14", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 1060, - 630 - ], - "alwaysOutputData": true, - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "837e9401-e7f1-49f2-91ab-3f9882b13d89" - }, - { - "parameters": { - "operation": "update", - "channelId": "C01MZ82T9TR", - "text": "Message Updated ", - "ts": "={{$node[\"Slack13\"].json[\"message\"][\"ts\"]}}", - "updateFields": {}, - "attachments": [] - }, - "name": "Slack15", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 1190, - 630 - ], - "alwaysOutputData": true, - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "afd5e35a-da4c-4167-a208-ea4a4f28cac0" - }, - { - "parameters": { - "operation": "postEphemeral", - "channel": "random", - "user": "={{$node[\"Slack13\"].json[\"message\"][\"user\"]}}", - "text": "Message for Me Only", - "attachments": [], - "otherOptions": {} - }, - "name": "Slack16", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 1320, - 630 - ], - "alwaysOutputData": true, - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "1105d27e-18a8-4b77-b081-8127252edfbc" - }, - { - "parameters": { - "operation": "delete", - "channelId": "C01MZ82T9TR", - "timestamp": "={{$node[\"Slack13\"].json[\"message\"][\"ts\"]}}" - }, - "name": "Slack17", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 1470, - 630 - ], - "alwaysOutputData": true, - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "fc1412c5-331e-4bcb-a830-3f173d51c9ed" - }, - { - "parameters": { - "resource": "reaction", - "channelId": "C01MZ82T9TR", - "name": "+1", - "timestamp": "={{$node[\"Slack13\"].json[\"message\"][\"ts\"]}}" - }, - "name": "Slack18", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 580, - 700 - ], - "alwaysOutputData": true, - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "d5f82714-f62e-4124-8a1d-081ef18b6ae2" - }, - { - "parameters": { - "resource": "reaction", - "operation": "get", - "channelId": "C01MZ82T9TR", - "timestamp": "={{$node[\"Slack13\"].json[\"message\"][\"ts\"]}}" - }, - "name": "Slack19", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 720, - 700 - ], - "alwaysOutputData": true, - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "ad62b51f-a60e-46d8-b174-941f331886fb" - }, - { - "parameters": { - "resource": "reaction", - "operation": "remove", - "channelId": "C01MZ82T9TR", - "name": "+1", - "timestamp": "={{$node[\"Slack13\"].json[\"message\"][\"ts\"]}}" - }, - "name": "Slack20", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 870, - 700 - ], - "alwaysOutputData": true, - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "d865f9ac-2f76-40fe-87e1-9c855cb518ec" - }, - { - "parameters": { - "resource": "user", - "operation": "getPresence", - "user": "={{$node[\"Slack13\"].json[\"message\"][\"user\"]}}" - }, - "name": "Slack24", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 580, - 850 - ], - "alwaysOutputData": true, - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "6532165d-7578-4b90-b66d-e204955669dd" - }, - { - "parameters": { - "resource": "user", - "user": "={{$node[\"Slack13\"].json[\"message\"][\"user\"]}}" - }, - "name": "Slack25", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 730, - 850 - ], - "alwaysOutputData": true, - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "f013017c-399b-4692-9dfe-be72138349b4" - } - ], - "connections": { - "Slack": { - "main": [ - [ - { - "node": "Slack1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Slack", - "type": "main", - "index": 0 - }, - { - "node": "Slack13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Slack13": { - "main": [ - [ - { - "node": "Slack18", - "type": "main", - "index": 0 - }, - { - "node": "Slack24", - "type": "main", - "index": 0 - } - ] - ] - }, - "Slack15": { - "main": [ - [ - { - "node": "Slack16", - "type": "main", - "index": 0 - } - ] - ] - }, - "Slack16": { - "main": [ - [ - { - "node": "Slack17", - "type": "main", - "index": 0 - } - ] - ] - }, - "Slack14": { - "main": [ - [ - { - "node": "Slack15", - "type": "main", - "index": 0 - } - ] - ] - }, - "Slack18": { - "main": [ - [ - { - "node": "Slack19", - "type": "main", - "index": 0 - } - ] - ] - }, - "Slack19": { - "main": [ - [ - { - "node": "Slack20", - "type": "main", - "index": 0 - } - ] - ] - }, - "Slack20": { - "main": [ - [ - { - "node": "Slack14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Slack24": { - "main": [ - [ - { - "node": "Slack25", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/36.json b/test-workflows/workflows/36.json deleted file mode 100644 index 13d7d86b6f9..00000000000 --- a/test-workflows/workflows/36.json +++ /dev/null @@ -1,753 +0,0 @@ -{ - "createdAt": "2021-02-17T17:57:34.255Z", - "updatedAt": "2021-07-15T14:42:32.636Z", - "id": "36", - "name": "Slack:File:upload getAll get:Star:add getAll delete:Channgel:create update setPurpose setTopic ge t invite leave join getAll history replies member archive unarchive", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "a26bf258-8876-4142-9a6c-37ac7426e7c9" - }, - { - "parameters": { - "resource": "channel", - "operation": "setPurpose", - "channelId": "={{$node[\"Slack2\"].json[\"id\"]}}", - "purpose": "Testing" - }, - "name": "Slack3", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 730, - 230 - ], - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "bd33c223-d19f-43ed-a4f8-6eb524340051" - }, - { - "parameters": { - "resource": "channel", - "operation": "setTopic", - "channelId": "={{$node[\"Slack2\"].json[\"id\"]}}", - "topic": "QA" - }, - "name": "Slack4", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 870, - 230 - ], - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "e956c837-0f3e-4075-a246-ce5a5f16ef17" - }, - { - "parameters": { - "resource": "channel", - "operation": "get", - "channelId": "={{$node[\"Slack2\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Slack5", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 1020, - 230 - ], - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "66010c67-ac41-4390-a85a-6e3b9de26a98" - }, - { - "parameters": { - "resource": "channel", - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "Slack6", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 1650, - 230 - ], - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "ead0ce56-689b-43b0-b527-ecd4f869963c" - }, - { - "parameters": { - "resource": "channel", - "operation": "history", - "channelId": "={{$node[\"Slack2\"].json[\"id\"]}}", - "limit": 1, - "filters": {} - }, - "name": "Slack7", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 1820, - 230 - ], - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "d1dc4c44-619b-42e5-af3f-106fff4a99b5" - }, - { - "parameters": { - "resource": "channel", - "operation": "rename", - "channelId": "={{$node[\"Slack2\"].json[\"id\"]}}", - "name": "=renamed{{$node[\"Slack2\"].json[\"name\"]}}" - }, - "name": "Slack9", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 580, - 230 - ], - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "c63a975b-66ec-4f6a-85c4-712dd8f322d7" - }, - { - "parameters": { - "resource": "file", - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "Slack11", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 590, - 390 - ], - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "4d54c4d7-285e-4e61-853f-b25cc38160dd" - }, - { - "parameters": { - "resource": "file", - "operation": "get", - "fileId": "={{$node[\"Slack10\"].json[\"id\"]}}" - }, - "name": "Slack12", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 740, - 390 - ], - "alwaysOutputData": true, - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "1cc8f403-d7a4-42a4-8e78-a2443c2aed32" - }, - { - "parameters": { - "resource": "channel", - "operation": "member", - "channelId": "={{$node[\"Slack2\"].json[\"id\"]}}", - "limit": 1 - }, - "name": "Slack8", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 2120, - 230 - ], - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "88583aee-b74b-4316-a8c2-2a9ee278275a" - }, - { - "parameters": { - "resource": "channel", - "channelId": "=testchannel{{Math.random().toString(36).replace(/[^a-z]+/g, '')}}", - "additionalFields": { - "isPrivate": false - } - }, - "name": "Slack2", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 440, - 230 - ], - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "bfc23883-4190-46c7-8b9e-8afb0b4c3435" - }, - { - "parameters": { - "resource": "file", - "fileContent": "=Test file upload {{(new Date().toString())}}", - "options": { - "channelIds": [ - "C01N780JVPG" - ] - } - }, - "name": "Slack10", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 440, - 390 - ], - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "3526fb45-6eca-495d-8535-d77cbf2b78fd" - }, - { - "parameters": { - "resource": "star", - "operation": "delete", - "options": { - "channelId": "C01MZ82T9TR" - } - }, - "name": "Slack23", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 840, - 560 - ], - "alwaysOutputData": true, - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "e4cfa506-e1b9-439f-8070-8c0cc7ba191d" - }, - { - "parameters": { - "resource": "star", - "operation": "getAll", - "limit": 1 - }, - "name": "Slack22", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 690, - 560 - ], - "alwaysOutputData": true, - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "c79469c2-5987-442d-a08a-7b942f8c3fde" - }, - { - "parameters": { - "resource": "star", - "options": { - "channelId": "=C01MZ82T9TR" - } - }, - "name": "Slack21", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 550, - 560 - ], - "alwaysOutputData": true, - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "eb6f3c3e-d6cb-42f4-aa6d-462bde196f28" - }, - { - "parameters": { - "resource": "channel", - "operation": "archive", - "channelId": "={{$node[\"Slack2\"].json[\"id\"]}}" - }, - "name": "Slack", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 2250, - 230 - ], - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "cb863325-bb94-4669-a174-913a2d504fd9" - }, - { - "parameters": { - "resource": "channel", - "operation": "invite", - "channelId": "={{$node[\"Slack2\"].json[\"id\"]}}", - "userIds": [ - "U01N08LEY9M" - ] - }, - "name": "Slack13", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 1160, - 230 - ], - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "d4c01071-c77a-4605-8382-e0596de883ee" - }, - { - "parameters": { - "resource": "channel", - "operation": "join", - "channelId": "={{$node[\"Slack2\"].json[\"id\"]}}" - }, - "name": "Slack16", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 1500, - 230 - ], - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "b757d3d8-0d72-4efe-bcc0-ba360e423775" - }, - { - "parameters": { - "resource": "channel", - "operation": "replies", - "channelId": "={{$node[\"Slack2\"].json[\"id\"]}}", - "ts": "={{$node[\"Slack7\"].json[\"ts\"]}}", - "filters": {} - }, - "name": "Slack18", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 1960, - 230 - ], - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "c8c86ba2-599e-4546-a006-1509456726b7" - }, - { - "parameters": { - "resource": "channel", - "operation": "leave", - "channelId": "={{$node[\"Slack2\"].json[\"id\"]}}" - }, - "name": "Slack17", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 1330, - 230 - ], - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "8d90aae7-bcc9-427d-86e4-4c18df0e6c35" - }, - { - "parameters": { - "resource": "channel", - "operation": "archive", - "channelId": "={{$node[\"Slack2\"].json[\"id\"]}}" - }, - "name": "Slack1", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 2540, - 230 - ], - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "0a23fea3-c8dd-41a4-afef-1701d959d8f1" - }, - { - "parameters": { - "resource": "channel", - "operation": "unarchive", - "channelId": "={{$node[\"Slack2\"].json[\"id\"]}}" - }, - "name": "Slack14", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 2400, - 230 - ], - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "id": "2f208a4c-9c68-43d6-8dfd-eb1297a79b0d" - }, - { - "parameters": { - "resource": "star", - "operation": "delete", - "options": { - "channelId": "C01MZ82T9TR" - } - }, - "name": "Slack24", - "type": "n8n-nodes-base.slack", - "typeVersion": 1, - "position": [ - 400, - 560 - ], - "alwaysOutputData": true, - "credentials": { - "slackApi": { - "id": "18", - "name": "Slack Token" - } - }, - "continueOnFail": true, - "notes": "IGNORED_PROPERTIES=ok,error", - "id": "3d3fd370-7c82-4623-9258-e4d7e5a1e381" - } - ], - "connections": { - "Slack3": { - "main": [ - [ - { - "node": "Slack4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Slack4": { - "main": [ - [ - { - "node": "Slack5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Slack5": { - "main": [ - [ - { - "node": "Slack13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Slack6": { - "main": [ - [ - { - "node": "Slack7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Slack7": { - "main": [ - [ - { - "node": "Slack18", - "type": "main", - "index": 0 - } - ] - ] - }, - "Slack9": { - "main": [ - [ - { - "node": "Slack3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Slack11": { - "main": [ - [ - { - "node": "Slack12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Slack2": { - "main": [ - [ - { - "node": "Slack9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Slack10": { - "main": [ - [ - { - "node": "Slack11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Slack22": { - "main": [ - [ - { - "node": "Slack23", - "type": "main", - "index": 0 - } - ] - ] - }, - "Slack21": { - "main": [ - [ - { - "node": "Slack22", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Slack10", - "type": "main", - "index": 0 - }, - { - "node": "Slack2", - "type": "main", - "index": 0 - }, - { - "node": "Slack24", - "type": "main", - "index": 0 - } - ] - ] - }, - "Slack8": { - "main": [ - [ - { - "node": "Slack", - "type": "main", - "index": 0 - } - ] - ] - }, - "Slack13": { - "main": [ - [ - { - "node": "Slack17", - "type": "main", - "index": 0 - } - ] - ] - }, - "Slack16": { - "main": [ - [ - { - "node": "Slack6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Slack18": { - "main": [ - [ - { - "node": "Slack8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Slack17": { - "main": [ - [ - { - "node": "Slack16", - "type": "main", - "index": 0 - } - ] - ] - }, - "Slack": { - "main": [ - [ - { - "node": "Slack14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Slack14": { - "main": [ - [ - { - "node": "Slack1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Slack24": { - "main": [ - [ - { - "node": "Slack21", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/37.json b/test-workflows/workflows/37.json deleted file mode 100644 index ffd7abf514a..00000000000 --- a/test-workflows/workflows/37.json +++ /dev/null @@ -1,466 +0,0 @@ -{ - "createdAt": "2024-02-14T09:47:52.198Z", - "updatedAt": "2024-02-14T09:47:52.198Z", - "id": "37", - "name": "GitLab:Repository:get getIssues:Issue:create createComment edit get lock:Release:create get getAll update delete:User:getRepositories", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "57d13714-f0f8-46af-a51c-4d6691fe9a52" - }, - { - "parameters": { - "resource": "repository", - "operation": "get", - "owner": "nodeqa", - "repository": "nodemationQA" - }, - "name": "Gitlab", - "type": "n8n-nodes-base.gitlab", - "typeVersion": 1, - "position": [ - 560, - 180 - ], - "id": "63131b59-53e5-431c-9c4e-daf68d14629c", - "credentials": { - "gitlabApi": { - "id": "19", - "name": "Gitlap token" - } - }, - "notes": "IGNORED_PROPERTIES=topics" - }, - { - "parameters": { - "resource": "repository", - "owner": "nodeqa", - "repository": "nodemationQA", - "getRepositoryIssuesFilters": {} - }, - "name": "Gitlab1", - "type": "n8n-nodes-base.gitlab", - "typeVersion": 1, - "position": [ - 820, - 180 - ], - "id": "6d4cf9da-8e20-45ac-a97e-b78365c53ae9", - "credentials": { - "gitlabApi": { - "id": "19", - "name": "Gitlap token" - } - }, - "notes": "CAP_RESULTS_LENGTH=1" - }, - { - "parameters": { - "owner": "nodeqa", - "repository": "nodemationQA", - "title": "=Issue - {{(new Date()).toDateString()}}", - "body": "=QA Test on {{(new Date()).toDateString()}}", - "labels": [], - "assignee_ids": [] - }, - "name": "Gitlab2", - "type": "n8n-nodes-base.gitlab", - "typeVersion": 1, - "position": [ - 550, - 330 - ], - "id": "6fd68a0d-f82b-4470-8ba0-624caac71815", - "credentials": { - "gitlabApi": { - "id": "19", - "name": "Gitlap token" - } - } - }, - { - "parameters": { - "operation": "createComment", - "owner": "nodeqa", - "repository": "nodemationQA", - "issueNumber": "={{$node[\"Gitlab2\"].json[\"iid\"]}}", - "body": "=Comment on issue - {{(new Date()).toString()}}" - }, - "name": "Gitlab3", - "type": "n8n-nodes-base.gitlab", - "typeVersion": 1, - "position": [ - 710, - 330 - ], - "id": "f996bfa2-d08a-4943-bd32-6c3042345c24", - "credentials": { - "gitlabApi": { - "id": "19", - "name": "Gitlap token" - } - } - }, - { - "parameters": { - "operation": "edit", - "owner": "nodeqa", - "repository": "nodemationQA", - "issueNumber": "={{$node[\"Gitlab2\"].json[\"iid\"]}}", - "editFields": { - "description": "=Edited {{$node[\"Gitlab2\"].json[\"description\"]}}" - } - }, - "name": "Gitlab4", - "type": "n8n-nodes-base.gitlab", - "typeVersion": 1, - "position": [ - 870, - 330 - ], - "id": "1dfade56-7b02-4c36-952f-729006aa4dbd", - "credentials": { - "gitlabApi": { - "id": "19", - "name": "Gitlap token" - } - } - }, - { - "parameters": { - "operation": "get", - "owner": "nodeqa", - "repository": "nodemationQA", - "issueNumber": "={{$node[\"Gitlab2\"].json[\"iid\"]}}" - }, - "name": "Gitlab5", - "type": "n8n-nodes-base.gitlab", - "typeVersion": 1, - "position": [ - 1020, - 330 - ], - "id": "1ff45615-93bb-41b3-83d2-6a6135a77ee9", - "credentials": { - "gitlabApi": { - "id": "19", - "name": "Gitlap token" - } - } - }, - { - "parameters": { - "operation": "lock", - "owner": "nodeqa", - "repository": "nodemationQA", - "issueNumber": "={{$node[\"Gitlab2\"].json[\"iid\"]}}" - }, - "name": "Gitlab6", - "type": "n8n-nodes-base.gitlab", - "typeVersion": 1, - "position": [ - 1180, - 330 - ], - "id": "f6367788-80ca-45a4-a018-c66b8815f911", - "credentials": { - "gitlabApi": { - "id": "19", - "name": "Gitlap token" - } - } - }, - { - "parameters": { - "resource": "release", - "owner": "nodeqa", - "repository": "nodemationQA", - "releaseTag": "=Release-tag-test{{Date.now()}}", - "additionalFields": { - "name": "=Release{{Date.now()}}", - "ref": "master" - } - }, - "name": "Gitlab7", - "type": "n8n-nodes-base.gitlab", - "typeVersion": 1, - "position": [ - 540, - 490 - ], - "id": "5744f348-d468-45cd-90d8-b37502f20f49", - "credentials": { - "gitlabApi": { - "id": "19", - "name": "Gitlap token" - } - } - }, - { - "parameters": { - "resource": "user", - "owner": "n8nqa" - }, - "name": "Gitlab8", - "type": "n8n-nodes-base.gitlab", - "typeVersion": 1, - "position": [ - 540, - 640 - ], - "id": "919f48e5-1999-40af-89c2-8adce98e843b", - "credentials": { - "gitlabApi": { - "id": "19", - "name": "Gitlap token" - } - }, - "notes": "IGNORED_PROPERTIES=topics" - }, - { - "parameters": { - "resource": "release", - "operation": "get", - "owner": "nodeqa", - "repository": "nodemationQA", - "projectId": "24497029", - "tag_name": "={{$node[\"Gitlab7\"].json[\"tag_name\"]}}" - }, - "name": "Gitlab9", - "type": "n8n-nodes-base.gitlab", - "typeVersion": 1, - "position": [ - 710, - 490 - ], - "id": "782007ea-d789-442c-b44d-fc34e737e467", - "credentials": { - "gitlabApi": { - "id": "19", - "name": "Gitlap token" - } - } - }, - { - "parameters": { - "resource": "release", - "operation": "getAll", - "owner": "nodeqa", - "repository": "nodemationQA", - "projectId": "24497029", - "limit": 1, - "additionalFields": {} - }, - "name": "Gitlab10", - "type": "n8n-nodes-base.gitlab", - "typeVersion": 1, - "position": [ - 870, - 490 - ], - "id": "b441f646-eaef-41b8-934a-d349ae7563b5", - "credentials": { - "gitlabApi": { - "id": "19", - "name": "Gitlap token" - } - } - }, - { - "parameters": { - "resource": "release", - "operation": "update", - "owner": "nodeqa", - "repository": "nodemationQA", - "projectId": "24497029", - "tag_name": "={{$node[\"Gitlab7\"].json[\"tag_name\"]}}", - "additionalFields": { - "name": "=Updated{{$node[\"Gitlab7\"].json[\"name\"]}}" - } - }, - "name": "Gitlab11", - "type": "n8n-nodes-base.gitlab", - "typeVersion": 1, - "position": [ - 1020, - 490 - ], - "id": "f2598d6c-084c-4d97-9e95-b36e1f56faa2", - "credentials": { - "gitlabApi": { - "id": "19", - "name": "Gitlap token" - } - } - }, - { - "parameters": { - "resource": "release", - "operation": "delete", - "owner": "nodeqa", - "repository": "nodemationQA", - "projectId": "24497029", - "tag_name": "={{$node[\"Gitlab7\"].json[\"tag_name\"]}}" - }, - "name": "Gitlab12", - "type": "n8n-nodes-base.gitlab", - "typeVersion": 1, - "position": [ - 1180, - 490 - ], - "id": "36983c2c-6114-4692-b925-279a5ec8055b", - "credentials": { - "gitlabApi": { - "id": "19", - "name": "Gitlap token" - } - } - } - ], - "connections": { - "Gitlab": { - "main": [ - [ - { - "node": "Gitlab1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Gitlab", - "type": "main", - "index": 0 - }, - { - "node": "Gitlab2", - "type": "main", - "index": 0 - }, - { - "node": "Gitlab7", - "type": "main", - "index": 0 - }, - { - "node": "Gitlab8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Gitlab2": { - "main": [ - [ - { - "node": "Gitlab3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Gitlab3": { - "main": [ - [ - { - "node": "Gitlab4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Gitlab4": { - "main": [ - [ - { - "node": "Gitlab5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Gitlab5": { - "main": [ - [ - { - "node": "Gitlab6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Gitlab7": { - "main": [ - [ - { - "node": "Gitlab9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Gitlab9": { - "main": [ - [ - { - "node": "Gitlab10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Gitlab10": { - "main": [ - [ - { - "node": "Gitlab11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Gitlab11": { - "main": [ - [ - { - "node": "Gitlab12", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": { - "templateCredsSetupCompleted": true, - "instanceId": "27cc9b56542ad45b38725555722c50a1c3fee1670bbb67980558314ee08517c4" - }, - "pinData": {}, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/38.json b/test-workflows/workflows/38.json deleted file mode 100644 index aa81f425eda..00000000000 --- a/test-workflows/workflows/38.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "createdAt": "2021-02-18T09:13:09.580Z", - "updatedAt": "2021-02-18T09:13:09.580Z", - "id": "38", - "name": "Medium:Post:create:Publication:getall", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "fc3fb55c-91d4-4865-8bed-bb672fcf6ed8" - }, - { - "parameters": { - "title": "=Medium node TestQA Draft {{ (new Date()).toGMTString()}}", - "contentFormat": "markdown", - "content": "=# QA test Draft Content\n\n#### {{ (new Date()).toGMTString()}}", - "additionalFields": { - "publishStatus": "draft" - } - }, - "name": "Medium", - "type": "n8n-nodes-base.medium", - "typeVersion": 1, - "position": [ - 500, - 250 - ], - "credentials": { - "mediumApi": { - "id": "20", - "name": "Medium token" - } - }, - "id": "0c6e0d0c-76e4-4ae0-b97f-ef501bae351c" - }, - { - "parameters": { - "resource": "publication", - "operation": "getAll", - "limit": 1 - }, - "name": "Medium1", - "type": "n8n-nodes-base.medium", - "typeVersion": 1, - "position": [ - 500, - 400 - ], - "credentials": { - "mediumApi": { - "id": "20", - "name": "Medium token" - } - }, - "id": "a4561f3e-650c-4960-8688-97a4272189a1" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Medium", - "type": "main", - "index": 0 - }, - { - "node": "Medium1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/39.json b/test-workflows/workflows/39.json deleted file mode 100644 index b3e620bdbe8..00000000000 --- a/test-workflows/workflows/39.json +++ /dev/null @@ -1,938 +0,0 @@ -{ - "createdAt": "2021-02-18T10:30:52.070Z", - "updatedAt": "2021-06-08T08:12:16.812Z", - "id": "39", - "name": "Github:Repository:get getProfile getLicense listPopularPaths listReferrers:File:create edit get delete:Issue:create createComment edit get lock:Release:create get getAll update delete:User:getRepositories invite:Review:create getAll get update", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 180, - 750 - ], - "id": "f0955b0a-3d0c-48ef-adb2-541915a9acef" - }, - { - "parameters": { - "resource": "repository", - "operation": "getProfile", - "owner": "nodemationqa", - "repository": "nodeQA" - }, - "name": "GitHub", - "type": "n8n-nodes-base.github", - "typeVersion": 1, - "position": [ - 620, - 300 - ], - "credentials": { - "githubApi": { - "id": "21", - "name": "Github creds" - } - }, - "id": "3d876463-6962-4b4d-b3cb-9015ec6848c0" - }, - { - "parameters": { - "resource": "repository", - "operation": "getLicense", - "owner": "nodemationqa", - "repository": "nodeQA" - }, - "name": "GitHub1", - "type": "n8n-nodes-base.github", - "typeVersion": 1, - "position": [ - 770, - 300 - ], - "credentials": { - "githubApi": { - "id": "21", - "name": "Github creds" - } - }, - "id": "36bbea35-9d6e-4b28-a5a9-53cab2b5d970" - }, - { - "parameters": { - "resource": "repository", - "operation": "listPopularPaths", - "owner": "nodemationqa", - "repository": "nodeQA" - }, - "name": "GitHub2", - "type": "n8n-nodes-base.github", - "typeVersion": 1, - "position": [ - 920, - 300 - ], - "alwaysOutputData": true, - "credentials": { - "githubApi": { - "id": "21", - "name": "Github creds" - } - }, - "notes": "CAP_RESULTS_LENGTH=1", - "id": "f51387a0-836e-4962-90d9-c89190007c49" - }, - { - "parameters": { - "resource": "repository", - "operation": "listReferrers", - "owner": "nodemationqa", - "repository": "nodeQA" - }, - "name": "GitHub3", - "type": "n8n-nodes-base.github", - "typeVersion": 1, - "position": [ - 1070, - 300 - ], - "alwaysOutputData": true, - "credentials": { - "githubApi": { - "id": "21", - "name": "Github creds" - } - }, - "notes": "CAP_RESULTS_LENGTH=1", - "id": "db3f98fa-c19d-41fc-922f-0e356b150e0d" - }, - { - "parameters": { - "resource": "repository", - "operation": "get", - "owner": "nodemationqa", - "repository": "nodeQA" - }, - "name": "GitHub4", - "type": "n8n-nodes-base.github", - "typeVersion": 1, - "position": [ - 470, - 300 - ], - "executeOnce": false, - "alwaysOutputData": true, - "credentials": { - "githubApi": { - "id": "21", - "name": "Github creds" - } - }, - "id": "4827b07a-4982-4c4a-b47a-647b05846306" - }, - { - "parameters": { - "resource": "repository", - "owner": "nodemationqa", - "repository": "nodeQA", - "limit": 1, - "getRepositoryIssuesFilters": {} - }, - "name": "GitHub5", - "type": "n8n-nodes-base.github", - "typeVersion": 1, - "position": [ - 1210, - 300 - ], - "alwaysOutputData": true, - "credentials": { - "githubApi": { - "id": "21", - "name": "Github creds" - } - }, - "id": "5948497b-3e84-40ba-a87d-dd4da66a208c" - }, - { - "parameters": { - "resource": "file", - "owner": "nodemationqa", - "repository": "nodeQA", - "filePath": "=testFile{{Date.now()}}", - "fileContent": "Test file content, create file operation", - "commitMessage": "=Commited {{(new Date()).toGMTString()}}", - "additionalParameters": { - "branch": { - "branch": "main" - } - } - }, - "name": "GitHub6", - "type": "n8n-nodes-base.github", - "typeVersion": 1, - "position": [ - 470, - 460 - ], - "alwaysOutputData": true, - "credentials": { - "githubApi": { - "id": "21", - "name": "Github creds" - } - }, - "id": "752ecae8-1820-4e92-a7e0-8382fb63f94b" - }, - { - "parameters": { - "resource": "file", - "operation": "edit", - "owner": "nodemationqa", - "repository": "nodeQA", - "filePath": "={{$node[\"GitHub6\"].json[\"content\"][\"path\"]}}", - "fileContent": "Updated Test file content, create file operation", - "commitMessage": "=Updated commit message {{(new Date()).toGMTString()}}", - "additionalParameters": { - "branch": { - "branch": "main" - } - } - }, - "name": "GitHub7", - "type": "n8n-nodes-base.github", - "typeVersion": 1, - "position": [ - 630, - 460 - ], - "alwaysOutputData": true, - "credentials": { - "githubApi": { - "id": "21", - "name": "Github creds" - } - }, - "id": "c1326989-6614-42cb-859e-9186e8499ccc" - }, - { - "parameters": { - "resource": "file", - "operation": "get", - "owner": "nodemationqa", - "repository": "nodeQA", - "filePath": "={{$node[\"GitHub6\"].json[\"content\"][\"path\"]}}", - "asBinaryProperty": false - }, - "name": "GitHub8", - "type": "n8n-nodes-base.github", - "typeVersion": 1, - "position": [ - 770, - 460 - ], - "alwaysOutputData": true, - "credentials": { - "githubApi": { - "id": "21", - "name": "Github creds" - } - }, - "id": "2939814a-15b1-4a7b-b829-4b338bdd28a4" - }, - { - "parameters": { - "resource": "file", - "operation": "delete", - "owner": "nodemationqa", - "repository": "nodeQA", - "filePath": "={{$node[\"GitHub6\"].json[\"content\"][\"path\"]}}", - "commitMessage": "=delete commit message {{(new Date()).toGMTString()}}", - "additionalParameters": { - "branch": { - "branch": "main" - } - } - }, - "name": "GitHub9", - "type": "n8n-nodes-base.github", - "typeVersion": 1, - "position": [ - 910, - 460 - ], - "alwaysOutputData": true, - "credentials": { - "githubApi": { - "id": "21", - "name": "Github creds" - } - }, - "id": "68c193fe-ed71-449d-8f46-08e21cc2f08e" - }, - { - "parameters": { - "owner": "nodemationqa", - "repository": "nodeQA", - "title": "=Test Issue created at {{(new Date()).toGMTString()}}", - "body": "=Test issue body {{(new Date()).toGMTString()}}", - "labels": [], - "assignees": [] - }, - "name": "GitHub10", - "type": "n8n-nodes-base.github", - "typeVersion": 1, - "position": [ - 470, - 620 - ], - "alwaysOutputData": true, - "credentials": { - "githubApi": { - "id": "21", - "name": "Github creds" - } - }, - "id": "22800dbb-3c5c-4c30-9e94-8f4580c26ba7" - }, - { - "parameters": { - "operation": "createComment", - "owner": "nodemationqa", - "repository": "nodeQA", - "issueNumber": "={{$node[\"GitHub10\"].json[\"number\"]}}", - "body": "=Comment on issue at {{(new Date()).toGMTString()}}" - }, - "name": "GitHub11", - "type": "n8n-nodes-base.github", - "typeVersion": 1, - "position": [ - 620, - 620 - ], - "alwaysOutputData": true, - "credentials": { - "githubApi": { - "id": "21", - "name": "Github creds" - } - }, - "id": "edaee8cb-6469-4395-8c1d-9f577f5ea262" - }, - { - "parameters": { - "operation": "edit", - "owner": "nodemationqa", - "repository": "nodeQA", - "issueNumber": "={{$node[\"GitHub10\"].json[\"number\"]}}", - "editFields": { - "title": "=Updated {{$node[\"GitHub10\"].json[\"title\"]}}{{Date.now()}}", - "body": "=updated Test issue body {{(new Date()).toGMTString()}}" - } - }, - "name": "GitHub12", - "type": "n8n-nodes-base.github", - "typeVersion": 1, - "position": [ - 770, - 620 - ], - "alwaysOutputData": true, - "credentials": { - "githubApi": { - "id": "21", - "name": "Github creds" - } - }, - "id": "1b158bcd-d934-4347-8988-ba1e6240a4aa" - }, - { - "parameters": { - "operation": "get", - "owner": "nodemationqa", - "repository": "nodeQA", - "issueNumber": "={{$node[\"GitHub10\"].json[\"number\"]}}" - }, - "name": "GitHub13", - "type": "n8n-nodes-base.github", - "typeVersion": 1, - "position": [ - 920, - 620 - ], - "alwaysOutputData": true, - "credentials": { - "githubApi": { - "id": "21", - "name": "Github creds" - } - }, - "id": "7c1c2a47-f0ef-4ba5-8329-0f661e93afe4" - }, - { - "parameters": { - "operation": "lock", - "owner": "nodemationqa", - "repository": "nodeQA", - "issueNumber": "={{$node[\"GitHub10\"].json[\"number\"]}}", - "lockReason": "spam" - }, - "name": "GitHub14", - "type": "n8n-nodes-base.github", - "typeVersion": 1, - "position": [ - 1060, - 620 - ], - "alwaysOutputData": true, - "credentials": { - "githubApi": { - "id": "21", - "name": "Github creds" - } - }, - "id": "13bb869d-2c1e-433d-a4df-e4b7ed1fe15a" - }, - { - "parameters": { - "resource": "release", - "owner": "nodemationqa", - "repository": "nodeQA", - "releaseTag": "=Release{{Date.now()}}", - "additionalFields": { - "name": "=Release {{(new Date()).toGMTString()}}", - "draft": true - } - }, - "name": "GitHub15", - "type": "n8n-nodes-base.github", - "typeVersion": 1, - "position": [ - 470, - 770 - ], - "alwaysOutputData": true, - "credentials": { - "githubApi": { - "id": "21", - "name": "Github creds" - } - }, - "id": "83a9cc6c-815c-476d-a8d5-83a9475daca8" - }, - { - "parameters": { - "resource": "user", - "owner": "nodemationqa" - }, - "name": "GitHub16", - "type": "n8n-nodes-base.github", - "typeVersion": 1, - "position": [ - 470, - 930 - ], - "alwaysOutputData": true, - "credentials": { - "githubApi": { - "id": "21", - "name": "Github creds" - } - }, - "id": "ba63e2c6-4ac4-4180-9325-2f61e77f8a7d" - }, - { - "parameters": { - "resource": "user", - "operation": "invite", - "organization": "OrgnodeQA", - "email": "nodeqa@n8n.io" - }, - "name": "GitHub17", - "type": "n8n-nodes-base.github", - "typeVersion": 1, - "position": [ - 660, - 930 - ], - "alwaysOutputData": true, - "credentials": { - "githubApi": { - "id": "21", - "name": "Github creds" - } - }, - "id": "ce44c4b5-9ed1-463a-bed2-85102bdb66e2" - }, - { - "parameters": { - "resource": "review", - "owner": "nodemationqa", - "repository": "nodeQA", - "pullRequestNumber": 3, - "event": "comment", - "body": "=Review Test {{(new Date()).toGMTString()}}", - "additionalFields": {} - }, - "name": "GitHub18", - "type": "n8n-nodes-base.github", - "typeVersion": 1, - "position": [ - 460, - 1080 - ], - "alwaysOutputData": true, - "credentials": { - "githubApi": { - "id": "21", - "name": "Github creds" - } - }, - "id": "dd259704-d7e5-4a3b-8368-dc65c7241b61" - }, - { - "parameters": { - "resource": "review", - "operation": "getAll", - "owner": "nodemationqa", - "repository": "nodeQA", - "pullRequestNumber": 3, - "limit": 1 - }, - "name": "GitHub19", - "type": "n8n-nodes-base.github", - "typeVersion": 1, - "position": [ - 610, - 1080 - ], - "alwaysOutputData": true, - "credentials": { - "githubApi": { - "id": "21", - "name": "Github creds" - } - }, - "id": "1c090f0d-1bad-48d7-86ed-17a63359ace2" - }, - { - "parameters": { - "resource": "review", - "operation": "get", - "owner": "nodemationqa", - "repository": "nodeQA", - "pullRequestNumber": 3, - "reviewId": "={{$node[\"GitHub18\"].json[\"id\"]}}" - }, - "name": "GitHub20", - "type": "n8n-nodes-base.github", - "typeVersion": 1, - "position": [ - 750, - 1080 - ], - "alwaysOutputData": true, - "credentials": { - "githubApi": { - "id": "21", - "name": "Github creds" - } - }, - "id": "d917c74c-a3c8-4a12-b4cb-72987ad19f65" - }, - { - "parameters": { - "resource": "review", - "operation": "update", - "owner": "nodemationqa", - "repository": "nodeQA", - "pullRequestNumber": 3, - "reviewId": "={{$node[\"GitHub18\"].json[\"id\"]}}", - "body": "=Updated {{$node[\"GitHub18\"].json[\"body\"]}}" - }, - "name": "GitHub21", - "type": "n8n-nodes-base.github", - "typeVersion": 1, - "position": [ - 900, - 1080 - ], - "alwaysOutputData": true, - "credentials": { - "githubApi": { - "id": "21", - "name": "Github creds" - } - }, - "id": "5796a57b-9580-47af-83c2-6770f542eef2" - }, - { - "parameters": { - "resource": "release", - "operation": "getAll", - "owner": "nodemationqa", - "repository": "nodeQA", - "limit": 1 - }, - "name": "GitHub22", - "type": "n8n-nodes-base.github", - "typeVersion": 1, - "position": [ - 620, - 770 - ], - "alwaysOutputData": true, - "credentials": { - "githubApi": { - "id": "21", - "name": "Github creds" - } - }, - "id": "c4ce2f6d-7e2c-4931-9a62-f1702168fdca" - }, - { - "parameters": { - "resource": "release", - "operation": "get", - "owner": "nodemationqa", - "repository": "nodeQA", - "release_id": "={{$node[\"GitHub15\"].json[\"id\"]}}" - }, - "name": "GitHub23", - "type": "n8n-nodes-base.github", - "typeVersion": 1, - "position": [ - 770, - 770 - ], - "alwaysOutputData": true, - "credentials": { - "githubApi": { - "id": "21", - "name": "Github creds" - } - }, - "id": "d286eac6-e189-41d9-8956-3e528219dfc1" - }, - { - "parameters": { - "resource": "release", - "operation": "update", - "owner": "nodemationqa", - "repository": "nodeQA", - "release_id": "={{$node[\"GitHub15\"].json[\"id\"]}}", - "additionalFields": { - "draft": true, - "name": "=Updated{{$node[\"GitHub15\"].json[\"name\"]}}", - "tag_name": "=Updated{{$node[\"GitHub15\"].json[\"tag_name\"]}}" - } - }, - "name": "GitHub24", - "type": "n8n-nodes-base.github", - "typeVersion": 1, - "position": [ - 920, - 770 - ], - "alwaysOutputData": true, - "credentials": { - "githubApi": { - "id": "21", - "name": "Github creds" - } - }, - "id": "1bc53e99-0f2f-425d-977a-e27a75cd9dbf" - }, - { - "parameters": { - "resource": "release", - "operation": "delete", - "owner": "nodemationqa", - "repository": "nodeQA", - "release_id": "={{$node[\"GitHub15\"].json[\"id\"]}}" - }, - "name": "GitHub25", - "type": "n8n-nodes-base.github", - "typeVersion": 1, - "position": [ - 1060, - 770 - ], - "alwaysOutputData": true, - "credentials": { - "githubApi": { - "id": "21", - "name": "Github creds" - } - }, - "id": "ceab4826-8e38-4a8b-b60c-7dfcf65b7aa9" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "GitHub4", - "type": "main", - "index": 0 - }, - { - "node": "GitHub6", - "type": "main", - "index": 0 - }, - { - "node": "GitHub10", - "type": "main", - "index": 0 - }, - { - "node": "GitHub15", - "type": "main", - "index": 0 - }, - { - "node": "GitHub16", - "type": "main", - "index": 0 - }, - { - "node": "GitHub18", - "type": "main", - "index": 0 - } - ] - ] - }, - "GitHub": { - "main": [ - [ - { - "node": "GitHub1", - "type": "main", - "index": 0 - } - ] - ] - }, - "GitHub1": { - "main": [ - [ - { - "node": "GitHub2", - "type": "main", - "index": 0 - } - ] - ] - }, - "GitHub2": { - "main": [ - [ - { - "node": "GitHub3", - "type": "main", - "index": 0 - } - ] - ] - }, - "GitHub3": { - "main": [ - [ - { - "node": "GitHub5", - "type": "main", - "index": 0 - } - ] - ] - }, - "GitHub4": { - "main": [ - [ - { - "node": "GitHub", - "type": "main", - "index": 0 - } - ] - ] - }, - "GitHub8": { - "main": [ - [ - { - "node": "GitHub9", - "type": "main", - "index": 0 - } - ] - ] - }, - "GitHub6": { - "main": [ - [ - { - "node": "GitHub7", - "type": "main", - "index": 0 - } - ] - ] - }, - "GitHub7": { - "main": [ - [ - { - "node": "GitHub8", - "type": "main", - "index": 0 - } - ] - ] - }, - "GitHub10": { - "main": [ - [ - { - "node": "GitHub11", - "type": "main", - "index": 0 - } - ] - ] - }, - "GitHub11": { - "main": [ - [ - { - "node": "GitHub12", - "type": "main", - "index": 0 - } - ] - ] - }, - "GitHub12": { - "main": [ - [ - { - "node": "GitHub13", - "type": "main", - "index": 0 - } - ] - ] - }, - "GitHub13": { - "main": [ - [ - { - "node": "GitHub14", - "type": "main", - "index": 0 - } - ] - ] - }, - "GitHub16": { - "main": [ - [ - { - "node": "GitHub17", - "type": "main", - "index": 0 - } - ] - ] - }, - "GitHub18": { - "main": [ - [ - { - "node": "GitHub19", - "type": "main", - "index": 0 - } - ] - ] - }, - "GitHub19": { - "main": [ - [ - { - "node": "GitHub20", - "type": "main", - "index": 0 - } - ] - ] - }, - "GitHub20": { - "main": [ - [ - { - "node": "GitHub21", - "type": "main", - "index": 0 - } - ] - ] - }, - "GitHub15": { - "main": [ - [ - { - "node": "GitHub22", - "type": "main", - "index": 0 - } - ] - ] - }, - "GitHub22": { - "main": [ - [ - { - "node": "GitHub23", - "type": "main", - "index": 0 - } - ] - ] - }, - "GitHub23": { - "main": [ - [ - { - "node": "GitHub24", - "type": "main", - "index": 0 - } - ] - ] - }, - "GitHub24": { - "main": [ - [ - { - "node": "GitHub25", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/4.json b/test-workflows/workflows/4.json deleted file mode 100644 index ac5bd6d6b08..00000000000 --- a/test-workflows/workflows/4.json +++ /dev/null @@ -1,158 +0,0 @@ -{ - "createdAt": "2021-01-21T13:48:02.703Z", - "updatedAt": "2021-03-15T13:59:19.891Z", - "id": "4", - "name": "FTP:ftp:list download upload", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "5bc91980-86a2-469c-8ad0-7de1d8c9b7e1" - }, - { - "parameters": { - "operation": "list", - "path": "/1KB.zip" - }, - "name": "FTP1", - "type": "n8n-nodes-base.ftp", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "ftp": { - "id": "106", - "name": "FTP creds" - } - }, - "id": "7aee41cf-627d-424a-99a3-952837497848" - }, - { - "parameters": { - "path": "1KB.zip" - }, - "name": "FTP", - "type": "n8n-nodes-base.ftp", - "typeVersion": 1, - "position": [ - 600, - 300 - ], - "credentials": { - "ftp": { - "id": "106", - "name": "FTP creds" - } - }, - "id": "ab5f20c7-6464-4779-8e13-b47b11ba9459" - }, - { - "parameters": { - "operation": "upload", - "path": "=/upload/{{$node[\"Set\"].json[\"filename\"]}}" - }, - "name": "FTP2", - "type": "n8n-nodes-base.ftp", - "typeVersion": 1, - "position": [ - 900, - 300 - ], - "credentials": { - "ftp": { - "id": "106", - "name": "FTP creds" - } - }, - "id": "066b0e3d-918f-4a28-94b6-9432e6e572a1" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "filename", - "value": "=test{{Date.now()}}.zip" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 750, - 300 - ], - "id": "08e2e0f0-f730-48cf-a05e-40820a55aaa3" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "FTP1", - "type": "main", - "index": 0 - } - ] - ] - }, - "FTP1": { - "main": [ - [ - { - "node": "FTP", - "type": "main", - "index": 0 - } - ] - ] - }, - "FTP": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - }, - "FTP2": { - "main": [ - [] - ] - }, - "Set": { - "main": [ - [ - { - "node": "FTP2", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/40.json b/test-workflows/workflows/40.json deleted file mode 100644 index 0236e8d516e..00000000000 --- a/test-workflows/workflows/40.json +++ /dev/null @@ -1,598 +0,0 @@ -{ - "createdAt": "2021-02-18T14:57:48.780Z", - "updatedAt": "2021-03-16T10:54:02.671Z", - "id": "40", - "name": "Gmail:Draft:create getAll get delete:Label:create getAll get delete:Message:send getAll get reply delete:MessageLabel:add remove", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 340, - 400 - ], - "id": "05c88b78-968b-4f4c-a1e9-8898251d3f7d" - }, - { - "parameters": { - "subject": "=Draft created at {{(new Date()).toGMTString()}}", - "message": "=Draft Test Body", - "additionalFields": {} - }, - "name": "Gmail", - "type": "n8n-nodes-base.gmail", - "typeVersion": 1, - "position": [ - 600, - 230 - ], - "credentials": { - "gmailOAuth2": { - "id": "22", - "name": "Gmail 0auth" - } - }, - "id": "707afa42-fc6e-4117-84bc-29282319d5bb" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "additionalFields": {} - }, - "name": "Gmail1", - "type": "n8n-nodes-base.gmail", - "typeVersion": 1, - "position": [ - 760, - 230 - ], - "credentials": { - "gmailOAuth2": { - "id": "22", - "name": "Gmail 0auth" - } - }, - "id": "c73d9c21-ea4d-4976-ad4b-2ae4b0fada15" - }, - { - "parameters": { - "operation": "get", - "messageId": "={{$node[\"Gmail\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Gmail2", - "type": "n8n-nodes-base.gmail", - "typeVersion": 1, - "position": [ - 920, - 230 - ], - "credentials": { - "gmailOAuth2": { - "id": "22", - "name": "Gmail 0auth" - } - }, - "id": "67666251-4a70-441a-a383-5582d297edd5" - }, - { - "parameters": { - "operation": "delete", - "messageId": "={{$node[\"Gmail\"].json[\"id\"]}}" - }, - "name": "Gmail3", - "type": "n8n-nodes-base.gmail", - "typeVersion": 1, - "position": [ - 1070, - 230 - ], - "credentials": { - "gmailOAuth2": { - "id": "22", - "name": "Gmail 0auth" - } - }, - "id": "a0b1960d-1a73-43a4-9978-7d3634051884" - }, - { - "parameters": { - "resource": "label", - "name": "=TestLabel{{Date.now()}}" - }, - "name": "Gmail4", - "type": "n8n-nodes-base.gmail", - "typeVersion": 1, - "position": [ - 600, - 380 - ], - "credentials": { - "gmailOAuth2": { - "id": "22", - "name": "Gmail 0auth" - } - }, - "id": "f2ddc4ef-a79f-4764-ad1e-8fd88e8cc3d9" - }, - { - "parameters": { - "resource": "label", - "operation": "getAll", - "limit": 1 - }, - "name": "Gmail5", - "type": "n8n-nodes-base.gmail", - "typeVersion": 1, - "position": [ - 760, - 380 - ], - "credentials": { - "gmailOAuth2": { - "id": "22", - "name": "Gmail 0auth" - } - }, - "id": "0f6821e9-a68e-46ce-905c-78b14eaa6435" - }, - { - "parameters": { - "resource": "label", - "operation": "get", - "labelId": "={{$node[\"Gmail4\"].json[\"id\"]}}" - }, - "name": "Gmail7", - "type": "n8n-nodes-base.gmail", - "typeVersion": 1, - "position": [ - 920, - 380 - ], - "credentials": { - "gmailOAuth2": { - "id": "22", - "name": "Gmail 0auth" - } - }, - "id": "c78804f2-5ea2-48e7-a98d-90ecb236d5b8" - }, - { - "parameters": { - "resource": "message", - "subject": "=Subject {{(new Date()).toGMTString()}}", - "message": "=Email Body {{(new Date()).toGMTString()}}", - "toList": [ - "node8qa@gmail.com" - ], - "additionalFields": {} - }, - "name": "Gmail8", - "type": "n8n-nodes-base.gmail", - "typeVersion": 1, - "position": [ - 610, - 530 - ], - "credentials": { - "gmailOAuth2": { - "id": "22", - "name": "Gmail 0auth" - } - }, - "id": "3f832f5f-94e0-4f86-a041-cbf30655c43b" - }, - { - "parameters": { - "resource": "message", - "operation": "getAll", - "limit": 1, - "additionalFields": {} - }, - "name": "Gmail9", - "type": "n8n-nodes-base.gmail", - "typeVersion": 1, - "position": [ - 1040, - 530 - ], - "credentials": { - "gmailOAuth2": { - "id": "22", - "name": "Gmail 0auth" - } - }, - "id": "fb256709-1d09-478c-8a18-331830cd6df1" - }, - { - "parameters": { - "resource": "message", - "operation": "get", - "messageId": "={{$node[\"Gmail8\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Gmail10", - "type": "n8n-nodes-base.gmail", - "typeVersion": 1, - "position": [ - 1190, - 530 - ], - "credentials": { - "gmailOAuth2": { - "id": "22", - "name": "Gmail 0auth" - } - }, - "id": "5f15fa23-4149-410f-baa0-cca8123707b5" - }, - { - "parameters": { - "resource": "message", - "operation": "delete", - "messageId": "={{$node[\"Gmail8\"].json[\"id\"]}}" - }, - "name": "Gmail11", - "type": "n8n-nodes-base.gmail", - "typeVersion": 1, - "position": [ - 1620, - 530 - ], - "credentials": { - "gmailOAuth2": { - "id": "22", - "name": "Gmail 0auth" - } - }, - "id": "33489121-9268-4bbf-ba17-e2673970d71c" - }, - { - "parameters": { - "resource": "message", - "operation": "reply", - "threadId": "={{$node[\"Gmail8\"].json[\"threadId\"]}}", - "messageId": "={{$node[\"Gmail8\"].json[\"id\"]}}", - "subject": "=Reply {{(new Date()).toGMTString()}}", - "message": "=Reply body {{(new Date()).toGMTString()}}", - "toList": [ - "node8qa@gmail.com" - ], - "additionalFields": {} - }, - "name": "Gmail12", - "type": "n8n-nodes-base.gmail", - "typeVersion": 1, - "position": [ - 1330, - 530 - ], - "credentials": { - "gmailOAuth2": { - "id": "22", - "name": "Gmail 0auth" - } - }, - "id": "1b8da955-757e-4973-a350-58abac6c4822" - }, - { - "parameters": { - "resource": "messageLabel", - "messageId": "={{$node[\"Gmail8\"].json[\"id\"]}}", - "labelIds": [ - "SPAM" - ] - }, - "name": "Gmail13", - "type": "n8n-nodes-base.gmail", - "typeVersion": 1, - "position": [ - 740, - 650 - ], - "credentials": { - "gmailOAuth2": { - "id": "22", - "name": "Gmail 0auth" - } - }, - "id": "87698be8-16c6-496a-82fe-2ed1fcb3422a" - }, - { - "parameters": { - "resource": "message", - "operation": "delete", - "messageId": "={{$node[\"Gmail12\"].json[\"id\"]}}" - }, - "name": "Gmail14", - "type": "n8n-nodes-base.gmail", - "typeVersion": 1, - "position": [ - 1890, - 530 - ], - "credentials": { - "gmailOAuth2": { - "id": "22", - "name": "Gmail 0auth" - } - }, - "id": "7f58e657-9bf8-4154-9353-39ac27d642cc" - }, - { - "parameters": { - "resource": "messageLabel", - "operation": "remove", - "messageId": "={{$node[\"Gmail8\"].json[\"id\"]}}", - "labelIds": [ - "SPAM" - ] - }, - "name": "Gmail15", - "type": "n8n-nodes-base.gmail", - "typeVersion": 1, - "position": [ - 880, - 650 - ], - "credentials": { - "gmailOAuth2": { - "id": "22", - "name": "Gmail 0auth" - } - }, - "id": "0ffaee84-f0cf-42fc-a47d-0c9a25ae6b90" - }, - { - "parameters": { - "resource": "label", - "operation": "delete", - "labelId": "={{$node[\"Gmail4\"].json[\"id\"]}}" - }, - "name": "Gmail16", - "type": "n8n-nodes-base.gmail", - "typeVersion": 1, - "position": [ - 1070, - 380 - ], - "credentials": { - "gmailOAuth2": { - "id": "22", - "name": "Gmail 0auth" - } - }, - "id": "998e0199-62ef-462b-a353-b7721c95ad46" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 Second", - "type": "n8n-nodes-base.function", - "position": [ - 1470, - 530 - ], - "typeVersion": 1, - "id": "fea0314c-836f-43ea-8d3b-59fff652ad57" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 Second1", - "type": "n8n-nodes-base.function", - "position": [ - 1760, - 530 - ], - "typeVersion": 1, - "id": "677eb37a-3a00-4f00-aa8a-cfc7b373cc1c" - } - ], - "connections": { - "Gmail": { - "main": [ - [ - { - "node": "Gmail1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Gmail1": { - "main": [ - [ - { - "node": "Gmail2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Gmail2": { - "main": [ - [ - { - "node": "Gmail3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Gmail8", - "type": "main", - "index": 0 - }, - { - "node": "Gmail4", - "type": "main", - "index": 0 - }, - { - "node": "Gmail", - "type": "main", - "index": 0 - } - ] - ] - }, - "Gmail4": { - "main": [ - [ - { - "node": "Gmail5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Gmail5": { - "main": [ - [ - { - "node": "Gmail7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Gmail9": { - "main": [ - [ - { - "node": "Gmail10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Gmail8": { - "main": [ - [ - { - "node": "Gmail13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Gmail10": { - "main": [ - [ - { - "node": "Gmail12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Gmail12": { - "main": [ - [ - { - "node": "Sleep 0.5 Second", - "type": "main", - "index": 0 - } - ] - ] - }, - "Gmail13": { - "main": [ - [ - { - "node": "Gmail15", - "type": "main", - "index": 0 - } - ] - ] - }, - "Gmail15": { - "main": [ - [ - { - "node": "Gmail9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Gmail7": { - "main": [ - [ - { - "node": "Gmail16", - "type": "main", - "index": 0 - } - ] - ] - }, - "Gmail14": { - "main": [ - [] - ] - }, - "Sleep 0.5 Second": { - "main": [ - [ - { - "node": "Gmail11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 Second1": { - "main": [ - [ - { - "node": "Gmail14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Gmail11": { - "main": [ - [ - { - "node": "Sleep 0.5 Second1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/41.json b/test-workflows/workflows/41.json deleted file mode 100644 index 56d5482c111..00000000000 --- a/test-workflows/workflows/41.json +++ /dev/null @@ -1,231 +0,0 @@ -{ - "createdAt": "2021-02-18T15:29:36.110Z", - "updatedAt": "2021-02-18T15:56:49.923Z", - "id": "41", - "name": "GoogleCalendar:Event:create getAll get update delete:Calendar:availability", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "6aeb5434-f098-403c-8a10-3b49b0ce5b28" - }, - { - "parameters": { - "resource": "calendar", - "calendar": "node8qa@gmail.com", - "timeMin": "2021-02-17T23:00:00.000Z", - "timeMax": "2021-02-18T23:00:00.000Z", - "options": { - "outputFormat": "availability" - } - }, - "name": "Google Calendar", - "type": "n8n-nodes-base.googleCalendar", - "typeVersion": 1, - "position": [ - 500, - 210 - ], - "credentials": { - "googleCalendarOAuth2Api": { - "id": "23", - "name": "Google calendar 0auth creds" - } - }, - "id": "1cd92151-378b-42a0-ab14-fb21b6efc5e5" - }, - { - "parameters": { - "calendar": "node8qa@gmail.com", - "start": "2021-02-18T15:50:50.000Z", - "end": "2021-02-19T15:50:50.000Z", - "additionalFields": { - "description": "Test" - } - }, - "name": "Google Calendar1", - "type": "n8n-nodes-base.googleCalendar", - "typeVersion": 1, - "position": [ - 490, - 390 - ], - "credentials": { - "googleCalendarOAuth2Api": { - "id": "23", - "name": "Google calendar 0auth creds" - } - }, - "id": "89509d2f-ceac-4046-ac47-a0c5d5aada34" - }, - { - "parameters": { - "operation": "get", - "calendar": "node8qa@gmail.com", - "eventId": "={{$node[\"Google Calendar1\"].json[\"id\"]}}", - "options": {} - }, - "name": "Google Calendar2", - "type": "n8n-nodes-base.googleCalendar", - "typeVersion": 1, - "position": [ - 820, - 390 - ], - "alwaysOutputData": true, - "credentials": { - "googleCalendarOAuth2Api": { - "id": "23", - "name": "Google calendar 0auth creds" - } - }, - "id": "48aa1cb4-9649-46f9-9368-fec67709b825" - }, - { - "parameters": { - "operation": "getAll", - "calendar": "node8qa@gmail.com", - "limit": 1, - "options": { - "showDeleted": true - } - }, - "name": "Google Calendar3", - "type": "n8n-nodes-base.googleCalendar", - "typeVersion": 1, - "position": [ - 650, - 390 - ], - "credentials": { - "googleCalendarOAuth2Api": { - "id": "23", - "name": "Google calendar 0auth creds" - } - }, - "id": "99926665-5d81-4452-96d8-f025a3539ae6" - }, - { - "parameters": { - "operation": "update", - "calendar": "node8qa@gmail.com", - "eventId": "={{$node[\"Google Calendar1\"].json[\"id\"]}}", - "updateFields": { - "color": "7" - } - }, - "name": "Google Calendar4", - "type": "n8n-nodes-base.googleCalendar", - "typeVersion": 1, - "position": [ - 980, - 390 - ], - "credentials": { - "googleCalendarOAuth2Api": { - "id": "23", - "name": "Google calendar 0auth creds" - } - }, - "id": "a673096e-b394-4a98-ba01-e0cdfabde6bd" - }, - { - "parameters": { - "operation": "delete", - "calendar": "node8qa@gmail.com", - "eventId": "={{$node[\"Google Calendar1\"].json[\"id\"]}}", - "options": {} - }, - "name": "Google Calendar5", - "type": "n8n-nodes-base.googleCalendar", - "typeVersion": 1, - "position": [ - 1130, - 390 - ], - "credentials": { - "googleCalendarOAuth2Api": { - "id": "23", - "name": "Google calendar 0auth creds" - } - }, - "id": "dd64b74a-ab43-4bed-a19c-59817cc6e4ab" - } - ], - "connections": { - "Google Calendar1": { - "main": [ - [ - { - "node": "Google Calendar3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Calendar3": { - "main": [ - [ - { - "node": "Google Calendar2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Calendar2": { - "main": [ - [ - { - "node": "Google Calendar4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Calendar4": { - "main": [ - [ - { - "node": "Google Calendar5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Google Calendar1", - "type": "main", - "index": 0 - }, - { - "node": "Google Calendar", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/42.json b/test-workflows/workflows/42.json deleted file mode 100644 index 1aa48b1ece1..00000000000 --- a/test-workflows/workflows/42.json +++ /dev/null @@ -1,197 +0,0 @@ -{ - "createdAt": "2021-02-18T16:06:30.135Z", - "updatedAt": "2021-02-18T16:06:30.135Z", - "id": "42", - "name": "GoogleTask:create update getAll get delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 360, - 250 - ], - "id": "8a9cccfd-ef20-48c6-b6fa-f21c15ab3ee9" - }, - { - "parameters": { - "task": "MDI3ODQzODIxOTE4MjA1ODY3NzM6MDow", - "title": "Do Testing", - "additionalFields": {} - }, - "name": "Google Tasks", - "type": "n8n-nodes-base.googleTasks", - "typeVersion": 1, - "position": [ - 550, - 250 - ], - "credentials": { - "googleTasksOAuth2Api": { - "id": "24", - "name": "Google Tasks 0auth creds" - } - }, - "id": "c007f149-e912-4c92-a05e-faf60bc1b6d3" - }, - { - "parameters": { - "operation": "update", - "title": "Do Testing", - "task": "MDI3ODQzODIxOTE4MjA1ODY3NzM6MDow", - "taskId": "={{$node[\"Google Tasks\"].json[\"id\"]}}", - "updateFields": { - "status": "completed" - } - }, - "name": "Google Tasks1", - "type": "n8n-nodes-base.googleTasks", - "typeVersion": 1, - "position": [ - 720, - 250 - ], - "credentials": { - "googleTasksOAuth2Api": { - "id": "24", - "name": "Google Tasks 0auth creds" - } - }, - "id": "a1adcb8e-7f47-448b-8dd6-208d815a8515" - }, - { - "parameters": { - "operation": "get", - "title": "Do Testing", - "task": "MDI3ODQzODIxOTE4MjA1ODY3NzM6MDow", - "taskId": "={{$node[\"Google Tasks\"].json[\"id\"]}}" - }, - "name": "Google Tasks2", - "type": "n8n-nodes-base.googleTasks", - "typeVersion": 1, - "position": [ - 1070, - 250 - ], - "credentials": { - "googleTasksOAuth2Api": { - "id": "24", - "name": "Google Tasks 0auth creds" - } - }, - "id": "ddc28328-f7f5-451e-9a9a-f3b4827cbb0d" - }, - { - "parameters": { - "operation": "delete", - "title": "Do Testing", - "task": "MDI3ODQzODIxOTE4MjA1ODY3NzM6MDow", - "taskId": "={{$node[\"Google Tasks\"].json[\"id\"]}}" - }, - "name": "Google Tasks3", - "type": "n8n-nodes-base.googleTasks", - "typeVersion": 1, - "position": [ - 1230, - 250 - ], - "credentials": { - "googleTasksOAuth2Api": { - "id": "24", - "name": "Google Tasks 0auth creds" - } - }, - "id": "f9028103-aa27-405c-a081-7ae669cf3e86" - }, - { - "parameters": { - "operation": "getAll", - "title": "Do Testing", - "task": "MDI3ODQzODIxOTE4MjA1ODY3NzM6MDow", - "limit": 1, - "additionalFields": {} - }, - "name": "Google Tasks4", - "type": "n8n-nodes-base.googleTasks", - "typeVersion": 1, - "position": [ - 890, - 250 - ], - "credentials": { - "googleTasksOAuth2Api": { - "id": "24", - "name": "Google Tasks 0auth creds" - } - }, - "id": "96e66609-8e49-4bb0-b393-63ada8d98ccb" - } - ], - "connections": { - "Google Tasks": { - "main": [ - [ - { - "node": "Google Tasks1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Tasks1": { - "main": [ - [ - { - "node": "Google Tasks4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Tasks2": { - "main": [ - [ - { - "node": "Google Tasks3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Tasks4": { - "main": [ - [ - { - "node": "Google Tasks2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Google Tasks", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/43.json b/test-workflows/workflows/43.json deleted file mode 100644 index 206106f38b5..00000000000 --- a/test-workflows/workflows/43.json +++ /dev/null @@ -1,233 +0,0 @@ -{ - "createdAt": "2021-02-19T07:31:35.734Z", - "updatedAt": "2021-06-08T09:27:55.752Z", - "id": "43", - "name": "GoogleContacts:create update getAll get delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "9b031147-6a8d-44ca-85b0-8cdaf10eb659" - }, - { - "parameters": { - "familyName": "QA", - "givenName": "node", - "additionalFields": { - "companyUi": { - "companyValues": [ - { - "current": true, - "domain": "n8n", - "name": "QA", - "title": "n8nQA" - } - ] - } - } - }, - "name": "Google Contacts", - "type": "n8n-nodes-base.googleContacts", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "googleContactsOAuth2Api": { - "id": "25", - "name": "Google Contacts creds" - } - }, - "id": "7d9e7d33-a215-4997-86a7-4067f990fdbd" - }, - { - "parameters": { - "operation": "update", - "contactId": "={{$node[\"Google Contacts\"].json[\"contactId\"]}}", - "fields": [ - "names" - ], - "updateFields": { - "givenName": "nodemation" - } - }, - "name": "Google Contacts1", - "type": "n8n-nodes-base.googleContacts", - "typeVersion": 1, - "position": [ - 780, - 300 - ], - "credentials": { - "googleContactsOAuth2Api": { - "id": "25", - "name": "Google Contacts creds" - } - }, - "id": "8577325f-5674-4c71-8d0b-15afd2eebde4" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "fields": [ - "*" - ], - "options": {} - }, - "name": "Google Contacts2", - "type": "n8n-nodes-base.googleContacts", - "typeVersion": 1, - "position": [ - 940, - 300 - ], - "credentials": { - "googleContactsOAuth2Api": { - "id": "25", - "name": "Google Contacts creds" - } - }, - "id": "a4079178-c6c0-490e-8e46-ba06237bbfce" - }, - { - "parameters": { - "operation": "get", - "contactId": "={{$node[\"Google Contacts\"].json[\"contactId\"]}}", - "fields": [ - "*" - ] - }, - "name": "Google Contacts3", - "type": "n8n-nodes-base.googleContacts", - "typeVersion": 1, - "position": [ - 1100, - 300 - ], - "credentials": { - "googleContactsOAuth2Api": { - "id": "25", - "name": "Google Contacts creds" - } - }, - "id": "98244b5e-a280-4717-8c1c-b8dac07fa5f5" - }, - { - "parameters": { - "operation": "delete", - "contactId": "={{$node[\"Google Contacts\"].json[\"contactId\"]}}" - }, - "name": "Google Contacts4", - "type": "n8n-nodes-base.googleContacts", - "typeVersion": 1, - "position": [ - 1250, - 300 - ], - "credentials": { - "googleContactsOAuth2Api": { - "id": "25", - "name": "Google Contacts creds" - } - }, - "id": "0d3f3684-07a8-4465-95dc-59dc3e11bdbb" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(3000);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 3 seconds", - "type": "n8n-nodes-base.function", - "position": [ - 610, - 300 - ], - "typeVersion": 1, - "id": "e1d77a33-d0c8-4920-a533-bc6fb413ea05" - } - ], - "connections": { - "Google Contacts": { - "main": [ - [ - { - "node": "Sleep 3 seconds", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Contacts1": { - "main": [ - [ - { - "node": "Google Contacts2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Contacts2": { - "main": [ - [ - { - "node": "Google Contacts3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Contacts3": { - "main": [ - [ - { - "node": "Google Contacts4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Google Contacts", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 3 seconds": { - "main": [ - [ - { - "node": "Google Contacts1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/44.json b/test-workflows/workflows/44.json deleted file mode 100644 index a4e0144c3d4..00000000000 --- a/test-workflows/workflows/44.json +++ /dev/null @@ -1,389 +0,0 @@ -{ - "createdAt": "2021-02-19T07:45:12.148Z", - "updatedAt": "2021-02-26T12:22:54.085Z", - "id": "44", - "name": "GoogleDrive:Folder:create share delete:File:upload share list download copy delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 450 - ], - "id": "8213c874-bb15-4a4e-af12-efe5b749179c" - }, - { - "parameters": { - "authentication": "serviceAccount", - "resource": "folder", - "name": "testFolder" - }, - "name": "Google Drive", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 500, - 290 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "8fb84335-a6b3-4147-a352-72c7911cfe26" - }, - { - "parameters": { - "authentication": "serviceAccount", - "resource": "folder", - "operation": "share", - "fileId": "={{$node[\"Google Drive\"].json[\"id\"]}}", - "permissionsUi": { - "permissionsValues": { - "role": "reader", - "type": "anyone" - } - }, - "options": {} - }, - "name": "Google Drive1", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 670, - 290 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "07038a52-58d5-49a0-bd35-50499664a826" - }, - { - "parameters": { - "authentication": "serviceAccount", - "resource": "folder", - "operation": "delete", - "fileId": "={{$node[\"Google Drive\"].json[\"id\"]}}" - }, - "name": "Google Drive2", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 830, - 290 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "ebd9563e-f9fa-4ced-a791-fe0ffc3f5d00" - }, - { - "parameters": { - "authentication": "serviceAccount", - "fileContent": "Test File Content", - "name": "testFile", - "parents": [] - }, - "name": "Google Drive3", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 500, - 450 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "848f7c4d-60b3-4f21-96a0-28ce6768bff5" - }, - { - "parameters": { - "authentication": "serviceAccount", - "operation": "share", - "fileId": "={{$node[\"Google Drive3\"].json[\"id\"]}}", - "permissionsUi": { - "permissionsValues": { - "role": "reader", - "type": "anyone" - } - }, - "options": {} - }, - "name": "Google Drive4", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 650, - 450 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "6bc457b8-8cce-4664-89a7-3c59a4a1cac9" - }, - { - "parameters": { - "authentication": "serviceAccount", - "operation": "list", - "limit": 1, - "options": {} - }, - "name": "Google Drive5", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 800, - 450 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "939faa4e-f542-41ad-804a-cda6cc30cd89" - }, - { - "parameters": { - "authentication": "serviceAccount", - "operation": "download", - "fileId": "={{$node[\"Google Drive3\"].json[\"id\"]}}" - }, - "name": "Google Drive6", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 960, - 450 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "8fa69472-389c-416b-9be1-8e104c99f9f9" - }, - { - "parameters": { - "authentication": "serviceAccount", - "operation": "copy", - "fileId": "={{$node[\"Google Drive3\"].json[\"id\"]}}", - "options": {} - }, - "name": "Google Drive7", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 1100, - 450 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "1b9c73b8-4f19-49b8-9165-a8c125e264f6" - }, - { - "parameters": { - "authentication": "serviceAccount", - "operation": "delete", - "fileId": "={{$node[\"Google Drive3\"].json[\"id\"]}}" - }, - "name": "Google Drive8", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 1240, - 450 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "e17d373d-907f-4635-bd44-b0e85e24acf7" - }, - { - "parameters": { - "authentication": "serviceAccount", - "operation": "delete", - "fileId": "={{$node[\"Google Drive7\"].json[\"id\"]}}" - }, - "name": "Google Drive9", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 1380, - 450 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "8621da7a-e990-4dca-84b7-1ddccf256016" - }, - { - "parameters": { - "authentication": "serviceAccount", - "resource": "drive", - "options": {} - }, - "name": "Google Drive10", - "type": "n8n-nodes-base.googleDrive", - "typeVersion": 1, - "position": [ - 500, - 610 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "disabled": true, - "id": "6a675ae3-30c5-44cb-8811-66625259b47d" - } - ], - "connections": { - "Google Drive": { - "main": [ - [ - { - "node": "Google Drive1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Drive1": { - "main": [ - [ - { - "node": "Google Drive2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Google Drive", - "type": "main", - "index": 0 - }, - { - "node": "Google Drive3", - "type": "main", - "index": 0 - }, - { - "node": "Google Drive10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Drive3": { - "main": [ - [ - { - "node": "Google Drive4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Drive4": { - "main": [ - [ - { - "node": "Google Drive5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Drive5": { - "main": [ - [ - { - "node": "Google Drive6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Drive6": { - "main": [ - [ - { - "node": "Google Drive7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Drive7": { - "main": [ - [ - { - "node": "Google Drive8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Drive8": { - "main": [ - [ - { - "node": "Google Drive9", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/45.json b/test-workflows/workflows/45.json deleted file mode 100644 index cbc6f7cafa3..00000000000 --- a/test-workflows/workflows/45.json +++ /dev/null @@ -1,417 +0,0 @@ -{ - "createdAt": "2021-02-19T09:08:47.547Z", - "updatedAt": "2021-05-25T12:40:44.118Z", - "id": "45", - "name": "GoogleSheets:SpreadSheet:create:Sheet:create append read lookup update delete clean remove", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "8c3c86be-d507-41b2-835b-9b49c1c34dc1" - }, - { - "parameters": { - "authentication": "serviceAccount", - "resource": "spreadsheet", - "title": "=TestSpreadSheet {{(new Date()).toGMTString()}}", - "sheetsUi": { - "sheetValues": [] - }, - "options": {} - }, - "name": "Google Sheets", - "type": "n8n-nodes-base.googleSheets", - "typeVersion": 1, - "position": [ - 440, - 200 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "ca817592-040a-4fa1-a171-abe44d7a011c" - }, - { - "parameters": { - "authentication": "serviceAccount", - "operation": "append", - "sheetId": "1Vp6KkHSquwxi2Y4xiloyUMFrTAg9VHJ-PhGdgYq4apE", - "range": "A:B", - "options": { - "valueInputMode": "USER_ENTERED" - } - }, - "name": "Google Sheets1", - "type": "n8n-nodes-base.googleSheets", - "typeVersion": 1, - "position": [ - 610, - 360 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "f00b599c-3fd2-4c89-a9f0-84f33f4b0271" - }, - { - "parameters": { - "authentication": "serviceAccount", - "operation": "update", - "sheetId": "1Vp6KkHSquwxi2Y4xiloyUMFrTAg9VHJ-PhGdgYq4apE", - "range": "Sheet1!A:B", - "options": { - "valueInputMode": "USER_ENTERED" - } - }, - "name": "Google Sheets2", - "type": "n8n-nodes-base.googleSheets", - "typeVersion": 1, - "position": [ - 1200, - 360 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "174fac97-78c0-4474-9f9e-2b0a154eb6c5" - }, - { - "parameters": { - "keepOnlySet": true, - "values": { - "number": [ - { - "name": "id", - "value": "={{$node[\"Function\"].json[\"id\"]}}" - } - ], - "string": [ - { - "name": "name", - "value": "=Updated {{$node[\"Function\"].json[\"name\"]}}" - } - ] - }, - "options": {} - }, - "name": "Set1", - "type": "n8n-nodes-base.set", - "position": [ - 1050, - 360 - ], - "typeVersion": 1, - "alwaysOutputData": false, - "notesInFlow": true, - "notes": "Update one item name", - "id": "72366cc8-257d-40fe-be42-cc85b8a01edf" - }, - { - "parameters": { - "authentication": "serviceAccount", - "sheetId": "1Vp6KkHSquwxi2Y4xiloyUMFrTAg9VHJ-PhGdgYq4apE", - "range": "Sheet1!A:C", - "options": {} - }, - "name": "Google Sheets3", - "type": "n8n-nodes-base.googleSheets", - "typeVersion": 1, - "position": [ - 770, - 360 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "34ba96c0-f1d2-4d78-883c-f809166e8688" - }, - { - "parameters": { - "authentication": "serviceAccount", - "operation": "lookup", - "sheetId": "1Vp6KkHSquwxi2Y4xiloyUMFrTAg9VHJ-PhGdgYq4apE", - "range": "Sheet1!A:B", - "lookupColumn": "name", - "lookupValue": "test1", - "options": {} - }, - "name": "Google Sheets4", - "type": "n8n-nodes-base.googleSheets", - "typeVersion": 1, - "position": [ - 910, - 360 - ], - "alwaysOutputData": true, - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "e29d0550-1a22-4fc7-96a1-d4cc1b924b2f" - }, - { - "parameters": { - "authentication": "serviceAccount", - "operation": "clear", - "sheetId": "1Vp6KkHSquwxi2Y4xiloyUMFrTAg9VHJ-PhGdgYq4apE", - "range": "A2:C50" - }, - "name": "Google Sheets5", - "type": "n8n-nodes-base.googleSheets", - "typeVersion": 1, - "position": [ - 1500, - 360 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "6bbb5985-4367-4492-85db-aefcea813c99" - }, - { - "parameters": { - "authentication": "serviceAccount", - "operation": "delete", - "sheetId": "1Vp6KkHSquwxi2Y4xiloyUMFrTAg9VHJ-PhGdgYq4apE", - "toDelete": { - "columns": [], - "rows": [ - { - "sheetId": 0, - "startIndex": 1 - } - ] - } - }, - "name": "Google Sheets6", - "type": "n8n-nodes-base.googleSheets", - "typeVersion": 1, - "position": [ - 1350, - 360 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "0c129d65-37c8-48a6-b0fa-062a1b474d96" - }, - { - "parameters": { - "functionCode": "items = [\n {\n json:{\n id: Math.round(Math.random()*1000),\n name: 'test1'\n } \n },\n {\n json:{\n id: Math.round(Math.random()*1000),\n name: 'test2'\n } \n }\n]\nreturn items;" - }, - "name": "Function", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 440, - 360 - ], - "notesInFlow": true, - "notes": "create the input data", - "id": "e4dce6be-f388-4159-889f-0c0243a9a407" - }, - { - "parameters": { - "authentication": "serviceAccount", - "operation": "create", - "sheetId": "={{$node[\"Google Sheets\"].json[\"spreadsheetId\"]}}", - "options": { - "gridProperties": { - "columnCount": 10, - "rowCount": 20 - }, - "rightToLeft": false, - "index": 1, - "tabColor": "#FF6E39" - } - }, - "name": "Google Sheets7", - "type": "n8n-nodes-base.googleSheets", - "typeVersion": 1, - "position": [ - 600, - 200 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "e32770bf-a9e6-47cf-a75f-6e335ca46d3d" - }, - { - "parameters": { - "authentication": "serviceAccount", - "operation": "remove", - "sheetId": "={{$node[\"Google Sheets\"].json[\"spreadsheetId\"]}}", - "id": "={{$node[\"Google Sheets7\"].json[\"sheetId\"]}}" - }, - "name": "Google Sheets8", - "type": "n8n-nodes-base.googleSheets", - "typeVersion": 1, - "position": [ - 750, - 200 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "b3ff83fc-5bb3-4472-bbf4-c24a56e4ecf1" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Google Sheets", - "type": "main", - "index": 0 - }, - { - "node": "Function", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Sheets1": { - "main": [ - [ - { - "node": "Google Sheets3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Sheets2": { - "main": [ - [ - { - "node": "Google Sheets6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set1": { - "main": [ - [ - { - "node": "Google Sheets2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Sheets3": { - "main": [ - [ - { - "node": "Google Sheets4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Sheets4": { - "main": [ - [ - { - "node": "Set1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Sheets6": { - "main": [ - [ - { - "node": "Google Sheets5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Function": { - "main": [ - [ - { - "node": "Google Sheets1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Sheets": { - "main": [ - [ - { - "node": "Google Sheets7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Sheets7": { - "main": [ - [ - { - "node": "Google Sheets8", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/46.json b/test-workflows/workflows/46.json deleted file mode 100644 index 56e0ba6f889..00000000000 --- a/test-workflows/workflows/46.json +++ /dev/null @@ -1,332 +0,0 @@ -{ - "createdAt": "2021-02-19T09:10:55.093Z", - "updatedAt": "2021-06-04T16:58:49.525Z", - "id": "46", - "name": "GoogleBooks:Volume:getAll get:BookShelf:getAll get:BookShelfVolume:add move getAll remove clear", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 190, - 380 - ], - "id": "92c95e9a-bed8-4099-9f53-f2744380c0e2" - }, - { - "parameters": { - "authentication": "serviceAccount", - "resource": "volume", - "operation": "getAll", - "searchQuery": "lean startup", - "limit": 2 - }, - "name": "Google Books", - "type": "n8n-nodes-base.googleBooks", - "typeVersion": 1, - "position": [ - 480, - 300 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "notes": "IGNORED_PROPERTIES=userInfo", - "id": "2cc49cda-b0ee-4c8f-96c9-eede0627537c" - }, - { - "parameters": { - "authentication": "serviceAccount", - "resource": "volume", - "volumeId": "={{$node[\"Google Books\"].json[\"id\"]}}" - }, - "name": "Google Books1", - "type": "n8n-nodes-base.googleBooks", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "notes": "IGNORED_PROPERTIES=layerInfo", - "id": "629b25f8-ced3-41a0-9e8e-47a84c1c654b" - }, - { - "parameters": { - "authentication": "serviceAccount", - "operation": "getAll", - "myLibrary": true, - "limit": 1 - }, - "name": "Google Books2", - "type": "n8n-nodes-base.googleBooks", - "typeVersion": 1, - "position": [ - 480, - 460 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "6deb68ae-0a5d-4d1c-b8f0-e6f7a53bb67a" - }, - { - "parameters": { - "authentication": "serviceAccount", - "myLibrary": true, - "shelfId": "1001" - }, - "name": "Google Books3", - "type": "n8n-nodes-base.googleBooks", - "typeVersion": 1, - "position": [ - 640, - 460 - ], - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "75b090c9-0b7b-466a-8805-3a7a19cb4db8" - }, - { - "parameters": { - "authentication": "serviceAccount", - "resource": "bookshelfVolume", - "operation": "add", - "shelfId": "1001", - "volumeId": "={{$node[\"Google Books1\"].json[\"id\"]}}" - }, - "name": "Google Books4", - "type": "n8n-nodes-base.googleBooks", - "typeVersion": 1, - "position": [ - 820, - 420 - ], - "alwaysOutputData": true, - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "de433fd4-9964-4e37-9446-33248f9851f6" - }, - { - "parameters": { - "authentication": "serviceAccount", - "resource": "bookshelfVolume", - "operation": "move", - "shelfId": "1001", - "volumeId": "={{$node[\"Google Books1\"].json[\"id\"]}}", - "volumePosition": "1" - }, - "name": "Google Books5", - "type": "n8n-nodes-base.googleBooks", - "typeVersion": 1, - "position": [ - 990, - 420 - ], - "alwaysOutputData": true, - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "f797616b-cd2d-4f41-b138-eafeaac2a059" - }, - { - "parameters": { - "authentication": "serviceAccount", - "resource": "bookshelfVolume", - "myLibrary": true, - "shelfId": "1001", - "limit": 1 - }, - "name": "Google Books6", - "type": "n8n-nodes-base.googleBooks", - "typeVersion": 1, - "position": [ - 1150, - 420 - ], - "alwaysOutputData": true, - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "notes": "IGNORED_PROPERTIES=layerInfo", - "id": "2c5e6a25-48c7-44e7-bce6-e7b15af5632f" - }, - { - "parameters": { - "authentication": "serviceAccount", - "resource": "bookshelfVolume", - "operation": "remove", - "shelfId": "1001", - "volumeId": "={{$node[\"Google Books1\"].json[\"id\"]}}" - }, - "name": "Google Books7", - "type": "n8n-nodes-base.googleBooks", - "typeVersion": 1, - "position": [ - 1340, - 420 - ], - "alwaysOutputData": true, - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "3effe483-67fd-4dc4-90b2-aacea6a8e4b2" - }, - { - "parameters": { - "authentication": "serviceAccount", - "resource": "bookshelfVolume", - "operation": "clear", - "shelfId": "1001" - }, - "name": "Google Books8", - "type": "n8n-nodes-base.googleBooks", - "typeVersion": 1, - "position": [ - 1520, - 420 - ], - "alwaysOutputData": true, - "credentials": { - "googleApi": { - "id": "196", - "name": "Google API creds" - } - }, - "id": "e0d6001c-abb2-41b2-a61e-3aaa47999106" - } - ], - "connections": { - "Google Books": { - "main": [ - [ - { - "node": "Google Books1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Google Books", - "type": "main", - "index": 0 - }, - { - "node": "Google Books2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Books2": { - "main": [ - [ - { - "node": "Google Books3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Books1": { - "main": [ - [ - { - "node": "Google Books4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Books4": { - "main": [ - [ - { - "node": "Google Books5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Books5": { - "main": [ - [ - { - "node": "Google Books6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Books6": { - "main": [ - [ - { - "node": "Google Books7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Google Books7": { - "main": [ - [ - { - "node": "Google Books8", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/47.json b/test-workflows/workflows/47.json deleted file mode 100644 index 27b4bcc65fd..00000000000 --- a/test-workflows/workflows/47.json +++ /dev/null @@ -1,268 +0,0 @@ -{ - "createdAt": "2021-02-19T14:03:33.612Z", - "updatedAt": "2021-07-12T12:44:36.384Z", - "id": "47", - "name": "Airtable:append update read list delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 250 - ], - "id": "033f4cbc-f36c-41df-bce3-5726a6aace1e" - }, - { - "parameters": { - "operation": "append", - "application": "appxv9J85H3ZM4WZp", - "table": "FixedTestTable", - "options": {} - }, - "name": "Airtable", - "type": "n8n-nodes-base.airtable", - "typeVersion": 1, - "position": [ - 550, - 250 - ], - "credentials": { - "airtableApi": { - "id": "32", - "name": "Airtable creds" - } - }, - "id": "284d290d-93c8-441b-9b4e-0e21902f55a9" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "Name", - "value": "Test" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 400, - 250 - ], - "notesInFlow": true, - "notes": "Set Name column value", - "id": "0cd5f3da-97bd-4121-95f7-502338856476" - }, - { - "parameters": { - "operation": "update", - "application": "appxv9J85H3ZM4WZp", - "table": "FixedTestTable", - "id": "={{$node[\"Airtable\"].json[\"id\"]}}", - "updateAllFields": false, - "fields": [ - "Name" - ], - "options": {} - }, - "name": "Airtable1", - "type": "n8n-nodes-base.airtable", - "typeVersion": 1, - "position": [ - 850, - 250 - ], - "credentials": { - "airtableApi": { - "id": "32", - "name": "Airtable creds" - } - }, - "id": "3642a3b3-3fc0-4354-b8ae-4340c2735b68" - }, - { - "parameters": { - "application": "appxv9J85H3ZM4WZp", - "table": "FixedTestTable", - "id": "={{$node[\"Airtable\"].json[\"id\"]}}" - }, - "name": "Airtable2", - "type": "n8n-nodes-base.airtable", - "typeVersion": 1, - "position": [ - 1000, - 250 - ], - "credentials": { - "airtableApi": { - "id": "32", - "name": "Airtable creds" - } - }, - "id": "3075d56b-f6d9-42e1-9ce5-0270650d39d6" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "Name", - "value": "UpdatedTest" - } - ] - }, - "options": {} - }, - "name": "Set1", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 700, - 250 - ], - "notesInFlow": true, - "notes": "Update Name column", - "id": "517e190a-792d-43b5-a8df-31f4348c62f6" - }, - { - "parameters": { - "operation": "list", - "application": "appxv9J85H3ZM4WZp", - "table": "FixedTestTable", - "returnAll": false, - "limit": 1, - "additionalOptions": {} - }, - "name": "Airtable3", - "type": "n8n-nodes-base.airtable", - "typeVersion": 1, - "position": [ - 1150, - 250 - ], - "credentials": { - "airtableApi": { - "id": "32", - "name": "Airtable creds" - } - }, - "id": "51a97002-565f-4ac1-a1a5-83e9190f6ae2" - }, - { - "parameters": { - "operation": "delete", - "application": "appxv9J85H3ZM4WZp", - "table": "FixedTestTable", - "id": "={{$node[\"Airtable\"].json[\"id\"]}}" - }, - "name": "Airtable4", - "type": "n8n-nodes-base.airtable", - "typeVersion": 1, - "position": [ - 1300, - 250 - ], - "credentials": { - "airtableApi": { - "id": "32", - "name": "Airtable creds" - } - }, - "id": "5923a88f-cf48-4ea6-8fcd-fdf7ae8eb6ee" - } - ], - "connections": { - "Airtable": { - "main": [ - [ - { - "node": "Set1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set": { - "main": [ - [ - { - "node": "Airtable", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - }, - "Airtable1": { - "main": [ - [ - { - "node": "Airtable2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set1": { - "main": [ - [ - { - "node": "Airtable1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Airtable2": { - "main": [ - [ - { - "node": "Airtable3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Airtable3": { - "main": [ - [ - { - "node": "Airtable4", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/48.json b/test-workflows/workflows/48.json deleted file mode 100644 index e0c01fef6d1..00000000000 --- a/test-workflows/workflows/48.json +++ /dev/null @@ -1,603 +0,0 @@ -{ - "createdAt": "2021-02-19T14:19:19.630Z", - "updatedAt": "2021-02-19T14:42:39.385Z", - "id": "48", - "name": "Asana:Project:getAll get:Task:create update move getAll get delete:TaskComment:add remove:TaskTag:add remove:TaskProject:add remov e:SubTask:create getAll:User:get getAll", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 280, - 390 - ], - "id": "064566bb-7ae7-4ad5-97ab-69b2973f7eb9" - }, - { - "parameters": { - "resource": "project", - "operation": "getAll", - "workspace": "1177253494675264", - "limit": 1, - "additionalFields": {} - }, - "name": "Asana", - "type": "n8n-nodes-base.asana", - "typeVersion": 1, - "position": [ - 510, - 300 - ], - "credentials": { - "asanaApi": { - "id": "33", - "name": "Asana creds" - } - }, - "id": "c8bc019c-3007-4981-a93e-1f293b6f501a" - }, - { - "parameters": { - "resource": "project", - "id": "={{$node[\"Asana\"].json[\"gid\"]}}" - }, - "name": "Asana1", - "type": "n8n-nodes-base.asana", - "typeVersion": 1, - "position": [ - 660, - 300 - ], - "credentials": { - "asanaApi": { - "id": "33", - "name": "Asana creds" - } - }, - "id": "766f5d4b-3f5d-4f88-bbc4-4814d2b7c1ba" - }, - { - "parameters": { - "workspace": "1177253494675264", - "name": "TaskTest", - "otherProperties": { - "assignee": "1199961026001666" - } - }, - "name": "Asana2", - "type": "n8n-nodes-base.asana", - "typeVersion": 1, - "position": [ - 510, - 450 - ], - "credentials": { - "asanaApi": { - "id": "33", - "name": "Asana creds" - } - }, - "id": "776e73c2-bb77-4fee-8ef7-6921bc50e049" - }, - { - "parameters": { - "operation": "update", - "id": "={{$node[\"Asana2\"].json[\"gid\"]}}", - "otherProperties": { - "name": "UpdatedTestTask" - } - }, - "name": "Asana3", - "type": "n8n-nodes-base.asana", - "typeVersion": 1, - "position": [ - 660, - 450 - ], - "credentials": { - "asanaApi": { - "id": "33", - "name": "Asana creds" - } - }, - "id": "91c57a7e-1138-48dc-8048-0baec087a61d" - }, - { - "parameters": { - "operation": "move", - "id": "={{$node[\"Asana2\"].json[\"gid\"]}}", - "projectId": "1199961131378839", - "section": "1199961131378842" - }, - "name": "Asana4", - "type": "n8n-nodes-base.asana", - "typeVersion": 1, - "position": [ - 820, - 450 - ], - "credentials": { - "asanaApi": { - "id": "33", - "name": "Asana creds" - } - }, - "id": "40fb1194-7895-4bcb-ab3d-43918f35f9ed" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "filters": { - "assignee": "1199961026001666", - "workspace": "1177253494675264" - } - }, - "name": "Asana5", - "type": "n8n-nodes-base.asana", - "typeVersion": 1, - "position": [ - 970, - 450 - ], - "credentials": { - "asanaApi": { - "id": "33", - "name": "Asana creds" - } - }, - "id": "3116c2d7-5026-48fd-8f00-158d4fcd8019" - }, - { - "parameters": { - "operation": "get", - "id": "={{$node[\"Asana2\"].json[\"gid\"]}}" - }, - "name": "Asana6", - "type": "n8n-nodes-base.asana", - "typeVersion": 1, - "position": [ - 1130, - 450 - ], - "credentials": { - "asanaApi": { - "id": "33", - "name": "Asana creds" - } - }, - "id": "b993560a-0dc1-4ace-8185-ba82913c4c72" - }, - { - "parameters": { - "operation": "delete", - "id": "={{$node[\"Asana2\"].json[\"gid\"]}}" - }, - "name": "Asana7", - "type": "n8n-nodes-base.asana", - "typeVersion": 1, - "position": [ - 1680, - 460 - ], - "credentials": { - "asanaApi": { - "id": "33", - "name": "Asana creds" - } - }, - "id": "9a2fba6c-df53-494f-91c3-33af89e4c51c" - }, - { - "parameters": { - "resource": "taskComment", - "id": "={{$node[\"Asana2\"].json[\"gid\"]}}", - "text": "TestTaskComment", - "additionalFields": {} - }, - "name": "Asana8", - "type": "n8n-nodes-base.asana", - "typeVersion": 1, - "position": [ - 1310, - 300 - ], - "credentials": { - "asanaApi": { - "id": "33", - "name": "Asana creds" - } - }, - "id": "a262aed6-8572-4345-b686-abda94858dee" - }, - { - "parameters": { - "resource": "taskComment", - "operation": "remove", - "id": "={{$node[\"Asana8\"].json[\"gid\"]}}" - }, - "name": "Asana9", - "type": "n8n-nodes-base.asana", - "typeVersion": 1, - "position": [ - 1460, - 300 - ], - "credentials": { - "asanaApi": { - "id": "33", - "name": "Asana creds" - } - }, - "id": "82eaa43c-f3a9-482e-bd61-8c33b2c6702b" - }, - { - "parameters": { - "resource": "taskTag", - "id": "={{$node[\"Asana2\"].json[\"gid\"]}}", - "tag": "1199534487398432" - }, - "name": "Asana10", - "type": "n8n-nodes-base.asana", - "typeVersion": 1, - "position": [ - 1310, - 450 - ], - "credentials": { - "asanaApi": { - "id": "33", - "name": "Asana creds" - } - }, - "id": "0fa8b198-1c6a-4148-a9c3-1d99223118c6" - }, - { - "parameters": { - "resource": "taskTag", - "operation": "remove", - "id": "={{$node[\"Asana2\"].json[\"gid\"]}}", - "tag": "1199534487398432" - }, - "name": "Asana11", - "type": "n8n-nodes-base.asana", - "typeVersion": 1, - "position": [ - 1460, - 450 - ], - "credentials": { - "asanaApi": { - "id": "33", - "name": "Asana creds" - } - }, - "id": "fef9c7fa-3a84-4fce-9e1c-56aee5cff928" - }, - { - "parameters": { - "resource": "taskProject", - "id": "={{$node[\"Asana2\"].json[\"gid\"]}}", - "project": "1199961131378839", - "additionalFields": {} - }, - "name": "Asana12", - "type": "n8n-nodes-base.asana", - "typeVersion": 1, - "position": [ - 1310, - 600 - ], - "credentials": { - "asanaApi": { - "id": "33", - "name": "Asana creds" - } - }, - "id": "b90287d6-0d4a-44b7-b526-4debcc327803" - }, - { - "parameters": { - "resource": "taskProject", - "operation": "remove", - "id": "={{$node[\"Asana2\"].json[\"gid\"]}}", - "project": "1199961131378839" - }, - "name": "Asana13", - "type": "n8n-nodes-base.asana", - "typeVersion": 1, - "position": [ - 1460, - 600 - ], - "credentials": { - "asanaApi": { - "id": "33", - "name": "Asana creds" - } - }, - "id": "dc5a5de2-f621-47e9-8b9b-5ed13e7ba90c" - }, - { - "parameters": { - "resource": "user", - "userId": "1199961026001666" - }, - "name": "Asana14", - "type": "n8n-nodes-base.asana", - "typeVersion": 1, - "position": [ - 510, - 620 - ], - "credentials": { - "asanaApi": { - "id": "33", - "name": "Asana creds" - } - }, - "id": "b95e4adb-3e89-498f-9919-b8e5d2c92a4d" - }, - { - "parameters": { - "resource": "user", - "operation": "getAll", - "workspace": "1177253494675264" - }, - "name": "Asana15", - "type": "n8n-nodes-base.asana", - "typeVersion": 1, - "position": [ - 650, - 620 - ], - "credentials": { - "asanaApi": { - "id": "33", - "name": "Asana creds" - } - }, - "id": "2c9da710-8406-4d84-a8d1-c888ffc1e13e" - }, - { - "parameters": { - "resource": "subtask", - "taskId": "={{$node[\"Asana2\"].json[\"gid\"]}}", - "name": "SubTestTask", - "otherProperties": {} - }, - "name": "Asana16", - "type": "n8n-nodes-base.asana", - "typeVersion": 1, - "position": [ - 1310, - 760 - ], - "credentials": { - "asanaApi": { - "id": "33", - "name": "Asana creds" - } - }, - "id": "6788086b-1b9f-47c7-8eb4-31ba19ababe3" - }, - { - "parameters": { - "resource": "subtask", - "operation": "getAll", - "taskId": "={{$node[\"Asana2\"].json[\"gid\"]}}", - "limit": 1, - "options": {} - }, - "name": "Asana17", - "type": "n8n-nodes-base.asana", - "typeVersion": 1, - "position": [ - 1460, - 760 - ], - "credentials": { - "asanaApi": { - "id": "33", - "name": "Asana creds" - } - }, - "id": "87cfd6a1-342a-43eb-b056-febc6d6c9a47" - } - ], - "connections": { - "Asana": { - "main": [ - [ - { - "node": "Asana1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Asana2": { - "main": [ - [ - { - "node": "Asana3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Asana3": { - "main": [ - [ - { - "node": "Asana4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Asana4": { - "main": [ - [ - { - "node": "Asana5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Asana5": { - "main": [ - [ - { - "node": "Asana6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Asana6": { - "main": [ - [ - { - "node": "Asana8", - "type": "main", - "index": 0 - }, - { - "node": "Asana10", - "type": "main", - "index": 0 - }, - { - "node": "Asana12", - "type": "main", - "index": 0 - }, - { - "node": "Asana16", - "type": "main", - "index": 0 - } - ] - ] - }, - "Asana8": { - "main": [ - [ - { - "node": "Asana9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Asana9": { - "main": [ - [] - ] - }, - "Asana10": { - "main": [ - [ - { - "node": "Asana11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Asana11": { - "main": [ - [] - ] - }, - "Asana12": { - "main": [ - [ - { - "node": "Asana13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Asana13": { - "main": [ - [] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Asana2", - "type": "main", - "index": 0 - }, - { - "node": "Asana14", - "type": "main", - "index": 0 - }, - { - "node": "Asana", - "type": "main", - "index": 0 - } - ] - ] - }, - "Asana14": { - "main": [ - [ - { - "node": "Asana15", - "type": "main", - "index": 0 - } - ] - ] - }, - "Asana16": { - "main": [ - [ - { - "node": "Asana17", - "type": "main", - "index": 0 - } - ] - ] - }, - "Asana17": { - "main": [ - [ - { - "node": "Asana7", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/49.json b/test-workflows/workflows/49.json deleted file mode 100644 index ae5fb9292fc..00000000000 --- a/test-workflows/workflows/49.json +++ /dev/null @@ -1,127 +0,0 @@ -{ - "createdAt": "2021-02-19T16:46:19.188Z", - "updatedAt": "2021-02-19T16:46:33.650Z", - "id": "49", - "name": "Bitly:Link:create get update", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 300, - 300 - ], - "id": "2780ec3a-4691-4fb0-b10a-71c14b669e40" - }, - { - "parameters": { - "longUrl": "https://n8n.io/", - "additionalFields": { - "title": "n8n" - } - }, - "name": "Bitly", - "type": "n8n-nodes-base.bitly", - "typeVersion": 1, - "position": [ - 560, - 300 - ], - "credentials": { - "bitlyApi": { - "id": "34", - "name": "Bitly creds" - } - }, - "id": "f8d1516e-50b7-475e-9745-9b5b6bc8219c" - }, - { - "parameters": { - "operation": "get", - "id": "={{$node[\"Bitly\"].json[\"id\"]}}" - }, - "name": "Bitly1", - "type": "n8n-nodes-base.bitly", - "typeVersion": 1, - "position": [ - 730, - 300 - ], - "credentials": { - "bitlyApi": { - "id": "34", - "name": "Bitly creds" - } - }, - "id": "26aef02a-14df-4496-81c4-6f241501e42b" - }, - { - "parameters": { - "operation": "update", - "id": "={{$node[\"Bitly\"].json[\"id\"]}}", - "updateFields": { - "group": "Bl2jgvxfKYU" - } - }, - "name": "Bitly2", - "type": "n8n-nodes-base.bitly", - "typeVersion": 1, - "position": [ - 890, - 300 - ], - "credentials": { - "bitlyApi": { - "id": "34", - "name": "Bitly creds" - } - }, - "id": "d661eb9e-7481-4724-93b5-39e25d0f3e9f" - } - ], - "connections": { - "Bitly": { - "main": [ - [ - { - "node": "Bitly1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Bitly1": { - "main": [ - [ - { - "node": "Bitly2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Bitly", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/5.json b/test-workflows/workflows/5.json deleted file mode 100644 index bef0cf8d2f2..00000000000 --- a/test-workflows/workflows/5.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "createdAt": "2021-02-15T11:38:21.443Z", - "updatedAt": "2021-05-20T15:25:59.639Z", - "id": "5", - "name": "Hackernews:All:getAll:Article:get:User:get", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "481a7e7f-5ea7-402b-8316-f72c37b850bb" - }, - { - "parameters": { - "resource": "all", - "limit": 1, - "additionalFields": {} - }, - "name": "Hacker News", - "type": "n8n-nodes-base.hackerNews", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "id": "3c48cdd6-1b9f-41cc-9ffd-861839a17846" - }, - { - "parameters": { - "articleId": "={{$json[\"objectID\"]}}", - "additionalFields": {} - }, - "name": "Hacker News1", - "type": "n8n-nodes-base.hackerNews", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "id": "3cd97e86-f978-498a-9519-117a930529ad" - }, - { - "parameters": { - "resource": "user", - "username": "={{$json[\"author\"]}}" - }, - "name": "Hacker News2", - "type": "n8n-nodes-base.hackerNews", - "typeVersion": 1, - "position": [ - 850, - 300 - ], - "id": "4f1db844-dea5-4ee0-bf62-ae05a7467fe7" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Hacker News", - "type": "main", - "index": 0 - } - ] - ] - }, - "Hacker News": { - "main": [ - [ - { - "node": "Hacker News1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Hacker News1": { - "main": [ - [ - { - "node": "Hacker News2", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/50.json b/test-workflows/workflows/50.json deleted file mode 100644 index ee306ca609e..00000000000 --- a/test-workflows/workflows/50.json +++ /dev/null @@ -1,192 +0,0 @@ -{ - "createdAt": "2021-02-19T17:00:08.359Z", - "updatedAt": "2021-02-19T17:00:09.839Z", - "id": "50", - "name": "Brandfetch:color company font logo industry", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "82e5bad6-fe48-46f5-a494-d5c92fb33bde" - }, - { - "parameters": { - "operation": "color", - "domain": "n8n.io" - }, - "name": "Brandfetch", - "type": "n8n-nodes-base.Brandfetch", - "typeVersion": 1, - "position": [ - 500, - 300 - ], - "credentials": { - "brandfetchApi": { - "id": "35", - "name": "Brandfetch creds" - } - }, - "id": "5116c2ec-f940-48ed-b325-577e41ec28ab" - }, - { - "parameters": { - "operation": "company", - "domain": "n8n.io" - }, - "name": "Brandfetch1", - "type": "n8n-nodes-base.Brandfetch", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "credentials": { - "brandfetchApi": { - "id": "35", - "name": "Brandfetch creds" - } - }, - "id": "efa378a2-cac0-4e32-a068-ed3260cdbf5d" - }, - { - "parameters": { - "operation": "font", - "domain": "n8n.io" - }, - "name": "Brandfetch2", - "type": "n8n-nodes-base.Brandfetch", - "typeVersion": 1, - "position": [ - 800, - 300 - ], - "credentials": { - "brandfetchApi": { - "id": "35", - "name": "Brandfetch creds" - } - }, - "id": "7052951a-6829-437b-b222-13e0d19f8b2d" - }, - { - "parameters": { - "operation": "industry", - "domain": "n8n.io" - }, - "name": "Brandfetch3", - "type": "n8n-nodes-base.Brandfetch", - "typeVersion": 1, - "position": [ - 1100, - 300 - ], - "credentials": { - "brandfetchApi": { - "id": "35", - "name": "Brandfetch creds" - } - }, - "id": "98a08780-4212-4f77-9d7e-043da423672a" - }, - { - "parameters": { - "domain": "n8n.io", - "download": true, - "imageTypes": [ - "icon" - ] - }, - "name": "Brandfetch4", - "type": "n8n-nodes-base.Brandfetch", - "typeVersion": 1, - "position": [ - 950, - 300 - ], - "credentials": { - "brandfetchApi": { - "id": "35", - "name": "Brandfetch creds" - } - }, - "id": "0966b6d6-13c0-4571-9b79-4ac6966e7210" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Brandfetch", - "type": "main", - "index": 0 - } - ] - ] - }, - "Brandfetch": { - "main": [ - [ - { - "node": "Brandfetch1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Brandfetch1": { - "main": [ - [ - { - "node": "Brandfetch2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Brandfetch2": { - "main": [ - [ - { - "node": "Brandfetch4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Brandfetch3": { - "main": [ - [] - ] - }, - "Brandfetch4": { - "main": [ - [ - { - "node": "Brandfetch3", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/51.json b/test-workflows/workflows/51.json deleted file mode 100644 index ad26a5f0b2b..00000000000 --- a/test-workflows/workflows/51.json +++ /dev/null @@ -1,479 +0,0 @@ -{ - "createdAt": "2021-02-22T07:24:58.045Z", - "updatedAt": "2021-06-07T09:03:59.431Z", - "id": "51", - "name": "Clockify:Project:create update get getAll:Tag:create update getAll delete:TimeEntry:create update get delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 290, - 420 - ], - "id": "d407a858-2b0d-47c9-8004-c2aa1c1debb5" - }, - { - "parameters": { - "workspaceId": "60335ad3f24e660123d7fdee", - "name": "=TestProject created {{(new Date).toGMTString()}}", - "additionalFields": {} - }, - "name": "Clockify", - "type": "n8n-nodes-base.clockify", - "typeVersion": 1, - "position": [ - 500, - 250 - ], - "credentials": { - "clockifyApi": { - "id": "36", - "name": "Clockify creds" - } - }, - "id": "b95e9179-0b3e-41de-9f8e-e5ed5fb969e9" - }, - { - "parameters": { - "operation": "update", - "workspaceId": "60335ad3f24e660123d7fdee", - "projectId": "={{$node[\"Clockify\"].json[\"id\"]}}", - "updateFields": { - "name": "=Updated {{$node[\"Clockify\"].json[\"name\"]}}" - } - }, - "name": "Clockify1", - "type": "n8n-nodes-base.clockify", - "typeVersion": 1, - "position": [ - 650, - 250 - ], - "credentials": { - "clockifyApi": { - "id": "36", - "name": "Clockify creds" - } - }, - "id": "0eec5307-ecca-4bc5-b40f-e21090c2941c" - }, - { - "parameters": { - "operation": "get", - "workspaceId": "60335ad3f24e660123d7fdee", - "projectId": "={{$node[\"Clockify\"].json[\"id\"]}}" - }, - "name": "Clockify2", - "type": "n8n-nodes-base.clockify", - "typeVersion": 1, - "position": [ - 800, - 250 - ], - "credentials": { - "clockifyApi": { - "id": "36", - "name": "Clockify creds" - } - }, - "id": "dfaaf0b6-7657-42f7-b1a3-7bedbcdebfc0" - }, - { - "parameters": { - "operation": "getAll", - "workspaceId": "60335ad3f24e660123d7fdee", - "limit": 1, - "additionalFields": {} - }, - "name": "Clockify3", - "type": "n8n-nodes-base.clockify", - "typeVersion": 1, - "position": [ - 950, - 250 - ], - "credentials": { - "clockifyApi": { - "id": "36", - "name": "Clockify creds" - } - }, - "id": "e7648d2a-b3f5-4a72-97bc-4d923df7d32c" - }, - { - "parameters": { - "operation": "delete", - "workspaceId": "60335ad3f24e660123d7fdee", - "projectId": "={{$node[\"Clockify\"].json[\"id\"]}}" - }, - "name": "Clockify4", - "type": "n8n-nodes-base.clockify", - "typeVersion": 1, - "position": [ - 1100, - 250 - ], - "notesInFlow": true, - "credentials": { - "clockifyApi": { - "id": "36", - "name": "Clockify creds" - } - }, - "disabled": true, - "notes": "delete require archive first", - "id": "59497092-bb8d-41cb-b80e-8642e83fe865" - }, - { - "parameters": { - "resource": "tag", - "workspaceId": "60335ad3f24e660123d7fdee", - "name": "=TestTag{{$evaluateExpression(Math.random())}}" - }, - "name": "Clockify5", - "type": "n8n-nodes-base.clockify", - "typeVersion": 1, - "position": [ - 500, - 400 - ], - "credentials": { - "clockifyApi": { - "id": "36", - "name": "Clockify creds" - } - }, - "id": "780628c7-b7cb-4657-9d59-add61d07e849" - }, - { - "parameters": { - "resource": "tag", - "operation": "update", - "workspaceId": "60335ad3f24e660123d7fdee", - "tagId": "={{$node[\"Clockify5\"].json[\"id\"]}}", - "updateFields": { - "name": "=UpdatedTag{{$evaluateExpression(Math.random())}}" - } - }, - "name": "Clockify6", - "type": "n8n-nodes-base.clockify", - "typeVersion": 1, - "position": [ - 830, - 400 - ], - "credentials": { - "clockifyApi": { - "id": "36", - "name": "Clockify creds" - } - }, - "id": "43d5352c-56b1-4c6a-93c2-e09569209485" - }, - { - "parameters": { - "resource": "tag", - "operation": "getAll", - "workspaceId": "60335ad3f24e660123d7fdee", - "limit": 1, - "additionalFields": {} - }, - "name": "Clockify7", - "type": "n8n-nodes-base.clockify", - "typeVersion": 1, - "position": [ - 980, - 400 - ], - "credentials": { - "clockifyApi": { - "id": "36", - "name": "Clockify creds" - } - }, - "id": "28ccc080-049d-461f-ab30-ff877b0e0a92" - }, - { - "parameters": { - "resource": "tag", - "operation": "delete", - "workspaceId": "60335ad3f24e660123d7fdee", - "tagId": "={{$node[\"Clockify5\"].json[\"id\"]}}" - }, - "name": "Clockify8", - "type": "n8n-nodes-base.clockify", - "typeVersion": 1, - "position": [ - 1130, - 400 - ], - "credentials": { - "clockifyApi": { - "id": "36", - "name": "Clockify creds" - } - }, - "id": "a3cc2dea-5a89-44ac-92da-bcfbeac654a2" - }, - { - "parameters": { - "resource": "timeEntry", - "workspaceId": "60335ad3f24e660123d7fdee", - "start": "={{(new Date()).toISOString()}}", - "additionalFields": {} - }, - "name": "Clockify9", - "type": "n8n-nodes-base.clockify", - "typeVersion": 1, - "position": [ - 500, - 560 - ], - "credentials": { - "clockifyApi": { - "id": "36", - "name": "Clockify creds" - } - }, - "id": "2297d639-4261-46d0-b269-bd240b732fca" - }, - { - "parameters": { - "resource": "timeEntry", - "operation": "update", - "workspaceId": "60335ad3f24e660123d7fdee", - "timeEntryId": "={{$node[\"Clockify9\"].json[\"id\"]}}", - "updateFields": { - "description": "Updated time entry" - } - }, - "name": "Clockify10", - "type": "n8n-nodes-base.clockify", - "typeVersion": 1, - "position": [ - 650, - 560 - ], - "credentials": { - "clockifyApi": { - "id": "36", - "name": "Clockify creds" - } - }, - "id": "936d9faf-b8eb-4f28-aa6e-4ce43bf119ae" - }, - { - "parameters": { - "resource": "timeEntry", - "operation": "get", - "workspaceId": "60335ad3f24e660123d7fdee", - "timeEntryId": "={{$node[\"Clockify9\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Clockify11", - "type": "n8n-nodes-base.clockify", - "typeVersion": 1, - "position": [ - 800, - 560 - ], - "credentials": { - "clockifyApi": { - "id": "36", - "name": "Clockify creds" - } - }, - "id": "1b7e1644-9988-4794-91e4-278ec8dba2c4" - }, - { - "parameters": { - "resource": "timeEntry", - "operation": "delete", - "workspaceId": "60335ad3f24e660123d7fdee", - "timeEntryId": "={{$node[\"Clockify9\"].json[\"id\"]}}" - }, - "name": "Clockify12", - "type": "n8n-nodes-base.clockify", - "typeVersion": 1, - "position": [ - 950, - 560 - ], - "credentials": { - "clockifyApi": { - "id": "36", - "name": "Clockify creds" - } - }, - "id": "8af95310-ac19-43b8-a8c1-df89b2a715cc" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second", - "type": "n8n-nodes-base.function", - "position": [ - 660, - 400 - ], - "typeVersion": 1, - "id": "be2fd4bd-f014-48b8-9e52-f18cc6595477" - } - ], - "connections": { - "Clockify": { - "main": [ - [ - { - "node": "Clockify1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Clockify1": { - "main": [ - [ - { - "node": "Clockify2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Clockify2": { - "main": [ - [ - { - "node": "Clockify3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Clockify3": { - "main": [ - [ - { - "node": "Clockify4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Clockify5": { - "main": [ - [ - { - "node": "Sleep 0.5 second", - "type": "main", - "index": 0 - } - ] - ] - }, - "Clockify6": { - "main": [ - [ - { - "node": "Clockify7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Clockify7": { - "main": [ - [ - { - "node": "Clockify8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Clockify9": { - "main": [ - [ - { - "node": "Clockify10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Clockify10": { - "main": [ - [ - { - "node": "Clockify11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Clockify11": { - "main": [ - [ - { - "node": "Clockify12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Clockify", - "type": "main", - "index": 0 - }, - { - "node": "Clockify5", - "type": "main", - "index": 0 - }, - { - "node": "Clockify9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second": { - "main": [ - [ - { - "node": "Clockify6", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/52.json b/test-workflows/workflows/52.json deleted file mode 100644 index 7bf1b1de8c1..00000000000 --- a/test-workflows/workflows/52.json +++ /dev/null @@ -1,653 +0,0 @@ -{ - "createdAt": "2021-02-22T08:19:03.344Z", - "updatedAt": "2021-02-25T09:52:14.205Z", - "id": "52", - "name": "Coda:Table:getAllColumns getColumn getAllRows getRow createRow pushButton deleteRow:View:getAll get getAllViewColumns getAllViewRows updateViewRow pushViewButto n:Formula:get getAll:Control:get getAll", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 450 - ], - "id": "20619e15-af58-4fc0-9d21-275a6e4d4ebb" - }, - { - "parameters": { - "resource": "control", - "operation": "getAll", - "docId": "2-5DWWeFZp", - "limit": 1 - }, - "name": "Coda", - "type": "n8n-nodes-base.coda", - "typeVersion": 1, - "position": [ - 430, - 220 - ], - "credentials": { - "codaApi": { - "id": "37", - "name": "Code creds" - } - }, - "id": "fc0f43ee-65aa-4676-b393-6e3e9ffc33ca" - }, - { - "parameters": { - "resource": "control", - "docId": "2-5DWWeFZp", - "controlId": "={{$node[\"Coda\"].json[\"id\"]}}" - }, - "name": "Coda1", - "type": "n8n-nodes-base.coda", - "typeVersion": 1, - "position": [ - 580, - 220 - ], - "credentials": { - "codaApi": { - "id": "37", - "name": "Code creds" - } - }, - "id": "ac99a243-1fed-4faf-842d-96108d5b4d60" - }, - { - "parameters": { - "resource": "formula", - "operation": "getAll", - "docId": "2-5DWWeFZp", - "limit": 1 - }, - "name": "Coda2", - "type": "n8n-nodes-base.coda", - "typeVersion": 1, - "position": [ - 430, - 370 - ], - "credentials": { - "codaApi": { - "id": "37", - "name": "Code creds" - } - }, - "id": "8523646e-fffb-4958-b9fb-2ac34e3282e8" - }, - { - "parameters": { - "resource": "formula", - "docId": "2-5DWWeFZp", - "formulaId": "={{$node[\"Coda2\"].json[\"id\"]}}" - }, - "name": "Coda3", - "type": "n8n-nodes-base.coda", - "typeVersion": 1, - "position": [ - 580, - 370 - ], - "credentials": { - "codaApi": { - "id": "37", - "name": "Code creds" - } - }, - "id": "7027e41a-e726-4a36-af68-e05d5c64efac" - }, - { - "parameters": { - "operation": "getAllColumns", - "docId": "2-5DWWeFZp", - "tableId": "grid-lDqTU2W4nP", - "limit": 1 - }, - "name": "Coda4", - "type": "n8n-nodes-base.coda", - "typeVersion": 1, - "position": [ - 430, - 530 - ], - "credentials": { - "codaApi": { - "id": "37", - "name": "Code creds" - } - }, - "id": "ddb40d66-f1ad-49c3-a11d-c10c384f3e4f" - }, - { - "parameters": { - "operation": "getColumn", - "docId": "2-5DWWeFZp", - "tableId": "grid-lDqTU2W4nP", - "columnId": "={{$node[\"Coda4\"].json[\"id\"]}}" - }, - "name": "Coda5", - "type": "n8n-nodes-base.coda", - "typeVersion": 1, - "position": [ - 580, - 530 - ], - "credentials": { - "codaApi": { - "id": "37", - "name": "Code creds" - } - }, - "id": "e0443974-4778-4c76-9a7b-3307506f7ad9" - }, - { - "parameters": { - "operation": "getAllRows", - "docId": "2-5DWWeFZp", - "tableId": "grid-lDqTU2W4nP", - "limit": 1, - "options": {} - }, - "name": "Coda6", - "type": "n8n-nodes-base.coda", - "typeVersion": 1, - "position": [ - 730, - 530 - ], - "credentials": { - "codaApi": { - "id": "37", - "name": "Code creds" - } - }, - "id": "4d07fe9e-29f0-481d-860d-623d5e2f4116" - }, - { - "parameters": { - "operation": "getRow", - "docId": "2-5DWWeFZp", - "tableId": "grid-lDqTU2W4nP", - "rowId": "={{$node[\"Coda6\"].json[\"id\"]}}", - "options": {} - }, - "name": "Coda7", - "type": "n8n-nodes-base.coda", - "typeVersion": 1, - "position": [ - 880, - 530 - ], - "credentials": { - "codaApi": { - "id": "37", - "name": "Code creds" - } - }, - "id": "b00e4b21-5acb-493a-bb52-20725a4c4dde" - }, - { - "parameters": { - "docId": "2-5DWWeFZp", - "tableId": "grid-lDqTU2W4nP", - "options": {} - }, - "name": "Coda8", - "type": "n8n-nodes-base.coda", - "typeVersion": 1, - "position": [ - 1180, - 530 - ], - "credentials": { - "codaApi": { - "id": "37", - "name": "Code creds" - } - }, - "id": "814390a0-e0f7-4981-9243-b34b5b613071" - }, - { - "parameters": { - "keepOnlySet": true, - "values": { - "number": [ - { - "name": "number", - "value": 101 - }, - { - "name": "sum" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 1030, - 530 - ], - "id": "99b92bf6-f5d5-4c43-bd76-f55735c496f2" - }, - { - "parameters": { - "operation": "deleteRow", - "docId": "2-5DWWeFZp", - "tableId": "grid-lDqTU2W4nP", - "rowId": "={{$node[\"Coda6\"].json[\"id\"]}}" - }, - "name": "Coda9", - "type": "n8n-nodes-base.coda", - "typeVersion": 1, - "position": [ - 1480, - 530 - ], - "credentials": { - "codaApi": { - "id": "37", - "name": "Code creds" - } - }, - "id": "783160e7-a206-4dc3-9bce-b4b914c54a49" - }, - { - "parameters": { - "operation": "pushButton", - "docId": "2-5DWWeFZp", - "tableId": "grid-lDqTU2W4nP", - "rowId": "={{$node[\"Coda6\"].json[\"id\"]}}", - "columnId": "c-hTB8QwFtUS" - }, - "name": "Coda10", - "type": "n8n-nodes-base.coda", - "typeVersion": 1, - "position": [ - 1330, - 530 - ], - "credentials": { - "codaApi": { - "id": "37", - "name": "Code creds" - } - }, - "id": "43a39974-ac1c-4c2c-9011-113b8865f770" - }, - { - "parameters": { - "resource": "view", - "operation": "getAll", - "docId": "2-5DWWeFZp", - "limit": 1 - }, - "name": "Coda11", - "type": "n8n-nodes-base.coda", - "typeVersion": 1, - "position": [ - 430, - 700 - ], - "credentials": { - "codaApi": { - "id": "37", - "name": "Code creds" - } - }, - "id": "01270518-cd5e-41bc-860e-800107940b68" - }, - { - "parameters": { - "resource": "view", - "docId": "2-5DWWeFZp", - "viewId": "table-FTj1L0rh08" - }, - "name": "Coda12", - "type": "n8n-nodes-base.coda", - "typeVersion": 1, - "position": [ - 580, - 700 - ], - "credentials": { - "codaApi": { - "id": "37", - "name": "Code creds" - } - }, - "id": "f3f9ed26-a541-4107-ba9f-c1bd2004f886" - }, - { - "parameters": { - "resource": "view", - "operation": "getAllViewColumns", - "docId": "2-5DWWeFZp", - "viewId": "table-FTj1L0rh08", - "limit": 1 - }, - "name": "Coda13", - "type": "n8n-nodes-base.coda", - "typeVersion": 1, - "position": [ - 730, - 700 - ], - "credentials": { - "codaApi": { - "id": "37", - "name": "Code creds" - } - }, - "id": "6edc3858-5763-410f-8bb5-15bf84ce38db" - }, - { - "parameters": { - "resource": "view", - "operation": "getAllViewRows", - "docId": "2-5DWWeFZp", - "viewId": "table-FTj1L0rh08", - "limit": 1, - "options": {} - }, - "name": "Coda14", - "type": "n8n-nodes-base.coda", - "typeVersion": 1, - "position": [ - 880, - 700 - ], - "credentials": { - "codaApi": { - "id": "37", - "name": "Code creds" - } - }, - "id": "2e87f275-a020-4629-8319-7a47d149796e" - }, - { - "parameters": { - "resource": "view", - "operation": "updateViewRow", - "docId": "2-5DWWeFZp", - "viewId": "table-FTj1L0rh08", - "rowId": "={{$node[\"Coda14\"].json[\"id\"]}}", - "keyName": "number", - "options": { - "disableParsing": true - } - }, - "name": "Coda15", - "type": "n8n-nodes-base.coda", - "typeVersion": 1, - "position": [ - 1180, - 700 - ], - "credentials": { - "codaApi": { - "id": "37", - "name": "Code creds" - } - }, - "id": "0594b22d-0857-450a-9aa2-f2bf6cefd24d" - }, - { - "parameters": { - "keepOnlySet": true, - "values": { - "number": [ - { - "name": "number", - "value": 102 - }, - { - "name": "sum" - } - ] - }, - "options": {} - }, - "name": "Set1", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 1030, - 700 - ], - "id": "8af848c3-52a4-465b-99c7-e73c480825e4" - }, - { - "parameters": { - "resource": "view", - "operation": "pushViewButton", - "docId": "2-5DWWeFZp", - "viewId": "table-FTj1L0rh08", - "rowId": "={{$node[\"Coda14\"].json[\"id\"]}}", - "columnId": "c-hTB8QwFtUS" - }, - "name": "Coda16", - "type": "n8n-nodes-base.coda", - "typeVersion": 1, - "position": [ - 1330, - 700 - ], - "credentials": { - "codaApi": { - "id": "37", - "name": "Code creds" - } - }, - "id": "a48740c3-b5b1-4ac0-825b-accc0296dba0" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Coda11", - "type": "main", - "index": 0 - }, - { - "node": "Coda4", - "type": "main", - "index": 0 - }, - { - "node": "Coda2", - "type": "main", - "index": 0 - }, - { - "node": "Coda", - "type": "main", - "index": 0 - } - ] - ] - }, - "Coda": { - "main": [ - [ - { - "node": "Coda1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Coda2": { - "main": [ - [ - { - "node": "Coda3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Coda4": { - "main": [ - [ - { - "node": "Coda5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Coda5": { - "main": [ - [ - { - "node": "Coda6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Coda6": { - "main": [ - [ - { - "node": "Coda7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Coda7": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - }, - "Coda8": { - "main": [ - [ - { - "node": "Coda10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set": { - "main": [ - [ - { - "node": "Coda8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Coda10": { - "main": [ - [ - { - "node": "Coda9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Coda11": { - "main": [ - [ - { - "node": "Coda12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Coda12": { - "main": [ - [ - { - "node": "Coda13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Coda13": { - "main": [ - [ - { - "node": "Coda14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Coda14": { - "main": [ - [ - { - "node": "Set1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Coda15": { - "main": [ - [ - { - "node": "Coda16", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set1": { - "main": [ - [ - { - "node": "Coda15", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/53.json b/test-workflows/workflows/53.json deleted file mode 100644 index 4e85b603a53..00000000000 --- a/test-workflows/workflows/53.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "createdAt": "2021-02-22T09:25:07.982Z", - "updatedAt": "2021-06-01T10:33:44.740Z", - "id": "53", - "name": "ConvertKit:CustomField:create getAll update delete:Form:getAll addSubscriber getSubscriptions:Tag:create getAll:TagSubscriber:add getAll delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "524988a0-a07b-4aca-8284-22aa6f951ca0" - }, - { - "parameters": { - "resource": "customField", - "operation": "create", - "label": "=testField{{$evaluateExpression(Math.random())}}" - }, - "name": "ConvertKit", - "type": "n8n-nodes-base.convertKit", - "typeVersion": 1, - "position": [ - 450, - 240 - ], - "credentials": { - "convertKitApi": { - "id": "38", - "name": "ConvertKit creds" - } - }, - "id": "dcc8137a-d346-418a-b782-11cc2249b029" - }, - { - "parameters": { - "resource": "customField", - "operation": "getAll", - "limit": 1 - }, - "name": "ConvertKit1", - "type": "n8n-nodes-base.convertKit", - "typeVersion": 1, - "position": [ - 600, - 240 - ], - "credentials": { - "convertKitApi": { - "id": "38", - "name": "ConvertKit creds" - } - }, - "id": "be466a4d-3611-4f4d-bca6-997b894d1a07" - }, - { - "parameters": { - "resource": "customField", - "id": "={{$node[\"ConvertKit\"].json[\"id\"]}}", - "label": "UpdatedTestField" - }, - "name": "ConvertKit2", - "type": "n8n-nodes-base.convertKit", - "typeVersion": 1, - "position": [ - 750, - 240 - ], - "credentials": { - "convertKitApi": { - "id": "38", - "name": "ConvertKit creds" - } - }, - "id": "c09251ba-7a0a-4221-9f52-c40061f2b62b" - }, - { - "parameters": { - "resource": "customField", - "operation": "delete", - "id": "={{$node[\"ConvertKit\"].json[\"id\"]}}" - }, - "name": "ConvertKit3", - "type": "n8n-nodes-base.convertKit", - "typeVersion": 1, - "position": [ - 900, - 240 - ], - "credentials": { - "convertKitApi": { - "id": "38", - "name": "ConvertKit creds" - } - }, - "id": "d3073227-93de-4e3e-a82e-410659aeb65a" - }, - { - "parameters": { - "operation": "getAll" - }, - "name": "ConvertKit4", - "type": "n8n-nodes-base.convertKit", - "typeVersion": 1, - "position": [ - 450, - 400 - ], - "credentials": { - "convertKitApi": { - "id": "38", - "name": "ConvertKit creds" - } - }, - "id": "9792b051-1166-4ab6-bac6-2aae6f269f0a" - }, - { - "parameters": { - "id": 2059113, - "email": "=fakeemail{{Date.now()}}@gmail.com", - "additionalFields": {} - }, - "name": "ConvertKit5", - "type": "n8n-nodes-base.convertKit", - "typeVersion": 1, - "position": [ - 600, - 400 - ], - "credentials": { - "convertKitApi": { - "id": "38", - "name": "ConvertKit creds" - } - }, - "id": "195f9241-fc99-4184-aed1-b7a7a2672b2f" - }, - { - "parameters": { - "operation": "getSubscriptions", - "id": 2059113, - "limit": 1, - "additionalFields": {} - }, - "name": "ConvertKit6", - "type": "n8n-nodes-base.convertKit", - "typeVersion": 1, - "position": [ - 1490, - 400 - ], - "credentials": { - "convertKitApi": { - "id": "38", - "name": "ConvertKit creds" - } - }, - "id": "0ceb3aa2-56ef-4bb6-b08c-50f8267d85be" - }, - { - "parameters": { - "resource": "tag", - "name": "=tag{{Date.now()}}" - }, - "name": "ConvertKit7", - "type": "n8n-nodes-base.convertKit", - "typeVersion": 1, - "position": [ - 750, - 490 - ], - "credentials": { - "convertKitApi": { - "id": "38", - "name": "ConvertKit creds" - } - }, - "id": "9d905c82-8c32-4114-881a-28268f3238e7" - }, - { - "parameters": { - "resource": "tag", - "operation": "getAll", - "limit": 1 - }, - "name": "ConvertKit8", - "type": "n8n-nodes-base.convertKit", - "typeVersion": 1, - "position": [ - 890, - 490 - ], - "credentials": { - "convertKitApi": { - "id": "38", - "name": "ConvertKit creds" - } - }, - "id": "c5461704-d54f-4ad2-b0e1-fa9f217888ed" - }, - { - "parameters": { - "resource": "tagSubscriber", - "operation": "add", - "tagId": "={{$node[\"ConvertKit7\"].json[\"id\"]}}", - "email": "={{$node[\"ConvertKit5\"].json[\"subscriber\"][\"email_address\"]}}", - "additionalFields": {} - }, - "name": "ConvertKit9", - "type": "n8n-nodes-base.convertKit", - "typeVersion": 1, - "position": [ - 1050, - 550 - ], - "credentials": { - "convertKitApi": { - "id": "38", - "name": "ConvertKit creds" - } - }, - "id": "2b123134-1ed6-415f-b9c2-d20b0e1782c6" - }, - { - "parameters": { - "resource": "tagSubscriber", - "operation": "getAll", - "tagId": "={{$node[\"ConvertKit7\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "ConvertKit10", - "type": "n8n-nodes-base.convertKit", - "typeVersion": 1, - "position": [ - 1200, - 550 - ], - "alwaysOutputData": true, - "credentials": { - "convertKitApi": { - "id": "38", - "name": "ConvertKit creds" - } - }, - "id": "6b44a0a6-9252-48b3-848f-74feb59c7845" - }, - { - "parameters": { - "resource": "tagSubscriber", - "operation": "delete", - "tagId": "={{$node[\"ConvertKit7\"].json[\"id\"]}}", - "email": "={{$node[\"ConvertKit5\"].json[\"subscriber\"][\"email_address\"]}}" - }, - "name": "ConvertKit11", - "type": "n8n-nodes-base.convertKit", - "typeVersion": 1, - "position": [ - 1350, - 550 - ], - "credentials": { - "convertKitApi": { - "id": "38", - "name": "ConvertKit creds" - } - }, - "id": "4c309c5b-a55f-47da-9dee-8620b505e501" - } - ], - "connections": { - "ConvertKit": { - "main": [ - [ - { - "node": "ConvertKit1", - "type": "main", - "index": 0 - } - ] - ] - }, - "ConvertKit1": { - "main": [ - [ - { - "node": "ConvertKit2", - "type": "main", - "index": 0 - } - ] - ] - }, - "ConvertKit2": { - "main": [ - [ - { - "node": "ConvertKit3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "ConvertKit", - "type": "main", - "index": 0 - }, - { - "node": "ConvertKit4", - "type": "main", - "index": 0 - } - ] - ] - }, - "ConvertKit5": { - "main": [ - [ - { - "node": "ConvertKit7", - "type": "main", - "index": 0 - } - ] - ] - }, - "ConvertKit4": { - "main": [ - [ - { - "node": "ConvertKit5", - "type": "main", - "index": 0 - } - ] - ] - }, - "ConvertKit7": { - "main": [ - [ - { - "node": "ConvertKit8", - "type": "main", - "index": 0 - } - ] - ] - }, - "ConvertKit8": { - "main": [ - [ - { - "node": "ConvertKit9", - "type": "main", - "index": 0 - } - ] - ] - }, - "ConvertKit9": { - "main": [ - [ - { - "node": "ConvertKit10", - "type": "main", - "index": 0 - } - ] - ] - }, - "ConvertKit10": { - "main": [ - [ - { - "node": "ConvertKit11", - "type": "main", - "index": 0 - } - ] - ] - }, - "ConvertKit11": { - "main": [ - [ - { - "node": "ConvertKit6", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/54.json b/test-workflows/workflows/54.json deleted file mode 100644 index 7c7638e5b6c..00000000000 --- a/test-workflows/workflows/54.json +++ /dev/null @@ -1,852 +0,0 @@ -{ - "createdAt": "2021-02-22T10:00:31.563Z", - "updatedAt": "2021-02-22T10:50:12.567Z", - "id": "54", - "name": "InvoiceNinja:Client:create getAll get delete:Expense:create getAll get delete:Invoice:create getAll get email delete:Payment:create get getAll delete:Quote:crea te getAll get email delete:Task:create getAll get delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 850 - ], - "id": "1d47bc56-1b68-4ff0-8007-ae06b9c29610" - }, - { - "parameters": { - "additionalFields": { - "clientName": "=TestClient{{Date.now()}}" - } - }, - "name": "Invoice Ninja", - "type": "n8n-nodes-base.invoiceNinja", - "typeVersion": 1, - "position": [ - 500, - 390 - ], - "credentials": { - "invoiceNinjaApi": { - "id": "39", - "name": "Invoice Ninja creds " - } - }, - "id": "5b32c13a-c05e-45b6-8fdc-6174ebc941ea" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "Invoice Ninja1", - "type": "n8n-nodes-base.invoiceNinja", - "typeVersion": 1, - "position": [ - 650, - 390 - ], - "credentials": { - "invoiceNinjaApi": { - "id": "39", - "name": "Invoice Ninja creds " - } - }, - "id": "1db90b48-219d-4e96-a782-7ff5823e9ee5" - }, - { - "parameters": { - "operation": "get", - "clientId": "={{$node[\"Invoice Ninja\"].json[\"id\"]}}", - "options": {} - }, - "name": "Invoice Ninja2", - "type": "n8n-nodes-base.invoiceNinja", - "typeVersion": 1, - "position": [ - 800, - 390 - ], - "credentials": { - "invoiceNinjaApi": { - "id": "39", - "name": "Invoice Ninja creds " - } - }, - "id": "f3e516a2-8e52-4fdb-80ba-932c960f6976" - }, - { - "parameters": { - "operation": "delete", - "clientId": "={{$node[\"Invoice Ninja\"].json[\"id\"]}}" - }, - "name": "Invoice Ninja3", - "type": "n8n-nodes-base.invoiceNinja", - "typeVersion": 1, - "position": [ - 950, - 390 - ], - "credentials": { - "invoiceNinjaApi": { - "id": "39", - "name": "Invoice Ninja creds " - } - }, - "id": "cd219ff6-4105-4690-8d9c-918d8f35cdd9" - }, - { - "parameters": { - "resource": "expense", - "additionalFields": { - "amount": 100 - } - }, - "name": "Invoice Ninja4", - "type": "n8n-nodes-base.invoiceNinja", - "typeVersion": 1, - "position": [ - 500, - 550 - ], - "credentials": { - "invoiceNinjaApi": { - "id": "39", - "name": "Invoice Ninja creds " - } - }, - "id": "1d666aef-f593-42d3-9b61-fb54fe36bf0e" - }, - { - "parameters": { - "resource": "expense", - "operation": "getAll", - "limit": 1 - }, - "name": "Invoice Ninja5", - "type": "n8n-nodes-base.invoiceNinja", - "typeVersion": 1, - "position": [ - 650, - 550 - ], - "credentials": { - "invoiceNinjaApi": { - "id": "39", - "name": "Invoice Ninja creds " - } - }, - "id": "42b27738-9c2e-41e5-ba79-93efb0087729" - }, - { - "parameters": { - "resource": "expense", - "operation": "get", - "expenseId": "={{$node[\"Invoice Ninja4\"].json[\"id\"]}}" - }, - "name": "Invoice Ninja6", - "type": "n8n-nodes-base.invoiceNinja", - "typeVersion": 1, - "position": [ - 800, - 550 - ], - "credentials": { - "invoiceNinjaApi": { - "id": "39", - "name": "Invoice Ninja creds " - } - }, - "id": "578e0bbd-f7a9-4640-a3ad-de936eaacd79" - }, - { - "parameters": { - "resource": "expense", - "operation": "delete", - "expenseId": "={{$node[\"Invoice Ninja4\"].json[\"id\"]}}" - }, - "name": "Invoice Ninja7", - "type": "n8n-nodes-base.invoiceNinja", - "typeVersion": 1, - "position": [ - 950, - 550 - ], - "credentials": { - "invoiceNinjaApi": { - "id": "39", - "name": "Invoice Ninja creds " - } - }, - "id": "994c5b63-8463-49db-b22f-5019e9c0917b" - }, - { - "parameters": { - "resource": "invoice", - "additionalFields": { - "email": "test@gmail.com" - } - }, - "name": "Invoice Ninja8", - "type": "n8n-nodes-base.invoiceNinja", - "typeVersion": 1, - "position": [ - 500, - 710 - ], - "credentials": { - "invoiceNinjaApi": { - "id": "39", - "name": "Invoice Ninja creds " - } - }, - "id": "4153127d-468e-4c08-9f06-768e4b192403" - }, - { - "parameters": { - "resource": "invoice", - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "Invoice Ninja9", - "type": "n8n-nodes-base.invoiceNinja", - "typeVersion": 1, - "position": [ - 1250, - 710 - ], - "credentials": { - "invoiceNinjaApi": { - "id": "39", - "name": "Invoice Ninja creds " - } - }, - "id": "9c236165-1824-44f9-8614-00e0a17a1103" - }, - { - "parameters": { - "resource": "invoice", - "operation": "get", - "invoiceId": "={{$node[\"Invoice Ninja8\"].json[\"id\"]}}", - "options": {} - }, - "name": "Invoice Ninja10", - "type": "n8n-nodes-base.invoiceNinja", - "typeVersion": 1, - "position": [ - 1400, - 710 - ], - "credentials": { - "invoiceNinjaApi": { - "id": "39", - "name": "Invoice Ninja creds " - } - }, - "id": "44b48920-a293-4ca9-9033-178a18b3bf21" - }, - { - "parameters": { - "resource": "invoice", - "operation": "email", - "invoiceId": "={{$node[\"Invoice Ninja8\"].json[\"id\"]}}" - }, - "name": "Invoice Ninja11", - "type": "n8n-nodes-base.invoiceNinja", - "typeVersion": 1, - "position": [ - 1550, - 710 - ], - "credentials": { - "invoiceNinjaApi": { - "id": "39", - "name": "Invoice Ninja creds " - } - }, - "id": "aa19e0ab-0cbb-496c-a110-d16119d8a998" - }, - { - "parameters": { - "resource": "invoice", - "operation": "delete", - "invoiceId": "={{$node[\"Invoice Ninja8\"].json[\"id\"]}}" - }, - "name": "Invoice Ninja12", - "type": "n8n-nodes-base.invoiceNinja", - "typeVersion": 1, - "position": [ - 1700, - 710 - ], - "credentials": { - "invoiceNinjaApi": { - "id": "39", - "name": "Invoice Ninja creds " - } - }, - "id": "9bb13cc8-610b-42c1-9f6d-8971091ae507" - }, - { - "parameters": { - "resource": "payment", - "invoice": "={{$node[\"Invoice Ninja8\"].json[\"id\"]}}", - "amount": 102, - "additionalFields": {} - }, - "name": "Invoice Ninja14", - "type": "n8n-nodes-base.invoiceNinja", - "typeVersion": 1, - "position": [ - 650, - 820 - ], - "credentials": { - "invoiceNinjaApi": { - "id": "39", - "name": "Invoice Ninja creds " - } - }, - "id": "d19e4bad-d79d-4012-b32a-257cb0ebaa05" - }, - { - "parameters": { - "resource": "quote", - "additionalFields": { - "email": "test@gmail.com" - } - }, - "name": "Invoice Ninja15", - "type": "n8n-nodes-base.invoiceNinja", - "typeVersion": 1, - "position": [ - 500, - 1020 - ], - "credentials": { - "invoiceNinjaApi": { - "id": "39", - "name": "Invoice Ninja creds " - } - }, - "id": "c00c4d59-128a-41eb-9518-b132948d1054" - }, - { - "parameters": { - "resource": "quote", - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "Invoice Ninja16", - "type": "n8n-nodes-base.invoiceNinja", - "typeVersion": 1, - "position": [ - 650, - 1020 - ], - "credentials": { - "invoiceNinjaApi": { - "id": "39", - "name": "Invoice Ninja creds " - } - }, - "id": "0b4a39fa-9360-4011-b989-a42fc7d283ee" - }, - { - "parameters": { - "resource": "quote", - "operation": "get", - "quoteId": "={{$node[\"Invoice Ninja15\"].json[\"id\"]}}", - "options": {} - }, - "name": "Invoice Ninja17", - "type": "n8n-nodes-base.invoiceNinja", - "typeVersion": 1, - "position": [ - 800, - 1020 - ], - "credentials": { - "invoiceNinjaApi": { - "id": "39", - "name": "Invoice Ninja creds " - } - }, - "id": "3d2b2f4b-eed9-4419-849d-cae56ae9cba3" - }, - { - "parameters": { - "resource": "quote", - "operation": "email", - "quoteId": "={{$node[\"Invoice Ninja15\"].json[\"id\"]}}" - }, - "name": "Invoice Ninja18", - "type": "n8n-nodes-base.invoiceNinja", - "typeVersion": 1, - "position": [ - 950, - 1020 - ], - "credentials": { - "invoiceNinjaApi": { - "id": "39", - "name": "Invoice Ninja creds " - } - }, - "id": "f99b80b6-5dda-4bc6-b2c4-1a43c715f23c" - }, - { - "parameters": { - "resource": "quote", - "operation": "delete", - "quoteId": "={{$node[\"Invoice Ninja15\"].json[\"id\"]}}" - }, - "name": "Invoice Ninja19", - "type": "n8n-nodes-base.invoiceNinja", - "typeVersion": 1, - "position": [ - 1100, - 1020 - ], - "credentials": { - "invoiceNinjaApi": { - "id": "39", - "name": "Invoice Ninja creds " - } - }, - "id": "0a02025d-782e-4f1f-b17a-618449393a87" - }, - { - "parameters": { - "resource": "task", - "additionalFields": {} - }, - "name": "Invoice Ninja20", - "type": "n8n-nodes-base.invoiceNinja", - "typeVersion": 1, - "position": [ - 500, - 1180 - ], - "credentials": { - "invoiceNinjaApi": { - "id": "39", - "name": "Invoice Ninja creds " - } - }, - "id": "42fbd794-c557-4b30-863a-fbbe0012772d" - }, - { - "parameters": { - "resource": "task", - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "Invoice Ninja21", - "type": "n8n-nodes-base.invoiceNinja", - "typeVersion": 1, - "position": [ - 650, - 1180 - ], - "credentials": { - "invoiceNinjaApi": { - "id": "39", - "name": "Invoice Ninja creds " - } - }, - "id": "dd74acb7-ad5f-4a04-8b54-5d57846031dc" - }, - { - "parameters": { - "resource": "task", - "operation": "get", - "taskId": "={{$node[\"Invoice Ninja20\"].json[\"id\"]}}", - "options": {} - }, - "name": "Invoice Ninja22", - "type": "n8n-nodes-base.invoiceNinja", - "typeVersion": 1, - "position": [ - 800, - 1180 - ], - "credentials": { - "invoiceNinjaApi": { - "id": "39", - "name": "Invoice Ninja creds " - } - }, - "id": "2066f094-5f18-4e14-9349-4ae32a803a4a" - }, - { - "parameters": { - "resource": "task", - "operation": "delete", - "taskId": "={{$node[\"Invoice Ninja20\"].json[\"id\"]}}" - }, - "name": "Invoice Ninja23", - "type": "n8n-nodes-base.invoiceNinja", - "typeVersion": 1, - "position": [ - 950, - 1180 - ], - "credentials": { - "invoiceNinjaApi": { - "id": "39", - "name": "Invoice Ninja creds " - } - }, - "id": "7f0705d7-cb3d-44d5-a47b-65605b653f4a" - }, - { - "parameters": { - "resource": "payment", - "operation": "get", - "paymentId": "={{$node[\"Invoice Ninja14\"].json[\"id\"]}}", - "options": {} - }, - "name": "Invoice Ninja24", - "type": "n8n-nodes-base.invoiceNinja", - "typeVersion": 1, - "position": [ - 800, - 820 - ], - "credentials": { - "invoiceNinjaApi": { - "id": "39", - "name": "Invoice Ninja creds " - } - }, - "id": "a3f3f226-e931-4185-891c-b98f554a1634" - }, - { - "parameters": { - "resource": "payment", - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "Invoice Ninja25", - "type": "n8n-nodes-base.invoiceNinja", - "typeVersion": 1, - "position": [ - 950, - 820 - ], - "credentials": { - "invoiceNinjaApi": { - "id": "39", - "name": "Invoice Ninja creds " - } - }, - "id": "e4660139-dc2c-4555-88aa-ab38b4ac1f31" - }, - { - "parameters": { - "resource": "payment", - "operation": "delete", - "paymentId": "={{$node[\"Invoice Ninja14\"].json[\"id\"]}}" - }, - "name": "Invoice Ninja26", - "type": "n8n-nodes-base.invoiceNinja", - "typeVersion": 1, - "position": [ - 1100, - 820 - ], - "credentials": { - "invoiceNinjaApi": { - "id": "39", - "name": "Invoice Ninja creds " - } - }, - "id": "465cbca5-b9b9-4e70-b245-a80defd3c7cd" - } - ], - "connections": { - "Invoice Ninja": { - "main": [ - [ - { - "node": "Invoice Ninja1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Invoice Ninja1": { - "main": [ - [ - { - "node": "Invoice Ninja2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Invoice Ninja4", - "type": "main", - "index": 0 - }, - { - "node": "Invoice Ninja8", - "type": "main", - "index": 0 - }, - { - "node": "Invoice Ninja15", - "type": "main", - "index": 0 - }, - { - "node": "Invoice Ninja", - "type": "main", - "index": 0 - }, - { - "node": "Invoice Ninja20", - "type": "main", - "index": 0 - } - ] - ] - }, - "Invoice Ninja3": { - "main": [ - [] - ] - }, - "Invoice Ninja2": { - "main": [ - [ - { - "node": "Invoice Ninja3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Invoice Ninja4": { - "main": [ - [ - { - "node": "Invoice Ninja5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Invoice Ninja5": { - "main": [ - [ - { - "node": "Invoice Ninja6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Invoice Ninja6": { - "main": [ - [ - { - "node": "Invoice Ninja7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Invoice Ninja8": { - "main": [ - [ - { - "node": "Invoice Ninja14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Invoice Ninja9": { - "main": [ - [ - { - "node": "Invoice Ninja10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Invoice Ninja10": { - "main": [ - [ - { - "node": "Invoice Ninja11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Invoice Ninja11": { - "main": [ - [ - { - "node": "Invoice Ninja12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Invoice Ninja15": { - "main": [ - [ - { - "node": "Invoice Ninja16", - "type": "main", - "index": 0 - } - ] - ] - }, - "Invoice Ninja16": { - "main": [ - [ - { - "node": "Invoice Ninja17", - "type": "main", - "index": 0 - } - ] - ] - }, - "Invoice Ninja17": { - "main": [ - [ - { - "node": "Invoice Ninja18", - "type": "main", - "index": 0 - } - ] - ] - }, - "Invoice Ninja18": { - "main": [ - [ - { - "node": "Invoice Ninja19", - "type": "main", - "index": 0 - } - ] - ] - }, - "Invoice Ninja20": { - "main": [ - [ - { - "node": "Invoice Ninja21", - "type": "main", - "index": 0 - } - ] - ] - }, - "Invoice Ninja21": { - "main": [ - [ - { - "node": "Invoice Ninja22", - "type": "main", - "index": 0 - } - ] - ] - }, - "Invoice Ninja22": { - "main": [ - [ - { - "node": "Invoice Ninja23", - "type": "main", - "index": 0 - } - ] - ] - }, - "Invoice Ninja14": { - "main": [ - [ - { - "node": "Invoice Ninja24", - "type": "main", - "index": 0 - } - ] - ] - }, - "Invoice Ninja24": { - "main": [ - [ - { - "node": "Invoice Ninja25", - "type": "main", - "index": 0 - } - ] - ] - }, - "Invoice Ninja25": { - "main": [ - [ - { - "node": "Invoice Ninja26", - "type": "main", - "index": 0 - } - ] - ] - }, - "Invoice Ninja26": { - "main": [ - [ - { - "node": "Invoice Ninja9", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/55.json b/test-workflows/workflows/55.json deleted file mode 100644 index b0f987c3cbc..00000000000 --- a/test-workflows/workflows/55.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "createdAt": "2021-02-22T11:10:50.078Z", - "updatedAt": "2021-02-22T11:10:50.078Z", - "id": "55", - "name": "Hunter: domainSearch emailFinder emailVerifier", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "71b4c90c-bc69-40af-ae0d-4148c869e90f" - }, - { - "parameters": { - "domain": "n8n.io", - "limit": 1, - "filters": {} - }, - "name": "Hunter", - "type": "n8n-nodes-base.hunter", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "hunterApi": { - "id": "40", - "name": "Hunter creds" - } - }, - "id": "1d897521-8f0d-4e5b-8c16-e4db83af76de" - }, - { - "parameters": { - "operation": "emailFinder", - "domain": "n8n.io", - "firstname": "hosting", - "lastname": "test" - }, - "name": "Hunter1", - "type": "n8n-nodes-base.hunter", - "typeVersion": 1, - "position": [ - 600, - 300 - ], - "credentials": { - "hunterApi": { - "id": "40", - "name": "Hunter creds" - } - }, - "id": "e3d7ac81-0e2f-4c1c-947e-99539c16049f" - }, - { - "parameters": { - "operation": "emailVerifier", - "email": "nodeqa@n8n.io" - }, - "name": "Hunter2", - "type": "n8n-nodes-base.hunter", - "typeVersion": 1, - "position": [ - 750, - 300 - ], - "credentials": { - "hunterApi": { - "id": "40", - "name": "Hunter creds" - } - }, - "id": "6882fbb1-7af6-4585-90f3-d2881e1c07aa" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Hunter", - "type": "main", - "index": 0 - } - ] - ] - }, - "Hunter": { - "main": [ - [ - { - "node": "Hunter1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Hunter1": { - "main": [ - [ - { - "node": "Hunter2", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/56.json b/test-workflows/workflows/56.json deleted file mode 100644 index 08a87e29e52..00000000000 --- a/test-workflows/workflows/56.json +++ /dev/null @@ -1,1145 +0,0 @@ -{ - "createdAt": "2021-02-22T11:29:46.504Z", - "updatedAt": "2021-02-22T13:29:41.718Z", - "id": "56", - "name": "Trello:Board:*List:*Card:*Label:*CardComment:*Attachment:*CheckList:*", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - -580, - 310 - ], - "id": "60bc897d-49b0-41d9-9ecd-a241e69f23fd" - }, - { - "parameters": { - "resource": "board", - "name": "TestBoard", - "description": "test qa board", - "additionalFields": {} - }, - "name": "Trello", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - -300, - 311 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "d9bb9631-be15-44b7-8962-15adb038513f" - }, - { - "parameters": { - "resource": "board", - "operation": "update", - "id": "={{$node[\"Trello\"].json[\"id\"]}}", - "updateFields": { - "name": "UpatedTestBoard" - } - }, - "name": "Trello1", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 2970, - 301 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "5240d7bc-d9d5-465e-87d5-7d68513b0552" - }, - { - "parameters": { - "resource": "board", - "operation": "get", - "id": "={{$node[\"Trello\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Trello2", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 3120, - 301 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "d7d28b3a-a2ec-4c45-aeab-ffd60fa7ed1c" - }, - { - "parameters": { - "resource": "board", - "operation": "delete", - "id": "={{$node[\"Trello\"].json[\"id\"]}}" - }, - "name": "Trello3", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 3270, - 301 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "bfd73a34-44a6-4067-9e68-47f217a6e96a" - }, - { - "parameters": { - "resource": "list", - "idBoard": "={{$node[\"Trello\"].json[\"id\"]}}", - "name": "To Test", - "additionalFields": {} - }, - "name": "Trello4", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - -160, - 411 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "f539269f-9813-4158-9cfb-3568adc2ad4a" - }, - { - "parameters": { - "resource": "list", - "operation": "update", - "id": "={{$node[\"Trello4\"].json[\"id\"]}}", - "updateFields": {} - }, - "name": "Trello5", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - -10, - 411 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "6cc9eb56-e9ac-48bd-965f-61da503191f8" - }, - { - "parameters": { - "resource": "list", - "operation": "get", - "id": "={{$node[\"Trello4\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Trello6", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 140, - 411 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "9ee41feb-6b2d-4b76-9e39-13a8a41553e6" - }, - { - "parameters": { - "resource": "list", - "operation": "getAll", - "id": "={{$node[\"Trello\"].json[\"id\"]}}", - "limit": 1, - "additionalFields": {} - }, - "name": "Trello7", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 290, - 411 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "34c2e5be-9ae1-4212-991b-8099e11fedb1" - }, - { - "parameters": { - "resource": "list", - "operation": "getCards", - "id": "={{$node[\"Trello4\"].json[\"id\"]}}", - "limit": 1, - "additionalFields": {} - }, - "name": "Trello8", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 2550, - 401 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "6ecf2b95-1431-4ca6-85da-a099c2152169" - }, - { - "parameters": { - "resource": "list", - "operation": "archive", - "id": "={{$node[\"Trello4\"].json[\"id\"]}}" - }, - "name": "Trello9", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 2840, - 401 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "92cfc2ec-b2bb-4e00-afae-1a540903886a" - }, - { - "parameters": { - "listId": "={{$node[\"Trello4\"].json[\"id\"]}}", - "name": "TestCard", - "description": "qa test card", - "additionalFields": {} - }, - "name": "Trello10", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 430, - 511 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "3ecf077b-90ae-484b-91f7-a134defb5a9b" - }, - { - "parameters": { - "resource": "cardComment", - "cardId": "={{$node[\"Trello10\"].json[\"id\"]}}", - "text": "Test comment" - }, - "name": "Trello11", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 590, - 591 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "f60d1db5-08b7-47d3-8e87-c6d6db863400" - }, - { - "parameters": { - "resource": "cardComment", - "operation": "update", - "cardId": "={{$node[\"Trello10\"].json[\"id\"]}}", - "commentId": "={{$node[\"Trello11\"].json[\"id\"]}}", - "text": "Updated comment" - }, - "name": "Trello12", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 740, - 591 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "b9b78d60-9ac7-47a7-a21d-91c0eea11529" - }, - { - "parameters": { - "resource": "cardComment", - "operation": "delete", - "cardId": "={{$node[\"Trello10\"].json[\"id\"]}}", - "commentId": "={{$node[\"Trello11\"].json[\"id\"]}}" - }, - "name": "Trello13", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 890, - 591 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "ab58cd8f-6d9c-4d13-9061-e7075baa09a0" - }, - { - "parameters": { - "operation": "update", - "id": "={{$node[\"Trello10\"].json[\"id\"]}}", - "updateFields": { - "name": "UpdateTestCard" - } - }, - "name": "Trello14", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 2270, - 501 - ], - "alwaysOutputData": true, - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "4a02293e-8c77-4fec-96d4-b30ef8bef67d" - }, - { - "parameters": { - "operation": "get", - "id": "={{$node[\"Trello10\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Trello15", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 2410, - 501 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "5f3eecb4-bdc3-41ee-8c08-6133996cfe6c" - }, - { - "parameters": { - "operation": "delete", - "id": "={{$node[\"Trello10\"].json[\"id\"]}}" - }, - "name": "Trello16", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 2700, - 501 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "4b372bda-f6ba-4148-af60-7baa2750b199" - }, - { - "parameters": { - "resource": "label", - "operation": "create", - "boardId": "={{$node[\"Trello\"].json[\"id\"]}}", - "name": "TestLabel", - "color": "blue" - }, - "name": "Trello17", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 590, - 431 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "00028ce8-a909-46b7-a39b-2893f039dfb4" - }, - { - "parameters": { - "resource": "label", - "operation": "update", - "id": "={{$node[\"Trello17\"].json[\"id\"]}}", - "updateFields": { - "color": "orange" - } - }, - "name": "Trello18", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 730, - 431 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "4b45bec0-38ea-44fb-b8ce-2bdeb0111749" - }, - { - "parameters": { - "resource": "label", - "boardId": "={{$node[\"Trello\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Trello19", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 870, - 431 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "a6d224e2-f55b-41a4-9682-27221a17946e" - }, - { - "parameters": { - "resource": "checklist", - "operation": "create", - "cardId": "={{$node[\"Trello10\"].json[\"id\"]}}", - "name": "TestCheckList", - "additionalFields": {} - }, - "name": "Trello20", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 590, - 281 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "59a94a1d-eb67-48bc-82ea-065bd2ef4458" - }, - { - "parameters": { - "resource": "checklist", - "operation": "createCheckItem", - "checklistId": "={{$node[\"Trello20\"].json[\"id\"]}}", - "name": "TestCheckListItem", - "additionalFields": {} - }, - "name": "Trello21", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 740, - 281 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "1fd1b5e1-6029-4a2a-972e-43014d5fafc1" - }, - { - "parameters": { - "resource": "checklist", - "operation": "updateCheckItem", - "cardId": "={{$node[\"Trello10\"].json[\"id\"]}}", - "checkItemId": "={{$node[\"Trello21\"].json[\"id\"]}}", - "additionalFields": { - "name": "UpdatedCheckListItem", - "state": "complete" - } - }, - "name": "Trello22", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 920, - 281 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "8736bed5-3556-44ae-a95f-3bdf353beaab" - }, - { - "parameters": { - "resource": "checklist", - "operation": "getCheckItem", - "cardId": "={{$node[\"Trello10\"].json[\"id\"]}}", - "checkItemId": "={{$node[\"Trello21\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Trello23", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 1090, - 281 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "16a9b8ce-2f76-4bf2-89c0-5adaf2f82c13" - }, - { - "parameters": { - "resource": "checklist", - "operation": "completedCheckItems", - "cardId": "={{$node[\"Trello10\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Trello24", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 1270, - 281 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "6e2b2fd6-0fa0-44d8-8530-d95043cf117f" - }, - { - "parameters": { - "resource": "checklist", - "operation": "getCheckItem", - "cardId": "={{$node[\"Trello10\"].json[\"id\"]}}", - "checkItemId": "={{$node[\"Trello21\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Trello25", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 1440, - 281 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "0387d97e-31f6-4226-9da6-c029714fd5dd" - }, - { - "parameters": { - "resource": "checklist", - "operation": "deleteCheckItem", - "cardId": "={{$node[\"Trello10\"].json[\"id\"]}}", - "checkItemId": "={{$node[\"Trello21\"].json[\"id\"]}}" - }, - "name": "Trello26", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 1600, - 281 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "368bfe8c-797a-4458-90bb-24c54393e038" - }, - { - "parameters": { - "resource": "checklist", - "cardId": "={{$node[\"Trello10\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Trello27", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 1740, - 281 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "c67011e2-140d-489d-bffd-7e3cd6704fee" - }, - { - "parameters": { - "resource": "checklist", - "operation": "get", - "id": "={{$node[\"Trello20\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Trello28", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 1890, - 281 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "61c6e9e9-d539-43fa-ab8b-836c660a4182" - }, - { - "parameters": { - "resource": "checklist", - "operation": "delete", - "cardId": "={{$node[\"Trello10\"].json[\"id\"]}}", - "id": "={{$node[\"Trello20\"].json[\"id\"]}}" - }, - "name": "Trello29", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 2040, - 281 - ], - "alwaysOutputData": true, - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "3d78422e-1c16-4ece-8aac-c62178ff0687" - }, - { - "parameters": { - "resource": "attachment", - "operation": "create", - "cardId": "={{$node[\"Trello10\"].json[\"id\"]}}", - "url": "https://cdn-images-1.medium.com/max/159/1*b9a5qBIsH4Jn2b7Lqq9fHg@2x.png", - "additionalFields": {} - }, - "name": "Trello30", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 590, - 751 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "38fa57aa-5631-469e-9c6f-a2f6fa5e87cf" - }, - { - "parameters": { - "resource": "attachment", - "cardId": "={{$node[\"Trello10\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Trello31", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 730, - 751 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "b6fa8d72-0a6e-471a-bfa9-46c70dc0f1cb" - }, - { - "parameters": { - "resource": "attachment", - "operation": "get", - "cardId": "={{$node[\"Trello10\"].json[\"id\"]}}", - "id": "={{$node[\"Trello30\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Trello32", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 890, - 751 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "d789d4bf-4a60-43da-963d-41fc5ea923e1" - }, - { - "parameters": { - "resource": "attachment", - "operation": "delete", - "cardId": "={{$node[\"Trello10\"].json[\"id\"]}}", - "id": "={{$node[\"Trello30\"].json[\"id\"]}}" - }, - "name": "Trello33", - "type": "n8n-nodes-base.trello", - "typeVersion": 1, - "position": [ - 1050, - 751 - ], - "credentials": { - "trelloApi": { - "id": "41", - "name": "Trello creds" - } - }, - "id": "7d6b761b-1dc0-45c6-852e-c5a7d1e7d3d7" - } - ], - "connections": { - "Trello": { - "main": [ - [ - { - "node": "Trello4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trello1": { - "main": [ - [ - { - "node": "Trello2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trello2": { - "main": [ - [ - { - "node": "Trello3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trello4": { - "main": [ - [ - { - "node": "Trello5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trello5": { - "main": [ - [ - { - "node": "Trello6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trello6": { - "main": [ - [ - { - "node": "Trello7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trello7": { - "main": [ - [ - { - "node": "Trello10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trello8": { - "main": [ - [ - { - "node": "Trello16", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trello9": { - "main": [ - [ - { - "node": "Trello1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trello10": { - "main": [ - [ - { - "node": "Trello30", - "type": "main", - "index": 0 - }, - { - "node": "Trello11", - "type": "main", - "index": 0 - }, - { - "node": "Trello17", - "type": "main", - "index": 0 - }, - { - "node": "Trello20", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trello11": { - "main": [ - [ - { - "node": "Trello12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trello12": { - "main": [ - [ - { - "node": "Trello13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trello14": { - "main": [ - [ - { - "node": "Trello15", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trello15": { - "main": [ - [ - { - "node": "Trello8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trello16": { - "main": [ - [ - { - "node": "Trello9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trello17": { - "main": [ - [ - { - "node": "Trello18", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trello18": { - "main": [ - [ - { - "node": "Trello19", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trello20": { - "main": [ - [ - { - "node": "Trello21", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trello21": { - "main": [ - [ - { - "node": "Trello22", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trello22": { - "main": [ - [ - { - "node": "Trello23", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trello23": { - "main": [ - [ - { - "node": "Trello24", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trello24": { - "main": [ - [ - { - "node": "Trello25", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trello25": { - "main": [ - [ - { - "node": "Trello26", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trello26": { - "main": [ - [ - { - "node": "Trello27", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trello27": { - "main": [ - [ - { - "node": "Trello28", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trello28": { - "main": [ - [ - { - "node": "Trello29", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trello29": { - "main": [ - [ - { - "node": "Trello14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trello30": { - "main": [ - [ - { - "node": "Trello31", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trello31": { - "main": [ - [ - { - "node": "Trello32", - "type": "main", - "index": 0 - } - ] - ] - }, - "Trello32": { - "main": [ - [ - { - "node": "Trello33", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Trello", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/57.json b/test-workflows/workflows/57.json deleted file mode 100644 index b6713be8fed..00000000000 --- a/test-workflows/workflows/57.json +++ /dev/null @@ -1,141 +0,0 @@ -{ - "createdAt": "2021-02-22T13:24:15.920Z", - "updatedAt": "2021-07-14T13:33:54.633Z", - "id": "57", - "name": "Mindee:receipt:predict:invoice:predict", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 330, - 230 - ], - "id": "a2fb028a-a712-440d-b273-88e18c86f688" - }, - { - "parameters": {}, - "name": "Mindee", - "type": "n8n-nodes-base.mindee", - "typeVersion": 1, - "position": [ - 650, - 150 - ], - "credentials": { - "mindeeReceiptApi": { - "id": "44", - "name": "Mindee Receipt creds" - } - }, - "id": "d1c7c807-0f46-48d7-a6a8-07c6fbd9298e" - }, - { - "parameters": { - "url": "https://upload.wikimedia.org/wikipedia/commons/0/0b/ReceiptSwiss.jpg", - "responseFormat": "file", - "options": {}, - "headerParametersUi": { - "parameter": [ - { - "name": "User-agent", - "value": "n8n-io app" - } - ] - } - }, - "name": "HTTP Request", - "type": "n8n-nodes-base.httpRequest", - "typeVersion": 1, - "position": [ - 500, - 150 - ], - "id": "8313ed3a-96d5-4f34-8d5c-76bcdc7be95a" - }, - { - "parameters": { - "resource": "invoice" - }, - "name": "Mindee1", - "type": "n8n-nodes-base.mindee", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "credentials": { - "mindeeInvoiceApi": { - "id": "45", - "name": "Mindee Invoice creds" - } - }, - "id": "1632bf97-ed0a-49cc-8c55-be7be333c91b" - }, - { - "parameters": { - "url": "https://www.invoicesimple.com/wp-content/uploads/2018/06/Sample-Invoice-printable.png", - "responseFormat": "file", - "options": {} - }, - "name": "HTTP Request1", - "type": "n8n-nodes-base.httpRequest", - "typeVersion": 1, - "position": [ - 500, - 300 - ], - "id": "72d76ab1-1074-42ca-af84-cf8dc7eef32f" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "HTTP Request", - "type": "main", - "index": 0 - }, - { - "node": "HTTP Request1", - "type": "main", - "index": 0 - } - ] - ] - }, - "HTTP Request": { - "main": [ - [ - { - "node": "Mindee", - "type": "main", - "index": 0 - } - ] - ] - }, - "HTTP Request1": { - "main": [ - [ - { - "node": "Mindee1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/58.json b/test-workflows/workflows/58.json deleted file mode 100644 index 85be2be036e..00000000000 --- a/test-workflows/workflows/58.json +++ /dev/null @@ -1,220 +0,0 @@ -{ - "createdAt": "2021-02-23T09:32:37.389Z", - "updatedAt": "2021-02-23T09:33:19.392Z", - "id": "58", - "name": "Todoist:Task:create get close reopen getAll delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "1756bcfd-e673-45a5-abd8-9ee7b59e6a5c" - }, - { - "parameters": { - "project": 2259097055, - "labels": [ - 2156287483 - ], - "content": "Test Task", - "options": {} - }, - "name": "Todoist", - "type": "n8n-nodes-base.todoist", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "todoistApi": { - "id": "43", - "name": "Todoist creds" - } - }, - "id": "9e3c07cc-af99-4d37-a4f4-f2d1786109aa" - }, - { - "parameters": { - "operation": "get", - "taskId": "={{$node[\"Todoist\"].json[\"id\"]}}" - }, - "name": "Todoist1", - "type": "n8n-nodes-base.todoist", - "typeVersion": 1, - "position": [ - 600, - 300 - ], - "credentials": { - "todoistApi": { - "id": "43", - "name": "Todoist creds" - } - }, - "id": "b617cd35-9714-4c7e-8913-c3d7819d3ad3" - }, - { - "parameters": { - "operation": "close", - "taskId": "={{$node[\"Todoist\"].json[\"id\"]}}" - }, - "name": "Todoist2", - "type": "n8n-nodes-base.todoist", - "typeVersion": 1, - "position": [ - 750, - 300 - ], - "credentials": { - "todoistApi": { - "id": "43", - "name": "Todoist creds" - } - }, - "id": "f9bc971d-a014-4ec9-b701-7fdfbb308454" - }, - { - "parameters": { - "operation": "reopen", - "taskId": "={{$node[\"Todoist\"].json[\"id\"]}}" - }, - "name": "Todoist3", - "type": "n8n-nodes-base.todoist", - "typeVersion": 1, - "position": [ - 900, - 300 - ], - "credentials": { - "todoistApi": { - "id": "43", - "name": "Todoist creds" - } - }, - "id": "f6d4be0d-b7c1-4eea-b1eb-ef2f7ed1b6b8" - }, - { - "parameters": { - "operation": "delete", - "taskId": "={{$node[\"Todoist\"].json[\"id\"]}}" - }, - "name": "Todoist4", - "type": "n8n-nodes-base.todoist", - "typeVersion": 1, - "position": [ - 1200, - 300 - ], - "credentials": { - "todoistApi": { - "id": "43", - "name": "Todoist creds" - } - }, - "id": "967b63c7-4f60-4598-bdb3-9109ca2df94a" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "Todoist5", - "type": "n8n-nodes-base.todoist", - "typeVersion": 1, - "position": [ - 1050, - 300 - ], - "credentials": { - "todoistApi": { - "id": "43", - "name": "Todoist creds" - } - }, - "id": "92240fb4-1d58-4dc9-bb29-db2804189e1d" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Todoist", - "type": "main", - "index": 0 - } - ] - ] - }, - "Todoist": { - "main": [ - [ - { - "node": "Todoist1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Todoist1": { - "main": [ - [ - { - "node": "Todoist2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Todoist2": { - "main": [ - [ - { - "node": "Todoist3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Todoist5": { - "main": [ - [ - { - "node": "Todoist4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Todoist3": { - "main": [ - [ - { - "node": "Todoist5", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/59.json b/test-workflows/workflows/59.json deleted file mode 100644 index 8aff1dd21a8..00000000000 --- a/test-workflows/workflows/59.json +++ /dev/null @@ -1,381 +0,0 @@ -{ - "createdAt": "2021-02-23T10:02:06.947Z", - "updatedAt": "2021-06-03T12:24:52.296Z", - "id": "59", - "name": "SendGrid:List:create update get getAll delete:Contact:upsert getAll get delete:mail:send", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 150, - 400 - ], - "id": "cab42b4b-d902-4524-ba7c-a43e35900705" - }, - { - "parameters": { - "name": "=TestList{{Date.now()}}" - }, - "name": "SendGrid", - "type": "n8n-nodes-base.sendGrid", - "typeVersion": 1, - "position": [ - 350, - 300 - ], - "credentials": { - "sendGridApi": { - "id": "46", - "name": "SendGrid creds" - } - }, - "id": "79f6deca-f925-4162-8d81-14c466ace4ac" - }, - { - "parameters": { - "operation": "update", - "listId": "={{$node[\"SendGrid\"].json[\"id\"]}}", - "name": "=UpdatedTestList{{Date.now()}}" - }, - "name": "SendGrid1", - "type": "n8n-nodes-base.sendGrid", - "typeVersion": 1, - "position": [ - 500, - 300 - ], - "credentials": { - "sendGridApi": { - "id": "46", - "name": "SendGrid creds" - } - }, - "id": "80d58751-f59c-4685-b9a8-c8a438171803" - }, - { - "parameters": { - "operation": "get", - "listId": "={{$node[\"SendGrid\"].json[\"id\"]}}" - }, - "name": "SendGrid2", - "type": "n8n-nodes-base.sendGrid", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "credentials": { - "sendGridApi": { - "id": "46", - "name": "SendGrid creds" - } - }, - "id": "5f09a27b-d2f9-4dd2-ad82-1ca7679c0499" - }, - { - "parameters": { - "operation": "delete", - "listId": "={{$node[\"SendGrid\"].json[\"id\"]}}" - }, - "name": "SendGrid3", - "type": "n8n-nodes-base.sendGrid", - "typeVersion": 1, - "position": [ - 950, - 300 - ], - "credentials": { - "sendGridApi": { - "id": "46", - "name": "SendGrid creds" - } - }, - "id": "cfa7cafc-72ee-4197-916a-9fbe335eeecd" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1 - }, - "name": "SendGrid4", - "type": "n8n-nodes-base.sendGrid", - "typeVersion": 1, - "position": [ - 800, - 300 - ], - "credentials": { - "sendGridApi": { - "id": "46", - "name": "SendGrid creds" - } - }, - "id": "2460a6da-9efa-4613-8083-58b940cefb38" - }, - { - "parameters": { - "resource": "contact", - "email": "=fakeemail{{Date.now()}}@gmail.com", - "additionalFields": { - "firstName": "Fake", - "lastName": "Email" - } - }, - "name": "SendGrid5", - "type": "n8n-nodes-base.sendGrid", - "typeVersion": 1, - "position": [ - 350, - 450 - ], - "credentials": { - "sendGridApi": { - "id": "46", - "name": "SendGrid creds" - } - }, - "id": "0c1183f8-3849-4019-88cd-0e9498e772ce" - }, - { - "parameters": { - "resource": "contact", - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "SendGrid6", - "type": "n8n-nodes-base.sendGrid", - "typeVersion": 1, - "position": [ - 650, - 450 - ], - "executeOnce": false, - "alwaysOutputData": true, - "credentials": { - "sendGridApi": { - "id": "46", - "name": "SendGrid creds" - } - }, - "id": "ae3988ef-4046-4a88-81a4-3f9dec1c90f3" - }, - { - "parameters": { - "resource": "contact", - "operation": "get", - "contactId": "={{$node[\"SendGrid6\"].json[\"id\"]}}" - }, - "name": "SendGrid7", - "type": "n8n-nodes-base.sendGrid", - "typeVersion": 1, - "position": [ - 800, - 450 - ], - "alwaysOutputData": true, - "credentials": { - "sendGridApi": { - "id": "46", - "name": "SendGrid creds" - } - }, - "id": "727c4520-d781-4914-ae55-8413368dfe4a" - }, - { - "parameters": { - "resource": "contact", - "operation": "delete", - "ids": "=undefined" - }, - "name": "SendGrid8", - "type": "n8n-nodes-base.sendGrid", - "typeVersion": 1, - "position": [ - 950, - 450 - ], - "credentials": { - "sendGridApi": { - "id": "46", - "name": "SendGrid creds" - } - }, - "id": "99abe2ed-524c-482b-9a87-f5043c7568cd" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(1000);\nreturn item;" - }, - "name": "FunctionItem", - "type": "n8n-nodes-base.functionItem", - "typeVersion": 1, - "position": [ - 500, - 450 - ], - "notes": "Sleep function", - "id": "5b5fc626-adc4-47af-811a-3785d04f8b75" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(5000);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 5 Seconds", - "type": "n8n-nodes-base.function", - "position": [ - 1400, - 200 - ], - "typeVersion": 1, - "id": "c1921fc7-275d-4fc9-bb8c-151d5a525b90" - }, - { - "parameters": { - "resource": "mail", - "fromEmail": "node8qa@gmail.com", - "fromName": "node,qa", - "toEmail": "node8qa@gmail.com", - "subject": "SendGrid test workflow", - "contentValue": "=Message at {{(new Date).toUTCString()}}", - "additionalFields": {} - }, - "name": "SendGrid9", - "type": "n8n-nodes-base.sendGrid", - "typeVersion": 1, - "position": [ - 350, - 600 - ], - "credentials": { - "sendGridApi": { - "id": "46", - "name": "SendGrid creds" - } - }, - "id": "189e1b95-2ad7-4c7e-8f87-b6114c4d99cb" - } - ], - "connections": { - "SendGrid": { - "main": [ - [ - { - "node": "SendGrid1", - "type": "main", - "index": 0 - } - ] - ] - }, - "SendGrid1": { - "main": [ - [ - { - "node": "SendGrid2", - "type": "main", - "index": 0 - } - ] - ] - }, - "SendGrid2": { - "main": [ - [ - { - "node": "SendGrid4", - "type": "main", - "index": 0 - } - ] - ] - }, - "SendGrid4": { - "main": [ - [ - { - "node": "SendGrid3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "SendGrid", - "type": "main", - "index": 0 - }, - { - "node": "SendGrid5", - "type": "main", - "index": 0 - }, - { - "node": "SendGrid9", - "type": "main", - "index": 0 - } - ] - ] - }, - "SendGrid5": { - "main": [ - [ - { - "node": "FunctionItem", - "type": "main", - "index": 0 - } - ] - ] - }, - "SendGrid6": { - "main": [ - [ - { - "node": "SendGrid7", - "type": "main", - "index": 0 - } - ] - ] - }, - "SendGrid7": { - "main": [ - [ - { - "node": "SendGrid8", - "type": "main", - "index": 0 - } - ] - ] - }, - "FunctionItem": { - "main": [ - [ - { - "node": "SendGrid6", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/6.json b/test-workflows/workflows/6.json deleted file mode 100644 index b37eb33af73..00000000000 --- a/test-workflows/workflows/6.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "createdAt": "2021-04-14T14:13:32.964Z", - "updatedAt": "2021-04-14T14:57:59.464Z", - "id": "6", - "name": "Static files workflow", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "48c3bb01-34b1-416a-a29a-428f46b0b5a0" - }, - { - "parameters": { - "fileName": "=/tmp/{{$node[\"Set files\"].json[\"filename\"]}}", - "dataPropertyName": "binaryfile" - }, - "name": "Write Binary File", - "type": "n8n-nodes-base.writeBinaryFile", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "id": "3975413e-bcd6-4e7a-a57d-a6d16d734dcd" - }, - { - "parameters": { - "functionCode": "files = [\n {\n mimeType: 'image/png',\n data: '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',\n fileName: 'n8n-logo.png',\n },\n\n {\n mimeType: 'application/pdf',\n data: 'JVBERi0xLjUNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFuZyhwdC1QVCkgL1N0cnVjdFRyZWVSb290IDEwIDAgUi9NYXJrSW5mbzw8L01hcmtlZCB0cnVlPj4+Pg0KZW5kb2JqDQoyIDAgb2JqDQo8PC9UeXBlL1BhZ2VzL0NvdW50IDEvS2lkc1sgMyAwIFJdID4+DQplbmRvYmoNCjMgMCBvYmoNCjw8L1R5cGUvUGFnZS9QYXJlbnQgMiAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4vRXh0R1N0YXRlPDwvR1M3IDcgMCBSL0dTOCA4IDAgUj4+L1Byb2NTZXRbL1BERi9UZXh0L0ltYWdlQi9JbWFnZUMvSW1hZ2VJXSA+Pi9NZWRpYUJveFsgMCAwIDU5NS4zMiA4NDEuOTJdIC9Db250ZW50cyA0IDAgUi9Hcm91cDw8L1R5cGUvR3JvdXAvUy9UcmFuc3BhcmVuY3kvQ1MvRGV2aWNlUkdCPj4vVGFicy9TL1N0cnVjdFBhcmVudHMgMD4+DQplbmRvYmoNCjQgMCBvYmoNCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMjU4Pj4NCnN0cmVhbQ0KeJy9kk9LxDAUxO+BfIc5tuK+5iWpSWHZw7brorCwYmAPiwdRWxFWcBU/v2nZg3/aWzCnvDC83wwZFFvM58WmvmqgFgssmxpvUihS/fHeMRTKqiSj4S1TpXF8kmJ3hlcplkGK4pLBTMoitFL0agWGL4njk7tQ5DzCIerWtw7de1yNbpj8aVpLsc+a/A7hWopV3HgjRQIHVVTaHw4G8Il3/5jbrD1+tC/P8XKenM7ak9VT9EM+s1nXO0B6svVkJnP/4mG1qYFvFeD0FTCetP5j5DP9hytiO8mj9DxN1XQ+lZ7nqfzPfKyYzDgOs7jcOYPwEJNyejTrocPjUcc6/AV0U+Y1DQplbmRzdHJlYW0NCmVuZG9iag0KNSAwIG9iag0KPDwvVHlwZS9Gb250L1N1YnR5cGUvVHJ1ZVR5cGUvTmFtZS9GMS9CYXNlRm9udC9BQkNERUUrQ2FsaWJyaS9FbmNvZGluZy9XaW5BbnNpRW5jb2RpbmcvRm9udERlc2NyaXB0b3IgNiAwIFIvRmlyc3RDaGFyIDMyL0xhc3RDaGFyIDExOC9XaWR0aHMgMTggMCBSPj4NCmVuZG9iag0KNiAwIG9iag0KPDwvVHlwZS9Gb250RGVzY3JpcHRvci9Gb250TmFtZS9BQkNERUUrQ2FsaWJyaS9GbGFncyAzMi9JdGFsaWNBbmdsZSAwL0FzY2VudCA3NTAvRGVzY2VudCAtMjUwL0NhcEhlaWdodCA3NTAvQXZnV2lkdGggNTIxL01heFdpZHRoIDE3NDMvRm9udFdlaWdodCA0MDAvWEhlaWdodCAyNTAvU3RlbVYgNTIvRm9udEJCb3hbIC01MDMgLTI1MCAxMjQwIDc1MF0gL0ZvbnRGaWxlMiAxOSAwIFI+Pg0KZW5kb2JqDQo3IDAgb2JqDQo8PC9UeXBlL0V4dEdTdGF0ZS9CTS9Ob3JtYWwvY2EgMT4+DQplbmRvYmoNCjggMCBvYmoNCjw8L1R5cGUvRXh0R1N0YXRlL0JNL05vcm1hbC9DQSAxPj4NCmVuZG9iag0KOSAwIG9iag0KPDwvQXV0aG9yKEFsZXhhbmRlci52bC5SdXNza2lraCkgL0NyZWF0b3Io/v8ATQBpAGMAcgBvAHMAbwBmAHQArgAgAFcAbwByAGQAIAAyADAAMQA2KSAvQ3JlYXRpb25EYXRlKEQ6MjAxODEwMTgxMDUwMTUrMDEnMDAnKSAvTW9kRGF0ZShEOjIwMTgxMDE4MTA1MDE1KzAxJzAwJykgL1Byb2R1Y2VyKP7/AE0AaQBjAHIAbwBzAG8AZgB0AK4AIABXAG8AcgBkACAAMgAwADEANikgPj4NCmVuZG9iag0KMTYgMCBvYmoNCjw8L1R5cGUvT2JqU3RtL04gNy9GaXJzdCA0Ni9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDI5OD4+DQpzdHJlYW0NCnicjVLBasJAEL0L/sP8wWTVtBVEKFVpEUNIAj2IhzWZJsFkV9YN6N93J4kYqIcespn39r2XmSFiBh6IV/AFiCkIb+IeEP4chICJ78oJzN5eHAO+N4fFAkPWeRBhjCEmtzNhbE2T2nVFNW734B0AwxxazXI5Hv3DIp5avLtFGvvUxZ1H3Lt7HaA3DoSJIYq0thjpinbyzCNxpAsk1d7ydMxw2rSLGdwGdLVbuoHoozcuS2lLGPCxVtkDJE561FeMKbX4STIj09XsuddfqioVxYXkDpl4Vy5B2lKrHhtb/khXtOhbm9NR6xOudNrUrqeWuRREttvJTqZGD/BH4c4BXpWy0vmAiKsyo4G2+46T5UbWuCnzxlA/a9DUlz3/Gf5ju39WPh79AiFMrRUNCmVuZHN0cmVhbQ0KZW5kb2JqDQoxOCAwIG9iag0KWyAyMjYgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDI1MCAwIDI1MiAwIDUwNyA1MDcgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgNjE1IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgNDc5IDAgMCA1MjUgMCAzMDUgNDcxIDUyNSAwIDIzOSAwIDAgNzk5IDAgMCAwIDAgMzQ5IDAgMzM1IDAgNDUyXSANCmVuZG9iag0KMTkgMCBvYmoNCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMTgzMjY5L0xlbmd0aDEgNTQwODgwPj4NCnN0cmVhbQ0KeJzsfQd8VMX69sw527K7SXaT3bRNsrtsEgIBQicBJAsp9BLIYkJNSAUDhI4IGgugERR7V+xesWwW1GDF3jv2ytXr1Ssoeq2U7PfMeTOhWD/+3L/f/X37Js8+z7zzzpzpZ/IzEcYZYwn40LHKoimjR57U8PXjzORLZSxtW/GIorKq9G9fZbzKxphhdPGIcYVj0i/fxPjMTYypzSOLiktu1z1UxnQXjEP++yMnTZxy/YHhtzPd5dlMbflu5JTACNY/LY/x+geZ2m3TxCm5fa94rO8XjPHP8dTK6vlVTV8uacpmbO7bqG9v9fKlnu1Nbw9g7LqPGdM/WNdUP//UD9VBjM1/hrHonPqqJU0snfnw/GaUt9U3nly3ZtGqIYzdfDVjpayhtqrmxwt+fAj1NyJ/YAMc0Xem7kH6JqQzGuYvXZnxUZKbMWUUY/XnnVS7eMGMW2cYGO++EzFLGxdWV5UlNoQY+wH19c+bX7WyqceBzK+Rh+czz/zapVXv35g6Ef2ZIdq/oGp+7TmPPTGI8R6or4+zaeGSpWEXW4f2VYr4psW1TfH1XZIZW/UdHv8lE2NtGPD4qIf6Xzg7duj3LNnEhD3w5eoXBL+5cd+q/fsONkftNg1EMoopjAzlDKyd8SfMm/fv27c5ardW02GWfIfwpLjYpczGhqKcAs5l6xmLG6g9lzNVl8M3MT0z6a/Q90OV6cTqK2ydwkxMidUriqJTFd3HrHt4B8s4RWsBbPwUj4f5Gdvf0QbjtUqWh/GwyFPv08eInjKHLuZQa/jL7Libbje74/jX+p8zw1v/Xe09nqZ+h9V3HE1Xy64/pnZMYtfrzmCNv6hv5bHVpwz7c3EGw7HV/0em7vlz9aoVLPWYn3GQeY+1rFb+DTbjf1L+j0zXn1UeSzllEcvsrGMLyzRcxTJNbxzyHS/TDaU6Dct/v27dnkP5xmyWqT7BBvwi5lf6Ct8Vx9o2/q/wGwJ/Nt5Qc+zP+iNTnju2upW7jlyfus/+/HrVxzOvcez/bH3/lqnXsC7Hqy7lDlbUqf/BRgnmj7IM5TLWXfmCzjM+P/y2jNFN/eUZx3/oiPsE9yVRz1rmPl7ti1jEIhaxiP3fm3IVN/9mXiXbc3gaP2N178zTs8v+k+36f9nUAezcv7oN0nQXs9nK8/RO/d24GDYKuOsP4wpZvbKRJf9RnHodmwRs/N9un+plo/hPf1zf8S6rXMPy+Pesz/GKi1jEIvbXmu5RVnc861PHsvP+8Jnz/zgmYhGLWMQiFrGIRSxiEYtYxCIWMWGRnzMjFrGIRSxiEYtYxCIWsYhFLGIRi1jE/vuN/8d+0z1iEYtYxCIWsYhFLGIRi1jEIhaxiEUsYhE7NlOaWBww6D/6jDo2DJh1bKXDtx3f1kQsYhGLWMQiFrGIRSxiEYtYxCIWsYhFLGIRi1jEIhaxiEUsYhGLWMQiJi18/1/dgv8lUzuQSv9aELchBaUcYDr2HRwDmQcqASqadWE9WC/WhxWx8ayK1bAGNo/NZ4vZUracbWbblUFpvdPyPVGeJs/pmS/sZ2HtX/9BOY9WrndnubrfLNfcUY6Hv0ezuqnd1QfDO8M/suvZvagpzE08hWfxMeFqdVi435frv1y/p+sn6z5Z+9EJhpyOf+2o71H9y/7jEVDHqJfxbD6JT2MGvlvzfXP0v52EtNLxLy0p7PeNH6r1Vx4WAMqB3eqeX+b+iiX9wlP0K1G/1gytnTwFoL4xPlfzLOuM2ABcCez4czX+5aYe19r+P1zf/mnr1i5dsnhR08IF8xtPmje3ob6utmbO7FkzZ0yfVlEeKJsyuXTSxAnjx40dM3rUyJLiosIRw/0Fw04YOmRwft6ggQNye/XskZ2VmeHr4k5y2G2x0RZzlMlo0OtUhbMexb6SSk8wqzKoy/KNGtVTpH1VcFQd5qgMeuAqOTIm6KnUwjxHRvoRWXdUpJ8i/Z2R3OYZyob27OEp9nmCLxb5PG18Wmk59MYiX4UnuEfT4zWty9IS0Uh4vSjhKU5qKPIEeaWnOFiyvKGluLII9bVazIW+wlpzzx6s1WyBtEAFs31NrTx7GNeEkl08uFVhpmjx2KCaWVxVE5xUWl5c5PJ6KzQfK9TqChoKg0atLs9c0WZ2rqe1x46WDW02Nqcyx1rjq6maUR5Uq1CoRS1uaVkftOcEu/mKgt1WfZqELtcGe/iKioM5PlQ2dnLnA3hQn2nzeVq+Z2i8b8/uIz1VHR5Dpu17JqToYucwIV9qhrahheif1yvacm6bn81BIthcWk5pD5vjCjF/bk5FUKkUOTtkjjMgcpplTmfxSp9XTFVxZcf38oakYPMcT88eGH3tOxPfyPcE1azKOdUNgqtqW3xFRTRuZeVBfxGEv6qjr8WtvXMRX1WJTswVw1BaHsz1NQUdvhEUAIdHzMHcKeVakY5iQUdhkFVWd5QK5hYXiXZ5ilsqi6iBoi5fafl21i/8cWt/j2trP9afVYh2BBMKMSlZxS3lNXVBd6WrBuuzzlPu8gb9FRi+Cl95bYWYJZ8t2O1jPM6rPVErhb4dFS2DRc+NmSZPueJSK8RsweEpwYdvxFBk2DBdWlLM6IihnnLuYjIMT+mIEOqIepBQMwtHiSxVFC0c5fJWeMl+p0mujjbpM4Omw+qywdHZJnrObzaNokWDunmKa4sOa+ARleo7GthR26+3UxFj0fFglDCJ6Rwls9RM7Fz4FFSjucQsJnmCbJKn3Ffrq/BhDfknlYu+ibHW5nfsFN/Y0mnl2mx3rJKyI1KUn0epIPMiWyaUQqzBkhyXnFYtPVJLdyZHHZU9Wmb7RLtaWmpamZoplrKrlWtCX3huRXBiToUvOCfH5xXt7Nmj1cSs3rLKQuzVEhx3vpIqn8fmKWmpags3z2lp9ftbmoorGwZjX7T4Rte0+KaUD3VpjZ9cvsa1Sjw7jo3lY8tGoCqFjWj18bNLW/387CnTyrfbGPOcXVYeUrhSWDmiojUDeeXbPYz5Na8ivMIpEh6REDVNRsKkxbu2+xlr1nJ1mkNLV7dxpvlM0sdZdZtCPhs9KEt7kB93pOo2HeX4ZbQOPhP5mik6uyPahBybyLmfKeLuKTLJWpkYYL9Z7zf5o/xWJVrBkApXCJ77ERvF2VYrj+auVtQ5WXO38ebWKL9ru1bT5I7IZkQKX3OnDy0XYYdVhOdRxwOHehCYVr7VylC/9omIEcKwCpMasIbwPin21Ij1t7qioaWyQpweLAFrFd88yH3DWFDxDUOLDdag2Vc7ImjxjRD+AuEvIL9B+I1Y+TyBY7LFodtS6cNBjB1Tzlyc9poqqvS0hcNl5d4XXXsqvNhLM4Bp5cGoHLzc9JljEDdSoBLukcHm6irRDhYoF2WNmaOrK7AvZYUIGR2MQg1RHTUgokQrI/YbClVjrVX5NAk3jo7mimBFjnho+dwKbb/agmyUb3DQkEV16rPEg3IrWuJ8fbXDB3vdnLleUBTaxqaUk8eFJB5WQYNktKLl1T5kVVd6aI1MwV6ml4XZRZ5anPm6rFoNZldHJhPdUjMt0eZgVC9UiG+hLb3EmaPPNFZUUOO11PqOADzbFrSgRVmHDWVHAYwOskaLtuB7PZoqQh8V1ZS2scm+lTg6RaO1mozIDkZnjq7C243KW+Dx5cnCJnEIWjrqeIK8RtFzK8YdR0Jb+Fbfyd7DDGeHePuJ9cdc27FRWUXL0Y7g9JyePUxHe6M1d0uLKfrXC9B4maI7WXMqmdXirQAWC05bb55i8ar0jWlVJuRozDVuGePDG0TJFMBFR8X28XpqKkQUmjxJO8t+M4gfFiRe01rlLbYhMsU7UjSZLcH6I5MNnckSAVwGM3vRHQJdEWct1so8V7ARK1OGiBnxtHhsvsE+8aEVHilQiUnq3BZY/lh1YtM0V3vK52Cxo8KSypaSFnFFra7qGLaOJwUX5BxRJfYFx+JBRaI7weZJnsoKTyWupry03Ot1YTeCPXW4p/qqxKtgEvVn0jTtqlLVIpY4w02lwhU04sVUV1Xr8+INEhQnEI2+aKOuY9swV0uLryWo7dsSBKP6LGy70YLw3ZTjq6oVV+g6cYOu1cqWoLna6IjaXMU+7OVauLWxxMDh6JsjPqpbxAV9ZmUORsLeEtfiyW/BETwTbw9dVvXUSryqxBvJo011lQspDMJokapARRQYlSkCaQuI1szPaZ1pzDzk0b4X5lCwSasVLZtcHpwkQ7T9JMSinKCSmIdM0Xk+eVq5PKdUkT0aw+vHqnKJ0p6gUlbeMT1a+dGiqEtOGBWDR3uHdOyvzreNfA/NcGFMf9OPl4M6fIryjPIUy2Nu5ekO/oDlKe+ygPIO+C3w2x38JvgN8E7w6+DXwK+CHwE/DH4I/CALMJ3yHusPlAFqp6oBbgJ2Anp2EmrizILynDmUx1gRUAMsBS4G9Ih9GHk3oUbOPMpZ26KS+BhM6JlSnCHF6VI0S3GaFKdKsUaK1VKcIsUqKU6WYqUUK6RYLsUyKZZKsUSKRVI0SbFQigVSzJeiUYqTpJgnxVwpGqSol6JOilopaqSolmKOFFVSVEoxW4pZUsyUYoYU06WYJkWFFOVSnCjFVCkCUpRJMUWKyVKUSjFJiolSTJBivBTjpBgrxRgpRksxSoqRUpRIUSxFkRSFUoyQYrgUfikKpBgmxQlSDJViiBSDpciXIk+KQVIMlGKAFP2l6CdFXyn6SNFbilwpeknRU4oeUuRI0V2KblJkS9FViiwpMqXIkMInRRcpvFJ4pHBLkS5FmhSpUrikSJEiWYokKRKlSJDCKYVDingp4qSwS2GTIlaKGCmipbBKYZHCLEWUFCYpjFIYpNBLoZNClUKRgkvBOgQPS9EuxUEpDkixX4p9UvwsxU9S/CjFD1J8L8V3Uvxbim+l+EaKvVJ8LcVXUuyRYrcUX0rxLym+kOJzKf4pxWdS/EOKT6X4RIq/S7FLio+l+EiKD6X4QIr3pXhPineleEeKt6V4S4o3pXhDip1SvC7Fa1K8KsUrUrwsxUtSvCjFC1I8L8VzUjwrxTNSPC3FU1I8KcUTUjwuxWNSPCrFDikekeJhKR6S4kEpHpDifim2S9EmxX1S3CvFPVJsk2KrFCEpWqUISnG3FHdJcacUd0ixRYrbpfibFLdJcasUt0hxsxQ3SXGjFDdIcb0Um6W4ToprpbhGiquluEqKK6W4QorLpbhMikuluESKi6W4SIoLpbhAik1SnC/FeVJslGKDFOdK0SLFOVKcLcV6KdZJsVYKee3h8trD5bWHy2sPl9ceLq89XF57uLz2cHnt4fLaw+W1h8trD5fXHi6vPVxee7i89nB57eHy2sMXSyHvP1zef7i8/3B5/+Hy/sPl/YfL+w+X9x8u7z9c3n+4vP9wef/h8v7D5f2Hy/sPl/cfLu8/XN5/uLz/cHn/4fL+w+X9h8v7D5f3Hy7vP1zef7i8/3B5/+Hy/sPl/YfL+w+X9x8urz1cXnu4vPZwedvh8rbD5W2Hy9sOl7cdLm87XN52uLztcHnb4YVbhWhTzgqlD3PjzhxKd4LOoNTpofTBoGZKnUZ0aijdClpDqdVEpxCtIjo5lDYctDKUVghaQbScaBnlLaXUEqLF5FwUShsBaiJaSLSAQuYTNRKdFEotBs0jmkvUQFRPVBdKLQLVUqqGqJpoDlEVUSXRbKJZVG4mpWYQTSeaRlRBVE50ItFUogBRGdEUoslEpUSTiCYSTSAaTzSOaCzRmJBrNGg00aiQawxoJFFJyDUWVBxyjQMVERUSjaC84VTOT1RA5YYRnUA0lCKHEA2m4vlEeUSDiAYSDaDK+hP1o1r6EvUh6k2V5RL1onI9iXoQ5RB1J+pGlE3UlarOIsqkOjOIfERdqGovkYfKuYnSidKIUolcRCmhlAmgZKKkUMpEUCJRAjmdRA5yxhPFEdkpz0YUS84YomgiK+VZiMxEUZRnIjISGULJk0D6UHIpSEekklOhFCdiGvEwUbsWwg9S6gDRfqJ9lPczpX4i+pHoB6LvQ0lloO9CSVNA/6bUt0TfEO2lvK8p9RXRHqLdlPcl0b/I+QXR50T/JPqMQv5BqU8p9Qml/k60i+hjyvuI6ENyfkD0PtF7RO9SyDuUepvorVDiiaA3Q4lTQW8Q7STn60SvEb1K9AqFvEz0EjlfJHqB6Hmi5yjkWaJnyPk00VNETxI9QfQ4RT5GqUeJdhA9QnkPEz1EzgeJHiC6n2g7URtF3kepe4nuIdpGtDWUUAAKhRKmg1qJgkR3E91FdCfRHURbiG4PJeC85n+jWm4jupXybiG6megmohuJbiC6nmgz0XVU2bVUyzVEV1PeVURXEl1BdDkVuIxSlxJdQnQx5V1EtVxIdAHlbSI6n+g8oo1EGyjyXEq1EJ1DdDbReqJ1IWcVaG3IOQd0FtGZIWcd6Ayi00POAKg55MRhzE8LOQeCTiVaQ8VXU7lTiFaFnDWgk6n4SqIVRMuJlhEtJVpCVS+m4ouImkLOatBCqmwBRc4naiQ6iWge0Vwq10BUTy2ro+K1RDUUWU00h6iKqJJoNtEs6vRMatkMounU6WlUdQU9qJzoRGruVHpQgGopI5pCNJmoNOTwgyaFHOIJE0MOsbwnhBxngsaHHD1B4yhkLNGYkAP3Aj6aUqOIRpKzJOQ4FVQccqwHFYUcp4EKQ45m0IhQXAloOJGfqIBoWCgO73d+AqWGhuwVoCFEg0N2sTTyifJC9pGgQSF7OWhgyD4NNIDy+hP1C9l7gPpSZJ+QXXSsd8gu9mYuUS8q3pOe0IMohyrrTtSNKssm6kqURZQZsotRyiDyUZ1dqE4vVeahWtxE6VQujSiVyEWUQpQcss0EJYVss0CJIdtsUAKRk8hBFE8URwXsVMBGzliiGKJoIitFWijSTM4oIhORkchAkXqK1JFTJVKIOBHzh2PnuAXaY6vdB2Nr3Aeg9wP7gJ/h+wm+H4EfgO+B7+D/N/At8r5Bei/wNfAVsAf+3cCXyPsX0l8AnwP/BD6LqXf/I6bB/SnwCfB3YBd8H4M/Aj4EPkD6ffB7wLvAO8Db0Se534ru434T/EZ0o3tndJb7deA16Fejc9yvAC8DLyH/RfheiJ7vfh76OehnoZ+Jnud+Onqu+6noBveT0fXuJ1D2cdT3GPAo4A/vwOcjwMPAQ9ZF7geti90PWJe477cudW8H2oD74L8XuAd525C3Fb4Q0AoEgbstJ7vvsqxy32lZ7b7Dssa9xXKq+3bgb8BtwK3ALcDNlp7um8A3AjegzPXgzZaT3NdBXwt9DXA19FWo60rUdQXquhy+y4BLgUuAi4GLgAtR7gLUt8k8wX2+eaL7PHO9e6P5ZvcG863utWqm+yw1z30mz3OfEWgOnL6lOXBaYE3g1C1rApY13LLGtWbsmlPWbFnz3hp/nMG8OrAqcMqWVYGTAysCK7esCNyvrGN1ylr/0MDyLcsCumWOZUuXqd8t41uW8aJlvPcyrrBltmWeZap1aWBxYMmWxQG2eNLi5sXBxbohwcUfL1bYYm5uC+/YutiVXgL2r14cbStZFFgYaNqyMLCgbn5gHho4N68+0LClPlCXVxOo3VITqM6bE6jKqwzMzpsZmLVlZmBG3rTA9C3TAhV55YETET81rywQ2FIWmJJXGpi8pTQwMW9CYAL84/PGBsZtGRsYkzcqMHrLqMDIvJJAMTrPUm2pnlTVJhowIRUtYS4+orfL7/rYtdelY66ga4dLjYtNcaco3WKTeeHEZL4w+bTk85PV2KSXkxR/UrceJbGJLyd+lPh1oi7en9itVwlLsCV4ElSn6FvC+LISjQuKiPsM0PrqTvBllcQ6eazT7VSKv3bydUzlHs4Zt4FUE2K2cae7RH2Ii1+10zPON7GynLFtJjZ5bNA0aXqQnx3MnCI+/aXTgoazgywwbXp5K+fnVWi/kxB0iF8q0dJrN25kaSPGBtOmlIfUzZvTRlSMDTYL7fdrOiw0Q0hFzqwly5bklPtPYPaP7XvtqvMR28s2JTaWx8aGYxV/LBofG+OOUcRHOEb1x/QZVBIb7Y5WxEc4Wk3wR8Mj+tfVOqmsJNbitiiBAstEi+K3FBSW+C09e5f8op9bRT/pyTlLZ+Fj1pKlOdo3UhV8mUjmCK/4XrIUafG1TEuznN81CgPNXgJbKp1Lf7/U/+vG/+oG/Pcb/SbP8LByFqtRzgTOAE4HmoHTgFOBNcBq4BRgFXAysBJYASwHlgFLgSXAIqAJWAgsAOYDjcBJwDxgLtAA1AN1QC1QA1QDc4AqoBKYDcwCZgIzgOnANKACKAdOBKYCAaAMmAJMBkqBScBEYAIwHhgHjAXGAKOBUcBIoAQoBoqAQmAEMBzwAwXAMOAEYCgwBBgM5AN5wCBgIDAA6A/0A/oCfYDeQC7QC+gJ9ABygO5ANyAb6ApkAZlABuADugBewAO4gXQgDUgFXEAKkAwkAYlAAuAEHEA8EAfYARsQC8QA0YAVsABmIAowAUbAAOgB3fAwPlVAATjAWA2Hj7cDB4EDwH5gH/Az8BPwI/AD8D3wHfBv4FvgG2Av8DXwFbAH2A18CfwL+AL4HPgn8BnwD+BT4BPg78Au4GPgI+BD4APgfeA94F3gHeBt4C3gTeANYCfwOvAa8CrwCvAy8BLwIvAC8DzwHPAs8AzwNPAU8CTwBPA48BjwKLADeAR4GHgIeBB4ALgf2A60AfcB9wL3ANuArUAIaAWCwN3AXcCdwB3AFuB24G/AbcCtwC3AzcBNwI3ADcD1wGbgOuBa4BrgauAq4ErgCuBy4DLgUuAS4GLgIuBC4AJgE3A+cB6wEdgAnAu0AOcAZwPrgXXAWlYzvJlj/3Psf479z7H/OfY/x/7n2P8c+59j/3Psf479z7H/OfY/x/7n2P8c+59j/3Psf74YwBnAcQZwnAEcZwDHGcBxBnCcARxnAMcZwHEGcJwBHGcAxxnAcQZwnAEcZwDHGcBxBnCcARxnAMcZwHEGcJwBHGcAxxnAcQZwnAEcZwDHGcBxBnCcARxnAMf+59j/HPufY+9z7H2Ovc+x9zn2Psfe59j7HHufY+9z7P2/+hz+L7eKv7oB/+XGliw57GImLGm2+N+2Gq9lrP2iI/5uZBKbx5awZnytYxvZRewR9h6bw86EuoJtZrewv7Ege5Q9y9764z+1+fPWfrJ+PrOq9zEDi2csvC+8p/0WoE0fc5jnIqTidZ5DnrAt/NVRvq/aLwrb2tsMccyslY1WXoP33/xgeB9euUiHB4q0sh46VivxjfHa9rvbbz1qDErZNDadzWAzWSWrQv/FXwXNxcicxBrZfLZASy1AXj0+65Cajahq7W+AGg6LWsiaAPEXQcvYcnw1QS/pSIm8RVp6GVuBr5XsZLaKncJWszUdnys0z2rkrNLSK4FT2WmYmdPZGZqSTJ4z2VlsLWZtPTubnfO7qXM6VQs7l23APJ/Hzv9NvfGI1CZ8XcAuxHq4mF3CLmWXY11cxa4+ynuZ5r+SXcuuw5oReZfAc52mRO6D7Cl2D7uL3c3u1cayGqNGIyLHpU4bwyaMwWr08MzDWkzjt6JztE5F30XfWjp6uhL+Mw4rsbxjHEXkmYikWmgeRC1rjhqJTegD6UM9otQlWv8PeQ8fld/zyvG4+rCRuUpLCXW097f0pewa7MDr8SlGVagboEldp+nD/dd2xm7W0jeym9jNmItbNSWZPLdA38puw96+nW1hd+DrkD5cEd/F7tRmLshaWYhtZdswk/ey+1ib5v+9vF/zb+3whzo929n97AGskIfZDpw0j+FLeh6C75EO7xOaj9KPsceRFlGUeoo9jRPqOfY8e4G9zJ5E6iXt8xmkXmGvsdfZWzwa6lX2BT4Pslf0n7IYNhw//t+Pcb6azTrW/6f1nzN9CnOyzeGfwivCP6mjWB0vwwXyDszSNrYBP7EvOBTJ3cys+ztzsG3hH9QZ4OyD7+ob2m8If830ODWXqK/hlFOZkeWz8WwCuyy4Nqf8QRaNW0oCG8zvucdZVGTqaXwYNxCFeXCHMTHOC/2xOiX6vpSUAt99AwwbVfvoNt5zW4FxI27nBQc/PPhS7sEP98Tl5+7huR/s+nCX7ZuX7Pm5/Xbt3NWnt8vvSIm+rxFFB/juaxygGjY2qvYCUd4f1VjgV4wbG1FJUkFOyks5L+XmvJSDanJ696ngdq9dgyNGMRodBl+XXsqArlkD+/XrO0wZ0D/L1yVG0Xz9Bw4apvbrm66oDukZpog0V187ME2deNCgnOormNpPn54S64g26JXUpLieQzNtU6ZnDu2VZlSNBlVvMmYPGtFlbGNxl3eN9jRnQlqcyRSXluBMsxsPvqeP2fetPmZ/oa5x/8WqYciMggz1crNJ0RkMbelJyd2HeEdPjY236SzxNnuCyRhnt2YXzTi4zpkq6kh1Oqmug+MxnHcwpjsfox/H3OxyMe7+tAIvj0+y8fHxtlh8OKLxEWfFR5IFHw8o4m84U8Kfb0VESlt479bYDo7W+IetVo0/34rolAfwg1YUS+LWUEypq41nterLWMGeAszJLu31vZOoT++ZrtaYpDZu3dYYU6oXkaFGhGIKCrSBF8Po7ZI1wN5/YD8vxtHYv5fi89nFuOvOn3rz3lvav0rs1i2RZ972+TWl9/RfePu6u1tX3744X7nytv03T3Z31Z3R1X3ijZ9fMfees8YcsA9rfpRxdkd4nyEHPR/K3tT6basc1jRMie7dOzE319wrKUnrxJ/pZJti96dn9LFazWLUzGLUzDYEms2IMotRM9+PcWDhHf5kJFjGwFJLUmJ0blKfXgZ3dqk7EBfQB1gBLC4x396vgOfuzKFx6WvvZ+tU9vwTcvv1s/cTg+V3/GodSYcqwahlysVn9/EYVaiu3GfvdPYX6zZdSeT9OBarkE5DjsnhTk70xpuU9n6qxZnmcKY7LEr7SG5yeJKTPPHGHq4GT++MpCi+Qs/XWVLcWcnzY13x1hST1ajXG60mXf3+i41mo6ozmg1YnFd0+m/pnmFNyXYdOFG9Jb17siUqPs2J1WcL71M/1WWxDJbNFolZuCcpsas1K7pN4f6oxCwP/JYsc5syxG9jWZlp3bv+ZLXGpdXGNegbxICJ7W2Py+fJuUk7d9nz8+PyU2wfkBC73IYS1q4/NR4qk0SFclBIDFBCgkHbxF27eo1ihLKyBg7i2s7VJRp9qld916jasrzeTIdJPbHdP1lnjs9ITfPFKCY+V2dN6pqe7EuKs5jUNcrdvH5oQkqMTjVYo/Z8GWU1qfqYVKf6pCXGqHJsZqupud0s/vr+esbUA7jpif02jM65eCVfbCnF4Y+KSvo5psb1s75e7hI6rqwxST83xtToXT83IuuIXeH79V2hHhjd8szG/Y6MDAe3tzx6ZlEwO7C+8YJNdesqeijuDS+sG57mVW/yphWf9cipkzfUDz7wVZ/ay8Rf/1+PG+ZetM/HJonWtertbWhYXKrF4mKpLv3Pdnuibr+nJlGMf8fxmvsETlbbrr6ipbF2/c+NiPHo9jdqURjxzuMTJ6bXLhrq1PbzEUvR2zdB2Rsb234ybzJYjTqd0Wpo32SK9yYneR0mdOLn2Fj1vQxP+zaTLTk+LiXW1F5msog4DP9z3jSvaHtj+Cv1K11f5mdNou1b09Njk8TvhLDs2DYlz28e4Ps+WY+v3mbxH8UG1znaeFxr77naWMfl5+fm2rQhfwIrKFd0xpLs+75RKzBYlNjWOLiutygTakQhbRa0Up1zgb6IV4DTkY7DfuAge+fJj8457Q6DkXZhx8tAp36lN0bpYvuMmz9uaktV/0HV55T2quq620jdMvLZCR6b3TupbGq3057dMHripmdPKVwcGOQwqxviXTZTWmba0HmXVMy5tH5AgpOnG23JcXHJscY0d3u1I80YlxJvGbfhqVWnvbRpotPtjnd3zK36FnZbLpumza3PKn5xJjHDIn49myV2r81A5/xRv9hi4kTa1ZdmeGv3WqsWZv6VbXXkqXP4BNPrzwmflOpbJidm1+Mwtqdrpwvm2eTwJiV7HCb+d6PDk5TsdZoSO0fjqfbBUqvfStVeza+RWvt/V4T38uvQw2zWX/RwO3acY1tajK8W75YBrXptqrFgxaba6qvVCy9eNDSZh2bRIF/X2nu9s8X8upS82SNTendLQxMU1RBlNDlcGSnp2YlmNDclxRNv4r2mLpjQw2iJsVhtibEJ6XajNTbanjHEr7xjoGYaaB70tdhjeWyeaOW2Hs6eXdGUsD+qS3SuuWfPLv3NImVnXQbU9EywqGlZNWkNto4JEec7TUgcXghYgJgXnHja5js6XL4Pjn4bdJx6v/c2SHDqa43xnsRkT5xRaT9X58vG7SFKbb9CMcZ5kpPdccaspEZ3Dy9eBd10vK812dsttS45o3O+1BUHzrJaMUgGdfWBczq9T3fxiNfAwf7KM+ndUyyeLtqZiHV5NcajH3ZuDc2bWXFu62PLsfcXv/KWNUQ7hGJTc+yfDRmSmP+DOFloNLQjKB+7tu/OXRiLN7XjMi5niP2zRkR68n9o7IgVQ6EdRPmHjUXXrr1Un++oc4iOJ2O6mpiYkKAedqRebXJmprq8TrM6NTaj9/D+9XLZ4nhKqVw7vXfagHF9XD0zvbYKs3G3s/dY/yXnDZvQNzneiEFQo2Is3/4f1r4EOorrTLf26urqpar3fVHvavWiVmsFSS0h1C3RkgABkgEJbBBgU2xhiW0wNsbxks0mgD2eZE6cM+9ke0lsFoPi5cQ5ke2xE3mSN0xe4nEWn+TZjnN68pjzJngSI717b1W3WkLCds4gqW6tf1X937/fe4vanpRjZqjCjB/73eHenV3ZDSszAu9P56J/cNiJXweWx+0z37On4AxlF+BMB+CMD2tDGotRgBEXLHpKmMR1F5zb1cgMZ/DU1NWXwZufp5zwwEUJHYGmN1Oxu3NqOWeVQIDaodfNvM0Z/HaH16SaeRuaUxIYVuI9+JTkv4X8H95fed7jKtFpMDhFlhWdUNv84OneAtpWg62CT3ceswIp/tOzNVaf2moGhjen5q3uCQstTCCwDEBukaeW3TTy0Zcrx23oBAhOOVYB3ripSiYzwFuzxF5KbQ17a2ptGmrmywylD/q8ARPwsRkCyCFnqnG7/VqK9fA6+B46DfmyxamlSFbDffg1crNaC/2y0wJkbvNsiewkX0cy92cU//n03d7uVDfJc9asBkRuWRjDZWH4lhX0Al7MTuLXcjosEtFjuAaDUR7WBkNCcGobDAW1SsvL7UV4TdskocqZROvLWFbIEsteyuJYFs9mk121kzjQ15/W4DU1lPv9ZH/7W5oBCkvJnig1BqOa1NiB8bFypDwVHx+DThbFgoBx4yAG1PJWPGt9WYL0ahBBi4TV4BYK0Ey635eS/Zr2tyRI15aSnVVqy/gYjH1S8TGkBdAOhMONjbI9QELR0JiVvZiyh0Kmj5X9mgW6NbJTcDkdXt2yU2vyB9ckOg598/ZjlvrB1vZb++o1Kg1Hsc7uDTuytz68Lvw/vtCzvdt7y+qufe02jYZhNJqNnb2h3h1dxf39od7s6kanO+AGDl1vdzsCbmPd+uPrpqyJzljvcHcPwGgrwOgr9B4sDPLCFxBG3s5lOO9shci0wui6VRDgAmDRCoFqfR7/LxBKpWZ/C9FIKQF8SgngUwpaKQWl1CShzqmN/l6+NeKkdLVwcIutH8BMXdAN0EWoWQANZG3nZSuQ/4D96vKFNnjlRcnWr4PXggwGXgyVD7B8ge2t5nTGYp1zhuHwXOTQQTSTX2FFlwnma/knN237/Eg0c9upLUMnc6zJCxykgfv6int6Okeb7ebshi5/e643YlfJQZPq0wMbBk6eu+3Q8w/kV64geFYL428te33l8Mjy247leu6faDfUrqgH2hsCkd6D9J0g/3kYaa9FwCZnf3sRZihOJdWBLZJjp5LzOBXWOeGg1XRtaHL2pzmDIOLFkLrUlHeES+mCrygUkGXOwAA2PtVwVZbfhilomsUmdUkCZ6bDJUk5F1nmTOcNUZQZcQbYrioDDaNdRUrlGIp4kKJVDGv2xJyhrE/3mornaIP+NZXRZwPpiupeQaBA7H1voLCnP9AdhGG53mjV0RzP2RrWtN3Gig5j0PfhH1W8iqLAgjT7gkaHyI6NP7QhptVrjMjOAU5RL9F3YbdiDyJ/nc/XDAchB5IaC2hy3nU1hhoD1tqQVJU25ocLQ6XO3oAF+KVCrOgqahA7AD8AQzohT6YapmDY2IBCKiXUdG1UlSR4bedQSYJXA7cmVa5HfjwOCMQ7O8uRNGITsyiX/EsyzGL1kOaqi/1zu6mXgHU0e6OO/vbXoBaLQoWLM9JCfgYLu/N13WY1YCi8ygeuWo6fCYG98RVmTsuStOBzASx27N92I4tvZPf6sc9siOk5CvDb6HNz8LqRW+f2KRgwDJDWPdhXEAYNDc0TJjjHbqPHs4KHYOxJNIPm0kB+xYTRDtwgkzPv6t/SGykN55tXlAYK7cVEwV5Eeq2IJwofQPAw3SCHDxASA8LjIiCxC9FwSJDIcKQkATIDK0pSFSEEC5JdFFu0zouykBll2DkoGOaTibZVLiGZRdkLmhlGRsHEWtL5+o6jK8ugUBzDNaTrrR2rk+L3Zei+vxCw2pEHxxwtDTGrjsRZ0eeAx/KPrrrlaNFvL6NB6AfGe4Kj669/rryHepkkwdKeXdu8pKpsHXtwfYxiWVatUmvUFLzb9f+zqq99xyO3KripckB3zmJXEG4PP7ztzHaA07P7h4c7BkbA2oVtZ7dloRpxHZqObeBnf3wS/yDn9t59aP+ZwmOl+3q3j+wv3V24ozhWHChYHa3FUDENoLns6Bd78yU6jyEkUfhQ0TMIKooIUylYQ4F/GTlLVRTOc6Zw32MlCRK/e39Jmk/eAenneAnegc6XJHAPGwK5fBNZF6EmlsGqZDgKWuLfLAifQHuJGYirE+Bq0VEoLkew9t9ybJVfZfBBV6GyJfvSHUd7gEDAwg4LhSXRXG8BwmJ4DmgoJeqf+6R6TtmgbiLMuYWYX3/rJuL0CkmqOcreuKb5bzYLMF8IzZwmLwGZMmI7scdRXDyCPU/sxdRYPRCsnTU1O7dloEDZCt0dadPt2wp6mi5sKQ3mMx2lQqGlCOSLOmcfkuUmgyKu6U6xoUG2BNNATK5eefsVKCVO+fIcuH5wS0kCFAodJQnSsEMi5yVARZaMDIqvHIhOlScrZ5LkvMzSYpEzy6Wh9jDzgAbpGHmJs0Q87ohVrbZG3J6IhTPYO3YNmWJBF0+TBMWoGc4e87oTbv0iOOZv77HUBZ1qhiIAmKIj5FrZRrAOO/UTVxhSDLtcITvH2UN/+XDzoeEkuIjjBUEwOAWWUxsTfX3k8hvxQSaaUnFqXrCJPherYoG9d9pkhOirCKFHsZeR3t9///gXt0AzvbsGYLUPYLUGbGSSayFQvkfHu8a7Mof37V7dcOqLhc+WjvZuWbu7dFhPHy5MFEeLqwCvL7cMJQu1JXtF3TuvTAuysivQTZe9KkSvyrUimkc/W5Ig1cO7SxLAU6bbAgkDPYek7bUlyT6n551XHNOyli8OKL0ETOKiJQT/x1FvDzWPGH2Vs1YDbuWua0O9t/fY6oJ2hKOWFe0Ax2UARwcUBUtUFgWSBaKgt/od7oRHP7P7o7Tbu0C5F0rETxdH+cNioSwoeoMeCgrDMkBSGsnVH0ertfOUGvqJP1HfAf59AjuNNDrXD52AZiIQwLITE5re0QYM+gqLoBmEmJm3DOQKDYW2Nkui5Mr3Y5qSpcCgkD0jK3QnCrWQZ5+Cnt1QLlGe24IIOKQKBVeiJEEaFk1JQlRsioGXycg9PzcDrTpo9ZeBn2fbkb7L2zpKpoPfcUOQmt8DsiKPhiVJRkWrTDCmbfDp8ceBKbfbgCl/R6VVgej23aaCJeQys+AkihM8sZQlvz3nJpNLhLEyq6uj3p+DdJiiOA37c9kKz6jHtnBqjtbZDO4aQccxoVUHBwmdjArzLtDjx7CfIC3u6HAMwtj/2cjmzVpJB+Mvx5DjrpNQiWu1e7QO8BO5F6uPR+4qSIWDB+t3lNbnBwuFUnPvSacuUqov+Ium4kPQ/rIDSJEhYOVQDHAb+e2pit/O3Oi4gwrl9TtKEqTdXChJiHo9iNFk+uxDyDaDOyBthmCWYzRwCzlKo27Qxpsr5mIYfzLomXc5wQvA6t2e89xMK2GuEunxAK2cl9rgZ4J5mMQEtFA+OIY1udEBIB+wWAopvAOUkTYI7yD5MAH5YKhN1YDeXC/XLiosI+NjD43EdDplN7gA7d62tAzBL902Ag/9CPlPWAc2iG3BLSh3NxsSeZip51Ugkcz7BCNezDd0Ts5+ABPLTiVHB+1vL8FDnewQWM1p9Qa8OOSk9GmygWXBHpjQO+GIcS1YSTSwTifbkKBg5prLwtR1FN5i1CeAy0ZrQzketCF9miVb+t/UDL9nNm9tIf+wvFDr6/5lS/+mX/qGlOJ/J6q4lH4O832QtTZMw5TVCqQwlYrHRbBTmI6D33h5ASUxguhq+t+UNGbz8HsSJL6c/IMEybd0/1Jq6fdt+qXkGyp3FXTKpRfhFVgWULK4gMUiC1E4wgBfYrGiEG/O1TSHw7A3ORwuR4DAx+DZcKUc00EYs+FIREcqW+QjRv2JgCszdt9g8zanwdrV9McV+9cms7u/fmDPk7fVCf56X30qE/IGs5tPFGN5Ly6I4szMxFg6n7JObKovpKzDW9b8wRezcQ8cWTXR4SQPBbzBkdTgncN1bosh6QkkCTXhb79lWcf+9fWh3C1Zf0dLg91erGvfGg6NdQ/cvS7BqfwzVzfv9LX0RW/Z4W0uXB9v6yRU9kQsau5a4U53wAhuK5CPr5CvY+3YauwhVH3IeFZDa4LpdFgvrMtoo25sbUtfpmO1hwp0wZlGiX7grclnA0XbH2kZNrk6g7z/21PIRqAyuLbqygS89KKU6A/Ai3OcFCjStj9KtAKKXKGRPXxoMc/dOK/LhrA2Ll2xaZa+JtVvG24yqWA0BsPsvtt7crd2+2L9+XykXMSJ5VfmYyoDLO6I7A1lnNCeJ7fW8QazVi+YNCZwhtFudLRPFCdirUH9wMmnbzv43Mm8GFoW28PJhVpu5hoq7HSuvH/7ckNsRT3MuZ6c/Qv5FH0Ay2D/gKx2ZxavNSqVG2O5pGNUSjpGpdZjhP7W6uFhWY2HBTYeVtR4VPrk4TE1lgOHME8tSq4vJ/qDvZV0GmgQDjQF1cfkIiWqkV2otSdQFs1JldPlWobhI5LlhekU+dS8fOZYj+wTjSxrlHfnH+vbePNklm4B1nVBfkrM/uvMaXw7ncKCWBp7GvUaDmXw0OTs+5AnoP0PyKNQuZ4bgszi4Q5i//m4BlPOwxReYmXmYgq3YcySU9vtWCaZA3YpOYl3XIh6+0zQAcpC/PNSXBZgVCWTK4yQdRfBNVF4/rMSuIA2IY+miO0rcVliaZldlGIb5vdWGWEsCY0HOIKv8eS2530JG0fhJMuxTMDqT3l0Zc9jrFvWVhtftqxWv/3ourhKrRUNWoNDYGlTotBH/k9WZhuLp9tqY63gD8gY4tsa8gXAtxyK1zTwVS+BNw3Pez1FOYFaXkKH5r/Ix3iNj3j0mz+xrAv0T4GlWY17kBdyGgReGcsSFngNXozY4HL/Wry3SiMqqgLdjVHxTUYFbaQpHo8FrHo8GXmUBxrvgYZ6IIVRA2ZcXp0T8YHVHRGFbEQhG1HIRhSyEUUBI8/jHwCVFXDm/Kr+INQabVd/R2+ipS9RrCgaiIyqx8+0KiNFQGykDBmBeodmOTnPrYKqd1Fa1d+FqOmk+eRsZXryaIKbKeNS2mlWOmiUShX9U1lJjSpTXU+y9SCqUMGig6VuRbL1UEVnGYPLanELbPHRvpZbetJCYs2qfHDkSJ93TnsDrQu098Y95APA/JEkMISfXj/kSHVF63tqjUCtizLqxDdQ745csd3fiIf1Cg56BQd9WVn1CgB6iKsByxmB3kLoMB9UbQfAMpTj4v1hvdnXZy5iCgh4agpwec7WnYujE9XS3Jk2hb8LKtuLMRJxkCG+QTCcSmV1B832dGNbYCHDQl1trW6tP+jWUCRO3mbxiBzHqUzJYvP1Z25ky8mmnoieVKnVnM6Jeuv+ROyhvou1YY8gnsQwMZBQZDChsCCh8CihdJ0kFF4lUDJm1SZKgYJbW7IW6udC+NI0ZEaD0jcyPYXGgQDSJQmca81ZtSXJWmDrq0PyuEOYLgsdtXjIvUQQTexRCb5Y0gqCaPdxvYEGGdE9ZRfwLqx9gvSoOW8NukwqmqPnh79ymHuTwBXxiPoryEK3Y2fQaKS1XV2Z7Q3w5e2DrnAGy9SAH+3o4PbC+DjTEB4sjRaaYTapLgzUFV0FS4nJK1kNzGtgugE4M6VkM9NKvR+lMXqFxOhgSRotyFS0kkyGsZQkJl9OXmD6AilBKZqfeCghyBJFxEVyzkWYTLaBfKOvZgXsG0FpZzyNsorX5Fzz9bIIzsSr2Lo0BuTlua4TlEYY+CU6WqqTTr+4JEiYgsrPqF9gE9jXUayY6tLBr6XEB0dR74u2W+sCP1hjfB02WOgqLFvmK6QLRGFUFy81FgxQ8EIDm6sEFmIzNSanm1OwNFDONsEvAscuk8EKQoHgyULjqK4xXpIaCyED6uALDbCb54kzhEiY2jI+tlh+WY0DsyQOcwNjxMXknvqZSpQz/U7PTFcVFATJ6j3RxcHAf1B2k+8g1dC925SvVA42uf2CTq1wvQoM0SRqtdql4MDx8oi+mdnF9YfdCvTni9gbCKnbDq2ASI2fiMDgvvtwt+CAkIXD94fXdDeGLZZwY/caGts1fnTv0b271KWH8ycKhworIo7x0q5CHvJ4dAAWWp9dPlDpV5Txy8hRJ0AOapicqVWVDMpIOhDhh9UlqUJ613hJ2lUYzSMoRweWQ/qXJOUGNlnj5JJBpzLA6+P0TC6ucB9bDavgr1QX2K0UDfJ8M8rzvfpK36bBL1cO6qrQZEV/ZBHpUAn+j5QN/AqsOIS6arQf3Tu6hNJ+TF2uFh5kJlBZAWp4DchYjoJosg7XyuN/ArMgGYGBmVcFlyEv7pFXPLhFicHNSmuaC9dQa1BaERzPNYOVZhEPi3hEwKM0XhMFO9pr8GAN7oernX486Md9aK8PD/rwiB4/4sf9sGObE80Fvw9EA2DrvRwH3KHfp5e3oI/0Q/oacKE/2ufnHX18URnjkpLnKsXHQFgwNhaXf/ExuI7+gW0Qnj2L+XGBRjfiwY0qNORxMHFgTBSxYyuDd6vyUKO12agMMT+KEyQxM01pHVGPJ2rXUTNvUDSuMnqt7oCRo2Yo8q+E2uh3Wj0iS36V4tQa9sNvwfExlEqnJkc0Bo4EsBBgwV13aDTEO3D0KqHiYZ7eQ7xM5GgnlgBRw+eRRrPmNvh5PAzWZSfxW3Jufeisz+c0n/Il8XQylySSSbXzbPRA82n1IfKgMoYCjmUpiWiwaHWiHvKFzkrg4qT5lIQlheT/TZIaElwfdZ6VogfUzaclREMZSqGMXpkbS1qz5MiVcEWxqgeuEDmnx+8IjbXVrWryRldJK9ZpvQ3h0PKER6U16JZtb+8Za3U8uDa6LGzI1NV1BonfaTS8Nh2KWeo6a5MrE5aAs9alNZjFgMto8tjcTQOp+zQWnyUSCUYArwqAV3czIsiIGuXxlec5e+Pz+CiGYQn8kZwgevfYOTL6jOVA5suaKt6g8SVXFJYY0UmW6DOS5YAm82VJU82A1s65vv+PN5QEvPTddr9o0TOpW5d3b2p1+Lq2dNavjbJ6h8nkEJiHo/loENgWjScTDvYlid9rtLB00ZWqTw3dvrz34FA8HMaTtIoigbTQM8PJpC+7IhDsbfTHG6HeBokf488xLqwJ24BiSoMB01km8dGcWBuuUT2e3lvzhOWJ2n2ug7p9yHaX5KL81cyUXMw1pVWPS+m9tTVPSLUW8CefiYxw1RjnmkqcY1ms07xprk6LP0dQDMnErVafiT2s0Wn5TzM6p8kMXnWQB2gOWuv7M9Z6M0cT9L/oDGpCq3HWultsLrdtphO8OAXfHv+hze2yNTWvbXSoOJXWhJFYLX6NmKDt2HKsiG3C3oHv+gNsDd6DRTEDvhaLYyvx4cv1cfATcrbDzyix2MDz+AjmxNbhG3LREHWmdV90zZmcebWZMBdO6ZMs2eTT4BqNL3eq6YBvBB85lfPhPvgVDxVf8B3BOuNjpQNIcw4YrK2ln4+VWpXx4FfeeluUByu/Lbz9KzTesb6VOiOBG5jXnJEwswBuodEUTknoLr9Fd2nKnZLgfYCe+XAtWXUjGzI1sn6NgVvFhVfG4q2VUSY3r0823VCeBH/sjeVJdCncIia03CqDzt+xodHbYlBrw77TyWLWFejbt6qwo8tTF3H5Ag6LvaZjpMGVMl/i+Rfbmp0xp7Yt64o7tcnG1EMB26qeeFtAT/2b3WKM25KFjEOrUVsFg41gCHO4pSa6IusGYYUv2uXRphyBZVZLazxVaHAytO2r6WbRHTGls4I7OHOHB0RVzogl4NPbfGj0OPFj4jhjxNLYWlTRiBoggi6MB+Ksx1xi1Ko7Fz9Qs8d6kD5YLnq1woG4laHvUWtcd06qnFOudLVWdx+KkDs3q3QRx1nBaTI6BLq5JVCI0YKsqYzc0smN6bY1GQvx+4q0thTyqcTM2fI26aJZmiDAYua12miwY7gVI2Z/gV/DNfRfsRosKY/VBB4Wf/N8TINBA2UFftdxKezeb3qSPgIj5F8jQ43mHpwL103ijhwvhXPu/bTpSYlGMtPpeKMqraVQmQkZnLkXaq4uQGGGRKHJkrRwDMGrGE5vFkNBVu80wlfT1KRS/kAy5SdeSw82eRiW1RgFl5WkyUQrkWVUDEGAxeVajydW6/XISJHvA6/Ui+1FSDUF4FfNkstF+DIurBcfyZnUunNdB3znWg8sb4pl9scOVlCbq6Ck3m4FvxA6axfAretAq++cNP+CBTWSm6C4cBu+tVwfsZTLI+T7AET0xtlG34ooo3cYzU49m2ms6a7AbA8ErJnx+r71NmdDKmVrG6w3LQ31wm3CpgH/uhuSzSlX2M4H29e2yNzCf4Z8eC+qb9Y4MD3gV07jUE9FDtTozZ795oNzVY2rU/LkGW1EPSXNHf8YtQz5leXpM/jPCIqlVTwAWg902lL9frbacMCo81tYCqf+l2jTsTRD87aoe+ab818k741aVZSK0VnBWwSIl/Gn6a9hGdnTXMAC3gh8C8Go5737Ik/Y+SeM++JPsofkkgQaATR19eV/RaMOzd59xsgTkt2YM/JPSMZ9bPxJCZxZLkWUx/5TaDLNAp8yz+/AOALN43uaUVs8fv3WdYM8z2sGGMWffg5s8Z/z1TrCDMXQBClYbEDcqc3jeBj6lHtoEKpTYHEP8jj/Xp/RU7wBvJ2X+AnwLyYsooykNvi98DPSRr/KD2R7Y45nfX6/1rFfexDbL8/KwO0phw0Ooq6MpK4cl2djwFcCT2piWFKJH0FkMD98JLwmpx7Egc+RalONyxUwq8nnaZoTXCaLy8CQXyLIhwmV4KRNQP80eu2MTgX7pkEigP+HRtSoaDgHgpnZYjTiX2NVDIkRuHr2z/hb9DhmxmJYCFVQ6JBzQOgFz/yrN2ARmA7l0DZ4Rsev3qhWKTJcKVwvmDP5IgvnLLoMrIirzAGXM2BW6Th71OuN2TjOFvN6o3YOP1wu7pPPaQwamgEP+NdWf9zJ886435+w87w9ASPa0mwJf5ragp6wRZ5/ZSG2Yz7MTLRe4oVa8Ly3Y+Bhhany7KtLcGfOCSeJOOD+qoeOkNmlHvossG5mi1NgcJExBl3OGiPLcZag2xW2cpw17HIHLRzeCKfKkWBBzGoENU3zes2HPnfExvO2iNsdtavV9iiQjtqZX+MHsd+CaMKNpIO3ujDhCuyDvMDnwLpNuOKYVkq4rDLJqNlYeZSDQIPER2it0W4UrWqc+gxvCzrsQSv/qDebTNjfYNUq8BAaFW68z+mDnsYH7vnE7DV8L7gnj8XkmQcMiBkugbSH4UiQ6EyDLOeH8AG4HAlzFuX+VRZ/b6pjeRL+7cmnkivBH+T+58gdxN/Th6vlwxnOC3kgH9MZJB/OHNqG8jGdmScfyuuwC/ZYzMRJRrAaDDY9Y1Wb/Fab38ThMw/N25cOkw+WBQT/5/LaTP38fYIAn3HLbIlqpBowI9DGghzpmYheEMV7wFKN2XHLef1moJWWc/SWedP0zuntYO9FSb+ZhofPS+C4baHnKL9FtnquWAdBNS4/+vzx+y8faYbtickjzeeDxTuHBw4ORYPFTw8PHBqKEsY9r/7dxrWnXz0swfZLr9478sT+3PLdXxoZefwAaE9DKzn7F4KhopgfW45Qs/KThOMCJmr4Sbz7gmsTUM3OzuvTaPoQRE+Tc8EjFyV0COYZFUGSjTrLMHJw1xxSvBjBqM0+q8Vn5v8CawUkw3N4LaURbQY4KcjOQRPB8mryljM8pfXYRLuoYX5A0AQO5RzytzBbIl9dyN+ViL8rEX+tMn+ti/LXWuav9RPxl3y1Xvru8RPf2h5L7/nu8fu+NRF7xtZ++5r+XV1u23LUegiDpPB3zyuQv/90fPSJfZ1td5weVVrA3+9hGEihYyCKWiNHUTHCAQI/j8iDH8xmNAQ2xcRJ3HSOGcPg0MJfAVaXy7/wFS4bDTlwCgPPOS+Bk2xw5KDjVxWmz03OWYT1qDJIfpVRa9nrm1kNzzCcVoXr5uFgsBlsPgPzPjCRdA+IIlkWxBwGh8gRf0SAWEWbyDMvlQH58BgnOiAqOwEqby1EpRmh0oxQ0Z3X7wBs1ymz6OajogOo7ICo6CrT6T4WKm+1furb+/b8o9TYtv/b+2H7vWj+traeiRU1kfxty2BL2E688Vix64Eff/7EG48Wcw/85Myhf9gabbvj8c2gjS2743GAin32L/hbVARIfVtF6o0X/Ejquy645NlH11+BHwKAUn9eA4W+Cwi9Mu8o/soSMq/M4jfjb6lNPpvVa1b9XjBraJJSq/6LN1qdBptXZG3IKwL7SW49ARJKt1W0ihrqyywn+0fA29Wz/04OURlk9TrKPqcJ8NZHmHOcxnlN3BH6YAFbcxrReU0Sd9ChDxbhKLUkR4dqN5+5Y+Xede1hMbbpzO5dpzbGvutoWtPUuTplcDauae5ckxQJw9HXHxvyd47fdXrDsdceG+r/3OufPfjUtmSHdHYEtIl26Szg6heArNcBriaxobKsGy57RCDmvNEwiecuBSZi4n8yO5GgQ5syNQ1H0EOzYswF4Bk5tQTOYcT/lJidsqRXmZeKpDcsKel1NMcz15+jeTjQjad/8zvRrKGA/VHhKlpncBhsHgPzAxYc7YIzX1k9nAErsMSf7+dwvdcqWvQ8/Y8kRcL0gf3wICvYy9ad9sNvUGD9MhZmIgWw8BKp85jaAT+Cq4ezO9Tn6A0KIlNvp2RJh0eBpA/T8DiQ9A1LSrr5RgPfefzFe449e6Sl/fgL994D2vO1Q4f6R+/s98dWH1w1cucqP3Hi7P/7zpYN37r2tb+79vSWDd++9pTmsddPLBt45MUDSlu28LQVyHqDjIqfEHOcVeQ1vGst+owAtDnTCIdLGj6HdqJo67/FsGs4qvcMT2o8VgMy7CBJwymGZ8t2HXDWiMVxHvW126MGPCbiYS0e1uBhFR5i8VoSjxF4Ag7gCumJga0J3AQ/mmCCo7ZMsEfdBLvTTT5Y17XBteeJBFQUuTvSp3RX+pSeeJ/SXQna92BsEoQ1FCKR49Q+kMbnMFINa7QcnPulHlITGKrqos8zgHtj8CHUcEWNqRN1Thn5UBXyogFH87tRyVZ4Wy7fKh9kgIM04mPKPyAazrJohD5KNIBkUFWSQZGvpvY8c+Lub+yIp6Vn7jsK2md0zvjygfT6O9otnq6JQsv69qiNIz579s/nbh351rWnzlxD7Xdu/fsj65vtqz//gnTqx/e1BVeMf+ozWNlHAQlJ4hqEQjDowYNuPOjCA0486MCDdpCM4GErHkPoGHyAsWk0og4CksYxyHwspvQAxxSWx5Qe4pjC8hgcuMfDFsifzmODF9l4uORFOExPjwrwVy4AmiL8aKuAtsv7X4IkUIGeA1c8JeIiNCmdFwJrY8Ikzp5j1lWsilI0n4ZTyNBUsvjLiPeYXFJXAFBMTuezEiDBQBrAva5b2uj8t7tX8hdn1bJ7FaBaUCC3ZXnmr48C9zo7ixWIKeJN+l2CpWiAzpfBngDIyg/Tvwd7GLgH6U+MeJMoIg+seAkTfgF6YPw8kGj7j/R3BX5EH1vgJfT2H0n6u+jAjyRwyLZwLMcSXoJ4M7L2ng3rj64OR9fAdihy2pHqqcusrDU60z3xTE/c8AJwI62NO89u2Xj2jramnWcnhvetcEcKu7pA6woXdmHIFqXxw0RfOdoEtgj/3kVkiiZx4wXXnfRRJdqUzZESbRqB44WHKtEmfTPPe1hlcMLUmj2rM6hpgubY50hebxFMdi01CXwsSTAcSxxazRJqi6gzadX0PpwCsQ3F0oCnLbNXiQni8Tme5gwmzKMW7Lj9af293gAeeJq+H3D0APjFUz+88kOFp09L+nvpwNMSOPhxYxlioqZ3d6FvV7fX37O7b2h3zvF5wd8UCmT9gjHQWBNt8Grx/MDxWzLJkXtW9x3bmG3adHdfy0ib29Uy3NKzqdHsWTYMeFoPYpmTxJcAT1vKPH06p0ZM/dB1L31iHkdzasjSDyV04KbRe4WfJ1Wi02x0ioifFA4ClOcpTmsWzHY9LcLSCwELSx8MsiRnEsF+NbUXJ3CcoGgaSG0LcScxQbuB1JpA0PgQ2FNPnMBP0nawxwz3YAK2A9tIbaIGMRbTY1bMCzifwpqxTiyPDWEj2BZsJ7YP+zR2L15EeOxdvUtaJ7XceWz5sej+Q3WHfFu3B7erCkVNEcv1UD1COmvKSscObS/2ZLM9xe2Hjkmsa3SzzdX/qSODR7rvPt57PHPH3qa9jo3jnnHD2g2WDURbB9Ohrk3qkkeO7x3f0JFMdmwY33v8CBvecVtNGEtNp6ZFpbtYGZVx8wUOrzB8kisgMC1/2/Plwpgt5fikj4ikM1DTmG3IRJTWqLRWpS0fZxdsL2wXHmct87dDC+iX70deSWez6TNwca2hvqE+CNdmmjPg33cb6usbiLVwed0BdxAnK+de/146m8kE8fpsth5/FR6c2QyX1+DZZ+Aa+ThYpMHWzP9uaKj/DdjAnwArGyC1o2CBv5hJNV4vgLWz6XSW8CknzbBg5T142S+z6WwSrABZ/SLxM+IqsLmM6jKGoe1/Jn9Dvwe2X8JgDqQcR9/m6Va+zYN/Fn6bB7/lAmef0k4Sn7ngmGI+pdjg0pUSnCuqtU9J8NCzjGNKAgcX/T5PxWTIH5MgrmZ3nJ74ps7p1F3c8ejW+i8620Z7Nm3qGlnmoXbueHIiY7QRL9qMjdu/sLl5WyF6/e2albuAdVCeGFuGbUWZTsIO/1uPAPygzeh5LNAInyJp5UlPFK55DoqVqrf80ZBSRihB+fw+1rjYmdXfC5mrdVfqhwFjdbFXLiQ2GMsfjyJ/AyJsYFp07B9wTm/RCxYdh7+F46xgA3v1rMfYa/XZBeY18l9Yg9lu6FcbNRzxO5qlwD+WJnLXXyBhzZRiKLD+o//P3rcARlVda68z78wjjxmSTF5yQIQIaQgRQwSq5EmCIYmT8KxaJjOTZGAyM8xMSECKMY1IKUWkFi2ipanlUutVpBYtIo1gKb6ol1pKrVIutZTyUy+Xay3XB/nXXntPMjMJNPjb//7tP2fJt/Y+Z+29Hnvtx+GQOHD/WGYqdpHy6QWFyZyZpFEbU0zsN70MXHTKySJYtKiAjaNZmqC4Q+WnVZ/eTxWv/ciTpL72BcVr4AG14ijcMol9Rf6bS/od8uzlt9V7K0aPrlxuq/dVjL4rNa8k74aS8UlpeaXIr0tUvPHlR3xfLPZscyx5xDezeNm2ZbffXX/tlPkrKr90d/24KfM72D45TSpSFKs8cA2kP2tKz1IauCFKMqRw8g3MEg39fjMWVly16aPaNPp4wE4laYpik+FSpT4p0fDUc2nJeuNrusyMMWlbDCbJkTFqVEZmqmJJq3HU6PRU7Rq1Wq//dDr73Vo3w9M4ZkspCjJGoURPWpMUx0HNjh8UimPAk/VvhmJC1owvl5V+aXpm5ow7ykvvmJ7ZYh5XdN3EotEm87hp100qGm1QmOruub1w8qJ7Guq6Ge9eVLO09JrcKsf0GjfjTRiJO2GvQqt0YSSynjGmP6/49e6IaPyKReMWjMZ1fyMa+Mp36YEEozFh08Nmk9awU5M+Kse8Wmc4mZpiHpVqlv57vsFsHWXWtKpUOt2nu838NwN1qC5ABhgh5Rmj4gXFIVRpVPQBcz71xjGFqfzXM6l+n5SQMH7BEtfUr/VmpGQqk+SsFJD6d6q/oUpWXwADJD6jMWA+PePRAKUQ/zQwhi2Cyg8S8fr4zexs9YXU7Jz0KVOx5V7t/YoC7V9ACbpncFDYYCvHpI6pVKz4dL32L82Yvz+9OpJm/p3o0v8kKTpGSD+/PCmvU/44TKrxV6CVQ0ktXQVtHIbevRJpZlyZtKarpH2XJ91tjBIsCf9hyBgxnTWcNSlj6AijxLNJH4Up+QdhSrnlivRb8+ThyDLxqujZy9OoSk6pKcPS6XTFVdCRkZDVSXTCeiLDllmeuTtzd1YG0a4wZVuQupFOxylO/9iUMy2KHhD0GtGH/5N0TdXnQjuuuRhLo+ePPhhL8hh5+RB6fcy0IfTQmPdiaezOawND6K5re65A747LvwLdN+7YEPrduDNx+mej8TeOkL44hCriFKc4xSlOcYrTMLQlliZkxSlOcYpTnOIUpzj9k9H1cYpTnOIUpzjFKU5x+pxo+YQnr5I+zL1hWLIR+eIUpzjFKU5xilOc4hSnOMUpTnGK01VQ1z87Af1Mk+RHnAF9oIZesCrn9b+CuLD/TUkh5fZ/gDiJcGv/nxH7+k9IuRL7XYC5Umb/a4i5/ecQJxHW97+M2AcmKRf76UZc2N8pTSL5SSQ/ieQnkfwkkp9E8pNIfhLJ16P824iZqLFeqgcL4tb+f5fqlfMgXVpMVi0mqxaTVYvJqna630732+l+O93fgL0dQ8zsfw+xnrAP+9yAGusRF/YXSltR5o+Imf1/Qtza/3upD++cQsxEO/ukXDAgTiJkPfRJW0GP2AdGqQ/7sSMu7F+onIdtf6VciJYcR5xEWA9piFv730Ls62c/iv8FxVhg/38j9uOiyfTTh0oaiUSqKemnSBNVu0RZCeNU+0VZFSGjBqvqlChrIu5rYYXqI1HWwUT1GlFOAFnbLcp6xfYBeQPM1/aKshEmai+KsilRowvbmQietNzwz0tKurQHRVkCbfo2UVaA1npOlJVgtf6XKKsiZNRgzDCIsibivhZmZKSLsg5S0x4R5QRIzrCJsl6qH5A3wKSMJlE2QmrGN0TZpFVm9IpyIhTJ30dLJFUCGmdW+0WZx5mXeZx5mceZl1URMjzOvKyJuM/jzMs8zrzM48zLPM68zOPMyzzOvGxKtMq/FWUe5x+ADIVQAFOgGEtzwQ0OCIAPgvinGUJ4rwxLAfAT2vGOG0teyMcnJeBBksGG91qgFZ8FqeZC7kLpFYhOlDRBFZaa8I4LOlCiDntzYR+NsJJKMtRgzyux33bS6MFSC1ki4x8fyqzEtmEd8oDNBXADlsYP1KZBHum3Yw9+lJVRrx31sD4csEzIzsFaK95lT9vRvuCAP414300+eC5rTzPFQYZSrDfhE3bXTlGI9pH34xOeyqSlHZ86yN9wdDuwbYDutKOUk6Im4/1WujcXqtEmFh03tfNSXGdQexdJuKANdbIoOwllYVFYVqb7QRpTN9oSHr1BP9jzEFrhxpZBjEIZeeMmT9wDftjxTxu24BZyf+ykQxZj7cYeWa92lGN9rcRaB5ZCNA5B9K8Jyx6yKUCxYP66EVtEpHivIfKJ6/SSRw6y1EtagjRO1TQqzXiH5WM7RTBI/brEWLjJJx6LIGVFEHu1i3xlI+YX98Na2rAfD8XHL6z04p020sr7DFKkBi1gGv3kC58b4dhy2z2UNSwTWkXmMqvaUNaO+kNU89JYh/Oax4xr4ePoFX75KLZNJDlocaRHLGqd1I57vQzr+TR3I0dzAvXWRj2spDi0i1kaGe9w9nlFJjP/+bgEKBvCOeqisWaZ6x/whtvYImSCWFsleg+hF3yEVgyMkp1yhM2Atii/wiuPAy2xk36H0J9Pq0sLjRV7MnS9mj7E6/kic8KZX4S9FOJ6d/lMD5FOJ2Ui07JsYAwGZ+bQdbJF5LV/QJplLh9xL8q7KHf+76y3+viK+w+z4tagJQ7IpVl2vXguw2zKCh9ZFkLyY2ZPRuogyqdVNjpz8kW+TcbySsqfFsogNi4r8S6bQ81kC8ub6F49ZAOzYFAi3N9wORqkPPeT7zwK4XZsVBdR5PlKs5IizSMTGhjtsHR4XXCItZvN8jyKAZPzi6yIXKf9FFevWB94Ly5Rt4s12UUrips85NY1kR3hUY4dsZBowfMnMORO84APeSNaCfiu4KSYhsTuw+cn15s3oCfWA76KdlCcHDSfhotZh/DUTTPNQ3OKz/yhsWdt+M6Si/LXR2Xw8L1zGz5rbCPnB9/dZbE/h2jkHFH7ZKwHg7tirF0zInKAecJ94aeF8FoZGDh5OGnv9dI6Yr+spzz37FFZxdcDn0DuFS+303zh65OT9jG3WFt4P0zSQ6v/5XOUr+JeMTKDvYdniDviVNFK651bxJmt6iZaL13Ch/AJIxzl6KzOo5GxU9kJ4fNV7DoXOxNyY9YFF63THXSicNPos1G14z0WoRZaj/izyaLPL8esndeL2Tu4WgyeBsLWXM3uNMLdQM6O6aMm3IecM5DNS/EeH6dw1vDTiUfsIoPZfaUdLpyVl9/l2MjVD8ycYMRZhI83zwKX0MVXba8Y9zzyOSB2n/C5gp+LWsQ4h/OY55VfnHe4Bh+du+3kZzhT7DC4y8euZ3+HsRiIkJ18Z3Fzi7XeKeaqQ5y1vWRr5J7pptN4kHJT2Hj5scVyQ/Q+j6N9fUSMnBFvCJHzYcT9weBbTVh6+NUtL2Z1C8c+trWH3grcMX6H7Ro8gw3OmsGdKDyGeRB+O2NvYeG6KyJD/PT+5aF8a43YYbnVTWSLS+xU7QNjGbmW8DGcLEY8SLPEM2BDeF5H59LIoxq5w3MvI3ea6JwejEQHxbHtM45jeDdop7dLHhlXhAVOQqZzMC5LUcIRsXeErrAe85XfSR6Ed7zpUau4HXv00Yoz/KnbS3tEeJeJfD8L7xPDrSnRrYK0VvCxahJ+D7/n2i8zooEB74OUpV7qnc+ioW++nzUDwvtbFVTQ0zqoxNoC3C1tdKca78m4itrwyXyslePdcrwzASUaxPMJNFILaB+qQrl5tMfxPmyItVhfRGtcJchUZ7VbUb4W+2JtK2Ah6ajA3hpI0kZ9z8W7NcgrhBxrUYZ35mGdlWfTKsj11WIr/g5RLfZEbmkj3pcHPIy2qpo0hi2bizUb9l8lnpZg39XUH7Of6a+kcu2AnZXC0hKKEeuZ9VmGFtVQjd2dh7we5RpIfwn5zK2tJR8q8Tn3pYIsYJrzha9cjsVnvnjCxojZV4M06FUJxaCKrBmMXxnyerSc9T8bnzbSDlGHLcvJ0waKXoWIGfO2hmqDXvGRKiNvWFRZDMqxPBf/zB6InY2Q22KL6C06dgvo+aAU969EYBlFro5qfDTKqNZIY8We5omxtJEfsVoXUCZWkFQJedwwkCGVlL3c+nB2ch11EZZwfWxsI20JZ7V8hTnCewk/nydGemhcWNRLKCbMroYBzZfrmc3Nz+stdPD9cjKtP+xvDPnfvOXT+cAPnT+QCwumFMtz3Y6AL+hrDsllvoDfF7CH3D5vvlzi8cg2d0trKCjbXEFXYIXLmW+qcjUFXB1ynd/lbVzpd8k19pW+9pDs8bW4HbLD518ZYC1k1nPBDfJ4xqblyTa7x98qV9m9Dp9jGd6d42v1ylXtziDT09jqDsqeyH6afQG51N3kcTvsHlloRBkfKpWDvvaAwyUzczvsAZfc7nW6AnKo1SXPrW6Ua9wOlzfomiEHXS7Z1dbkcjpdTtnD78pOV9ARcPuZe6TD6QrZ3Z5gfpnd424KuJkOu9zmww5Rj90bxF4C7ma52d7m9qyUO9yhVjnY3hTyuOSAD/W6vS1oFIqGXG3Y0uvEAAS8rkAwX64Oyc0ue6g94ArKARd64Q6hDkcwTw622TGuDrsfy6xJW7sn5PZjl972NlcAJYOuEHUQlP0BH44GsxZ793h8HXIrBld2t/ntjpDs9sohFmu0DJugj17U5WuWm9wt1DFXFHJ1hrCxe5krXxZuTgjKbXbvStnRjkPK7Wbh82KQA3b0JeAOsoi67G1yu5+pwR5b8E7QvQrFQz50aAVzyS7jALRxXSx5HK32ABrmCuTbXC3tHntgIK+mh1VPZ/lw43wMERuCovzCKVGhDwXsTlebPbCM+UFDOpCZLRhxP7vt8KH7XrcrmF/T7si1B6/HUZRnB3y+UGso5J8+eXJHR0d+W7hdPopPDq30+1oCdn/rysmOULPPGwoKUU+7wx6kG0xuUFmw3e/3uDFx2LN8eZGvHSO2Um7HFAqxZGW3WSAcOLQhV57sdAf9mMB8QP0BNz51oIgLuR2H0RVoc4dC2F3TSvIqnI4YKswbXyBcaGYa8ob6jnngbHeE8lg6rsC2eaxNWAGOT0er29EaYVkHKnV7HZ52zP1B631ezJRc9/V8WkSIYw9XspbPIsx1HPdgKOB28IQMK6A8DPc1gyKQ60YtOCfYUhJgM8fp6/B6fHZndPTsPFSYWegODh8rtIf8uAo4XcxNJtPq8vijI4rrEuYuF2cD4qZ50upucofY+mRqRJObfWy2MJNFqPPkJnsQbfV5B1aK8CDkilxwefM73MvcfpfTbc/3BVoms9pklPyyWFOux+GltKA5wLoZfhEcbvE6KiRqmMQvWZiX+tAnFhqcSx5c2Cjc0cskC2XUQmky1bPBCdLkQb8xBC5shamNkXHmyc0BXPTYFMGJ2II+sxhjrHBEsbnsa8LFzsuCYqeFOpxnI/eCGWQPBn0Ot53lh9PnwCXLG7Lz9dTtwcjksh6jvJUbxEr9y+vJIiethnwchpWjdZbdjki3PJFuzPrwY48b85TrZn0F+E6FGmgSMQ/z2FrubmbcRQHxt6NDwVaasNh1UzubvEF2U2QJejgZHQ+62BLt87v5inpZU/mER5V80ohIkxEdrb62K/jIpkF7wIvGuKgDpw/XULJlqcsRCifYYB5j8jvdNPGm8xS3N/lWuCI2XK8vxKYMX8zdYhrzTBGPgq1sP2hyRc1ce4SjAaY+GMJkcuMQDew8VwoAm29VFXJDXWXjghJbhVzdINfb6uZXl1eUyxNKGrA+IU9eUN1YVTevUUYJW0lt4yK5rlIuqV0k31pdW54nVyyst1U0NMh1Nrl6bn1NdQXeq64tq5lXXl07Wy7FdrV1uK9X40zEThvrZKZQdFVd0cA6m1thK6vCaklpdU1146I8ubK6sZb1WYmdlsj1JbbG6rJ5NSU2uX6erb6uoQLVl2O3tdW1lTbUUjG3orYRt9xavCdXzMeK3FBVUlNDqkrmofU2sq+srn6RrXp2VaNcVVdTXoE3SyvQspLSmgquCp0qqympnpsnl5fMLZldQa3qsBcbiQnrFlRV0C3UV4L/lTVW19UyN8rqahttWM1DL22NA00XVDdU5MkltuoGFpBKWx12z8KJLeqoE2xXW8F7YaGWo0YERVh9XkPFoC3lFSU12FcDaxwpnG8ayRZK++Vkp6vZjieXfHvQ3xn/cBH/cHEVsY1/uPj7fbjQ05/4x4t/zI8XfPTiHzDiHzDiHzDiHzBiV/P4R4zojxjh6MQ/ZMQ/ZMQ/ZPy/9yFDH/4ZCLz6rbAWhrsklEhA0VTQ9vdDEijETxGAlIvcyX+W5QqXVTXaaJRQRtowUnmTieTPj1Q+KYnJKxpHKp+cTPLPj1Q+JYXJK7NHKm+xoLxV+VdgP1WhInkV/rGAFbEcTJICMqVMuA4jWCjVwy3SYqiR3LBIaodWjFJQ2gprpD5Yr5wD31LOg17lQnhC+RDsUp6D55V/hp9hz0exp9/G6PhdjI6xqOMLqGMG6qhGHfNRhxN1BFHHGtTxNdSxBXV8F3U8jTqeQx0voo6foY6j2DPr70/ROqTDEToSUcd1qGMK6piFOupQx52oow11rEEdD6COR1HHD1HHc6jjEOr4Beo4hjp+hzr+jD1/jH2qo3Uo3ojQkYQ6clHHVNRRjjoaUYcDdQRRRw/qeAh1fA91PIM6XkQdb6COY6jjXdRxGnX8RflXCWMvJUfrUL4boSMZdUxCHcWooxp1LEYdS1HHXajjG6ijF3U8jTr2o47XUMc7qOMPqOMc6viL8s+SGnWkoo4x0TpUlyJ05KCO6aijCnUsRh0e1PEV1HE/6ngcdbyAOl5BHb9BHeeV8ySFcqFkVD4kWZTnpBzUkY86bkEdt7L5p9NIOt35dT14rTuv00k6/cGD38fr29/WqCWN9ryuc926Tp1a0ml1rMgqKtCpCmadn8UufKLRdG7atKTLj82ZWFfXrsNMTq/s1yllPJXT1afRSRr9nle+hpdGKWlUJ7vYpVWBVsW7KtCoQaNet66+XpZ1kqRTkUAXdCkVIClnzeqS8FJ2KZWSTr19+3adGk33r6PLT5Ul20nTRZUCdMpZfWhblGsJks7wUtdLXb1IDyKtQ4pwMUEtJaCLwscEFSSgj8M5SYJdkV6qhvdSJWnUu/qYDxSxWRFuaribCZKUINwczs8E7ifGdNBPrIT9VCtAT37OStBKCQkXe7rZ1XMxQS8lGPvw+u6s787aTLQBSauWtNgROvhwq14j6XUqlSq0AWOzIaRXgV494O0sfKrVrmb6ujp7ejpJGC18/mUWyR6jsj9h0GP0WZsgaY0/gtcpopy0KkkrfO9ioVSH+y4gK5j36L5eUujVA+534bgpMEqzuuj/Mop1laTXbMKLIi5CsM5PNREDCoJBRUHQ6yS9/pPue+jq/kRvkPSmviV9SzCG2x+QH5DXI/UgadE7XWePajU6btBIBhaHcCAMKjCwQAxEQouya/BRZ9fq7u7VJN719wiFQVIYwqG4TCwMFAsajM4ecXXq1Qq9Th6IhlYJRpWoGXSSQX9xLQ9I99qLBpNkSOqz9lm3527P3VS1qYpF817dvbpuHU0UCgnGwKiVjAkKvKZXsnyqnG5Ug1FdPBiUWQYtig9EpXs1teBhoRTsNin79ZFxkft0BkmX+JO+QzQCYdKpJJ1GhKZLr8bRnjXrIldRrNOCTtfdXV6em5ucbJQURk3XlcNj1LLwoGmGhOJybkZ3eTHVC+o3JfPrEgbIFA6QUS8ZjZfgIK4JfRHXS10Huy6BMVEyJp/MPpl9fuabecc9xz2Ha15//eUNP99w0HjQSPNt9SGNZs2hQ0dWmHSSSa/Ea0bLQXa1zDBpJJNm5pIlSy4uEZdRhy3uPoTX6r41KLOGGjF175w+yK9kVb9JXVAAUDB4nUwwSglJ75z8Y8GhKKI5cPyksNigxuQYVFackAAJCWypcwCjIqRsJJNCYdIM+gl9fWqlpFBji74uNt5qvIGG615nFxps1M9sFrYdbJ5JN4o7j1vF1Y9Ld6Lav4vs5KeV8FmGneUUTo+3RZSzg7xczsolAXtTnly2MuDJk2cHXMvy6HtjnlxjD3mv9Ix61ytOpT0LajvKgexAOcncgnLS7laUk057UE5hRFdVlSU2GebMrVmEr5sNteUyPDbPhniI/m+vo0ALmXA9zMDj7Fw8yi6Dr8Im+BY8A/vgMLwFJ+EPcBr+Ah+RtBn34CyYCDPxEFwPS/DVtgcegC2wG16EV+BX8O/wITt5kGQC6p4EX4Q5cBuwn+K6FzbDQ/Aj2A+vwjE4BX+FT0gyBc/AOXjMvxlfLm348uzF8/I34WH4KbwGv4bfw0X4lOQsYIBr4AtwCx7Ga/HYzV6/74MH4dvwLPTB63Ac3oP/hkuQDIrSugYZZjXYStmLN2ubihEzoa8yTMVj+iJ8jV6Or9tfg0fhcfgh7IEDcATehjPwHyywJM9+DtcCo+EGmIWvuU72b4ZgHWyD78ET8GN4Cd6A38Af4X3oF/IKSEQcAzfiK9Ri+svIVbAeHoPvw5PwHByEX+Cp8k9wHs+v7MTK2yjx1J8GYzEly+BL9DOKd8HX4TuwA/4VnoeX4U14B87Cf+IJRw9S9QIcRSu1VMG1+JrRCltFbRxMBjc8gn0pq+vrq2COrW6uDE2NtltljCOTSUepZMTr6OepyvF15XYIwWrogg2wHf4FnoKfwM/g3+Bd+F9wQVJSmwQYD8X4QjMP7oB2+Aqe2FR03wpqHDMrTIApcBO++syHO2EprIA1cA9shO/CTnga9mJ2HYUTcA7+C0+h3AIN5kQGzoFCmI4vUuz/ed0Bd0M33A+98APYBS/Az+GXeDb+M3wgaaRyR2HQod1K2Ev4BOFuwr2EBwhfddg9Ie1Rhjo9YSHhYsJuwj2EfYQkr3uL8AThGcILDnvQpfuEYYKCUEeYSDiKMJNQdjja/AnjCYsJSwlrCOcTthKuIOwh3Ey4nfBNhnogTCTMJpzo9Lhb9EWEswjnEDYS3knYSuglDBGuIuxyen1t+rWEGwg3Ez5M+Bjh44RPEO5qdnvt+j2E+wgPEB4mPNIcsDv0bxGeIDxDeIHwE4YGDWEyYabb6w4ZxhFOJCwgLCKc6Q76PIZSwio01m6oJewi3E34HkNjGiHJGEnG2Ei42ONtbzMuIWwm9BAGCDsJ1xD2EK73+Bwe4ybCLYTbCHsJdxLuItxDuJ/wZcJXCd9sczndxmOE7xC+R3iW8DwqCRg/JPyEoUlBqCNMJBxFmEko+5CZxhPmERYSFhPeTFhOOIew3hdwek3zCW8nbPKz+62EXsIQ4SrCLsK1hBsINxM+TPgY4eOETxDuCjg8IdMewvcZJqYR3kzYHMCgJ24lfIJwL+GrhG8TniU8H8S5k/gh4SWGSSpCI6GZ0EooB93e5qTxhHmEhYTFhDcTlhPOCbY5/En1hIsJnYRewk7CbsINwWDBlKQthNsIewl3Ej5FuIdwP+EhwiOExwhPIBYmnSY8R3iB8CLhJYbJKkIj4SjCbMJxhHmEUxFvSJ5JWEpYRVhL2Ei4mLCJcClhgHAVYTfhesSpyZsJewl3Ex4gPEp4ivAM4fuEHxB+xDAFCDWIN6YYCbMJ8whnEtYgFqXcjlic4mT/9iUlQNhJuIawh3A94SbCLcF2fzBlG2Ev4U7CpwifJdxL2BfsCLamHCI8Rnia8EOGZk0IM9CcRphNOJYwlzCfcCrhdMJZhJWENYQ2woWEd64qKJpqdiLeaF6KWGT2I04zr0AsNq9GvMncjVhiXodYat6IWGZ+ELHcvBWxwrwdsdK8Y1XBtALzk4hTzLsRC83PI95g3o841fwy4o3mVxGLzG8iTjMfQyw2v4N4k/kUYon5DGKp+X3EMvMHiOXmjxArLIBYadGsKigusBgRp1jMiIUWK+INlmsQp1rGId5omYhYZClAnGYpQiy2zES8yVKKWGKpQiy11CKWWRoRyy2LESssSxArLc2rCm4qsHgQp1gCiIWWTsQbLGsQp1p6EG+0rEcssmxCnGbZglhs2YZ4k6UXscSyE7HU8hRimeVZxHLLXsQKSx9ipeXQqoKSAsvr7DyLJ6NRn4Fn4snoS3jyuANPDF/G0yP7rOMQ/0K7hT7WLMXzpwfPil76tLIcz4xbsJ05ol24RVg+LPv3kLNe1t7hrOW2KtHLLMj+PyxJePoaGWrxhMY+E1TjOftWPBmzXvid4UtD5dV4NlSz316DZ/urqaXh6T4Pz+P5ePpkv2ugEM/KU/H8W4QnzGI8GU7Hd4qZeP6/GU/ssz6D/MgtUVGNl5X47vIQO/WOuCTh288gjh6CpqvE+iugEk/yBnyz+LxKEr4HXQnrBjAdz/Ar8MTdie89q/A9YzWe6Nfg+bsLT+3d+M7Xg/m7Ft+n1uFb0YMUl3+WFhK+NQ6P5qvEEsJSwjLCclrdFOL3XSmiahJhbgQC4W0kdRu+64Zr0ai/Sky5SswZgnOviMlXhf8/rPEafH+eh++9C2AhLPoc6hJMHECWPTLV5CG18D2Iupc4QlRCKq7B1s9cSqeSBN8eFhUwBsZ+Bi7BI1dABVwL4z4Dl8TsGh4VcB2M/wxcA+vh67AB7odN8MDnUJdgwgiRtfwGbKSW3/wc6gp4DL4DbB+tpH8yFGJ/l3QVuSRBxgjx87ZcgtorYtJVooOQf312ETYTthC2EroJlxIuI/QQthF6CX2EfsLlhAHCIGGIsJ1wBWEHYSfhSsJVhHcRrib8CuEawrsJuwjvIewm/CphD+G9hGsJ7yNcR/g1wvWEXyfcQPgNwo2E9xNuInwgosxj/iDhtwi3ED5EyPdXvgrwDOJzdxvho4SPEX5HGq+oVdyp8CrWKDYqHlM8pdivOKI4oXhfcUmZqLxGma+8WVmrvFPpVa5RblQ+pnxKuV95RHlC+b5KpypSOVUhVY/qQdXjqmdVL6veUr2n+kCtUo9Sj1NPVZerA5qtmic0ezWvat7WnNV8pNVrM7UTtdO1c7SLtUt1S3R+XVdCbUJrQmfCuYRP9EZ9tj5PP1Nfo79d36V/Sn9Yf1x/waAwmA1jDYWGUoPN0GQIGDYYthmeNBwyHDOcNnxo1BhvNx4ynjR+ZNKbxpmmmhaaVps2mPaaTpguJtYmbkrcnrgr8dXEtxMvJRUl1SctSepJejDp8WRVcm5yafLtyfuSX09+J6UwpTTFltKUEkjpTtmW8mTKPrPOPMvsNe8w7zEfMh8znzZ/aNFYHrbsHDV91JxRzlGhUSdGXUzVpVpTc1OXpD6cujv1QOrR1FOpF9IUaea0sWmFaaVptrSmtEBad9rmtN603WkH0o6mnUq7kK5IN6ePTS9ML023pTelB9K70zen96bvTj+QfjT9VPoFq8Jqto61FlpLrTZrkzVg7bZutvZad1sPWI9aT1kvZCgyzBljMwozSjNsGU0ZgYzujM0ZvRm7Mw5kHM04lXEhU5FpzhybWZhZmmnLbMoMZHZnbs7szdydeSDzaOapzAtZiixz1tiswqzSLFtWU1Ygqztrc1Zv1u6sA1lHs05lXchWZJuzx2YXZpdm27KbsgPZ3dmbs3uzd2cfyD6afSr7Qo4ix5wzNqcwpzTHltOUE8jpztmc05uzO+dAztGcUzkXrlFcY8bTPssqHdA5K+v1mPqxmPqZmPrpiLoK66ci6hqAnFGglSLq8rno+pgD0e3Hbo7uf8KH0fXcB6P7H1LfESN/+G/UL0bXr6+NqW+7ijraP/nl6OcF+6LrxVNj6kURdTyPFBfHPA9QnX23MHMPb3qf8+lr6IkKd5E0PIWP53dn5HM+s5PzLx7g/JZRw0nPWij4RsFf5rxEEW1FSXG0lyVbo+sV86PlKx6Ors9eF12vCsTUQzH10zH1mKyrOhtTPxddr9ZjXRq0r3p6TL2U6jHRqK4UfJ3g+wR/m6Rz8F26Ct89F+LZtpW+YnXhrrAJV+7tsBN2wfPQB4fhTTgOJ+EMnIeLqFAnJUtWSRb9PM/5HCfnt4oRvfUw5zVdnM9VCP4s57WiXmsTXMjVnuC8TiP4nYKf5Lxe5EL97YKv5/y2mYJvEPws57YqwV/nvEFkR8N7nDc+zPm8Ws7n6wUX9i/oiR6FhTFRX1gUUy+NqTfH1DdF1LH/xbnRzxffGVP3RtfdMfrd70TXl82Pqa+OqKP9y3qoboUiuBlPd7X0fa4ZTynsC91a3O234I68A56CPbAfDsEROAYn4DSI+blMjNayY5x7xIxsyxZczMy2jzj31gu+k3OfGHXfWMGXCL5d8FOc+8Uo+AsFF3r8+zlfLrJjuRi15WIUl4v2AaEnIOwNBKKjHtgbHaXAcaqPgvwRxoX3IrwNlgq+lfNQpuABwS9w3j5H8Fc5XyGisKJXcBG1jlWCH+W8U3jR+QTnKycK3s35KuHtqsWC87kdsb7elSv4g9F+33WW6gbIxveiPJgKM6Ecauj7rxNPsbyNmEmr3+T8K3s4X+Pl/G6x0twtZm7XFs7vEWPTLcaqW4zdV1egzoTBjOwZH1PPi6nnx9Tro32IquNuc29rtPy9XJ8SjDi+Ik/vFfl07w7Bz5JMzNq5VozPWhH/tWJ8174XG9/7RIv7GqPz7L7N1G+k5Nucr9NFryvrCmLqMVFatyemvi+6/vWYKG14O6Z+LKKOUdvYDVpFlA8bRVbfb4uQZPWmmPqa2Jb3i7hsKojWsakvuuUD5ph6Z3S0HthLPevEGAzORf5UrDkPiLVos8irzZc4/+ZFzh9MFlzk/LeOkBY9ZMJYmEj/vqAU5uCb/mJo4hIPib3kYRD8Mc6/Xcz51qWcPyJWq0fETNgm5uejQu7RrtjRflSsS4+ei33y2DWCr4qOyXc2xkb3O8Lv74aiJb9nHJrX3zvC+eOrOf/+1KEy3xfzdIeI345S0jjQ746m4ebCDrFf/st5zneKNe0Hl4ZqeOIDzn9YLviQuPzwScHPXmnEnxQj+KTY4/9VxPkpcQZ4Wtj2tFgHd4m9frcKtEpWMkeMOT350S7BxSx8VqzQzwpvfnyO8+es0bF+riqm7oz16DlxrnneGS35/IWh8fmJGJ2ffML53icpQ9WQjPsy+yG9An7/BbF7viD82yfOQvvEWWnf9th1aJ/wb9/56Nn/Ij9lRFnxoljdXhTr+IsvR6+r+/OjZ/P+7TRWCQM2Fg+cHan9/uOc/1Ts5X1+zl8S3rwkYntAnOQOPs75y62c/0wGrSrGxp/1cX5I7EU/t8bG/ed7BX8/9slhMasPP05PLmv34bc4f0WsG68Iu1/ZLbhYb14Vu+6rawQXml/9MHrEX5Nj6pUU18vk+Gs1gov59bpYS98QJ583znB+pIfzX4hMftMfreXf9sTU34mpfxRdP3pn9Oge3RH7TvarbZwfw/VAHbE+/Do5etX+9c2UF1oatcFTBH8mTka/Fnv/cZH5vxGn9d+I3HtbnPd+a6WZO2QmvGMVXJxw3lUJLlbqEx8Ot2adFGvsKTGy74mR+8PtZPEQLX8QO+Bpsd+fFjvLH8WJ5sw1ETHDk8aZ3uj6+bHR9f9cD1oqi/p/66Pf6z8KRM/SjzMpsonD7FNL6V8MdoNYCT8W2fOxOCl+LN56PhYryieNgosT6qcifp+Kt8BPxRy8JHa0S+Jtp1+MVz+fm+zLVKSF7G8GR2ahBH2CnxOcx1KSvILzWEuKqYKLdgp+BpaUNsH5HiuppgvO11lJnSY4vrVrBrNRUl+KWRMljZD83+xdB3gVxfY/U3Zn7+7eYWkhQEBKpBOqkRohItKlgxGQLiAqYAiINBEBEZCHgNRQpAmIiAiIEGmGIgJSQu+99w7hf3ayQO4V3/P5fO97/L/33Y/zy9m75fzOzJ5zZu7sogfmT6KP+Ad1AdEneJgyqiDCO1J09zAl2hKjmYcpkYT4uniYEhGJOSTYJtPzhuUE+tcKASFSsbFKBn1fQ+nBPZdY0R729HCJhzdS0I588nF2Ow+nephSGxB/mIdNAqIqjjP8I1NQTgvIFkQGzm6QNDTVnJirJwTpG4P23xCkJ/4DfU2QnnrODe1LlxAw7iXp0wXpMkgPnF0h6fUgPSxglEHShwfpowP1DGGBLRc6N1DPbAfun7ljoJ5lSEAsIVnnpqrS0J6sa4K+3xOoh1VItT9+woYFXj9seED8J2FDAv0RNjLo+OFBevD+gwL1bIOD9F2B18+2J0hPCtSzZ0h1PeSTPXvQ97mC9EKB/J+JCtJjA/WcuQLPn2t44PnCNwTqz9YP0g8E6nnM3+qp/ZWnd6Cet5zKdI/1fYHH5z0RpAdWdKRAaJB+L1AveCiwPxVaE6RvDdLPBOkXAvXC4YHtWbh40PcRgf4s3DpQL5ovUC9+LlB/bn6gXipWVYOP9LKlAvXy9wL1CisC2/fF/kH66ED9pRpBenKgXrlxkJ4QqFcJ6k9VxwTpmwL1alUC9epB/bNG/SB9cJA+LEifEOj/GpMD9VdaB+p18wUeX/9coN4gyF8NDgXqDQdA6tlx0jA+UF/cNlWViEeERgT0FxraOqD/09DmQXqzgPtB6an6Mw0dE9A/aOiiQD1rj0A9e1SgnpMG6rkTA+yneQYH+Iv2vxSoD4BA/dPA+E3HhAbqUwLzA51dNFD/tlygvqxKoL68caCeGNiedHOnQH1Xz0D98KBA/czIVHUSbrmaur8g/6vxgf6+Ojvo+xlB+oIgPXD0SK+FBulBfK7NTVXp4JZrSwKvf21pkL4I3GdoOLQio6AtmaDO2pKM1BwtLX6TDnS7qky0q8g1coVUVS85Ty6RK+S6rChfVHoJ9zw0HXWf9tHVWQnzowzBa7j1n/uqhIezvnhdKqhFHZrRrmy/rM7J8Pu64PJ4PDfcEyte/uhXE/5onpjBNJgN7v+1Nw8WwlLEJZAAaxBXwTrYZNcBalex66KsatdDWU2eAkYdtP60wkR5BjEj6mcVJsokoKjtQpko96BcJw8BQ7vWyMMKE+URxFWoH1WYKI953x/3vj/hfX8y5Xu7urKhhrKhpmuDXUtteUVtqa2s2qCuulFddZO66ha1Zavast3d4v5ffm51yFLW6wBMxvZwvdIP1TQkDfQhWUg26Ov+35nQn8SQJvAR6UjegkHkHfIODCadSSx8QgaTwfApGUPGwnBymVyGEeQGuQGfkbvkLox0l83BKKpTHUZTm9rwOU1L08IYGkJDYCzNSrPCOJqb5obxND/NDxNoUVobJtJY2hUSaDfaDVbQHrQHrKS9aG9YRfvT/rCGDqQD4Sc6ko6ERPo5/RzW0ml0J6xjfibhHivJSkIyi2aV4AGryqoSyiayiYTxWD6FcK2V1ooU19pobUgJ7Q3tDVJSa6+1J89p72rvkkitq9aVPK9107qRUto2fRApbdYzW5CL5kCLkGTbsV+i79mv2fH0a39rfwd61d/HP4TekVQazJA5ZU6WRuaWuZkjn5XPsrQyr8zL0sn8Mj9LLwvKgiyDLCwLs4yyiCzCQmQxWYxlkiVlSRYqI2UkyyxLyVIsiywjy7Csspwsx8JklIxi2WQFWYFll9Eymj0jK8lKLIesIquwnLKZbMZyydayNcst28q2LFy2k+3Ys/It+RbLI9+R77C8srPszPLJrrIryy+7yW6sgHxPvscKyj6yDyskP5AfsMLyI/kRi5CD5CBWRA6Wg1lROVQOZcXkp/JTVlyOkCNYCTlSjmQl5Wg5mj0nx8gxLFKOk+PY83KCnMBKyXgZz0rLyXIyKyOnyqmsrJwmp7FycoacwcrLWXIWi5Kz5Wz2gpwr57IKcp6cxyrKb+Q3LFp+K79lL8rv5HesklwsF7OX5Pfye1ZZ/iB/YC/LBJnAqsiVciWrKlfL1aya/En+xKrLtXItqyHXy/WspvxZ/sxqyV/kL+wVuVluZrXlr/JXVkduk9tYXblD7mD15E65k9WXu+Vu1kDulXtZQ3lQHmSN5Hl5njWWl+Ql9qq8Iq+wGHlNXmOvyRvyJnPnoVpgLLpO7pAHVEuJKjQLzUXzsSpaS6211lZrp3XRYrU4mUPmkuEyj8wnC8hCMkIWlSXkc/J5WVqWleXlC24sky/LprKVbCPfkB3l27KTjJVxsrvsLfvK/nKg/FgOkcPk3+RncpT8XI6V4+VEOUlOkV/I6XKm/FLOkV/J+XKBXCgXySVyqVzuxja8oxPx3t4gN8pNcovcKrfLJLlL7pEH5Dl5UV6WV+V1b92qOw7Moe7zKSg10pS04Yv1+0bU32FZ9alkmUWxdEfGlLTX9/4/4eeuw9WQW33MVeuIG1iJ712fu94sjOQiBUhxUoZEk2qkLkbqlqQD6UJ6kH4YnUeQcWQqmU0WkKVkFdlAtpI95Ag5RS6Qa3jkCrKObCG7yCHcconcwtMa6J9QmoPmw1hcilagVWht2pg2p+1oJ9qd9qUD6BA6AsJoM9qWvk3jaG/cMoyOpvF0Bp1HF9EEmkg30SR6gJ6gF+gNmsx0JlkIy87CWQFWFI+8xzizWQYWhlsKYbwuxyqxGqw+a8Jas44slvVk/dkQNpJNYNPYXLaQLWOr2Dq2CcLYODaVzWYL2FLcsoFtZXvYEXaGXWF3OOUmT8ez8Fy8AC/Oy/BoXo3X5TG8OW/LO/q6A0NfxfreU9jV10NhnO99hd18vRBj8a/eCmN9fRR29fVVGOf7QGE334eIXXG//gpjfR8p7OoboDDON1BhN9/HiHG432CFsb5PFHb1DVEY5xuqsJvvU8RuuN9whbG+vyns6huhMM73mcJuvp5A8dt+KLv6BqGM8w1D2c03Stn/rm+0x+9zj98Yj99Yj984j994j9cEj9dEj9ckj9dkj9cUj9dUj9cXHq/pHq8ZHq+ZHq9ZHq8vPV5zPF5zPV5febzmeby+9niNRBbv+uIVr2mK12zF6xuP1wKP17cer4Uer+88Xos9Xku8dvve47fU4/eDx2+Zx2+5xy/B4/Wjx2ulx2uVx2u1x2uNx+snj9daj9c6j9d6j9cGj9fPHq/5itci1WorFK9ExesXj9cmj9dmj9cWj9evHq9tHq/tHq8dHq8kj9dOj9duj9cej9der932efz2e/wOePwOevwOefwOe7yOeryOebyOe7xOeLxOerw2Kl5bFa9dqtWOKF6nPV5nPF5nPV7nPF7nPV4XPV6XPF6XPV5XPF5XPV7XPV43PF43PV63PF63PV53PV73PF73PV7JXrs9SOFnQgo/k6TwM2kKP5N5/E4pXhcUr2uK1x231TDGNob8ZCudhPHpFdaWvcE6sDfZu6wr68beY73YIPYxG8w+wWg1FKvMI+woO8aOsxPsJDvFTmNkOsvOsfPsArvILrHLGKeusmvsuj8SY3l+soXGs+qsFsa8Nqwda8+6YOSLY90x+vVmfVhf9gHrxz5k4zHW/YARcDlLYD+yFWwlRr7VbA37iSWytRgV12Mc/JltZL/4n1Ojo+JuXsCrXgdQ9X0oPHzKBeALNXLq6O7Bs/O83h5uxnz4HAveg8AwBncE4Bl4NtwvH88HVqoj3GvkS3UNCuGQBiNveq5xnQtucB9GYovb3M8lT8Md7o7yuMsJL+ceQ3l5HgU2r8gr4riQQinIzGawWRjpv34Sryd5MPMPeJxg09l0POdMNhOtmcPmAGXzGEYY9NhqvOIRdhZk5qWZl6IPKERCKO4/E/eb90SPPqHt8CgdLZuB15jFZuE15rK5eI2vGUYvtPQXvIbLR7o+ebBL+eSI8sljHy1l7ru5qPY2XRj0DFPKEwMPV8D/DUbAZzASRuEo1H16bSyMg/EwASaq9fyTsWKbiq03DabjCHUmzIIvcYw6B+bCVzhK/RpHq9/AAvgWx6vfwSJYjCPW73Hk+gMsg+U4dv0RVsBKHL2uxlHsT5AIa3Ecux42wM+wEX6BTbAZtsCvsBW2wXbYAUmwE3bBbtgDe2Ef7IcDcBAOwWE4AkfhmHpnyEk4BafhDJyFc3AeLsBFuASX4QpchWtwHW7ATbgFt+EO3IV7cB+S4QF2OkLr0Lq0Hq1PG9CGtBHWE6/SGPoabUKbYh3xOlYXLWhL2oq2pm2wqngDa432tAN9k3akb2GN8Q5WHp3pZLqL7qZ76F66j+7H6uIgPUQP0yP0KD1Gj2OtcZKeoqfpGXqWnmMmPU8vMItepJfoZXqFXqXX6HWsRW7SW/Q2vUPv0nv0Pk2mDzAAEEYZw4pEwzpFMIP5WB1Wl9VT9UhT1py1YG+xzliRfMQGsIHsMzYW65L57Bv2LVYmS9j3bBPbzLawX7Ea2ca2sx0sie1ku9hurE32sn1sPzvADrJD7DAvy8vxrXwb38538CS+k+/iu/kevpfv4/v5AX6QH+KH+RF+lB/jx/kJfpKf4qf5GX6Wn+Pn+QV+kV/il/kVfpVf49f5DX6T3+K3+R1+l9/j93kyf6D5tXSioogWL4pK4iVRWbwsqoiqopqoLmqImqKWeEXUFnVEXVFP1BcNREPRSDQWr4oY8ZpoIpqKZuJ10Vy0EC1FK/y0wc8b+GkvOog3RUfxlnhbvCM6ic6ii3hXxIquIk50E93Fe6IHfnqKXqK36CP6ig9EP/Gh6C8+EgPEQDFIfCwGi0/EEDFUDBOfiuHib2KE+EyMFKPEaPG5GCPGinFivJggJop4MUlMFlPEVPGFmCbmiLniKzFPfC3mi2/EAvGtWCi+E4vEYrFEfC+Wih/EMrFcJIgfxQqxUqwSq8Ua8ZNIFGvFOrFebBA/i43iF7FJbBZbxK9iq9gmtosdIknsFLvEbrFH7BX7xH5xQBwUh8RhcUQcFcfEcXFCnBSnxGlxRpwV58R5cUFcFJfEZXFF3BK3xR1xV9wT90WyeGCAQcR0MUPMFLPEl2K2uCquievihrhpdjffM3uY75s9zV5mb7OP2df8wOxnfmj2Nz8yB1jvWz2tXlZvq4/V1/rA6md9aPW3BlgDrUHWx9Zg6xNriDXUGmZ9ag23xlnjrQnWRCvemmRNtqZYU60vrGnWdGuGNdOaZX1pzbbmWF9Z86yvrfnWN9YC61trofWd9aO1wlpprbJWW2usn6xEa4P1s/WLtcnabG2xfrW2Wtus7dYOK8naZR22jlrHrZPWaeusddG6bF21rlnXrRvWTeuWddu6Y9217lnJ1gMbbGJTm9nc1mzdPmofs4/bJ+yT9in7tH3GPmufs8/bF+yL9iX7sn3Fvmpfs6/bN+yb9i37tn3Hvmvfs+/byfYDP/iJn/qZn/s1v+4XfsPv85t+y2/7/X7pT+N3/Gn96fzp/Rn8Gf0h/kz+UH9mfxZ/Vn+YP5s/u/8Zfw5/Tn8uf25/uP9Zfx7/eP8E/0R/vH+Sf7J/in+q/wv/NP90/wz/TP8scJ9AU3NYai6pD51EMYKqGaIprBqrDjtYTVYLdrIY9hrsZs3Y67BXZbz9rBPrBAcwU30AB9kINgKOsjFsDBzDHDwejqtsc0Jlm5Mq25xS2eY0W8QWwxkV+c/x0rwMATXTRDVTM0lRzdEcUkzNJRXXD+snyClRVJQkF9S80lVzoDmeUnO6+SPNZK43b9HianappZpXmqGyt0/9j/ORUAEqQUPv93oCPjU2K0sr06r0FfMzc7Hpru5y125URu5V1Kta3RUXDcHACqYZtMajOnmznu6TSgy6Q2/MRwz1QZiDGOaiETDG+gioXG/NVXItyp3WOpS7rfUo91ob1fadKFdau5Xci/Jnaz/KX6yDKDdb5919ZEb3WBniHiszqWPvq+0+lD9JE+VaaaktadQWR21Jq7aEqi2Z1ZYs7hbMn7Pp1n9T/gzMnv+/c+d/Jnu6+fGP5sR/Zz5MJ1qLtqKdeB+zi5sVX8J8WENlqjqYdYapHNgY85+b+VLyXps/mPF6/oNc99tMNxZz3OPsljpz/LdlukeZDHPeGMzNqTNeRaws3Loipapwa4raWFXc9mqKu1hRvIrVRLyqJyZhNXEHe21D7Kmvu/3yYV6kbwXmRNux09rp7PR2BjujHWJnskPtzHYWO6sdZmezs9vP2DnsnHYuO7cdbj9r57Hz2vns/HaBJ2bSj56cS6VPmtL6Qxl17m9zqkwjHZn2N5l1rbXOWq/y68YnZtidmGN3W3ut/dbBh7lWhshMKt+e/92Me/+3OVeGyswyy5/KvAF5177/V2ReZ/U/yL2vEKre7ZuF5IMMpDapD7nVL0f5SDPSBgqSN8gbUIK0J+2hJHmTvAXPkXdIDyhFepJRUImMIxOhGfmObIaWtAuNhV40jvaCvrQP/QAG0Q/pQPiEfkyHwnD6KR0Bo9RvQGPpaIrxnsbTeIhnNksHk1gGlgFmsBBWAGayQqwILGPFWCVYofL5dpXPd6ixWRKfyjfDGS2tlpaEaje0GySzdku7RbJod7Q7JKuODiNh+sf6UJJN/1T/jOTSR+ljSF59nD6RFNQn6bNJEX2uvpCU1RfpiaSSvk7fQhroSXoSaabv1veS1/X9+kHSEjP/fdJGf4CZv5+IFGXJElFevEASjPxGAbLSKGQUIauNYkYxstaINCLJOqO0UZqsN6KMKLLBqGBUID8b0UY02WhUNiqTX4yqRlWyyahh1CCbjfpGfbLFaGQ0Ir8aMUYM2Wq8brQi24z2Rnuyy4eDcbLbbGm2InvMNmY7ss/sYMaSQ2acGUfOYt0wnpzD2uFHct28ZN4iyRa1XqPCamr1oC3sSfYR2sdf3V+drvYP9Y+ja9RqMoojznlqZr0paettWZRqizufoEMuHP+662W99aSkIIkgpcjLpDoZg/tPx48rcayu/p6ntOWethy1/fihmGtbaFm0rFqYlk3Lrj2j5dByarm03Fq49qyWR8ur5dPyawW0glohrbAWoRXRimrFtOJaCbKNbCc7SBLZSXaR3WQP2Uv2kf3kADlIDpHD5Ag5So6R4+QEOUlOkdPkDDlLznHGObvBbrJb7Da7w+6ye+w+S2YP/pVtHDjh7hM+LbAmS4t+CYUwyKP+g4YiUAZ9E6VeQl8dGsGrWK25VVo79cy++waUPngfpSEO3kfZST68j2LQu+1JR7xbupI40ot8TD4hQ8hwvGO+IyvISpJI1pKNauboD84X/dHZKne2hld8NFM03Jspmo6yPC1GI2klWg3rk0ZYfbxpDjI/NgebQ8yh5jDzU3O4OcOcaX5pzjbnmHPNJHOnudvcY+4195kHzUPmYfOIedSL4o9juBujH0ZoN6I+jKduHH08YjmvVgSUpU0e2ZXg2eVWzfWVXaXRstrKshi0rfPftW2e+bU531xgfmsuNL8zFwXYetI8ZZ42z5rnzPPmBfPi37U4JaOkziepOaTE+1TRXrGoSjt4v12V8bgA1qgUdKzxOwO4IwWIdkeTUMf9HRrqWe/bL8EmzGrZyFjcLwLZFsPRTiSNBIKsS+M5y9FywJB/JeDYOtVAQ0/UxjPWpXVBoEcagYFeicFxRFPaFEz0TxuwsGZ8E2ysFjuD33zVfBUkjmB7QxocpYwAxxxpjocwHKssgnBzifkjROKI5SJEmZfNW9AG8/FAeAsz73DogZl2LvTDPPodjMK8uRsmYuvthyXYggfhe8yGh2EptuVR+AHb8zgswzY9CcuxXU9DArbtWfgRM+R5WIFZ8iKsxEx5GVZhtrwPqzE36rAJ64VQSMIaISccwLqgAJxAX1hwATN1WriM+TILVtMP+0UZr1/8z6P/ukddT0ajfzJ4v7DOVGtx2P88+y979qFPox/11v959q/rs/kexVW3QmVqXijFozmVL4u6W80J5jTcusJcBz7ztuUeEfzryD97tHtU0VT3y6xHrfrPnOXh8UUfWfHPn4ViHMzyZ+oidzXFn6lE8DgbbQyBMeo5EoZHjksDUAH2wBE4A1fgDp7VJOnwrH987cI6sgkZ7EFrT5Bz5ArBipVyalKHhtAwdz0HjaAlaRlagVamNbCXN6bNaGvagXbCUURP2o8OosMgP02n1n4UoMVxz2hVu8TQlrhXF9oD9xlMR9BxdCqdTRfQJTSBrqEb6BaaRPfRI/QUvUCv0TsMmO6OM1hoypoGvN/2kQKKYxpSWGEMKaWwKSmtsBkpo/B1UlZhc1JOYQtSXmFLEqWwFXlBYWtSQWEbUlFhW1JJYXtSWWFHUl3hO+SVFN9qmVzki7RQhYu1zC7Ku4blopbesF3Upxl+hcsNqTDBSKPwvuEoTDbSKnxgpHMRRyDpFb6QJqUNO5D84PaGgijzkUIoY0iEqvyLoGxGsP8hx2Iom5PiKFuQEihbkpIoW5HnULYmkSjbkOdRtiXR7god8iLKN8lLKDuSl1G+Q6qg7ESqouxMqqHsQmqgHEdqopxAaqEcr2UAinwzolysuTONdw0KFJninYE8OcrlhoYywdBR3jcEymTDQPnA8AFFbjh2MV4gs5HZOGQzR2FTMldhM/KVwtfJPIXNydcKW5L5CluRbxS2IAsUtibfKmxDFipsa2RzEe3J7iJa9IzC5UYOhQlGToX3jVwKk43cCh8Y4S6idc8qfIHEK19PUl6erLw8RXl5qvLyF8q/05R/pyuPz1Benqm8PEt5+UvXd0YG5Z2MyjshyjuZlHdClXcyK+9kUd7JqrwT5nonDaho467fdZ+2ygPus5Qco0FGtGY43uFubHJXlWX3VpflIiGqV2RSrRmqWi2zku1UW492/8Z/ofAxaUAakVdJY9KQtDMbY66JSfnNhHalvfFeHcXGsS/ZAnlP3pfJ8gFGtYlmvDnJnGxOMaeaX5jTMMKtNFeZq8015k9mornWXCdvSiqZ5FKTuhTSMG+bd8y75j3zvplsPrDAItbfrBHWZ9ZIa5Q12vrcGmONtRZZi60l1vfWUusHa5m13Eqw9lj7rAPWIeuIdcw6YZ2yzljnrAvWJeuKLWzD9tmmbdm27belncYuaBeyC9sRdhG7qF3MLm6XsEvaz9mR9vN2Kbu0XcYua5ezy9tR9gt2BbuiHW2/aFeyX5K29Esp08n0MoO8JW/LOzKrDJPZME7nUXMmoOZJNBwbVMd83YF2xBwdS2MxL/eivcCvVsBKNfuRRs1pOOp3ibTsG/YNpNO/1udDen2xvhgy6jf1mxDijvQhkzvShxzmAfM45HfH+1DMGoSZuoz1FeboF63dmKNrWHutvVBTZepaKlO/ojJ1bZWp66hMXVdl6noqU9dXmbqBytQNVaZupDJ1YysZc/SrtoN5uaXKy71UXu4rM2Je/hB5LoWYP9Kif64F/y3t9LCFTOVNUN70KT+mU37MqvwYrpgXVswjFfM6inl9VZE0Spkx0UzNr1bTV4P1KKMhe+r+H9yLf78/pvQd9+7DnlKNVk+Z98cWfjS+No+Zx4PnIR/PQWJrhLi/zyibLE0+sunhOnuOva4X9raR3j62liaV3aHge3wPP7xP3V+nsA/XwVxej9R3+yL2xJu4d1HI+Ed/F3BWu08apKyecGegMMqkPE/gWkgc99lX7qwE6nR64nbmL4nfpNRflR7Vfl+izOSEO/mdCOc5J9J53inllHbKOOWdF51KzktOZedlp4pT1anmVHdqOfWc15zX1Vm7e2eKVBwyPDqX/cRz4XHqqBoBx+bAY7OkOpY4Ff7QXoWD9qLQQ821zVJPP7j7zcZtjubTfABOc9cDTkunDXrmDacD6E5H5y0wnXeczmjtu867kMbp6rwHjvO+8z5kdHo5fSDE+cDpB5md/k5/yOoMcAZBmDPUGQ3POOOcaZDfmYH+LOmutkG2NfAatZxauLWuUw8KOA2cBlDIiXGaQmHndfRWMWeIMwSKK2sLKem2AoOe+HGfuJ3trUd6Wqx236L1tFhNcb8Gj6zn0Bs/C8B908HcRyuinx773Tdfum/IJN7d4Fqe1rPctZkomzVls0/ZbCmbpbI5jbI5g7I5o7I5VNmcRdmc1fnE+QSyP7L8C2X5HCjhfIX2l07VD2qoO64vuE+uzwu44/5TtvzZHlxD+bCain8Uaqey/M+eLyW+MhX1Xa0y/lU31X3xr543pYLE0QtWmEUh3Dtv8J51H8V59LqyJot6H0cV/DsGmkP9v8Se4Ks8ti0crcv+O7Y92Sp3HUatv8hLj+35b7g7av7Ffaxmqr4Qnqov/J6/a/7GK3+/B9X8nR70NN7fNf/yO/Gx96l6xuTxPfXX9N7g1vqr79zfb90B4L6D+T9bLz22q7GS/VRFMQj6gftu057/4YrisTV1f2NTyvqv/y6b3MrLfVfh01F5pbb9Yd3l1o1PR90VbP0StD7hKbI+uPdoeMf3xbp3oXqPkRvVw55CFtzrRU9/S7jP0D+9LeHOg6j3GDju0zWPZxrct9pxZyhwf0m02K2BUn7tyKJqEJYyn6C2phzhOK8gw3pObSXruPLvHuO+9ywDHuPOZLhHpWCdFExtCXqxBLSDtyEWc5yb69Q6Xoj33mKwCJalvLcAtsMeOAQn4BxcgVuQTDgxiUNCiPvsaD4SQUqSMqQCqUxqkLqkMWlGWpMOpBOJIz1JPzKIDCMjnXC0Otx5FuWzTh6UeZy8KPM6+VDmc/KjzO8UQFnAKYiyIPqTOoWcwigLOxEoI5wiKIs4RVEWdYqhLOYUR1ncKYGyhINt5pREP1N3RgVlpPM8yuedUihLOVgruTMsKMs4ZVGWdcqhLOeUR1neiUIZ5byA8gWnAsoKTkWUFZ1olNHOiyhfdLBKdX2M0vUzded7UL7sVEFZxamKsiq2JHXnf1BWx75DnRrYdyj2oLpqfFpPtV4DlA2cGJQxzmsoX3OaoGyCfYo6TbFPUexZQ1AOSfVEckoWmwMPf7n75/rm437nPpGm453RDKj2kSv9mEmJDR9iC40m8WQGmUcWkQSSSDaRJHKAnCAXyA2STHUqaQjNTvPQCBpJo2hlWos2/BNP8OZhESySRbHKrBZryJqxtuxtFsd6swFsGBvN4tkMNo8tYgkskW1iSewAO8EusBssmetc8hCenefhETySR/HKvBZvyJvxtvxtHsd78wF8GB/N4/kMPo8v4gk8kW/iSfwAP8Ev8Bs8WdM1qYVo2bU8WoQWqUVplbVaWkOtmdZWe1uL03prA7Rh2mgtHr2T0Yssrn+J8m8B5d+Cyr+FlX8j0L/NobiKOyVV3Cml4k45FXeiVNypqOJOtIo7L6u4U0XFneoq7tRUcacWttBoqKPiThMVd7Dm5KHIMxwxF8/HIxAL8eK8FGIkL8ejESsgexyf82q8Nm+IWN99ShmxGW/NOyC2Q5/EInbh3XlvxJ68Hx+EOIAP4SMQh6OnJiCO45P5DMRpfDafjziPL+RLEZeg/9YgruLr+CbEjXwr34WYxPfxI4iH0KvnEM/wS/wG4jV+RwPEZI1rJjDNQF9nQEynhWrZEcO0XFo+xDxaIa04YlFsgXKIZbQKWmXESlo1DSMUtkh9LQaxMbZLa8SWWjvtbcSOWhetO2Kc1lPDvKD1xdbCe0MbrA3XRiOO1MZpkxHjtWnabMRZ2jxtIeICbYmWgLhMW6WtQ0zUNmpbEbdoSdo+xD3aIe0E4jHtjHYJ8YJ2TbuDeEtL1jkwneqGLhFtPZ2Oo0I9RA/TcyHm0PPohRAL6EX1SMSSehm9AmKUXkmvhlhFr6XXR6yrN9abITbRW+rtENvqHfUuiJ30OL0nYg+9rz4Asb8+WB+OOEwfqY9DHKPH69MQp+qz9HmIc/UF+hLERfoyfRXiCj1R34i4Qd+iJyFu1/fohxAP6Mf0M4in9Av6NcQr+i09GfGeoMIAJnRhi3SIjggRYYhZRA6RBzFcFBBFESNESVEGsZSIEpUQo0UVUQuxhqgrGiM2FE1ES8Tmoq3oiNhBdBJxiLGih+iL2Fv0F4MRB4lhYiTiCDFGxCNOEFPFLMQZYq5YgDhfLBLLEJeKFSIRcY3YILYgbhLbxR7EXeKAOIZ4RJwSFxDPuc9PId4Q9wwKzABDd3+NNkzDMUIQMxhZ3N9EjexGuFEAMZ8RYZRELG6UMqIQyxnRBo4SjcpGDaMuYm2jodEEMcZobrRFbG10MDohvm3EGj0Quxu9jf6I/YxBxjDEIcYIYwziaGOCMRVxsjHDmPt/7F0HYFTV0p67IZBQJHvKLUsRQi+hhAABAQERERGR3kvoSEeKIqI8fyy/0kWkQ+ggHUJvYkHsSFERFRXLszeKlH/Ot5slAXwE0Bf433Pl7Mm395w7M6fNzJl7Ln8viVoZtZ6/10ZtitrB39uidke9xt+vRr0Z9R5/vxt1KOoIfx+OOhr1FX8fi/o26mf+/jHq96jT/H0qmqKzUkR0lujs0TH8fVO0ig7wtxudP5rHf3RsdPFoHv/RpaPjoxN5TuIZ26S5EpBWMOspz+GFDYK0gllbGSkCpAiQokCKAikKpBiQYkCKASkOpDiQ4kBKACkBpASQkkBKAikJpBSQUkBKASkNpDSQ0kDigMQBiQNSBkgZIGWAlAVSFkhZIOWAlANSDkh5IOWBlAcSDyQeSDyQCkAqAKkAJAFIApAEIBWBVARSEUglIJWAVAJSGUhlIJWBJAJJBJIIpAqQKkCqAKkKpCqQqkBuAXILkFuAVANSDUg1INWBVAdSHUgNIDWA1AByK5BbgdwKpCaQmkBqAqkFpBaQWkBqA6kNpDaQ24DcBuQ2IHWA1AFSB8jtQG4HcjuQukDqAqkL5A4gdwC5A0g9IPWA1ANyJ5A7gdwJpD6Q+kDqA7kLyF1A7gLSAEgDIA2ANATSEEhDII2BNAbSGEgTIE2ANAHSDEgzIM2AtAbSGkhrIG2AtAHSBkhbIG2BtAXSDkg7IO2AdADSAUgHIB2BdATSEUgSkCQgSUA6A+kMpDOQLkC6AOkCpCuQrkC6AukOpDuQ7kB6AOkBpAeQnkB6AukJpBeQXkB6AekNpDeQ3kD6AOkDpA+QfkD6AekHpD+Q/kD6AxkAZACQAUAGARkEZBCQwUAGAxkMZAiQIUCGABkKZCiQoUCGARkGZBiQB4A8AOQBIMOBDAcyHMgIICOAjADyMJCHgTwMZCSQkUBGAnkUyKNAHgUyCsgoIKOAPAbkMSCPARkNZDSQ0UAeB/I4kMeBPAHkCSBPAHkayNNAngbyDJBngDwDZAyQMUDGABkLZCyQsUDGARkHZByQ8UDGAxkPZAKQCUAmAJkIZCKQiUAmAZkEZBKQZ4E8C+RZIJOBTAYyGchUIFOBTAUyDcg0INOATAcyHch0IDOAzAAyA8hMIDOBzAQyC8gsILOAzAYyG8hsIHOAzAEyB8hcIHOBzAWSDCQZSDKQeUDmAZkHZAGQBUAWAFkIZCGQhUAWAVkEZBGQxUAWA1kMZAmQJUCWAFkKZCmQpUCWAVkGZBmQF4C8AOQFIMuBLAeyHMgKICuArACyEshKICuBrAKyCsgqIKuBrAayGsgaIGuArAGyFshaIGuBrAOyDsg6IOuBrAeyHkgKkBQgKUA2ANkAZAOQjUA2AtkIZBOQTUA2AdkMZDOQzUC2ANkCZAuQrUC2AtkKZBuQbUC2AdkOZDuQ7UB2ANkBZAeQnUB2AjGpOfexAOWicpRAiVQNz0DXowbUiJpSS2pLHU2UCFv2DdneMxaz8ZwYz7I5XyWRgs9TmPPqzQlnJt7CnLUdfEba7DsE964aXJN34G5O7w75CGD5c43xZFMSdaPeNBBPWY+i0fQUjYFfZjrNpnm0iJbRalpPm0JvJLJjOrIt2jmmS0xXtkZ7xPQy1ijbov3ZEh0SMzTmAbZCH44ZaezPGLPzxysDavfhDj7cxYfnuYM7g2bH4wmycKI7z1x8b3P2t/lnzsOfQuadjuZdjj74iSz8M8/NsJYPrxH3DuN7NPMF287TkE6H12MG8jORn4X8bOTnID8X+WTkFyBdiHQR0sVIlyF9AVcuR34V0tVI1yBdi3Qd0vW4MgX5DUg3It2EdCtFxLTgb7YTY1ry93agO0wZsvBsmoDvxceS4xLcQ0QQM32ZS3L/5XJbkd9m8um8Ld3h5ZtnWtp4As+do9S9N3PuzWNpdmCX/Zt3YBuAp/4xy0O0zEVrPhLa4/p3UuNjCRVmHZVimrD+dnNMG9a1CsBzVeiSlM7jPmd2nUaFfGLXM60LeLRm4XY2n8B1T20isdWG2SeV0gie11K9jNkxQ+YIlwzukqYt35znwwhulUaYQ4M1/DkFV1p7S563TQxxgBpjfv6r6zdRFpGUF5+mmP3/6jsEI/NiQzWnbwHz19RwO5gzuGysOJej4c9rqcqtYFrDxap19fVUY2kH5R7A2nf1NcUyTz6WbskLJJBWUuaveVd4fXLo+pohjqtibc4onX9297+mtlTaaoelWA1aw7VS91fVl0pfHe51qb2/BqJCrpXCv67GVBoLYA5NXS/Tx4ekHWeNWCJm/JzvrVcfd5K23ovvX+tvuv/F9ZpxUBy1pp61/QIFd+/MlbchvQPpw+k0kD6h/Z4l0FGXGs0TtdUnI2Nzrl230GxtZP3nEcnBue6uEA/RoNi8uSk6FPl8Pu45GPPcmdPc0EiNPtrbrGC8fs2ImRWTzGvUopgNrIVFYLUxo8usOA0zQMW/vl821nl51YxZHLMkZinrgEE+R4X47Pg38Hk5Dg1lM0J8tg7xWe8a+LyQw/P1Zz6f3f/S9ux+3bZn8t/cnsnXCZ+9/9L27H3dtueiv7k9F10nfA75m/kccp3wufpv5nP1dcJnj790fPa4bsfngr+5PRcgYlTwx7zHvg4R9Ksrf87rpj8pUT9EUVbjQYrZHLMlZqvxNpF5Kt/oknVD+tyKv+WuQQ+WkZuJNjLvozC6YZTJId6obSjGyGVr4l2ayp/XQc3K6yAS5uqetquJntE51KsGxwzhPjUz1KdW/7/jNi4D3NoUAa/ZlOuI19TnF++9YemPu8HpD8r/nhuW/rgbnP6g/BvdsPTH3eD03460yQ1Lf50bnP66GaDf7LdFuB3dTm4SXxfh7+Uf4Tc7lazVuJ1do6/5/D39feBbz24Qf4q31j9MD9CD1UaVoh8wGpC5wv+A/wn/U2qo+odKURv1LUYfy2bOkLT8/+N/BlLKSzlYy0zEmYr1qRE1p27UCydes04r/MIlEgGRh6JEUVEUepU5I9uH5zN9eALN6Mjd4FEzb8gw+6vZQju4j9FTNA57p09TJHZTp9JsWsBXzca+6QLBuphwRAdOA6IF8p2Qb4l8F07ziFbItwfeGvmOyLdBvjOuMWUFSklcr3ClxjW2aMtpUdzLL5JQtj2u6QCkI67shBrMry7qtHF3ibIOpdsTFS1D95ZI7WB7Rdxr3ndg2iuifkTviODT2GXo/FtEVhkvcPDtH/6B/uHcQo9xGyivpBePJxl8/kcDLjTkSnhbtcpgOcv/qGkr/5f+c0Te7d7d5HkpXgrFQsNPxL6KGQ3XXlt6flZfpqYIfzt/R38ncFQ1HUcZLWnoeNN/jOmo5tVhOtZ760NcVeNPWq6utcYs3P/NJwFa8l9TZ3pprbls67f3d4CsyiHOQmWo3KXvbfqoJXyh2hqnqW3tZWqLTPcbzx2h3xxvrbcW5xT5/EkiMs0MWwAfU/e6DMgk1QqJDX0yVs7sSuXzb/Bv9G/yb/Zv8W/1b/Nv9+/w7/Tv8r/o3+1/yf+y/xX/q/49/tf8e70KXoJX0avkVfYSvSpeVe8W1Go4InCbHRypUK0D/YP89/sH+4f4h/qH8Xz5oH84X/U//tH+x5n/J/1P+f/X/7T/GS5TyivtxXllvLJeOa+8Z/YqfUzTXqa1At9DBWcBtV1tVebpswj1gtqlXiSftZs+Fv1EfzFADBSDxP1isBgihophYoPYKDaJzWKL2Cq2ie1ih9gpdokXxW7xknhZvCJeFXvEa2KveF1GyCwyUmaV2WSUjJbZZQ6ZU+aSN8ncMkb6pZBSKllYFpFFZTFZXJaQJWUpWVrGyTKyrCwny8t4ebusK++Q9eSdsr68SzaQd8uG8h7ZSN4rG8smsqlsJpvLYfIB+aAcLh+SI+TDcqR8RD4qR8ln5WT5nJwin5dT5UK5SC6WS+SLcrd8Sb4sX5Gvyj3yNfm1/Eb+U34rv5Pfyx/kj/In+bPyqQiVRUWqrOo2VUfdruqqO1Q9daeqr+5SDdTdqqG6RzVS96rGqolqqpqp5qq16q8GqIFqkLpfDVZDeM16TP2PGq3mqmQ1T81XC9RCtUgtVkt4LdvA69wmtUPtVLv53w51QB1Uh9T76gP1oTqsPlJH1MfqE/WpOqo+U5+rL9QxHdB5dF6dT+fXN+sCuqCO1YV0YV1EF9XFdHFdQpfUpXVZXU5X1oneS97L3iveHu8N7x1vv/c+t+zNoqvoyyvhA4L7j3hDHKGbpZaFqLysIOtQTdlCdqLG8h/yCWonp8mZ1Fkulaupu9wr36N+8hd5nB5Q2VSAHlYtVAuaoNqoTjSR1+UHaap6XI2lmWqpWk4L1Wa1hZZyH9pOwd6zXL2k9tNK9aU6Tjt1KV2K3tVxugzt0+V1PO33tnjb6KD3qvcqfeC95r1GH3pvem/SYe9d7136yDvgHaAj3AOr0lSRLOaJ+WKBWCgWicViiVgqlokXxHKxQqwUq8RqsUasFevEepEifhI/i1/Er+I38bs4Lk6Ik+KU+EOcFmfEWXFOkrSkT/aRfWU/2V8OkAPlIHm/HCyHyKFyrBwnx8sJcqKcJJPlPDlfLpCb5Ra5VW6T2+UOuVPukh/LT+Sn8qj8TH4uv5DH5JfyK3lGnpXnFClLlVXlVHkVryqoBFVRVVKVVaKqoqqqW1Q1VV3VULeqmqqWqq1aqZ6ql7pP9VZ9VF/VT41Uj6hH1Sj1vJqqpqnpaoaaqWap2WqOWqPWqnVqvY7W2XUOnVPn0jfp3DpG+7XQUiutta0d7WpPV9SVvF3ei95u73Xvbe89z7yZSqPFCS2u0crF0MrxaOVEtHI1tHIdtHJDtHITtHJ3tHIPtHI/tPIgtPJDaM1H0ILj0YIT0XaT0XbPoe2moO2eN/paBPZc1ZpQO44RY8U4MV5MEBPFJPGsmCyeE1PE82KqmCamixlippglZos5Yq74WHwiPhVHxWfic/GFOCa+FF+Jr8U34p/iW/Gd+F78IH6USbKz7CK7ym6yu+whe8pe8j7ZWz4pn5L/K5+Wz8gxcpacLefIuXKNXCvXyfUyRW6QG+UmuV8ekAflIfm+/EB+KA/Lj+QReUKelKfkH/K0yqPyqnwqv7pZFVAFVawqpAqrIqqoKqaKqxKqpCqlSqs4VUa1VEmqs+qiuqpuqrvqoYarh9QI9bAap8arCWqimqSeVZPVc2qKWqFW6ofUanVCnVSn1B/qtDqjzqpzmrSlfTpCZ9GROqvOpqN0BZ3gbfd2eDu9vd5b3j7v4HXRjkH90TzJ62Oee/IaGDwBsChWQ3Pqe4JuzOt2P92E0/6adWwxwDlNPmeGbg68BfCWwM8YPLTv/jTiFmOQlyKryM585hS5KZJ1W0HRrOdqysF6aoByiXyiIPlFIVGYbOjzrogT5ckTFURFyi8qi0QqKG4R1aiQqCFupSLiDlGPiom7RAMqIRqKe6iUaMw6cpx3wjtNNbyzgUjCHrwYGOYrSJMb1nvWX+L34BPNwdPFUow1wuvjMJTzcW/oQcRjux9lhQ4Vm0aHMvGVLAkxgDkcJIbh9yymVt1X98NfEygYvRmMVtiYaRLxiR7gOS11JophEmyh1DM1rif6Us+qND2ydLpfTGsa3TA/FSYfTvLxmZNi3E1cy0B3M/l0b3cb8tuR34L8VuR3IL/T5Cn1VOD+odY0caW5eV3llue1tDkpXtdTqDmv7BupBa+EO6klr+7HqAOve/E0ilfmKvSUrqbvoGd0Q92Kntfdudb5OlkvpaXORGcqrXU3uXtpi/uDV4TexKy5NNQfG4R0anPfzZyas/uMxdYioiXeUvegeQOAvy3bzL3Yau7n728sbv8j/vn+BW5btx3sogGoccVFTydvCf3K2nO4LYtyPk7UpALcHl0owTvBcm8cKhkI9/2taAm/QP2ia1hCgZCELv7d7J6MQx9PvSLzxnxXM6NJWzrcfgGZh3wynyxIWWSCrETR8hZZg3LKmrI2xcg6rCNJ1kDrkWLNsxE5rHU2pTysczan/KzhvEQ3q1fUq1RA7VX7KJa1uQNUyuhzVJq1uc+pDGs4e6gyLD+bPxMwiv4zJZC+B21L10P6XdSDLv7dSDAvfGIT0lwT7L+ZJUcz+zwJvcZoNUanmcLajNFlZrMeY/RWo7UanfUF1laNrrpOpKTREYIawnndL6j5peoJ51hDMNqB0Q1SdcAY1v6M5mf0PtYXjO6nD+nD+oj+WB/Vn+nP9TH9lf5af6O/0z/qn/Qv+lf9m/5dn9Rn9DnughF2FjvSzmZH29ntHPZNtt8WtrK1bduOHbDz2wXsgnZhu4hd1C5ul7RL2aXtsna8XcGuaFeyK9uJIf0kqG3uY13zoHfIO+x95B3xPvY+8T71jnqfeZ/DL2Hm3vx47mDSf9vrum+v4FMi5lmJJ/DGl8xb3xW8lsbvWZm/o6DHs03GmnnZkB7mY71xQkhzzDxKs4g2bozbyG38J1RaOGXLnOsyOlPl+edyDD4zlKqjbs8kGn2UL6RLTWeLRjGVc3mVmScXUEAukkson8qlavP6cqdqzTpWEuvXPVh/6kFD7HPOBBrm+tysVk43ys1h+d1c7k2W5lbxW44rXdvyXM/NZ+Vzb3YLWLEuf6zCbgk3zirilnXLWyXdCm6CFedWdhOtsm5V9xarvFvDvdWq4NZ2b7Mqure7da3K7p1uK6tKIGsgu1U/kDMgzfn7YT3qiUyWnDTcExnuKdJwT9GGe8phuKdchnvyG+7JNtyTa7gnz3BP+Q33VNBwT4UM91TEcE/FDPdUwnBPpQz3FGe4pxqGe76r6TdtQ3NFzVDv0SJGSGGLPCKviBVFRLyoJKqIqqK6qCnuFPXF3aKRuFd0Fl088waknKzD9xS9RG/RR/QN29FsRRsfr6zAmgWxZnGMCru7WCuuCw2iEe5bM01/3XGF9/WxhI0VTTJCKtZ+KrAtXVgOY1u6iXxWTqUusKV7yRflazRQzVVL6EGm4jj9QwdYi19v/Gv0ln5QD6d39KN6Lu1znnNO0W9uTjen1crN7ea2WrvCFVYb13Fdq62b381vtXcLugWtDm4Zt4zV0Y13461ObkW3kpXkVnGrWF3cam41q6tb061ldXPruHWsHu4dbj2rp9vabWPd5+3x9lh9vP3efquv9773gdUvkCOQwxqQpv/VvCpJ8NVMdW6mlillOgsyffGGLqaqmqGGaWE6DBWBHJB7vZANUvsq72eJKrCjh6p/pKE++ITVzrCmZ2xkzAQY3yp0ZfOwzriL0wLwSA8U9wf9xjyXVVbV1W3qLnUvPGt94YsdrPPAWxp73jeqm+sWuiVbX0yNfihUdw3YJeXCtedM421cxuv8NF7HjdfNz79FwhfdkHvGvHAdwadOBfYWW6JGvxgD79Zz0BZWqRPqrKY0fh7WAYwFF+7l71Fh1pm/wPlllkySvVFLllSqzT0sH+xuH1Wzgnbbixm8j0WdLuk9XRf2lJ73k6Z6SIPeT+P7DPo7Pwv5OMuqhLBPs3rIi9lXjTQyCutBa9RaeCshsTQ+StZ57Pvs3nYfu6/dz+5vD7AH2oPs++0R9iP2KPsxe7T9uP2E/aT9lD3GHmuPtyfak+xn7cn2c/ZUe9qfSOsCGWEnx/TQYFTlbvM7WzYFZQlp3pCTjWuozSO/DtsuMbBdCqK2WNQWj/Fcm2eblxFTmMV4quEdu9hufem/2ut1qL1ebF3/t52ux3YKnticuoK/DC26u7hPDBCDjZ+O57Qx3F48r7EUnxPPUYTZH+BrpotZlFXMEcmU3cxi3HbLxDLKLZaLtRRj9n5YYzRzhMcyHE/VjQypBstvKtUy8qPa0Cdu51nyBHVnOZ6mHuqsOkv38ZwZTb1ZirloCM9auekBnrk8epClWIlX/uN2Ij1uuKM9hjvaC13kDcMfvcUcfk7vhFaSGMSGLEG+burcfMHuxhwxV7rS43kpL89MsbKQTJRV5RvyTfm2fFfuk+9hX+KD0J7EaZVfFVCxqhh2HLqpEcxbcFfBzPbBvnD20rsIepB+CG2y1ztIZkcXs/UFc6ah1DxzNvM6pNlHkax1lWRNoLQuTX5DNQnQrVgTeh/79xbNTdOXXrkOechy8bqF/lMnJP3YsGbzqtF9oJcS9E+DRuoDPIJ59HqHL7p+z0XXG4kd1AdZYu/rD1k7+Uh/yq39hf6dos04pDyU+saR1DpeM/fALuN6tUEZn7aP7/g7EffrI1QwdH0CVsDSKLGX0+xmBhWtRGvR3lgabP/e6zaDBlfeNRGG5UL7fNA7eE57nuetMyyvoFZwQP+Tx1RO27Xj7Kr2LXY1+x67ld3Obh/SDx4J6QDT7VX2Vvtd+4j9izPLWeisdFKcHc6rzjvOoRBdW5iuGCsKlnVe/wC/2VlhzdDs2Ij7ed4YwnpkVrFBvM5z/k+S5xbWF+OpnOwjR9Gtcizr+81Y11lCnVjX2UU9Wdv5jAbIL+QXNER+Kb+jofIH+QM9bCICaKQ8oyx6lHWg5jSax1JvWs66zxBazfrPaNoM7/+LaofaTbtZy2xFe6C/vqEH62H0lrvN3Un7vJe8V8iMxcJ/3kfD/ewyvQw97OAlRvO2cNu+/h8rlRu9dyRDS192QXwDr3C8miE2gDXs4Jqf+19EAhz6l73jjf9YqUSE1rx6Ic9hNNecwnNokhxKWj4pJ1EpnrHmUGWuz6OapiTdy2V3UxPWat6j5qzXHMI7vXxsDfLcbmz08Js/E8ISfhN7akFvg/EqCJ3MM2vAmeZsp77ehzy/TrxsHW9lqA4L6wqlWc8Lg7MIlUexxaM36m1UXL+m36IyGVpVoQuEaXiby0QF97jRktm5JYdQPNqwJtqtnu7B7dbAkU5Ruhvt1ulP7n6ewnpB2atcqkzomli9W++h4vY5R1AZ97B7mK2xM+4Zus1zPIfqeK28VnS719fri3dfZEQ3MPQ/FNIN3uEy/pCPkQklxZpAgNs7n7yZbNYICpInK8pKFJDVZHXKi52v/Nj5KiibssUYC4uxkG7M/BbW8/V8Kq0X6oUU5/zs/ML0bmKuy2FlT7wGvoK2pokB2J2G7szxK0aHd7cLsbSMFlMIGvQdkEFP7FwPcH5i7h/EzvUIcD/2mrgP2nAmxuDl/0j+U0dHbYyOKB5vnFN38qhTGF2x7hH3CFVyz7nnqLLH/1Gi18ZrQ1W8/l5/qprBcVE3jc787lXdhym8IPYpXUSbflXv0e/p/Q45lhPhRDrRTnYnl3OTk9uJcfyOcJSjHYcFkM/J7xR0Yp1CTmGniFPUaeTc6zRxmjmtnNZOO6e908Hp6HRykpwuTlenu9PT6eP0dQY4A51Bzv3OYGfI+fFijUvDT+b0l1Ksv5h1ZA2viyXlfvkVVZUneP1riP2Klmq4GkXdWBueQ33VCrWaHlEneH15DFbmAj1CP0xL9Gq9gZbpHXonrTEypHX6PfsspRg5WkdZkhHW5yzNSOsLI1HrGMtUWF8ZaVrfszwd60eWqWf9ZORq/cySLWr9amRqnWKpNrFOs2SbWWeMdK2zLN8kHxnJ+rKybLv7oli+PX3RRsa+7CzlIb6crHd/4hPOSeeUrynrVrt9zdmqed3X1nvLe9vX3lj5vo7GDvYl8Vp03NflqvpSmlFvTfhvK96wrWjO2ilO56P196XzorJ16C52zVtALKyVFF6hJ4WvN5GO3UV3bvP7xH2skQ4QA9imHCwGUwTb7i68uQGKxGqdVRaTxSibLCFLUJQsJ8tRNPy72eHfDWC1LgWruzS0o2q6qW5KDXRL3ZLu1o/qZGqIVXwAVvGB2GUadAm/b8M0OsS+0KrQF6uCw/fKI/NQLtYhCtBNvCo04bm2mW7GEpvmTCeNtcFhbrdS4Ar8z3sv6X82p1nGp5FsrtAeiInJR0Q+62A9dW9nhjPzArl3ZIv7oD6k34cH8Eu2vr/V3+sf4AP8GR7A4/qEPqlPwfsXxZZ5Lju3HQP/n4T3z7U9O2DngeevBFvtZexydnn4/hKM548t9Rn2THuWvcReZr/AVvtqe629zl5vp9gb7M32Frbit9nb7R32XvsN+0226PfZ++0D9kH7kP2+fdj+iC38j+1P7E/tb+3v7R/sX+xf7d/t4/YJ+6R9yj7DIyc4QyTQKZ4himdYBp3SxBpPFrN5zE6AT/WkOsNr9zxu/QXc9ov04mvm3/gwqts17Fvt2nYD+x77Xru53QI+jWvl/Fp7TX5YE+d7r8W9txf+juYRZfZGipndEZbHfB4F6csHR2eBUOn3wp6idWq92+EStqW5ujGu3c93yh6cRzFTlsQcWQ1zZHt9wE6kJJ6TttNLZjaiY2YGom/hT/0e/tQfYRcZi5OcE86JsE1iTuiKocfSWW19jNUGe60A7LUSsNeqolw1WG3VYbXVhNVW63xJlNEokx9lynI7J1J5lGmMMs1Qprl3lGky9l5U0FbDvrCAnpUHGlZpSKEMbLhyZq+WazHaVnw4vqIhpcZvHghR8HqIgpKgoAIoqAMK6jIFr1B3UNAHFPQFBf2uifYI2LcE+9aGdIJPeRmqzFv4xoC6g6GWm4uWm8KSPaGj+B5mJ7Est5xD5dFyg7jldtIkbrl99By33EGawi33KT1/TTT64Hcg2Pw61OYNoRET6IINCn9EdliiHizRWtwrN9E98CO0sO+zp1FbHldn6RnvG+97Wu795h3Hc2hXS9eN3PfSt+6hv2BcXj0H2S5T0rRWY7RWi9DsVRR7RcH5532zh8H6XyvRhtJGNJlnQMzzPOapj7FyXKhk8TQlP0hXMsKUdM0Z023DT6Ok7o8HnznBvnhqpBSeHDE74cEnRoL74cEnRYJ74qFIKtYLR8LTvYJ747rL+LurX+Dx7pvO532E14FzrHMVc25x7nE6h33fnzpfGx3O7RDi0ewE5A3x+CFkol0To2AJ89Yynxpn3xOexVOfCj1sfjdvj6KsIiASREXRXnQQwbevBtJYhR8FZewGn8Zs7zbjK7Ly3SrxXWtTGZyvnboSH8E9FVKNNA6lyrk4kVGONalKQjqSzBvi0teS+oa4K6sn9WRmn/pOF0CsaVE8K2z2NszeSoBKs85EqMdG2oNSn+WwZOEL6rKUiavPqr5SJ7nV8nDrPAVKzXtoazOdJTETZaHCTHt++K7O03q1tZs6elGql+1jTktmNJ4mo5E73plAjovunPoGuvwYXxGih9zPtJpTU2NZZhHcLonMcwRLsQE11a2Dz1KolHBudzi3MeBxrqf5NZzbHc5t1G2w65gS+t4d+jYnRAWfJzI9zhe6ewz/VZi/i/L9KwUC4XoD4XoD4XrbheptF6q3Xahe04tTn5+ZDKl+komRoc+KJWqSmmHmzEvM3cY/g7gkisMMXhYzeHnM4PGYwSuk42cm+Pk00/iJEtPEXLFSpKjxaiqvD7uuka8NIb6eylS+jH4NHkC9APWFQH1hUF8U1BcH3SXMSJJdZHfZTw6Uz8iJ6dpnbia3T3bxo/TJ9XKbPCSPyKPyK3laWRn0B6bysAs8HM00HgJiplijJqtZwV2+NDEuwX2di+JboJv8NeNrAnj/LBNjtGeI1dfIy+50Y+rzzPOcXyUPLAVvh/fiJeaHzOPlyuYHn+wmB1yiX2UW/aZffS3+yOA8YOitEdbHvoB2VVLVyEDpzItCT0/zMdBcWtW8gWj+EjTHqVrXMc3po7W/Qr9aAt0mY7vJpmxdlP0au8nJYj6PhIVsD0bAHlSwB/PBHiwDG7IcbMgKsCETrmleNPevGdazv7nCMW08UZ1NRDbbmENZb72wvn9eRX1PyTFc3zg5iSLTyCd4nsy3dOFz5Fcu4+8g4zFiHMt4gpjLMja+HAVfTj74csrAf1MO/psK8N8kXNF9iuM+3xu/ElvNH/N92G5m++cX6QvFoWW0piDXP0C3Cp7VgJM3rqKOoNdwrdzEst0id1G2K6qjKur4ictkxa4PsZV/gpSx80mznW+RZ3ZNKK/ZNQmeNnSF9P2Mls1rdoZVOVWb5FXU8QusueApEzgz5IrqCD458Css0tVXVDI47n/DTLVem9PcsqQrO1wPJ4FS8qL7/Y77raL0HmMfTlc7v1t0PNNWSEuZ3uZzu7sbiQIq4FAT7DhsYAkYrb50GgojmMIuPPv63DbUwTvBs2NmnYJgaFkgFjAthm4LdDcNcXOxdE9konSTMyTdEzeIdJND0p2URronM026EWqROf0pQxI+eYNIGGfvW5VCGnTmSthHecV4MZ7vami1xCfiE9Z8fhY/Yz8libLIPrIPRcon5ZO8boyVY1kXmCVnUZRMlsmss6yRayi73Cw3Uw55Up6knPKsPEu5VB6Vh25SZVVZyq1aqlYUo5JUEgnj3yKphqvhvFqPVCNJqxU8c9rGp0wezjPJqx/SD7Em18HtQDdDdgUgO7N37UNf4La3Gl7nbX8jSjX9fugpTiPFAqa3D9M5FjtsdWVT1hvMHm1u6HwxF/nf/zA93PBM0TgZLs25cKyzpl7dMnT1aU4LsqQWsIR+Tr0TSyKZJbCZOT+L3QfmNLwDsUKtVKuCu7SGL+ZqBHMUXK3z82pdgDmJxJodg9XaH75nw9A9zZOaea/mnqFzeCJCK7yJ8CyIU1PNaanLaD3toNfoPfqAPmEr7VvWhk7QWSuLld2KsWwrrxVrFbfKWAlWVauGVduqazWwGlvNrdbXLgGnGCTwNh1gbfsAHaajbL8YzTWYfs/6UBb+d4obJitlsXxWlHWTpTgXootz+a3CVkmrHM9Kpa14TuOtRE4TLbaMmdo6nNax6nNa32rEaSOrOafNrbactrWSOE2yenDaw+rLaV/rfk7vtx7k9EHrEU4fsUZzOtp6mtOnrQmIgrIsXl+syYxMsWZyOtOax3+bf9x3rEXuG9wrb3Z/4LSsu8vEELuvcNrMfZ31s3num/j1R/z6NvI/If8O8j8j/yJKvYpS7wL/Bfhu4HuA7wP+K/CXgL8G/D3gvwF/Gfhe4PuB/w78APLHkT+I/AnkDyF/Evn3kT+F/AfI/4H8h8ifRv4w8meQP4L8OeS/M3kvB/LfI58T+U+Qt5A/inwE8p8jH4n8F8hnRf4Y8tmQ/xr5KJP3siMtijt+ifQbpN8i/RRX+lDqM+SzpLn+I6RfmRTjy7yNdRFOzdqGMXY20+bdLK7lWlhzR5DljnQnkot5Ls7MX+5Ydyz/Nsmsx15xrwQVg15h/ib8XRTc2ODGRBYtAjfnLlNvZngsLs2NoT4YW4+5Dv/ndie7z7lT3KnuTHeWO9ud6y51X3BXuKvctW6KuwHxauZErtTo+vDpRZZl1gZ3rWdsYb7mwohzi2X3b4s4N5Qc5lFyPn58WxoqMqevRSFymhA5nRuR0xXASzNETrdDdFw3RE73BBfD03BxPg58xw3Nh6HdnCwQjGC5nL3Nq6d7xD3neeG+NDXEvfn7+oi4Tktjaux1zjCVmdVG+k+jdk28bktEu3REvO5AxLwMQczLFMTrTke87kzE687XB+yztNBEzFpvI2JWIGJWIWI2gIjZvIiYzY+I2QKImI1NJ5Xz0cw3/VcuF/QW4/EuGpJKFro4JtiiGPcH9yf3F/c397h70v3DPeOe9SzP50V62bwoL7uXIzw2xoTr4Zr/bXHDc6khj/jfqT9iLodkkGLDeyO+9uE0vOfltaEb0x08B+e+4Ek4PNfYvFrk4VUiv7xZFghGZpp4Yr4rz/vOaefKo0IzSiGv6Va1NBT+6/jaf1z+9BG2P/7u2OMqdlW7pl3Lvs1uYjezW9rt7Y52kt3Z7mJ3tbvZPe1ef3t0csbkG4xg/pYlHMiwhFv/iwjm/z8xyxke8dbnIclFcvpl+Gnh1OdCP8ZJ0eacaHNC9A/iJ5xsk3qujSW7yH7yoPxUFVBxKkHVQq8152qsSo1qvqgHR19whk3qqRoP6Z36xeugZ9+HU3Tux+k5T158as7f3fOd0k4Vp6ZzN68Ks505zlwn2ZnnzHcWOAudRc5iZ4mz1FnmvOAsd1Y4K51VzmpnjbPWWeesd1KcDc7G/2PvTMCjKPL/Xd3TM4FMbOfqa0RlkR9ixIgIiICIgICIBAj3JaCQEEhIgIQYDiNGLhEINq4ifYAQXFREREAERNZlXdZFRAVEbhEVLw5FdEH/VZ+phEkA3WVVfJ6/zzx5q6anu6q6++3u6knPt7TV2ivaGm2ttk57Fc+TV9WP6N/rp+jVghgeQzJ8RlV8Ezie/b9U7B+371+svO/j9uV/vg//2H8/s1folh5+7thR9PiJxX6Ki/x03qhPP7edLjgq1M+un/4frOF5rKPOse9Pt5RbJxKNno0fpX2Mx0KP0R6cG3Lxn8I99Gx3MnyKBCOXRVKISvvoGSSZ9q7Gkxvo+XomaUDP2bNIQ3beJjfRM/d35ObI6chpwp4EvpU0oWffFqQ5PQO3J7fRs3AqaUHPxJ1IS3Y2Jq3o+bgnaU3PyX1JG/yCtC3te31H+vzX59jzrWVtPIswLO7YqlIWi4f2e3rgd0ws3lrF6xC7D0nnBsRdk85/TTlvCypEnxR8F/FpzaLQq5GH8b+zim1KuGhtioQmhh4J/S30ZrhnuE+4MDwuPCn8RHhz+N3w5+Fj4W8jvsjkyFPGGuNvZ7W5ykV8CnFK6I3II5GnIyci37LvzY1t9M62cvuqXsSnoSaH/n5WexIvnnfh3uGxxlpjI+3dbCIHxPZiZ7GH2E8cKGaI2eIocaw4QZwsThdNcY44X3xaXCquEteJr4ubxK3iDnGPeFD8RPxS/Fr83iN6qnhkT8QT9VT31PakeBp6mnlaedp5Onp6ePp5BnoyPDmefM9YzwTPZM90z2OeuR7XU+pZ4lnuWe1Z79noedPzrmenZ4/noOew55jnpOeUJEpVpIAUkaJSdamWVEeqJzWSmkktpLZSB6mL1EvqLw2WsqV8abw0UZouzZIel2xpgbRYWiqtkNZI66WN0pvSVmmHtEc6KH0ufS2d8kreJG/Aq3qreWt4a3tTvPW9jbzNvK287bwdvd28fbwDvZnebO8o71jvBO9U7yzvHK/rfdr7rHeZd7V3vfcN7xbvDu8e70HvYe8R7wnv9z7iPeHz+ZJ8IZ/uu8JX05fsq+dr7Gvua+1r7+vs6+Hr4xtImeHL9o3yFfqKfBN903wmtkV+bDv45vrm+572Petb5lvlW+d73bfJt8W3w7fP94nviO+k74cEKaFKgpwQSYgmVE+olVAnoX5C04RWCe0TuiT0Sbg3ITNhREIh3bpz6ZY7Sdv+dEJRwmRyZrwO9msmBeNyJIc/DX9L6kfESJS0jLSMdCN9MC5HTiQnkk9GY1yO8Xi2aRLG5ZiJb4rmKc8qL5Bl2mhtFlmFMTrejcVDwUgdO41/GZvJB8bbGC3nPWMb2YvvkfYT0eigm2AGSO+JjQ7IFYNDQJt42Bz6S3g3DHTBAnA+OA9zDeXlOXyZWJquW5j6HFgEPoNPxmH+VM4MkLUiFblicCTIWpHKW5GKVqSiFaloRSpakYpWpPJWpKL2VN6KVN6KVLQiFa1IRStSeSu66Om05i7ImXQ6fc+n54EuWADOBh3MlYe5umLprsixpbvypbti6a5YuiuW7oqlu2LprnzpbnTdBaMbculgHv2UTsWn3fFpd+TSQfZpd3wqGD3olB56LlgIumAGyJbvqWeCLp27J3IzwFxwNOiAU8BJtHRKOlcsHcVTi6c2T0fT8nrRJXqhpF6ovRdq74Xae6H23qi9N2rvjdwMMBccDTrgFJDV3pvX3pvX3pvX3pvX3pvXTns4xkD9ATAXZFu7D9rQR38YnEbn60tz92C+ezDfPZivr74IfBicRtmPbl8PI7ZsP0wp5lNewruh/N1spMP1h3jKyr4bS9/Nl74bU4r5lJfwbih/NxtpbOm7+dL99ZXgOHACmAGyI6I/crPB8WARaIMuOBMsAV+mJdOyUFN/1CgaA1DDANQwADUMQA0DUMMA5GLzjQeLwIXgInAmWAKyGgbwGgbwGgZhXw/Cvh6E3AwwFxwNOuAUkO3rQXxfD+L7ehDf14P4vh6EfS0ag1H2YJQ9GLkZYC4Ym8MBp4Cs7MG87MG87MG87MG87MEom56JohEctSzFuS2qsDMDn5rKp6Ziav+oFltnpOwXnzUwNmg2KSBFeOJnLllAniXLyRqyAf/L3kUOkSPkpEB7XEJA0IUrhFpCitBQaC60FToI3YR+wmAhB08GsDGbCOJM+xFnuhqttaPh0to66kNpKtGU2sWnuHzK0Lhc2WfZPB3C04k8ncXTCQZbo04GO2N2omXPo8t3QtmxKS6fMjQuV/ZZNk+H8HQiT2fxdAJNRaMzauqsp/N0Nk9j69G5fD06o/WikYZ3aXz+ND5/Gp8/rXz+NMz/Rz/oj37QL9cPil2r03E2TMfZMB25YnAIyM4X6bwHko4eSDrOCum4qqejB5KOHkg674Gk4xqfznsg6bwHko4eSDrOrunogaTzHkgGZwbIWhHLFYMjQdaKDN6KDLQiA63IQCsy0IoMtCKDtyJWe4ZelsZakYFWZKAVGWhFBm/FEPRkhiDHzn5DeE9mCK6ZQ1DbENQ2BOf8ISh3CO/JZGLpTOTY0pl86UwsnYmlM7F0JpbOxNKZfOmh6OkMRS4dZD2dobwfNAyfDkMuHWSfDuP9oCw6JQtXgyz0RLJQVxa2ZhaWz8YVJBtXkGzkZoC54GjQAaeA7AqSza8g2fwKks2vINn8CpLNeyLD6RLDUdJw1D4ctQ9H7cNRew5qz0HtOcjNAHPB0aADTgFZ7Tm89hxeew6vPYfXnsNrZ2WMRi9itB7Ls62dizbkon+Ti37QCJorwHwFmK8A843A1X0E5huBftBI9GRG8p7MSEwp5lNewruh/N1spLGezEjekxmFpUfxpUdhSjGf8hLeDeXvZiONLT2KL52HXkoeeil56KXkYSvm4YjIQ242OB4sAm3QBWeCJSDrpeTxXkoe76Xko4Z81JCPGvJRQz5qyEcuNt94sAhcCC4CZ4IlIKshn9eQz2soxL4uxL4uRG4GmAuOBh1wCsj2dSHf14V8XxfyfV3I93Uh7weNQdljUPYY5GaAuWBsDgecArKyx/Cyx/Cyx/Cyx/Cyx/B+UDrv8aTzHk86ejwZfGoGn5qBqXm8H5T/m/WDSnk/qLS8H1TK+0Gl5f2g0vJ+UCnvB5XyflAp7weV8n5QKe8HlRLWD1rE+0GLyvtBi3g/aFF5P2hReT9oEe8HLeL9oEW8H7SI94MW8X4Qs6UzamL9oFLeDyrl/aDS8n5QKe8Hsbak4V0anz+Nz5/G508rnz8N81d8bgxPWgn+3+VzYxWfEGOjYNQ0xhrjjPHG/UaR8YAxwXjQKDYeMiYak4zJxhRjqvGwMc14xJhuzDBmGiXGLONRwzRmG48ZfzYeN54w5hhPGnONVcbLhoXS39S/pKXXMmqRq/gTNcnlT9RI8c8047ndl42TUU1IYs8U0FZY5c9tBfh3fRU/Yd/z56DE2KeXnPc5af/5RkekW8ZHOutV9Bqkh36N3pSM1JvRJSehNQuxVU6yNuGJYZGu45PYtz3ivn+85Bcvv/J6yb/yetEtetZayb9w6ZXX6dJffV+NMx44a60u/cXLr7xegV95vRLpEVlMj8Jp8UfgWesZ+NXrq7zewV95vRP4GWkyPdvMNayz1jj4K9ZUeV1Dv/K6JtFzbuyMO4WebR/B2RXn1rPWOvQb1Pl7vyaEf/KaELko14TIr35NUC7CNUH5la8J6kW5Jqi/+jVB+11cE7Tf/JqgX+Rrgv4bXhOM3801wfiN6oyLOCcgFhi9W51CU5++W//BGGQMNgrpnTA7V0ukC70H7UDY78EiJBaD8XztE8vb1x3tG4H2TcTWxKh9PEobizcjRFhMQEH5jNdSjdSm91s1eJsu+4m5Y79uL2t9NRIbUVsgVVgcYDbOoP6KvlZ/VX+Nl9yCNCRtEfEu1v6fG22dlXeMnIkmN4aUxc9jpdWgraxdFv1PuPwn506gW20w3da9yAi6DYeRst8wCnDwf9mOe8mZOHc54Epsn5683hokhbaxBmlM28qj0ApX8Jp/fvkwWUqKyWOkHplP/0aQqWQ8KSAzydy4d08jzlujX2h9YjH89mE73g5mxbUwFsnvQXA+2slsFNkTbeydupa3uoC0J/3o+mbSv8Z0T7YmzenRdW/cuxz6eWxrXBm3NX6J2mWSTVy6tWfRv1GkkDxOJtLcNJJB80V0vpRfZkuF0abwFPBFtGlIXPuwFyMbz26lfoC3siFtUTI1MpkeES1wZCfTI7wuzbflW6b6mS3zP9YWpqasoM6w36wVU3+WwKD5cCiWY1b9kh4NOk+rB15A21vT1tenxtSnVvUg+fAoEybFcsytMpv+FGfTL9eG2IgUsV/iCwqWV+6p1IOuwT8T6VmxqpKrjFBGKqOUPCVfGa0UKPcR9nvn0ZGCyH2RwsiDkeLIQ5GJShNeBuvpVovFNxGuImUjxLL6QyCLZurzsVaKwYXBUn7lZGfShrz2mux86vnc8w0hwRHBMSQxODk4lUSMZKMe0YzlxnJEBRWCC8HS8t/oNCvf5xdSBhvdnr2aExY95kJL8dIzc+zFxtVtesHlsOisZa9WROCxTy+kJIItW7aNifB//2EJpdhbfXgJjeK28YWW0bjCNr7QUppW2sYXWk6zs7bxf18Sa81l9CgeSyaQyfh1/Bz++/hlZBVZR14nm/BL9bJfqfPfpQtJAjsWLqP9w8H4vVDsNyP7w2q4ZvjG8O3hV8LvhU/iN/CTIisjG5WOSielq5KpJqlbNfYrXo+xmIihwWAGOATMAUeAI8H9xhIihlXjWcqaxnOUNyJ/O/gK+J7xDOVJxshAtlQEpUUmsWUjK9k8kY2MSkc2XekEdmWfKpksryaBWxm1q+mcrCflo+eAZHo+bkz3Ujt2zIeOho6z3/wb/YyRdM2PGkuM52l6PJaGB/I0K5bSuZYYS9l/q2j6AimLMcu+PReV7gp7BrkKYT3SF2kZdUMRYxmRQqreEfF7fThzDhCOCN8I3ws/il7RLwZERYyKNcTanrbegd57vYO9Gd4R3lHefLm6XEOuKdeSa8vJch05Ra4r3yg3kG+Sb5abyLfIt8q3yS3lNnJf+R55kJwuD5Oz5Rx5lJwvF8jj5SK5WJ4kT5GnydPlEvlRebb8Z/kJ+UnZkh15nvyUvFBeJP9FfkZ+Tl4qL5OXyyvkVfJqea28Xt4gvy5vlN+QN8lvypvlLfJW+V15m7xD3invkT+Xv5KPysflbwiLUu4VBnvD8r99P1S5la6VV+grDJJW+k5XaVa+pqIwxPcB3q1h7z2sV+j78QT7HkS6QroavrOnsemcYhOxT9y7O8RMuvTX5FuxrthAbEQ/bUmnpYqdxG5iT7GPeK+YKeYk9kgcRz8/5yvx0YovWkrFV6OzX4krK75ored+taz0ak3bVvGVevYr8UjFF12X87z8kyu+6DpXfPU818v/XMUX3UoVX/3wOvP+3kqvdPrKPM8r51wv/w8VX0mBSi+j0qtGxRdfv1h7UQLd+yniDeIN9NalodiQCOLN4s3UhqZiU+IRW4mtiCS2E9sRr9hR7Eh8YmexM0kQu4vdSRWxl9iLVBX7in1JojhIHET84lBxKEkSc8Vcckliz8SeRE4cnzieXJo4KXEWCSSaiU+SaokLE1eQmomrEl8lDRP/kfgVaZZ4NPEkGeQf459EsvxT/DNJoX+O/1kywb/E/xKZ7X/V/z6x/Lv9u8kq/17/XvKyf79/P1nt/9D/IXnF/5H/I7LG/7H/Y7LW/6n/U7LO/5n/M/Kq/wv/F2S9/yv/V+Q1/1H/UbLBf9x/mvzV/2OSj2xOCibpZFtSNOlPZE/SVUnJ5JBcVfaTL+VL5SA5KutyFLHU2Bm981mvHme9+p31ouflxLmJCwhJXJ/4Bqma+J0f48jTo6QJZSMwlZIdfYgyHihA/lLkWVR0n9dX3ueLO98FcgJL+PkuMfA8fd8+sJSRT2P9OcFblVIKtKHT2xAWLT+Jnnmb0/5me7S+H+1fZtJ+J7tW0bNmoGbgmkBKoEGgYeCmQKPAzYHGgVsCaYHedOmal9xAeQ2YAjYAG4I3gY3Am8HG4C1gGtibkkW4k9H/70DvBHrhP87DaB+9gPZ/i3k0M/mcrWgZaPcLtKQl2K5yq4Qk8qAwXTCFOYIrlArPCsuEVcI64XVhk7BF2CbsEg4InwhfCl8L34tE9IlJYkjUxSvEmmIy3YsN6fHRQmwrdhC70KOgvzhYHCaOEAvE8WKxOFWcKT4mzsXTbEvE5eJqcb24UXyz/Hm2w+IR8YR4qsLzbLU8dTz1PI3Kn2jr5umDp7iyPaM8hZ4iz0TPNM8sz+Me27PAs9iz1LPCs8azwfOGZzOeadvnOUR7KuyZth8kSUqUApIqVZNqSLWlFKm+1FhqLrWW2kudpR5SP+leKVPKkfKlsdIEabI0XTIl9i2+4q1KrSF0L1CTAh0C9K4t0DmQRq4NdA10JdcFegX6kpTA3YH+pF5gYGAQqR9ID2SSRoFhgSzSNDA8kEuaBUYGRpLbAnmB+0iLwJjAGNImMC5wP2kbeCAwgdwZKA4Uk7sCEwOTSYfAtMBjpFNgTmAB6RMoDbxG0onorXpJXexnxv8Da4FXg7XBa8Bk8FqwDngdmAJeD9YFbwDrgTeC9cEGYEPwJrAReDPYGGwCNgVvAZuBt4LNwdvAFmBLsBV4O9gabAO2Be8A24F3gu3BDmBnMA3sCvYCe4N9wL7g3WB/cCB4D3gvOAhMBzPAIWAmOAzMAoeDOWAuOBLMA/PB0WABeB84BhwHjgfvBx8AJ4DF4ERwEjgZnAY+Ak4HZ4AzwRJwFvgoaIKzwcfAOeCT4FzQAm3QAV1wHjgffApcAJaCi8Cnwb+Ai8FnwGfB58Al4PPgUvAFcBn4IrgcfAlcAa4EV4Evg6vBV8A14FpwHfgquB58jZGeK68Ongh+GzwZ/C74ffDfwVPB08Efgj8GPw5+Evw0eDj4WfDz4BfBL4NfBY+UTzsaPBY8Hptm3G60NtoYbY07jHbGnUZ74y72H7QKdzTFwUf4Hc0VvL7dwT3BvcF9wf3BA8EPgweDHwUPBTcH3wpuCb4d3Bp8J/hu8L3gtuD28mk7gu8Hd8amGU2NW4xmxq1Gc+M2o4XR0mj1k/Wx0Wuu5lehn79jKpsWu3OKTSu/f8JzSTWF5J9ev5AY3A3uAfeC+8D94AHwQ/Ag+BF4CNwMvgVuAd8Gt4LvgO+C74HbwO3gDvB9cCej0RS8BWwG3go2B28DW4AtwVYXYXvRu1/wC/BL8CvwCHgUPAYeB78Gv2EMjgBHgqPAPDAfHA0WgPeBheAYcDI4BZzKaCSD14J1wOvAFPB6sC54A8hiWMXGQol9/+QJ9g32Dw6gn5FgX0pPsD+lRKdU6F2x++yy3pXSld0/Kz0ZeS8qBd/0nt2TOiuus5LNnotU8JwqZR4rmT2HR/kwOI1Ox7OTCp5ApWTz4EldyodBFiNJJ1VJ7bPqZeNpDQ/lEhIaGSpg35opw3QBHMdaq/8F+bHg/ZiC7wLYs5F0ykywhJbCIqENVdgdohjKwFr68KthIfJMfH8y8jzrT9JpYjAXd5On8c0H8h527xj7TtInfoc8G81sLrlTF3WPLule3adX0avqibqfRQhj8cH0sB7RFV3VDT2qX6ZX0y9nMcL0Gvo1erJ+rV5Hv06/Xq+r38AihLH4YCw6GIsNxiKDsbhg+h16O/1Ovb1+l95BT9U76p30znqa3kXvqnfTu+s99J5RXzQhWiVaNZoYTYpeEpWjl0YD0WA0FA1ftOfs6hLlPx3bByP7KP/piEHG6diepFu3C/ZkMNQXe6kBvrkdi9+CB38+kgOdO/jzcV9oaTKREK/mmMbiP0sYa/CacN14Y5gDwVyYwOZmMW746JVlv0Gnn8wircsjNexUPlB2KbuVPcpeZZ+yXzlQaRzHxcozyrPKc8oS5XllqfKCskx5UVmuvKSsUFYqq5SXldXKK8oaZa2yTnlVWa98qBxUPlIOKa8pHyufKJ8qhxED4ou4KBDHla8RCWKD8ldjl7Eb460LpHV59IknQnNCT4bmhqyQHXJC80Lzw3rYoGtaja5rjfBV4UbhxuF/hTeHt4S3ht8JvxveHt4R3hneFd4d3hM+FbkiUj1SI3J1pE7kusjgyLhICd2es/kWxfgn2K5C3JZlI6Gw+BUjlbHGq8Z645/GdnwH78VYTimkIb5t9dLttYtumw+NXcSjbAvm0mPQo+zi6QGefhhLjdh0FtH+cjKQZJNCMpFuc5ssJivIBrKZ7CSHyDHyg5AoqEINIUVoLLQWOgv9hEwhX5hA74zm0LuiWCzx7cp2Quhe+oD6tFvZTyS6dU+QqnS77aF3yPRzVhNq8yrvx+V3xuU/iMvvjsvvicvvjcvvi8vvj8t/FJc/FJf/OC7/SVz+07j84bj8Z3H5z+PyX8Tlv4zLfxWXPxKXPxqXPxaXPx6X/zou/01c/sSZvBG3TYwz24RFb61JrzPsGe18er88kV73H6P7sJQsoXtxHdlI9+M2sofuyS/JCbovfYJM92bZU9rN6B4te0o7W8hn1w1q0AlCqPN7yJ/iHNrO0x08fZ+nO3n6QSXXdvN0D0/38nQfT/ef20nlIE8/4ukhnn7M0094+ilPD/P0M55+ztMvePolT7/i6RGeHuXpMZ4e5+nXPP2GpycqHCseg69XbA/QrT+Ynrc3ka30WDlADtOj5XtBpMdLSIjSIyZZqEePmRZCO3rU9BIG0uNmhFBIj5ypwix67MwXFgvLhNXCBmGTsFXYKRwQDgvHhO9FUUykHTr27XOyWE9sLLL/W9Tl4xUiIgvGGvzpUQYrjjEYP8LgWnUrG2WwfGTB9dob2tvaDuIJTY+tWWgGT2fy9CmeLuDpwlga4Z9HnuDpdzw9zdMf+BZM5KnM00t5uq3Snvs2lqpJPNV5eh1PG/O0CU+b8jSVpz152pen/Xg6lKfDeJrF0yKeTuUpX3+Vr786l6cv8HQtT7fylJutcnM0h6eLeLqUpyt5up6nb/D0bZ7Gjig8J1kWd0j5t3JKOa38oPyoElVQRdWjSqpX9SEaUVU1UfUjJpEcF5UooiosMpGx19hn7KfG1Dz/lar8avMz1xpcZ7bHWlYeyaeaerl6hXqlWl39k1pDvUqtqf6fWku9GvF9ktVr1TqI8nN9XJyfBmpDFuvHOGB8aBxEy8qidi0JPR9aGnohtCz0Ymh5aEVoZWROxIrYEUepykf9YhGFQnExhdj4X2zsrw3GXzH6Vx0SVh5QJigPKsXKQ8pEZZIyWZmiTFUeVqYpjyjTlRnKTKVEmWXsZGe22EgtiM4dQk92Lfu/BmLmEJrLJvXVHxFDU9Q8mqR5NZ+WoFVBNE2/llQhomYYMTVVTdN0zdCi2mVaNUTXvFKrHh9hU3ld+ZuyUfk7InRuUd5WtirvsEid7NvfyGVslHXaM1lHaiublLfoNVykd2xttNFagXafVqiN0cZq47Tx2v1akfaANkF7UCvWrtZqa9doydq1Wh3tOi1Fu16rq92g1dNu1OprDbSG2k1aI+1mrTEt75/Km8q/lM3KW/H1aqmI+dlZS9O6aF21blp3rQeif/bW+sRHAMUzWLoxiP3OiVSNXMLGLUFLa9A1+gepjXhEKfoufRdpoZ/WT5OWBt0MpJXR0+hJbjeyjWx6JyLS+9AmWhOtqXaL1ky7VWuu3aa10FpqrbTbtdZaG62tdofWTrtTa6/dpXXQHtImapO0ydoUbar2sDZNe0Sbrs3QZmol2iztHkQkHaylaxnaEC1TG6oNQ2zS4VpOfHxSfa9BjKgxmP2C6gJGsY/1RB/VTG22xp4IOTMeduyTP2uPa09oc0j8WCaicJJ8Vz6yK4t+xKJ+tVBbqq3U29XWahu1rXqH2k69U22v3qV2OGe8qzw1Xx2tFqj3qYXqGHWsOk4dr95Pz+Ad1U5qZzVN7aJ2RSylIvUBdYL6oFqsPsRjY/WgZ/leam+1D871d6v91QFxUcbS1QxEz3pYnaY+gvP/TLVEnRUXR+tx9QnEIouPN+aq89T56lPqAnWhWqouUp9W/6IuVp9BFLIl6vPqUsQiezEuGtnL6uoKEcleUzeof1VfV/+mblT/rr6h/kPdpP5TfRNxyt5St6hvI1rZu3HxynaqH1SIWXZA/VA9qH6kHlI/Vj9RP1UPq5+pn6tfINLXEfWoegzxvr6Ji/j1b/UUon6t117TNmh/1V7X/qZt1P5Or23/0DZp/9Te1P6lbdbe0rbQa91W7R3tXe09bZu2Xduhva/t1D7Qdmm7tT3aXm2f8ZFxyPjYOGx8ZnxufGJ8YXxqfGl8ZRwxjhrHjOPG18Y3xgmDjQbzv46lvJr0+i9sOHvf//yejY+SdsFblG+JL+hWKFvzCx8F+o91/v9hncu+L9PxXQMbq1sMZodqgTdV/taNj8gdPwclxug+811BAyLqBCNbx54UOfN9V+WxrNl8UbA+X4axH3g32L9y+/QajMFs+mkNStYv8KLW685dX4XxlMXI56HLKE8zKjJ4JaPaF5weYs8RzyV3nvlOVahL77ua0rsC9vvYLvS+oD+99xpG7wwKhPFCMb03mCk8JsyldwdPC0uE5fT+YL2wUXiT3iHsEPYIB+k9whHhhHCK3iVUEWUxQu8Tqou1xDr0TqGR2ExsJbYTO4rdxD7l0TMKxSJxojhNnCU+LtriAnGxuFRcIa4RN4hviJsv1nddIR/7zXgoAawCVgUTwSTwElAGLwWDYAiMgAqogTpogFHwcvAK8EqwOvgn8CqwJlgLvA5MAa8H64I3gDeC9cEG4E1gI7AJ2BRsBt4KtgHbgneC7cEOYCrYGUwDu4BdwW5gd7AH2BPsBfYG+4B9wX7g3WB/cAA4EL/QPwl+B34P/hs8Bf4A/sgYJaAAiqAHlEAv5R9On8tpE06bcNqE0yacNuG0CadNOG3CaRNOm3DahNMmnDbhtAmnTThtwmkTTptw2oTTJpw24bQJp004bcJpE06bcNqE0yacNuG0CadNOG3CaRNOm3DahNMmnDbhtAmnTThtwmkTTptw2oTTJpw24bQJp004bcJpE06bcNqE0yacNuG0CadNOG3CaRNOm3DahNMmnDbhtAmnTThtwmkTTptw2oTTJpw24bQJp004bcJpE06bcNr8w+lzOm3BaQtOW3DagtMWnLbgtAWnLThtwWkLTltw2oLTFpy24LQFpy04bcFpC05bcNqC0xactuC0BactOG3BaQtOW3DagtMWnLbgtAWnLThtwWkLTltw2oLTFpy24LQFpy04bcFpC05bcNqC0xactuC0BactOG3BaQtOW3DagtMWnLbgtAWnLThtwWkLTltw2oLTFpy24LQFpy04bcFpC05bcNqC0xactuC0BactOG3BaQtOW384fU6nHTjtwGkHTjtw2oHTDpx24LQDpx047cBpB047cNqB0w6cduC0A6cdOO3AaQdOO3DagdMOnHbgtAOnHTjtwGkHTjtw2oHTDpx24LQDpx047cBpB047cNqB0w6cduC0A6cdOO3AaQdOO3DagdMOnHbgtAOnHTjtwGkHTjtw2oHTDpx24LQDpx047cBpB047cNqB0w6cduC0A6cdOO3AaQdOO3DagdMOnHbgtAOnHTjtwGnnD6fP6bQLp1047cJpF067cNqF0y6cduG0C6ddOO3CaRdOu3DahdMunHbhtAunXTjtwmkXTrtw2oXTLpx24bQLp1047cJpF067cNqF0y6cduG0C6ddOO3CaRdOu3DahdMunHbhtAunXTjtwmkXTrtw2oXTLpx24bQLp1047cJpF067cNqF0y6cduG0C6ddOO3CaRdOu3DahdMunHbhtAunXTjtwmkXTrtw2oXTLpx24bQLp1047f7enb4Yo7jROmcQ9oQIowR6QR9YBawKJoJ+8BJQBgNgEAyDEVABVdAAo+BlYDXwcvBKsDpYA7wGTAavBeuA14HXg3XBG8AbwfrgTWAjsDHYBGwG3gq2AFuCt4OtwTvAduCdYHvwLrADmAp2BDuBncE0sAvYFewGdgd7gIgfHMW2jSaA2MJRbOEotnA0CcQWjmILRy8FsZ2j2M7REMi29h9On8tpC05bcNqC0xactuC0BactOG3BaQtOW3DagtMWnLbgtAWnLThtwWkLTltw2oLTFpy24LQFpy04bcFpC05bcNqC0xactuC0BactOG3BaQtOW3DagtMWnLbgtAWnLThtwWkLTltw2oLTFpy24LQFpy04bcFpC05bcNqC0xactuC0BactOG3BaQtOW3DagtMWnLbgtAWnLThtwWkLTltw2oLTFpy24LQFpy04bcFpC05bcPp335++SE7bcNqG0zactuG0DadtOG3DaRtO23DahtM2nLbhtA2nbThtw2kbTttw2obTNpy24bQNp204bcNpG07bcNqG0zactuG0DadtOG3DaRtO23DahtM2nLbhtA2nbThtw2kbTttw2obTNpy24bQNp204bcNpG07bcNqG0zactuG0DadtOG3DaRtO23DahtM2nLbhtA2nbThtw2kbTttw2obTNpy24bQNp204bcNpG07bcNqG03b59+GIwhFaHLHY6Ox6hr4CaTpNBZJDGpAFZDFZSlYg8uMbFX6peoKcEqTy54ZrCXWEWmSFUJ9so1ObCq0wnnMPemxkCDls9GP6V0TL2CZMpsfH44JL52K5p4Wlwiq69Dr239vQU6GFtBe9KLSSPWESmUci+A/E5fgPRAr+91AX/3u4Ef97qE9bXorvhUpZ1E/KPLAYHAnafL1ewrt80AULwPngPMyVx8ty+DIO3xazMfU5sAh8Bp+M4/On8/lMnr6ENJfFQkX6AOZaCY7DtAks3ibqmM1rno1RwtkcsdrGY3oR/3wmT0t4OpvFKkUL8D4W1RMp1i2q4l0smmcKiZBmpBWeEe5FBpIMko1IEUV4aiwW27NsH7PnJe4JDyMknB0ezQwJD2QRXikR+zfM+sDs3dDyNDY1GxwCTgRngRMos1BCFi8hC0tm8RKyeAlZKCELJWShhCyU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kYPrt5OXtxSXaxZf+jNV8/IY1Cx6nMM59q+xJrj4U28LwUPKkqiMLlSdsLBPG+x1W7usXXdCsD8qLLTNy2LdXqFSjuSk0+CydwCDYzt/8yB/3Sv+qBSlj27BEMh/ABW4qmINCmVuZHN0cmVhbQ0KZW5kb2JqDQoyMCAwIG9iag0KPDwvVHlwZS9YUmVmL1NpemUgMjAvV1sgMSA0IDJdIC9Sb290IDEgMCBSL0luZm8gOSAwIFIvSURbPDMyMThENkU0QjEwRjNFNDk4MEE3OTdBQUUxRTVCOTZEPjwzMjE4RDZFNEIxMEYzRTQ5ODBBNzk3QUFFMUU1Qjk2RD5dIC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDgxPj4NCnN0cmVhbQ0KeJxjYACC//8ZgaQgAwOIqoVQW8EU42EwxcwPobaDKZZlEOo2mGIVYGBgAmoQYGCGUCwQihVCMUEoqBI2kIZfMB4jkMfeATaFI5eBAQACHwkSDQplbmRzdHJlYW0NCmVuZG9iag0KeHJlZg0KMCAyMQ0KMDAwMDAwMDAxMCA2NTUzNSBmDQowMDAwMDAwMDE3IDAwMDAwIG4NCjAwMDAwMDAxMjUgMDAwMDAgbg0KMDAwMDAwMDE4MSAwMDAwMCBuDQowMDAwMDAwNDUxIDAwMDAwIG4NCjAwMDAwMDA3ODMgMDAwMDAgbg0KMDAwMDAwMDk1MSAwMDAwMCBuDQowMDAwMDAxMTkwIDAwMDAwIG4NCjAwMDAwMDEyNDMgMDAwMDAgbg0KMDAwMDAwMTI5NiAwMDAwMCBuDQowMDAwMDAwMDExIDY1NTM1IGYNCjAwMDAwMDAwMTIgNjU1MzUgZg0KMDAwMDAwMDAxMyA2NTUzNSBmDQowMDAwMDAwMDE0IDY1NTM1IGYNCjAwMDAwMDAwMTUgNjU1MzUgZg0KMDAwMDAwMDAxNiA2NTUzNSBmDQowMDAwMDAwMDE3IDY1NTM1IGYNCjAwMDAwMDAwMDAgNjU1MzUgZg0KMDAwMDAwMTkyOCAwMDAwMCBuDQowMDAwMDAyMTU3IDAwMDAwIG4NCjAwMDAxODU1MTkgMDAwMDAgbg0KdHJhaWxlcg0KPDwvU2l6ZSAyMS9Sb290IDEgMCBSL0luZm8gOSAwIFIvSURbPDMyMThENkU0QjEwRjNFNDk4MEE3OTdBQUUxRTVCOTZEPjwzMjE4RDZFNEIxMEYzRTQ5ODBBNzk3QUFFMUU1Qjk2RD5dID4+DQpzdGFydHhyZWYNCjE4NTc5OQ0KJSVFT0YNCnhyZWYNCjAgMA0KdHJhaWxlcg0KPDwvU2l6ZSAyMS9Sb290IDEgMCBSL0luZm8gOSAwIFIvSURbPDMyMThENkU0QjEwRjNFNDk4MEE3OTdBQUUxRTVCOTZEPjwzMjE4RDZFNEIxMEYzRTQ5ODBBNzk3QUFFMUU1Qjk2RD5dIC9QcmV2IDE4NTc5OS9YUmVmU3RtIDE4NTUxOT4+DQpzdGFydHhyZWYNCjE4NjM3Ng0KJSVFT0Y=',\n fileName: '05-versions-space.pdf',\n },\n\n {\n mimeType: 'image/png',\n data: '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',\n fileName: 'n8n-screenshot.png',\n }\n]\n\nreturn files.map(file => ({json:{filename:file.fileName},binary:{binaryfile:file}}));\n" - }, - "name": "Set files", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "id": "3f6a46bd-b5e9-4ff3-9562-335c4f540f02" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Set files", - "type": "main", - "index": 0 - } - ] - ] - }, - "Set files": { - "main": [ - [ - { - "node": "Write Binary File", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": {}, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/60.json b/test-workflows/workflows/60.json deleted file mode 100644 index 8da0c063f40..00000000000 --- a/test-workflows/workflows/60.json +++ /dev/null @@ -1,193 +0,0 @@ -{ - "createdAt": "2021-02-23T15:27:09.090Z", - "updatedAt": "2021-07-16T07:21:35.499Z", - "id": "60", - "name": "Taiga:Issue:create update get getAll delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 170, - 350 - ], - "id": "f7f8b0e2-b017-4579-b9e0-3ba533335d3a" - }, - { - "parameters": { - "projectId": 399742, - "subject": "Test", - "additionalFields": { - "description": "TestIssue" - } - }, - "name": "Taiga", - "type": "n8n-nodes-base.taiga", - "typeVersion": 1, - "position": [ - 350, - 350 - ], - "credentials": { - "taigaApi": { - "id": "221", - "name": "taigaApi" - } - }, - "id": "c7b5324f-05d8-4eb7-a4f2-0f0a4c6de1da" - }, - { - "parameters": { - "operation": "update", - "projectId": 399742, - "issueId": "={{$node[\"Taiga\"].json[\"id\"]}}", - "updateFields": { - "subject": "UpdatedTest" - } - }, - "name": "Taiga1", - "type": "n8n-nodes-base.taiga", - "typeVersion": 1, - "position": [ - 500, - 350 - ], - "credentials": { - "taigaApi": { - "id": "221", - "name": "taigaApi" - } - }, - "id": "c156fd69-32cb-4b38-b85a-aeac05032c23" - }, - { - "parameters": { - "operation": "get", - "issueId": "={{$node[\"Taiga\"].json[\"id\"]}}" - }, - "name": "Taiga2", - "type": "n8n-nodes-base.taiga", - "typeVersion": 1, - "position": [ - 650, - 350 - ], - "credentials": { - "taigaApi": { - "id": "221", - "name": "taigaApi" - } - }, - "id": "2f3418a5-b09a-4db3-9cb8-c8d10b31a4b6" - }, - { - "parameters": { - "operation": "getAll", - "projectId": 399742, - "limit": 1, - "filters": {} - }, - "name": "Taiga3", - "type": "n8n-nodes-base.taiga", - "typeVersion": 1, - "position": [ - 800, - 350 - ], - "credentials": { - "taigaApi": { - "id": "221", - "name": "taigaApi" - } - }, - "id": "a100f3a0-d4ae-41f3-81d5-21101a91eef6" - }, - { - "parameters": { - "operation": "delete", - "issueId": "={{$node[\"Taiga\"].json[\"id\"]}}" - }, - "name": "Taiga4", - "type": "n8n-nodes-base.taiga", - "typeVersion": 1, - "position": [ - 950, - 350 - ], - "credentials": { - "taigaApi": { - "id": "221", - "name": "taigaApi" - } - }, - "id": "a1c664cd-c0f0-44af-94ce-6c650aee489c" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Taiga", - "type": "main", - "index": 0 - } - ] - ] - }, - "Taiga": { - "main": [ - [ - { - "node": "Taiga1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Taiga1": { - "main": [ - [ - { - "node": "Taiga2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Taiga2": { - "main": [ - [ - { - "node": "Taiga3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Taiga3": { - "main": [ - [ - { - "node": "Taiga4", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/61.json b/test-workflows/workflows/61.json deleted file mode 100644 index 4ef0aaff54e..00000000000 --- a/test-workflows/workflows/61.json +++ /dev/null @@ -1,582 +0,0 @@ -{ - "createdAt": "2021-02-23T16:32:02.682Z", - "updatedAt": "2021-07-14T13:38:50.003Z", - "id": "61", - "name": "Spotify:Artist:get getAlbums getRelatedArtists getTopTracks:Album:get getNewReleases getTracks:Track:get getAudioFeatures:Playlist:create getUserPlaylists get add getTracks delete:Player:recentylPlayed currentlyPlaying:Library:getLikedTracks", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "4509b9ad-036c-4042-9094-565f3831b616" - }, - { - "parameters": { - "resource": "artist", - "id": "0dwFxqYkvZLSA6U6XfQcDV" - }, - "name": "Spotify", - "type": "n8n-nodes-base.spotify", - "typeVersion": 1, - "position": [ - 440, - 300 - ], - "credentials": { - "spotifyOAuth2Api": { - "id": "223", - "name": "Spotify OAuth2 creds" - } - }, - "id": "1d211521-bf07-43d1-a537-76a43689659f" - }, - { - "parameters": { - "resource": "artist", - "operation": "getAlbums", - "id": "0dwFxqYkvZLSA6U6XfQcDV", - "limit": 1 - }, - "name": "Spotify1", - "type": "n8n-nodes-base.spotify", - "typeVersion": 1, - "position": [ - 600, - 300 - ], - "credentials": { - "spotifyOAuth2Api": { - "id": "223", - "name": "Spotify OAuth2 creds" - } - }, - "id": "5335e14c-1580-43cf-ab02-e0a6ff3a8682" - }, - { - "parameters": { - "resource": "artist", - "operation": "getRelatedArtists", - "id": "0dwFxqYkvZLSA6U6XfQcDV" - }, - "name": "Spotify2", - "type": "n8n-nodes-base.spotify", - "typeVersion": 1, - "position": [ - 600, - 150 - ], - "credentials": { - "spotifyOAuth2Api": { - "id": "223", - "name": "Spotify OAuth2 creds" - } - }, - "notes": "CAP_RESULTS_LENGTH=1", - "id": "87c2549e-56ae-4bce-94aa-f6a28da0a87c" - }, - { - "parameters": { - "resource": "artist", - "operation": "getTopTracks", - "id": "0dwFxqYkvZLSA6U6XfQcDV" - }, - "name": "Spotify3", - "type": "n8n-nodes-base.spotify", - "typeVersion": 1, - "position": [ - 600, - 460 - ], - "credentials": { - "spotifyOAuth2Api": { - "id": "223", - "name": "Spotify OAuth2 creds" - } - }, - "notes": "CAP_RESULTS_LENGTH=1", - "id": "69240ec6-ad37-46b3-80d2-b1656c2f1334" - }, - { - "parameters": { - "resource": "album", - "id": "={{$node[\"Spotify1\"].json[\"id\"]}}" - }, - "name": "Spotify4", - "type": "n8n-nodes-base.spotify", - "typeVersion": 1, - "position": [ - 810, - 300 - ], - "credentials": { - "spotifyOAuth2Api": { - "id": "223", - "name": "Spotify OAuth2 creds" - } - }, - "id": "00066fda-fa7f-4070-a687-fe253bfdd1cb" - }, - { - "parameters": { - "resource": "album", - "operation": "getTracks", - "id": "={{$node[\"Spotify1\"].json[\"id\"]}}", - "limit": 1 - }, - "name": "Spotify5", - "type": "n8n-nodes-base.spotify", - "typeVersion": 1, - "position": [ - 1100, - 300 - ], - "credentials": { - "spotifyOAuth2Api": { - "id": "223", - "name": "Spotify OAuth2 creds" - } - }, - "id": "a2a42efb-f876-4612-acfd-2325108cea84" - }, - { - "parameters": { - "resource": "track", - "operation": "get", - "id": "={{$node[\"Spotify5\"].json[\"id\"]}}" - }, - "name": "Spotify6", - "type": "n8n-nodes-base.spotify", - "typeVersion": 1, - "position": [ - 1250, - 300 - ], - "credentials": { - "spotifyOAuth2Api": { - "id": "223", - "name": "Spotify OAuth2 creds" - } - }, - "id": "be6c985b-88be-424f-b7c3-76126a347140" - }, - { - "parameters": { - "resource": "track", - "operation": "getAudioFeatures", - "id": "={{$node[\"Spotify5\"].json[\"id\"]}}" - }, - "name": "Spotify7", - "type": "n8n-nodes-base.spotify", - "typeVersion": 1, - "position": [ - 1400, - 300 - ], - "credentials": { - "spotifyOAuth2Api": { - "id": "223", - "name": "Spotify OAuth2 creds" - } - }, - "id": "6c05d655-43c2-456d-a9d0-a80ac251c1f6" - }, - { - "parameters": { - "resource": "playlist", - "operation": "getUserPlaylists", - "limit": 1 - }, - "name": "Spotify8", - "type": "n8n-nodes-base.spotify", - "typeVersion": 1, - "position": [ - 450, - 610 - ], - "credentials": { - "spotifyOAuth2Api": { - "id": "223", - "name": "Spotify OAuth2 creds" - } - }, - "id": "36defd84-29a1-4f39-896e-4885daaec151" - }, - { - "parameters": { - "resource": "playlist", - "operation": "get", - "id": "={{$node[\"Spotify8\"].json[\"id\"]}}" - }, - "name": "Spotify9", - "type": "n8n-nodes-base.spotify", - "typeVersion": 1, - "position": [ - 600, - 610 - ], - "credentials": { - "spotifyOAuth2Api": { - "id": "223", - "name": "Spotify OAuth2 creds" - } - }, - "id": "61c3c3dd-c263-4f2d-bd2d-c30ee5cd24ed" - }, - { - "parameters": { - "resource": "playlist", - "id": "={{$node[\"Spotify8\"].json[\"id\"]}}", - "trackID": "spotify:track:2ea6bt302Bq8Hiulp8Bn2C", - "additionalFields": {} - }, - "name": "Spotify10", - "type": "n8n-nodes-base.spotify", - "typeVersion": 1, - "position": [ - 750, - 610 - ], - "credentials": { - "spotifyOAuth2Api": { - "id": "223", - "name": "Spotify OAuth2 creds" - } - }, - "id": "1aba2540-e5c6-4e19-9afb-1ce402ee9e63" - }, - { - "parameters": { - "resource": "playlist", - "operation": "getTracks", - "id": "={{$node[\"Spotify8\"].json[\"id\"]}}", - "limit": 1 - }, - "name": "Spotify11", - "type": "n8n-nodes-base.spotify", - "typeVersion": 1, - "position": [ - 900, - 610 - ], - "credentials": { - "spotifyOAuth2Api": { - "id": "223", - "name": "Spotify OAuth2 creds" - } - }, - "id": "b73d97e3-8689-4d5a-b63a-798b841f97df" - }, - { - "parameters": { - "resource": "playlist", - "operation": "delete", - "id": "={{$node[\"Spotify8\"].json[\"id\"]}}", - "trackID": "spotify:track:2ea6bt302Bq8Hiulp8Bn2C" - }, - "name": "Spotify12", - "type": "n8n-nodes-base.spotify", - "typeVersion": 1, - "position": [ - 1050, - 610 - ], - "credentials": { - "spotifyOAuth2Api": { - "id": "223", - "name": "Spotify OAuth2 creds" - } - }, - "id": "0a06cad9-d378-4206-8974-4a32f47c3ca2" - }, - { - "parameters": { - "operation": "recentlyPlayed", - "limit": 1 - }, - "name": "Spotify14", - "type": "n8n-nodes-base.spotify", - "typeVersion": 1, - "position": [ - 450, - 0 - ], - "credentials": { - "spotifyOAuth2Api": { - "id": "223", - "name": "Spotify OAuth2 creds" - } - }, - "id": "e053e2f6-6166-4642-aae0-45c9e1fd7e8a" - }, - { - "parameters": { - "operation": "currentlyPlaying" - }, - "name": "Spotify15", - "type": "n8n-nodes-base.spotify", - "typeVersion": 1, - "position": [ - 600, - 0 - ], - "credentials": { - "spotifyOAuth2Api": { - "id": "223", - "name": "Spotify OAuth2 creds" - } - }, - "id": "3f6ce69d-fe20-4ae8-9e0f-2fd6819829b8" - }, - { - "parameters": { - "resource": "album", - "operation": "getNewReleases", - "limit": 1, - "filters": { - "country": "DE" - } - }, - "name": "Spotify13", - "type": "n8n-nodes-base.spotify", - "typeVersion": 1, - "position": [ - 950, - 300 - ], - "credentials": { - "spotifyOAuth2Api": { - "id": "223", - "name": "Spotify OAuth2 creds" - } - }, - "id": "56209a90-208b-427e-91a6-2afeed0a2637" - }, - { - "parameters": { - "resource": "playlist", - "operation": "create", - "name": "=Playlist{{Date.now()}}", - "additionalFields": { - "public": true - } - }, - "name": "Spotify16", - "type": "n8n-nodes-base.spotify", - "typeVersion": 1, - "position": [ - 1200, - 610 - ], - "credentials": { - "spotifyOAuth2Api": { - "id": "223", - "name": "Spotify OAuth2 creds" - } - }, - "id": "59830b10-56b4-49b0-b2fd-c21829acb8f6" - }, - { - "parameters": { - "resource": "library", - "limit": 1 - }, - "name": "Spotify17", - "type": "n8n-nodes-base.spotify", - "typeVersion": 1, - "position": [ - 450, - 450 - ], - "credentials": { - "spotifyOAuth2Api": { - "id": "223", - "name": "Spotify OAuth2 creds" - } - }, - "id": "8ffb18bc-7e7a-403c-bcb1-60732c28f358" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Spotify", - "type": "main", - "index": 0 - }, - { - "node": "Spotify8", - "type": "main", - "index": 0 - }, - { - "node": "Spotify14", - "type": "main", - "index": 0 - }, - { - "node": "Spotify17", - "type": "main", - "index": 0 - } - ] - ] - }, - "Spotify": { - "main": [ - [ - { - "node": "Spotify1", - "type": "main", - "index": 0 - }, - { - "node": "Spotify3", - "type": "main", - "index": 0 - }, - { - "node": "Spotify2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Spotify1": { - "main": [ - [ - { - "node": "Spotify4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Spotify4": { - "main": [ - [ - { - "node": "Spotify13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Spotify5": { - "main": [ - [ - { - "node": "Spotify6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Spotify6": { - "main": [ - [ - { - "node": "Spotify7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Spotify8": { - "main": [ - [ - { - "node": "Spotify9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Spotify9": { - "main": [ - [ - { - "node": "Spotify10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Spotify10": { - "main": [ - [ - { - "node": "Spotify11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Spotify11": { - "main": [ - [ - { - "node": "Spotify12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Spotify14": { - "main": [ - [ - { - "node": "Spotify15", - "type": "main", - "index": 0 - } - ] - ] - }, - "Spotify13": { - "main": [ - [ - { - "node": "Spotify5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Spotify12": { - "main": [ - [ - { - "node": "Spotify16", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/62.json b/test-workflows/workflows/62.json deleted file mode 100644 index 7f62ba0ca29..00000000000 --- a/test-workflows/workflows/62.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "createdAt": "2021-02-25T08:31:03.195Z", - "updatedAt": "2021-02-25T08:32:00.908Z", - "id": "62", - "name": "ProfitWell:Company:getSetting:Metric:getMontly getDaily", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 300, - 350 - ], - "id": "4dbeace0-2f7c-4987-b559-b94bf635956b" - }, - { - "parameters": { - "resource": "company" - }, - "name": "ProfitWell", - "type": "n8n-nodes-base.profitWell", - "typeVersion": 1, - "position": [ - 500, - 270 - ], - "credentials": { - "profitWellApi": { - "id": "51", - "name": "ProfitWell creds" - } - }, - "id": "641ae41a-7ffd-4644-af38-336ae09074eb" - }, - { - "parameters": { - "type": "monthly", - "options": {} - }, - "name": "ProfitWell1", - "type": "n8n-nodes-base.profitWell", - "typeVersion": 1, - "position": [ - 500, - 420 - ], - "credentials": { - "profitWellApi": { - "id": "51", - "name": "ProfitWell creds" - } - }, - "id": "fa1e6b3f-6aee-43da-a1a5-7a5f5e820430" - }, - { - "parameters": { - "type": "daily", - "month": "={{(new Date()).toISOString().slice(0,7)}}", - "simple": false, - "options": {} - }, - "name": "ProfitWell2", - "type": "n8n-nodes-base.profitWell", - "typeVersion": 1, - "position": [ - 650, - 420 - ], - "credentials": { - "profitWellApi": { - "id": "51", - "name": "ProfitWell creds" - } - }, - "id": "fba5b0a1-1e81-473c-9973-2d7f21a646d3" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "ProfitWell", - "type": "main", - "index": 0 - }, - { - "node": "ProfitWell1", - "type": "main", - "index": 0 - } - ] - ] - }, - "ProfitWell1": { - "main": [ - [ - { - "node": "ProfitWell2", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/63.json b/test-workflows/workflows/63.json deleted file mode 100644 index 6866f74b1ec..00000000000 --- a/test-workflows/workflows/63.json +++ /dev/null @@ -1,160 +0,0 @@ -{ - "createdAt": "2021-02-25T09:15:01.281Z", - "updatedAt": "2021-03-10T14:03:08.426Z", - "id": "63", - "name": "Segment:Identify:create:Track:event page", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 400 - ], - "id": "238a4bec-9ecf-47ad-a99b-98ac07a426da" - }, - { - "parameters": { - "userId": "rzfu5AbHm7U3rj7jMdqsjW", - "traits": { - "traitsUi": [ - { - "key": "type", - "value": "test" - } - ] - } - }, - "name": "Segment", - "type": "n8n-nodes-base.segment", - "typeVersion": 1, - "position": [ - 500, - 250 - ], - "credentials": { - "segmentApi": { - "id": "52", - "name": "Segment creds" - } - }, - "id": "228fb339-6315-4c04-bce3-18d4c16019ad" - }, - { - "parameters": { - "resource": "track", - "userId": "rzfu5AbHm7U3rj7jMdqsjW", - "event": "click" - }, - "name": "Segment1", - "type": "n8n-nodes-base.segment", - "typeVersion": 1, - "position": [ - 500, - 400 - ], - "credentials": { - "segmentApi": { - "id": "52", - "name": "Segment creds" - } - }, - "id": "09f95724-5ae1-4bc3-9aa0-7010129aa7da" - }, - { - "parameters": { - "resource": "track", - "operation": "page", - "userId": "rzfu5AbHm7U3rj7jMdqsjW", - "name": "landing" - }, - "name": "Segment2", - "type": "n8n-nodes-base.segment", - "typeVersion": 1, - "position": [ - 650, - 400 - ], - "credentials": { - "segmentApi": { - "id": "52", - "name": "Segment creds" - } - }, - "id": "f80c0402-ca47-417c-bc0c-b5d4b0b463fc" - }, - { - "parameters": { - "resource": "group", - "userId": "rzfu5AbHm7U3rj7jMdqsjW", - "groupId": "=FixedGroupID", - "traits": { - "traitsUi": [ - { - "key": "mode", - "value": "test" - } - ] - } - }, - "name": "Segment3", - "type": "n8n-nodes-base.segment", - "typeVersion": 1, - "position": [ - 500, - 550 - ], - "credentials": { - "segmentApi": { - "id": "52", - "name": "Segment creds" - } - }, - "id": "58a1a209-2fbe-48aa-8b8f-186ce492cd12" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Segment", - "type": "main", - "index": 0 - }, - { - "node": "Segment1", - "type": "main", - "index": 0 - }, - { - "node": "Segment3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Segment1": { - "main": [ - [ - { - "node": "Segment2", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/64.json b/test-workflows/workflows/64.json deleted file mode 100644 index 8ca2540690b..00000000000 --- a/test-workflows/workflows/64.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "createdAt": "2021-02-25T09:24:41.132Z", - "updatedAt": "2021-02-25T09:24:41.132Z", - "id": "64", - "name": "SIGNL4:Alert:send resolve", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "e54d4fc1-752f-436e-8c86-139e373a54de" - }, - { - "parameters": { - "message": "=test{{Date.now()}}", - "additionalFields": { - "title": "=Title{{Date.now()}}" - } - }, - "name": "SIGNL4", - "type": "n8n-nodes-base.signl4", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "signl4Api": { - "id": "53", - "name": "Signal4 creds" - } - }, - "id": "870742ca-8ae9-44f6-a2e0-b6ec40298cd2" - }, - { - "parameters": { - "operation": "resolve", - "externalId": "={{$node[\"SIGNL4\"].json[\"eventId\"]}}" - }, - "name": "SIGNL", - "type": "n8n-nodes-base.signl4", - "typeVersion": 1, - "position": [ - 600, - 300 - ], - "credentials": { - "signl4Api": { - "id": "53", - "name": "Signal4 creds" - } - }, - "id": "95ab047b-4159-45fd-9ec6-2d1b9c326a5f" - } - ], - "connections": { - "SIGNL4": { - "main": [ - [ - { - "node": "SIGNL", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "SIGNL4", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/65.json b/test-workflows/workflows/65.json deleted file mode 100644 index 5e156df25b4..00000000000 --- a/test-workflows/workflows/65.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "createdAt": "2021-02-25T09:43:01.461Z", - "updatedAt": "2021-02-25T09:43:01.461Z", - "id": "65", - "name": "Spontit:Push:create", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "e33d511e-ced8-4880-a890-e943c6aab5dc" - }, - { - "parameters": { - "content": "=Content {{Date.now()}}", - "additionalFields": { - "pushTitle": "=TestNotif {{Date.now()}}" - } - }, - "name": "Spontit", - "type": "n8n-nodes-base.spontit", - "typeVersion": 1, - "position": [ - 470, - 300 - ], - "credentials": { - "spontitApi": { - "id": "54", - "name": "Spontit creds" - } - }, - "id": "06d02833-8870-4d12-a60f-59c1763f0361" - }, - { - "parameters": { - "url": "={{$node[\"Spontit\"].json[\"message\"].replace(\"Pushed! Available at \",\"\")}}", - "responseFormat": "string", - "options": {} - }, - "name": "HTTP Request", - "type": "n8n-nodes-base.httpRequest", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "id": "e22a1da8-01dc-476f-b449-527888f5d58e" - }, - { - "parameters": { - "extractionValues": { - "values": [ - { - "key": "data-subscription", - "cssSelector": "#loadApp_script[data-subscription]", - "returnValue": "attribute", - "attribute": "data-subscription" - } - ] - }, - "options": {} - }, - "name": "HTML Extract", - "type": "n8n-nodes-base.htmlExtract", - "typeVersion": 1, - "position": [ - 850, - 300 - ], - "id": "641a91ef-f7a2-4f1a-8876-bd0b0cf133cb" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Spontit", - "type": "main", - "index": 0 - } - ] - ] - }, - "Spontit": { - "main": [ - [ - { - "node": "HTTP Request", - "type": "main", - "index": 0 - } - ] - ] - }, - "HTTP Request": { - "main": [ - [ - { - "node": "HTML Extract", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/66.json b/test-workflows/workflows/66.json deleted file mode 100644 index bb67cf78b5d..00000000000 --- a/test-workflows/workflows/66.json +++ /dev/null @@ -1,162 +0,0 @@ -{ - "createdAt": "2021-02-25T10:14:44.063Z", - "updatedAt": "2021-02-25T10:14:44.063Z", - "id": "66", - "name": "Storyblok:Story:get getAll publish unpublish", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "0da0a738-e19c-4837-af8b-0a1ae6cd7943" - }, - { - "parameters": { - "source": "managementApi", - "operation": "getAll", - "space": 106530, - "returnAll": true, - "filters": {} - }, - "name": "Storyblok", - "type": "n8n-nodes-base.storyblok", - "typeVersion": 1, - "position": [ - 440, - 300 - ], - "credentials": { - "storyblokManagementApi": { - "id": "56", - "name": "Storyblok Management creds" - } - }, - "id": "76bbeb75-0065-41cf-943e-2cdf4cdc53b1" - }, - { - "parameters": { - "source": "managementApi", - "space": 106530, - "storyId": "={{$node[\"Storyblok\"].json[\"id\"]}}" - }, - "name": "Storyblok1", - "type": "n8n-nodes-base.storyblok", - "typeVersion": 1, - "position": [ - 600, - 300 - ], - "credentials": { - "storyblokManagementApi": { - "id": "56", - "name": "Storyblok Management creds" - } - }, - "id": "27852b2f-f00f-4dee-8df5-30f7aaabbfc2" - }, - { - "parameters": { - "source": "managementApi", - "operation": "publish", - "space": 106530, - "storyId": "={{$node[\"Storyblok\"].json[\"id\"]}}", - "options": {} - }, - "name": "Storyblok2", - "type": "n8n-nodes-base.storyblok", - "typeVersion": 1, - "position": [ - 750, - 300 - ], - "credentials": { - "storyblokManagementApi": { - "id": "56", - "name": "Storyblok Management creds" - } - }, - "id": "fa39cb57-fe77-46c3-9ac9-82d3c3b6fced" - }, - { - "parameters": { - "source": "managementApi", - "operation": "unpublish", - "space": 106530, - "storyId": "={{$node[\"Storyblok\"].json[\"id\"]}}" - }, - "name": "Storyblok3", - "type": "n8n-nodes-base.storyblok", - "typeVersion": 1, - "position": [ - 900, - 300 - ], - "credentials": { - "storyblokManagementApi": { - "id": "56", - "name": "Storyblok Management creds" - } - }, - "id": "12a65877-f3a5-46ae-b033-0296c9c23314" - } - ], - "connections": { - "Storyblok": { - "main": [ - [ - { - "node": "Storyblok1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Storyblok1": { - "main": [ - [ - { - "node": "Storyblok2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Storyblok2": { - "main": [ - [ - { - "node": "Storyblok3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Storyblok", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/67.json b/test-workflows/workflows/67.json deleted file mode 100644 index c0215c9c979..00000000000 --- a/test-workflows/workflows/67.json +++ /dev/null @@ -1,791 +0,0 @@ -{ - "createdAt": "2021-02-25T11:13:34.019Z", - "updatedAt": "2021-05-03T07:55:48.432Z", - "id": "67", - "name": " Twist:Channel:create update get getAll archive unarchive delete:MessageConversation:create get getAll update delete:Thread:create get update getAll delete:Comment:create get update getAll delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "27f84602-beb4-4f88-8218-2a97b75c2224" - }, - { - "parameters": { - "resource": "channel", - "workspaceId": 164330, - "name": "=TestChannel{{Date.now()}}", - "additionalFields": {} - }, - "name": "Twist", - "type": "n8n-nodes-base.twist", - "typeVersion": 1, - "position": [ - 400, - 300 - ], - "credentials": { - "twistOAuth2Api": { - "id": "58", - "name": "Twist OAuth2 creds" - } - }, - "id": "5f8b0940-95b9-4ceb-b582-978ecc2a3054" - }, - { - "parameters": { - "resource": "channel", - "operation": "update", - "channelId": "={{$node[\"Twist\"].json[\"id\"]}}", - "updateFields": { - "name": "=UpdatedChannel{{Date.now()}}" - } - }, - "name": "Twist1", - "type": "n8n-nodes-base.twist", - "typeVersion": 1, - "position": [ - 1300, - 300 - ], - "credentials": { - "twistOAuth2Api": { - "id": "58", - "name": "Twist OAuth2 creds" - } - }, - "id": "ae38c81e-4500-4794-a2be-dd13baec5a12" - }, - { - "parameters": { - "resource": "channel", - "operation": "get", - "channelId": "={{$node[\"Twist\"].json[\"id\"]}}" - }, - "name": "Twist2", - "type": "n8n-nodes-base.twist", - "typeVersion": 1, - "position": [ - 1450, - 300 - ], - "credentials": { - "twistOAuth2Api": { - "id": "58", - "name": "Twist OAuth2 creds" - } - }, - "id": "13a50551-66d2-41c8-a223-b668d1760bb9" - }, - { - "parameters": { - "resource": "channel", - "operation": "getAll", - "workspaceId": 164330, - "limit": 1, - "filters": {} - }, - "name": "Twist3", - "type": "n8n-nodes-base.twist", - "typeVersion": 1, - "position": [ - 1600, - 300 - ], - "credentials": { - "twistOAuth2Api": { - "id": "58", - "name": "Twist OAuth2 creds" - } - }, - "id": "ccd8ba04-a775-4726-8fd5-6bd7aab479be" - }, - { - "parameters": { - "workspaceId": 164330, - "conversationId": 1067233, - "content": "=Message {{Date.now()}}", - "additionalFields": {} - }, - "name": "Twist4", - "type": "n8n-nodes-base.twist", - "typeVersion": 1, - "position": [ - 400, - 450 - ], - "credentials": { - "twistOAuth2Api": { - "id": "58", - "name": "Twist OAuth2 creds" - } - }, - "id": "d71aab63-c8fc-4707-b1ef-e65c86b57889" - }, - { - "parameters": { - "resource": "channel", - "operation": "archive", - "channelId": "={{$node[\"Twist\"].json[\"id\"]}}" - }, - "name": "Twist5", - "type": "n8n-nodes-base.twist", - "typeVersion": 1, - "position": [ - 1750, - 300 - ], - "credentials": { - "twistOAuth2Api": { - "id": "58", - "name": "Twist OAuth2 creds" - } - }, - "id": "ad43fda9-1a8c-4742-a6f4-e06fd9ca6b71" - }, - { - "parameters": { - "resource": "channel", - "operation": "unarchive", - "channelId": "={{$node[\"Twist\"].json[\"id\"]}}" - }, - "name": "Twist6", - "type": "n8n-nodes-base.twist", - "typeVersion": 1, - "position": [ - 1900, - 300 - ], - "credentials": { - "twistOAuth2Api": { - "id": "58", - "name": "Twist OAuth2 creds" - } - }, - "id": "7694c0d8-a552-4447-b596-4fc4028286ca" - }, - { - "parameters": { - "resource": "channel", - "operation": "archive", - "channelId": "={{$node[\"Twist\"].json[\"id\"]}}" - }, - "name": "Twist7", - "type": "n8n-nodes-base.twist", - "typeVersion": 1, - "position": [ - 2050, - 300 - ], - "credentials": { - "twistOAuth2Api": { - "id": "58", - "name": "Twist OAuth2 creds" - } - }, - "id": "117e67bf-96e6-45e2-815a-39a061c0b70f" - }, - { - "parameters": { - "resource": "channel", - "operation": "delete", - "channelId": "={{$node[\"Twist\"].json[\"id\"]}}" - }, - "name": "Twist8", - "type": "n8n-nodes-base.twist", - "typeVersion": 1, - "position": [ - 2200, - 300 - ], - "credentials": { - "twistOAuth2Api": { - "id": "58", - "name": "Twist OAuth2 creds" - } - }, - "id": "9f2ac87f-563d-46ea-9e84-20106ae3d298" - }, - { - "parameters": { - "operation": "get", - "id": "={{$node[\"Twist4\"].json[\"id\"]}}" - }, - "name": "Twist9", - "type": "n8n-nodes-base.twist", - "typeVersion": 1, - "position": [ - 600, - 450 - ], - "credentials": { - "twistOAuth2Api": { - "id": "58", - "name": "Twist OAuth2 creds" - } - }, - "id": "f18044fe-f54c-4508-8d7b-fd207d7592d7" - }, - { - "parameters": { - "operation": "getAll", - "workspaceId": 164330, - "conversationId": 1067233, - "additionalFields": { - "limit": 1 - } - }, - "name": "Twist10", - "type": "n8n-nodes-base.twist", - "typeVersion": 1, - "position": [ - 800, - 450 - ], - "credentials": { - "twistOAuth2Api": { - "id": "58", - "name": "Twist OAuth2 creds" - } - }, - "id": "9af8b264-9fd4-42d2-adb3-11c31cc4a2bc" - }, - { - "parameters": { - "operation": "update", - "id": "={{$node[\"Twist4\"].json[\"id\"]}}", - "updateFields": { - "actionsUi": { - "actionValues": [ - { - "action": "open_url", - "button_text": "community ?", - "type": "action", - "url": "http://community.n8n.io" - } - ] - } - } - }, - "name": "Twist11", - "type": "n8n-nodes-base.twist", - "typeVersion": 1, - "position": [ - 1000, - 450 - ], - "credentials": { - "twistOAuth2Api": { - "id": "58", - "name": "Twist OAuth2 creds" - } - }, - "id": "bee483bf-33e8-4dda-992a-facd5cf7e678" - }, - { - "parameters": { - "operation": "delete", - "id": "={{$node[\"Twist4\"].json[\"id\"]}}" - }, - "name": "Twist12", - "type": "n8n-nodes-base.twist", - "typeVersion": 1, - "position": [ - 1200, - 450 - ], - "credentials": { - "twistOAuth2Api": { - "id": "58", - "name": "Twist OAuth2 creds" - } - }, - "id": "7069faaa-b9f0-4a53-8a0f-8496697b8a0c" - }, - { - "parameters": { - "resource": "thread", - "channelId": "={{$node[\"Twist\"].json[\"id\"]}}", - "title": "=Thread{{Date.now()}}", - "content": "test", - "additionalFields": {} - }, - "name": "Twist13", - "type": "n8n-nodes-base.twist", - "typeVersion": 1, - "position": [ - 550, - 150 - ], - "credentials": { - "twistOAuth2Api": { - "id": "58", - "name": "Twist OAuth2 creds" - } - }, - "id": "b7484a76-76e7-4b7f-9702-efd247ce3b7f" - }, - { - "parameters": { - "resource": "thread", - "operation": "get", - "threadId": "={{$node[\"Twist13\"].json[\"id\"]}}" - }, - "name": "Twist14", - "type": "n8n-nodes-base.twist", - "typeVersion": 1, - "position": [ - 700, - 150 - ], - "credentials": { - "twistOAuth2Api": { - "id": "58", - "name": "Twist OAuth2 creds" - } - }, - "id": "6d2214c7-4046-48ad-8968-bd94b4fead5f" - }, - { - "parameters": { - "resource": "thread", - "operation": "update", - "threadId": "={{$node[\"Twist13\"].json[\"id\"]}}", - "updateFields": { - "content": "Updated Content" - } - }, - "name": "Twist15", - "type": "n8n-nodes-base.twist", - "typeVersion": 1, - "position": [ - 850, - 150 - ], - "credentials": { - "twistOAuth2Api": { - "id": "58", - "name": "Twist OAuth2 creds" - } - }, - "id": "f18cc9f8-8019-45a6-b129-4503d5e8aabe" - }, - { - "parameters": { - "resource": "thread", - "operation": "delete", - "threadId": "={{$node[\"Twist13\"].json[\"id\"]}}" - }, - "name": "Twist16", - "type": "n8n-nodes-base.twist", - "typeVersion": 1, - "position": [ - 1150, - 150 - ], - "credentials": { - "twistOAuth2Api": { - "id": "58", - "name": "Twist OAuth2 creds" - } - }, - "id": "0d712781-9323-48c6-9cc7-72cb43bb73d1" - }, - { - "parameters": { - "resource": "thread", - "operation": "getAll", - "channelId": "={{$node[\"Twist\"].json[\"id\"]}}", - "limit": 1, - "filters": {} - }, - "name": "Twist17", - "type": "n8n-nodes-base.twist", - "typeVersion": 1, - "position": [ - 1000, - 150 - ], - "credentials": { - "twistOAuth2Api": { - "id": "58", - "name": "Twist OAuth2 creds" - } - }, - "id": "6921bbfc-1f9c-4939-874d-d507221603f1" - }, - { - "parameters": { - "resource": "comment", - "threadId": "={{$node[\"Twist13\"].json[\"id\"]}}", - "content": "=Comment{{Date.now()}}", - "additionalFields": {} - }, - "name": "Twist18", - "type": "n8n-nodes-base.twist", - "typeVersion": 1, - "position": [ - 700, - 0 - ], - "credentials": { - "twistOAuth2Api": { - "id": "58", - "name": "Twist OAuth2 creds" - } - }, - "id": "0c6fb7ef-6ed1-4361-860e-757cbfcaf1d6" - }, - { - "parameters": { - "resource": "comment", - "operation": "get", - "commentId": "={{$node[\"Twist18\"].json[\"id\"]}}" - }, - "name": "Twist19", - "type": "n8n-nodes-base.twist", - "typeVersion": 1, - "position": [ - 850, - 0 - ], - "credentials": { - "twistOAuth2Api": { - "id": "58", - "name": "Twist OAuth2 creds" - } - }, - "id": "6a268279-ca4a-4a06-ab80-79a9a7eb46bd" - }, - { - "parameters": { - "resource": "comment", - "operation": "update", - "commentId": "={{$node[\"Twist18\"].json[\"id\"]}}", - "updateFields": { - "content": "Updated Content" - } - }, - "name": "Twist20", - "type": "n8n-nodes-base.twist", - "typeVersion": 1, - "position": [ - 1000, - 0 - ], - "credentials": { - "twistOAuth2Api": { - "id": "58", - "name": "Twist OAuth2 creds" - } - }, - "id": "21e3d0e7-7334-4540-88ed-bacb111bb3c4" - }, - { - "parameters": { - "resource": "comment", - "operation": "getAll", - "threadId": "={{$node[\"Twist13\"].json[\"id\"]}}", - "limit": 1, - "filters": {} - }, - "name": "Twist21", - "type": "n8n-nodes-base.twist", - "typeVersion": 1, - "position": [ - 1150, - 0 - ], - "credentials": { - "twistOAuth2Api": { - "id": "58", - "name": "Twist OAuth2 creds" - } - }, - "id": "1a4f872d-f05f-474f-a7d9-97f2f046533b" - }, - { - "parameters": { - "resource": "comment", - "operation": "delete", - "commentId": "={{$node[\"Twist18\"].json[\"id\"]}}" - }, - "name": "Twist22", - "type": "n8n-nodes-base.twist", - "typeVersion": 1, - "position": [ - 1300, - 0 - ], - "credentials": { - "twistOAuth2Api": { - "id": "58", - "name": "Twist OAuth2 creds" - } - }, - "id": "d2496300-155c-4bd3-8acd-1d3c068dba37" - } - ], - "connections": { - "Twist": { - "main": [ - [ - { - "node": "Twist13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Twist1": { - "main": [ - [ - { - "node": "Twist2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Twist2": { - "main": [ - [ - { - "node": "Twist3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Twist", - "type": "main", - "index": 0 - }, - { - "node": "Twist4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Twist3": { - "main": [ - [ - { - "node": "Twist5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Twist5": { - "main": [ - [ - { - "node": "Twist6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Twist6": { - "main": [ - [ - { - "node": "Twist7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Twist7": { - "main": [ - [ - { - "node": "Twist8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Twist4": { - "main": [ - [ - { - "node": "Twist9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Twist9": { - "main": [ - [ - { - "node": "Twist10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Twist10": { - "main": [ - [ - { - "node": "Twist11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Twist11": { - "main": [ - [ - { - "node": "Twist12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Twist13": { - "main": [ - [ - { - "node": "Twist18", - "type": "main", - "index": 0 - } - ] - ] - }, - "Twist14": { - "main": [ - [ - { - "node": "Twist15", - "type": "main", - "index": 0 - } - ] - ] - }, - "Twist15": { - "main": [ - [ - { - "node": "Twist17", - "type": "main", - "index": 0 - } - ] - ] - }, - "Twist16": { - "main": [ - [ - { - "node": "Twist1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Twist17": { - "main": [ - [ - { - "node": "Twist16", - "type": "main", - "index": 0 - } - ] - ] - }, - "Twist18": { - "main": [ - [ - { - "node": "Twist19", - "type": "main", - "index": 0 - } - ] - ] - }, - "Twist19": { - "main": [ - [ - { - "node": "Twist20", - "type": "main", - "index": 0 - } - ] - ] - }, - "Twist20": { - "main": [ - [ - { - "node": "Twist21", - "type": "main", - "index": 0 - } - ] - ] - }, - "Twist21": { - "main": [ - [ - { - "node": "Twist22", - "type": "main", - "index": 0 - } - ] - ] - }, - "Twist22": { - "main": [ - [ - { - "node": "Twist14", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/68.json b/test-workflows/workflows/68.json deleted file mode 100644 index f1ef09ab267..00000000000 --- a/test-workflows/workflows/68.json +++ /dev/null @@ -1,129 +0,0 @@ -{ - "createdAt": "2021-02-25T12:44:44.483Z", - "updatedAt": "2021-02-25T12:44:52.927Z", - "id": "68", - "name": "CircleCI:Pipeline:getAll get trigger", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "ccd210e8-4155-4e27-bcda-8ecde0543afe" - }, - { - "parameters": { - "operation": "getAll", - "vcs": "github", - "projectSlug": "nodemationqa/nodeQA", - "limit": 1, - "filters": {} - }, - "name": "CircleCI", - "type": "n8n-nodes-base.circleCi", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "circleCiApi": { - "id": "59", - "name": "CircleCI creds" - } - }, - "id": "72b39f65-9aef-4dd2-9887-a68e247e5c0d" - }, - { - "parameters": { - "vcs": "github", - "projectSlug": "nodemationqa/nodeQA" - }, - "name": "CircleCI1", - "type": "n8n-nodes-base.circleCi", - "typeVersion": 1, - "position": [ - 600, - 300 - ], - "credentials": { - "circleCiApi": { - "id": "59", - "name": "CircleCI creds" - } - }, - "id": "094f3916-c071-47af-9d66-d54d88a826ff" - }, - { - "parameters": { - "operation": "trigger", - "vcs": "github", - "projectSlug": "nodemationqa/nodeQA", - "additionalFields": { - "branch": "main" - } - }, - "name": "CircleCI2", - "type": "n8n-nodes-base.circleCi", - "typeVersion": 1, - "position": [ - 750, - 300 - ], - "credentials": { - "circleCiApi": { - "id": "59", - "name": "CircleCI creds" - } - }, - "id": "eeb564f3-d08d-4fdb-8c7a-19937bcb2817" - } - ], - "connections": { - "CircleCI": { - "main": [ - [ - { - "node": "CircleCI1", - "type": "main", - "index": 0 - } - ] - ] - }, - "CircleCI1": { - "main": [ - [ - { - "node": "CircleCI2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "CircleCI", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/69.json b/test-workflows/workflows/69.json deleted file mode 100644 index ff12c491bdc..00000000000 --- a/test-workflows/workflows/69.json +++ /dev/null @@ -1,255 +0,0 @@ -{ - "createdAt": "2021-02-25T13:03:37.942Z", - "updatedAt": "2021-07-14T13:44:25.847Z", - "id": "69", - "name": "CoinGecko:Coin:get getAll history candlesick market marketChart price ticker:Event:getAll", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 230, - 430 - ], - "id": "a288470d-d151-4273-a50d-31c76cd1a2ce" - }, - { - "parameters": { - "resource": "event", - "limit": 1, - "options": { - "upcoming_events_only": false - } - }, - "name": "CoinGecko", - "type": "n8n-nodes-base.coinGecko", - "typeVersion": 1, - "position": [ - 400, - 290 - ], - "notes": "CAP_RESULTS_LENGTH=1", - "id": "b3b33313-3b7b-4569-aec4-77854b0c1980" - }, - { - "parameters": { - "limit": 1 - }, - "name": "CoinGecko1", - "type": "n8n-nodes-base.coinGecko", - "typeVersion": 1, - "position": [ - 400, - 550 - ], - "alwaysOutputData": true, - "id": "e8e650b8-2122-4974-ba3e-74889528cd74" - }, - { - "parameters": { - "operation": "history", - "coinId": "bitcoin", - "date": "2021-02-24T23:00:00.000Z", - "options": { - "localization": false - } - }, - "name": "CoinGecko2", - "type": "n8n-nodes-base.coinGecko", - "typeVersion": 1, - "position": [ - 770, - 330 - ], - "alwaysOutputData": true, - "id": "725e7306-f2dc-4c05-b6d8-ed75a394953b" - }, - { - "parameters": { - "operation": "get", - "coinId": "bitcoin", - "options": { - "localization": false - } - }, - "name": "CoinGecko3", - "type": "n8n-nodes-base.coinGecko", - "typeVersion": 1, - "position": [ - 630, - 330 - ], - "alwaysOutputData": true, - "id": "635e5c09-c4ca-4c05-ae93-7613f12c608a" - }, - { - "parameters": { - "operation": "candlestick", - "baseCurrency": "bitcoin", - "quoteCurrency": "eur", - "days": "1" - }, - "name": "CoinGecko4", - "type": "n8n-nodes-base.coinGecko", - "typeVersion": 1, - "position": [ - 910, - 330 - ], - "alwaysOutputData": true, - "notes": "CAP_RESULTS_LENGTH=1", - "id": "54fc5a2b-34a8-4f41-a9dc-b4b156b2448f" - }, - { - "parameters": { - "operation": "market", - "baseCurrency": "btc", - "limit": 1, - "options": {} - }, - "name": "CoinGecko5", - "type": "n8n-nodes-base.coinGecko", - "typeVersion": 1, - "position": [ - 630, - 480 - ], - "id": "43972652-a7ac-4eb2-92b3-d5ea6328b135" - }, - { - "parameters": { - "operation": "marketChart", - "baseCurrency": "oxbitcoin", - "quoteCurrency": "btc", - "days": "1" - }, - "name": "CoinGecko6", - "type": "n8n-nodes-base.coinGecko", - "typeVersion": 1, - "position": [ - 630, - 630 - ], - "notes": "CAP_RESULTS_LENGTH=1", - "id": "857b16d9-deab-4a5c-9d6d-d79f83cc566e" - }, - { - "parameters": { - "operation": "price", - "baseCurrencies": [ - "ethereum-classic" - ], - "quoteCurrencies": [ - "btc" - ], - "options": {} - }, - "name": "CoinGecko7", - "type": "n8n-nodes-base.coinGecko", - "typeVersion": 1, - "position": [ - 630, - 780 - ], - "id": "c6d8a963-5bac-4841-a612-3d21b6ea71b6" - }, - { - "parameters": { - "operation": "ticker", - "coinId": "bitcoin", - "limit": 1, - "options": {} - }, - "name": "CoinGecko8", - "type": "n8n-nodes-base.coinGecko", - "typeVersion": 1, - "position": [ - 630, - 930 - ], - "notes": "IGNORED_PROPERTIES=target_coin_id", - "id": "16097486-6aaf-476a-8c93-8bfbbd25b056" - } - ], - "connections": { - "CoinGecko1": { - "main": [ - [ - { - "node": "CoinGecko3", - "type": "main", - "index": 0 - }, - { - "node": "CoinGecko5", - "type": "main", - "index": 0 - }, - { - "node": "CoinGecko6", - "type": "main", - "index": 0 - }, - { - "node": "CoinGecko7", - "type": "main", - "index": 0 - }, - { - "node": "CoinGecko8", - "type": "main", - "index": 0 - } - ] - ] - }, - "CoinGecko3": { - "main": [ - [ - { - "node": "CoinGecko2", - "type": "main", - "index": 0 - } - ] - ] - }, - "CoinGecko2": { - "main": [ - [ - { - "node": "CoinGecko4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "CoinGecko1", - "type": "main", - "index": 0 - }, - { - "node": "CoinGecko", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/70.json b/test-workflows/workflows/70.json deleted file mode 100644 index d32fbd88e26..00000000000 --- a/test-workflows/workflows/70.json +++ /dev/null @@ -1,228 +0,0 @@ -{ - "createdAt": "2021-02-25T13:38:22.940Z", - "updatedAt": "2021-02-25T13:38:22.940Z", - "id": "70", - "name": "Contentful-delivery-api:locale:getAll:entry:getAll:ContentType:get:Asset:getAll get:Space:get", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 260, - 390 - ], - "id": "92fcb1c3-e481-4350-910b-99de6956a87d" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "additionalFields": { - "content_type": "blogPost" - } - }, - "name": "Contentful", - "type": "n8n-nodes-base.contentful", - "typeVersion": 1, - "position": [ - 550, - 250 - ], - "credentials": { - "contentfulApi": { - "id": "47", - "name": "Contenful creds" - } - }, - "id": "e85d9486-96dc-4f89-9ab6-b0b91b1968df" - }, - { - "parameters": { - "resource": "contentType", - "contentTypeId": "blogPost", - "additionalFields": {} - }, - "name": "Contentful1", - "type": "n8n-nodes-base.contentful", - "typeVersion": 1, - "position": [ - 550, - 420 - ], - "credentials": { - "contentfulApi": { - "id": "47", - "name": "Contenful creds" - } - }, - "id": "4958d8ff-37dd-4086-a90b-fcf608a48d26" - }, - { - "parameters": { - "resource": "asset", - "limit": 1, - "additionalFields": {} - }, - "name": "Contentful2", - "type": "n8n-nodes-base.contentful", - "typeVersion": 1, - "position": [ - 550, - 570 - ], - "credentials": { - "contentfulApi": { - "id": "47", - "name": "Contenful creds" - } - }, - "id": "4dabb763-4379-4d65-b484-0dc528535896" - }, - { - "parameters": { - "resource": "asset", - "operation": "get", - "assetId": "5UvpPFo279OoVXHLRXqlo9" - }, - "name": "Contentful3", - "type": "n8n-nodes-base.contentful", - "typeVersion": 1, - "position": [ - 700, - 570 - ], - "credentials": { - "contentfulApi": { - "id": "47", - "name": "Contenful creds" - } - }, - "disabled": true, - "id": "cd08d703-328c-4f6e-a0e5-5681f2aa208a" - }, - { - "parameters": { - "entryId": "={{$node[\"Contentful\"].json[\"author\"][\"sys\"][\"id\"]}}" - }, - "name": "Contentful4", - "type": "n8n-nodes-base.contentful", - "typeVersion": 1, - "position": [ - 700, - 250 - ], - "credentials": { - "contentfulApi": { - "id": "47", - "name": "Contenful creds" - } - }, - "disabled": true, - "id": "f53c8f63-386c-491a-b5f9-119f27aaa421" - }, - { - "parameters": { - "resource": "locale", - "limit": 1 - }, - "name": "Contentful5", - "type": "n8n-nodes-base.contentful", - "typeVersion": 1, - "position": [ - 550, - 100 - ], - "credentials": { - "contentfulApi": { - "id": "47", - "name": "Contenful creds" - } - }, - "id": "429edf92-f2cf-4897-ba31-9413f57b0a46" - }, - { - "parameters": { - "resource": "space" - }, - "name": "Contentful6", - "type": "n8n-nodes-base.contentful", - "typeVersion": 1, - "position": [ - 550, - 730 - ], - "credentials": { - "contentfulApi": { - "id": "47", - "name": "Contenful creds" - } - }, - "id": "36e76b3d-fb38-4abe-a4b9-81c8604f87f8" - } - ], - "connections": { - "Contentful": { - "main": [ - [ - { - "node": "Contentful4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Contentful2": { - "main": [ - [ - { - "node": "Contentful3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Contentful5", - "type": "main", - "index": 0 - }, - { - "node": "Contentful", - "type": "main", - "index": 0 - }, - { - "node": "Contentful1", - "type": "main", - "index": 0 - }, - { - "node": "Contentful2", - "type": "main", - "index": 0 - }, - { - "node": "Contentful6", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/71.json b/test-workflows/workflows/71.json deleted file mode 100644 index b3a25cd4c49..00000000000 --- a/test-workflows/workflows/71.json +++ /dev/null @@ -1,235 +0,0 @@ -{ - "createdAt": "2021-02-25T13:44:10.456Z", - "updatedAt": "2021-02-25T13:44:14.960Z", - "id": "71", - "name": "Contentful-preview-api:locale:getAll:entry:getAll:ContentType:get:Asset:getAll get:Space:get", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 300, - 450 - ], - "id": "b4ecfdaf-3dd8-4462-a893-00fcf0965acb" - }, - { - "parameters": { - "source": "previewApi", - "operation": "getAll", - "limit": 1, - "additionalFields": { - "content_type": "blogPost" - } - }, - "name": "Contentful", - "type": "n8n-nodes-base.contentful", - "typeVersion": 1, - "position": [ - 510, - 130 - ], - "credentials": { - "contentfulApi": { - "id": "47", - "name": "Contenful creds" - } - }, - "id": "6f0e510a-f47b-406b-a3e4-50160a3837f8" - }, - { - "parameters": { - "source": "previewApi", - "resource": "contentType", - "contentTypeId": "blogPost", - "additionalFields": {} - }, - "name": "Contentful1", - "type": "n8n-nodes-base.contentful", - "typeVersion": 1, - "position": [ - 510, - 450 - ], - "credentials": { - "contentfulApi": { - "id": "47", - "name": "Contenful creds" - } - }, - "id": "f667eb16-7c5e-42a8-b94a-465a0c17de0a" - }, - { - "parameters": { - "source": "previewApi", - "resource": "asset", - "limit": 1, - "additionalFields": {} - }, - "name": "Contentful2", - "type": "n8n-nodes-base.contentful", - "typeVersion": 1, - "position": [ - 510, - 300 - ], - "credentials": { - "contentfulApi": { - "id": "47", - "name": "Contenful creds" - } - }, - "id": "9b9910ed-bcbb-4126-8625-d5599ff716a3" - }, - { - "parameters": { - "source": "previewApi", - "resource": "asset", - "operation": "get", - "assetId": "5UvpPFo279OoVXHLRXqlo9" - }, - "name": "Contentful3", - "type": "n8n-nodes-base.contentful", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "credentials": { - "contentfulApi": { - "id": "47", - "name": "Contenful creds" - } - }, - "disabled": true, - "id": "0c26e50d-0829-41dc-8477-b93a812ff7cd" - }, - { - "parameters": { - "source": "previewApi", - "entryId": "={{$node[\"Contentful\"].json[\"author\"][\"sys\"][\"id\"]}}" - }, - "name": "Contentful4", - "type": "n8n-nodes-base.contentful", - "typeVersion": 1, - "position": [ - 660, - 130 - ], - "credentials": { - "contentfulApi": { - "id": "47", - "name": "Contenful creds" - } - }, - "disabled": true, - "id": "c6c48d22-6a1f-4c2c-82eb-2c7c0a43d3e6" - }, - { - "parameters": { - "source": "previewApi", - "resource": "locale", - "limit": 1 - }, - "name": "Contentful5", - "type": "n8n-nodes-base.contentful", - "typeVersion": 1, - "position": [ - 510, - 750 - ], - "credentials": { - "contentfulApi": { - "id": "47", - "name": "Contenful creds" - } - }, - "id": "0ff365a7-b88e-4bc2-965f-4198dc2287ca" - }, - { - "parameters": { - "source": "previewApi", - "resource": "space" - }, - "name": "Contentful6", - "type": "n8n-nodes-base.contentful", - "typeVersion": 1, - "position": [ - 510, - 610 - ], - "credentials": { - "contentfulApi": { - "id": "47", - "name": "Contenful creds" - } - }, - "id": "43ab9aa7-dcef-416b-92fc-690040a35086" - } - ], - "connections": { - "Contentful": { - "main": [ - [ - { - "node": "Contentful4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Contentful2": { - "main": [ - [ - { - "node": "Contentful3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Contentful1", - "type": "main", - "index": 0 - }, - { - "node": "Contentful", - "type": "main", - "index": 0 - }, - { - "node": "Contentful5", - "type": "main", - "index": 0 - }, - { - "node": "Contentful2", - "type": "main", - "index": 0 - }, - { - "node": "Contentful6", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/72.json b/test-workflows/workflows/72.json deleted file mode 100644 index 5a80032f381..00000000000 --- a/test-workflows/workflows/72.json +++ /dev/null @@ -1,589 +0,0 @@ -{ - "createdAt": "2021-02-25T14:32:07.257Z", - "updatedAt": "2021-11-12T13:03:17.136Z", - "id": "72", - "name": "Zulip:Message:sendPrivate update updateFile sendStream get delete:Stream:create getAll getSubscribed update delete:user:getAll get update", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 460 - ], - "id": "b29fb793-aa1e-4659-a887-a6444a072274" - }, - { - "parameters": { - "to": [ - "nodeqa@n8n.io" - ], - "content": "=Message {{Date.now()}}" - }, - "name": "Zulip", - "type": "n8n-nodes-base.zulip", - "typeVersion": 1, - "position": [ - 430, - 300 - ], - "credentials": { - "zulipApi": { - "id": "60", - "name": "Zulip creds" - } - }, - "id": "2eafb3ef-51ac-4153-ba65-f1c736be64f3" - }, - { - "parameters": { - "operation": "update", - "messageId": "={{$node[\"Zulip\"].json[\"id\"]}}", - "updateFields": { - "content": "=Update content {{Date.now()}}" - } - }, - "name": "Zulip1", - "type": "n8n-nodes-base.zulip", - "typeVersion": 1, - "position": [ - 590, - 300 - ], - "credentials": { - "zulipApi": { - "id": "60", - "name": "Zulip creds" - } - }, - "id": "70a21ba0-3781-4598-86c8-24fa97d813b2" - }, - { - "parameters": { - "operation": "sendStream", - "stream": 278954, - "topic": "topic demonstration", - "content": "Test Stream message {{Date.now()}}" - }, - "name": "Zulip2", - "type": "n8n-nodes-base.zulip", - "typeVersion": 1, - "position": [ - 740, - 300 - ], - "credentials": { - "zulipApi": { - "id": "60", - "name": "Zulip creds" - } - }, - "id": "b631cfd9-4085-4a3f-9898-f3a2dd6053cc" - }, - { - "parameters": { - "operation": "get", - "messageId": "={{$node[\"Zulip\"].json[\"id\"]}}" - }, - "name": "Zulip3", - "type": "n8n-nodes-base.zulip", - "typeVersion": 1, - "position": [ - 890, - 300 - ], - "credentials": { - "zulipApi": { - "id": "60", - "name": "Zulip creds" - } - }, - "id": "bbfcd095-ab13-47d0-8826-cad588bb4269" - }, - { - "parameters": { - "operation": "delete", - "messageId": "={{$node[\"Zulip\"].json[\"id\"]}}" - }, - "name": "Zulip4", - "type": "n8n-nodes-base.zulip", - "typeVersion": 1, - "position": [ - 1040, - 300 - ], - "credentials": { - "zulipApi": { - "id": "60", - "name": "Zulip creds" - } - }, - "id": "af456d26-456e-4c8a-9df4-4dd5a9bd4f66" - }, - { - "parameters": { - "operation": "delete", - "messageId": "={{$node[\"Zulip2\"].json[\"id\"]}}" - }, - "name": "Zulip5", - "type": "n8n-nodes-base.zulip", - "typeVersion": 1, - "position": [ - 1200, - 300 - ], - "credentials": { - "zulipApi": { - "id": "60", - "name": "Zulip creds" - } - }, - "id": "8167982f-4c29-4767-9b2f-4c41d3c1d6da" - }, - { - "parameters": { - "operation": "updateFile" - }, - "name": "Zulip6", - "type": "n8n-nodes-base.zulip", - "typeVersion": 1, - "position": [ - 590, - 470 - ], - "credentials": { - "zulipApi": { - "id": "60", - "name": "Zulip creds" - } - }, - "id": "27e360f0-add1-4478-b971-47cfaee55374" - }, - { - "parameters": { - "filePath": "/tmp/n8n-logo.png" - }, - "name": "Read Binary File", - "type": "n8n-nodes-base.readBinaryFile", - "typeVersion": 1, - "position": [ - 430, - 470 - ], - "id": "ca173086-6491-4487-a201-8e7b6ec08c3a" - }, - { - "parameters": { - "resource": "stream", - "subscriptions": { - "properties": [ - { - "name": "StreamTest", - "description": "testing stream from n8n" - } - ] - }, - "additionalFields": {} - }, - "name": "Zulip7", - "type": "n8n-nodes-base.zulip", - "typeVersion": 1, - "position": [ - 430, - 620 - ], - "credentials": { - "zulipApi": { - "id": "60", - "name": "Zulip creds" - } - }, - "id": "53b92b41-c256-45d1-af57-73cdc927e4ad" - }, - { - "parameters": { - "resource": "stream", - "operation": "getAll", - "additionalFields": { - "includeAllActive": false, - "includeDefault": false, - "includePublic": false - } - }, - "name": "Zulip8", - "type": "n8n-nodes-base.zulip", - "typeVersion": 1, - "position": [ - 600, - 620 - ], - "credentials": { - "zulipApi": { - "id": "60", - "name": "Zulip creds" - } - }, - "id": "95060b52-7fca-4fe6-89b7-3b95630d3876" - }, - { - "parameters": { - "resource": "stream", - "operation": "update", - "streamId": "={{$node[\"Function\"].json[\"stream_id\"]}}", - "additionalFields": { - "newName": "=UpdateStream{{Date.now()}}" - } - }, - "name": "Zulip9", - "type": "n8n-nodes-base.zulip", - "typeVersion": 1, - "position": [ - 910, - 620 - ], - "credentials": { - "zulipApi": { - "id": "60", - "name": "Zulip creds" - } - }, - "id": "afcf6e21-92b0-4b87-8de3-0fc7a309ab45" - }, - { - "parameters": { - "functionCode": "\nreturn [items[0]];" - }, - "name": "Function", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 750, - 620 - ], - "notesInFlow": true, - "notes": "Convert multiple result into one", - "id": "281d2d4f-d8d9-4b9f-a150-f8650775d89f" - }, - { - "parameters": { - "resource": "stream", - "operation": "getSubscribed", - "additionalFields": {} - }, - "name": "Zulip10", - "type": "n8n-nodes-base.zulip", - "typeVersion": 1, - "position": [ - 590, - 760 - ], - "credentials": { - "zulipApi": { - "id": "60", - "name": "Zulip creds" - } - }, - "id": "6193ce51-b480-44e4-ab58-4c4045432e7d" - }, - { - "parameters": { - "resource": "stream", - "operation": "delete", - "streamId": "={{$node[\"Function\"].json[\"stream_id\"]}}" - }, - "name": "Zulip11", - "type": "n8n-nodes-base.zulip", - "typeVersion": 1, - "position": [ - 1050, - 620 - ], - "credentials": { - "zulipApi": { - "id": "60", - "name": "Zulip creds" - } - }, - "id": "8922c332-3948-4b92-a947-b06327a7cc95" - }, - { - "parameters": { - "resource": "user", - "operation": "getAll", - "additionalFields": {} - }, - "name": "Zulip12", - "type": "n8n-nodes-base.zulip", - "typeVersion": 1, - "position": [ - 440, - 910 - ], - "credentials": { - "zulipApi": { - "id": "60", - "name": "Zulip creds" - } - }, - "id": "c2eb822b-4473-46ca-a70e-0ab4b7e59647" - }, - { - "parameters": { - "resource": "user", - "operation": "get", - "userId": "={{$node[\"Zulip12\"].json[\"user_id\"]}}", - "additionalFields": {} - }, - "name": "Zulip13", - "type": "n8n-nodes-base.zulip", - "typeVersion": 1, - "position": [ - 590, - 910 - ], - "credentials": { - "zulipApi": { - "id": "60", - "name": "Zulip creds" - } - }, - "id": "77661e37-ad74-4274-9bdb-c809305369a5" - }, - { - "parameters": { - "resource": "user", - "operation": "update", - "userId": "={{$node[\"Zulip12\"].json[\"user_id\"]}}", - "additionalFields": { - "fullName": "mario" - } - }, - "name": "Zulip14", - "type": "n8n-nodes-base.zulip", - "typeVersion": 1, - "position": [ - 750, - 910 - ], - "credentials": { - "zulipApi": { - "id": "60", - "name": "Zulip creds" - } - }, - "disabled": true, - "id": "cb5c1ade-b500-48a9-a572-08b57316739f" - }, - { - "parameters": { - "resource": "user", - "operation": "update", - "userId": "={{$node[\"Zulip12\"].json[\"user_id\"]}}", - "additionalFields": { - "fullName": "nodeqa" - } - }, - "name": "Zulip15", - "type": "n8n-nodes-base.zulip", - "typeVersion": 1, - "position": [ - 890, - 910 - ], - "credentials": { - "zulipApi": { - "id": "60", - "name": "Zulip creds" - } - }, - "disabled": true, - "id": "bd6174d3-edf6-438c-b60b-b18312458624" - } - ], - "connections": { - "Zulip": { - "main": [ - [ - { - "node": "Zulip1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Zulip1": { - "main": [ - [ - { - "node": "Zulip2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Zulip2": { - "main": [ - [ - { - "node": "Zulip3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Zulip3": { - "main": [ - [ - { - "node": "Zulip4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Zulip4": { - "main": [ - [ - { - "node": "Zulip5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Read Binary File": { - "main": [ - [ - { - "node": "Zulip6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Read Binary File", - "type": "main", - "index": 0 - }, - { - "node": "Zulip", - "type": "main", - "index": 0 - }, - { - "node": "Zulip7", - "type": "main", - "index": 0 - }, - { - "node": "Zulip12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Zulip7": { - "main": [ - [ - { - "node": "Zulip8", - "type": "main", - "index": 0 - }, - { - "node": "Zulip10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Zulip8": { - "main": [ - [ - { - "node": "Function", - "type": "main", - "index": 0 - } - ] - ] - }, - "Function": { - "main": [ - [ - { - "node": "Zulip9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Zulip9": { - "main": [ - [ - { - "node": "Zulip11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Zulip12": { - "main": [ - [ - { - "node": "Zulip13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Zulip13": { - "main": [ - [ - { - "node": "Zulip14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Zulip14": { - "main": [ - [ - { - "node": "Zulip15", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/73.json b/test-workflows/workflows/73.json deleted file mode 100644 index 459790ef77e..00000000000 --- a/test-workflows/workflows/73.json +++ /dev/null @@ -1,857 +0,0 @@ -{ - "createdAt": "2021-02-25T15:49:55.037Z", - "updatedAt": "2021-06-07T14:53:16.628Z", - "id": "73", - "name": "Youtube:Channel:get getAll update:Playlist:create update getAll get delete:PlaylistItem:add getAll get delete:videoCategory:getAll:Video:rate get upload update delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 310, - 550 - ], - "id": "2ee04975-ff22-40e0-a3a9-d2542266c3bf" - }, - { - "parameters": { - "limit": 1, - "filters": { - "id": "UCkdph8FDLpq2UD2i_OlwErA" - }, - "options": {} - }, - "name": "YouTube", - "type": "n8n-nodes-base.youTube", - "typeVersion": 1, - "position": [ - 800, - 300 - ], - "credentials": { - "youTubeOAuth2Api": { - "id": "62", - "name": "YouTube OAuth2 creds" - } - }, - "id": "8688bf50-6db1-432a-851e-fa4cb2f33439" - }, - { - "parameters": { - "operation": "get", - "channelId": "UCiHVTkJtWSdc9N3h0nUGWLg" - }, - "name": "YouTube1", - "type": "n8n-nodes-base.youTube", - "typeVersion": 1, - "position": [ - 500, - 300 - ], - "credentials": { - "youTubeOAuth2Api": { - "id": "62", - "name": "YouTube OAuth2 creds" - } - }, - "id": "18508d2b-7662-4eb0-bb2b-82eebcd49f11" - }, - { - "parameters": { - "operation": "update", - "channelId": "={{$node[\"YouTube\"].json[\"id\"]}}", - "updateFields": { - "brandingSettingsUi": { - "channelSettingsValues": { - "channel": { - "description": "=Update description {{Date.now()}}" - } - } - } - } - }, - "name": "YouTube2", - "type": "n8n-nodes-base.youTube", - "typeVersion": 1, - "position": [ - 950, - 300 - ], - "credentials": { - "youTubeOAuth2Api": { - "id": "62", - "name": "YouTube OAuth2 creds" - } - }, - "id": "83fcbb4e-5ce7-470d-8b11-8f02964774f6" - }, - { - "parameters": { - "operation": "uploadBanner", - "channelId": "UCkdph8FDLpq2UD2i_OlwErA" - }, - "name": "YouTube3", - "type": "n8n-nodes-base.youTube", - "typeVersion": 1, - "position": [ - 1250, - 300 - ], - "credentials": { - "youTubeOAuth2Api": { - "id": "62", - "name": "YouTube OAuth2 creds" - } - }, - "disabled": true, - "id": "94865deb-30fa-4250-8637-ce93c0bc12d7" - }, - { - "parameters": { - "resource": "playlist", - "operation": "create", - "title": "=Test{{Date.now()}}", - "options": {} - }, - "name": "YouTube4", - "type": "n8n-nodes-base.youTube", - "typeVersion": 1, - "position": [ - 500, - 450 - ], - "credentials": { - "youTubeOAuth2Api": { - "id": "62", - "name": "YouTube OAuth2 creds" - } - }, - "id": "ca4cb125-1083-4e44-a05a-76191b2c6dd4" - }, - { - "parameters": { - "resource": "playlist", - "operation": "update", - "playlistId": "={{$node[\"YouTube4\"].json[\"id\"]}}", - "title": "=UpdatePlaylist{{Date.now()}}", - "updateFields": {} - }, - "name": "YouTube5", - "type": "n8n-nodes-base.youTube", - "typeVersion": 1, - "position": [ - 800, - 450 - ], - "credentials": { - "youTubeOAuth2Api": { - "id": "62", - "name": "YouTube OAuth2 creds" - } - }, - "id": "55cdf544-6908-4fc8-afad-2752f2373a14" - }, - { - "parameters": { - "resource": "playlist", - "limit": 1, - "filters": {}, - "options": {} - }, - "name": "YouTube6", - "type": "n8n-nodes-base.youTube", - "typeVersion": 1, - "position": [ - 1860, - 450 - ], - "alwaysOutputData": true, - "credentials": { - "youTubeOAuth2Api": { - "id": "62", - "name": "YouTube OAuth2 creds" - } - }, - "id": "7275ae09-2a2b-4a79-8a11-6b37b51c3426" - }, - { - "parameters": { - "resource": "playlistItem", - "playlistId": "={{$node[\"YouTube4\"].json[\"id\"]}}", - "videoId": "sJO3b0WXm8I", - "options": {} - }, - "name": "YouTube9", - "type": "n8n-nodes-base.youTube", - "typeVersion": 1, - "position": [ - 950, - 550 - ], - "credentials": { - "youTubeOAuth2Api": { - "id": "62", - "name": "YouTube OAuth2 creds" - } - }, - "id": "ed7dcec9-c5d5-4627-a859-0475ab304c88" - }, - { - "parameters": { - "resource": "playlistItem", - "operation": "getAll", - "playlistId": "={{$node[\"YouTube4\"].json[\"id\"]}}", - "part": [ - "id", - "status", - "contentDetails" - ], - "limit": 1, - "options": {} - }, - "name": "YouTube10", - "type": "n8n-nodes-base.youTube", - "typeVersion": 1, - "position": [ - 1250, - 550 - ], - "credentials": { - "youTubeOAuth2Api": { - "id": "62", - "name": "YouTube OAuth2 creds" - } - }, - "id": "c02c85b3-59e4-4fcf-ad40-1fd9cad8c2f7" - }, - { - "parameters": { - "resource": "playlistItem", - "operation": "get", - "playlistItemId": "={{$node[\"YouTube9\"].json[\"id\"]}}", - "part": [ - "contentDetails", - "id", - "status" - ], - "options": {} - }, - "name": "YouTube11", - "type": "n8n-nodes-base.youTube", - "typeVersion": 1, - "position": [ - 1400, - 550 - ], - "credentials": { - "youTubeOAuth2Api": { - "id": "62", - "name": "YouTube OAuth2 creds" - } - }, - "id": "13002ca6-7817-41c3-b1fe-0d078c8e82f9" - }, - { - "parameters": { - "resource": "playlistItem", - "operation": "delete", - "playlistItemId": "={{$node[\"YouTube9\"].json[\"id\"]}}", - "options": {} - }, - "name": "YouTube12", - "type": "n8n-nodes-base.youTube", - "typeVersion": 1, - "position": [ - 1700, - 550 - ], - "credentials": { - "youTubeOAuth2Api": { - "id": "62", - "name": "YouTube OAuth2 creds" - } - }, - "id": "b0e8f742-b143-4eab-b227-482b3f772e3e" - }, - { - "parameters": { - "resource": "video", - "operation": "rate", - "videoId": "sJO3b0WXm8I", - "rating": "like" - }, - "name": "YouTube13", - "type": "n8n-nodes-base.youTube", - "typeVersion": 1, - "position": [ - 500, - 800 - ], - "credentials": { - "youTubeOAuth2Api": { - "id": "62", - "name": "YouTube OAuth2 creds" - } - }, - "id": "c13bc29b-3e16-4d0b-ba98-24156e1d64b0" - }, - { - "parameters": { - "resource": "video", - "operation": "get", - "videoId": "sJO3b0WXm8I", - "part": [ - "status", - "id", - "snippet" - ], - "options": {} - }, - "name": "YouTube14", - "type": "n8n-nodes-base.youTube", - "typeVersion": 1, - "position": [ - 800, - 800 - ], - "credentials": { - "youTubeOAuth2Api": { - "id": "62", - "name": "YouTube OAuth2 creds" - } - }, - "id": "dd846141-f074-41a3-b9f0-4e32ec04639e" - }, - { - "parameters": { - "resource": "video", - "operation": "upload", - "title": "Earth spin", - "regionCode": "DE", - "categoryId": "27", - "options": {} - }, - "name": "YouTube15", - "type": "n8n-nodes-base.youTube", - "typeVersion": 1, - "position": [ - 1250, - 800 - ], - "credentials": { - "youTubeOAuth2Api": { - "id": "62", - "name": "YouTube OAuth2 creds" - } - }, - "disabled": true, - "id": "4bd4cca1-e76c-4889-b5df-5d2eefe7d74c" - }, - { - "parameters": { - "url": "https://file-examples-com.github.io/uploads/2017/04/file_example_MP4_480_1_5MG.mp4", - "responseFormat": "file", - "options": {} - }, - "name": "HTTP Request", - "type": "n8n-nodes-base.httpRequest", - "typeVersion": 1, - "position": [ - 950, - 800 - ], - "disabled": true, - "id": "b78b84af-4759-42b8-812a-af46ab04d6fb" - }, - { - "parameters": { - "resource": "video", - "operation": "update", - "videoId": "={{$node[\"YouTube15\"].json[\"id\"]}}", - "title": "=Updated Earth spin", - "regionCode": "DE", - "categoryId": "27", - "updateFields": {} - }, - "name": "YouTube16", - "type": "n8n-nodes-base.youTube", - "typeVersion": 1, - "position": [ - 1400, - 800 - ], - "credentials": { - "youTubeOAuth2Api": { - "id": "62", - "name": "YouTube OAuth2 creds" - } - }, - "disabled": true, - "id": "cdb2885f-ab9a-41b1-8e84-071aa040e91a" - }, - { - "parameters": { - "resource": "video", - "operation": "delete", - "videoId": "={{$node[\"YouTube15\"].json[\"id\"]}}", - "options": {} - }, - "name": "YouTube17", - "type": "n8n-nodes-base.youTube", - "typeVersion": 1, - "position": [ - 1690, - 800 - ], - "credentials": { - "youTubeOAuth2Api": { - "id": "62", - "name": "YouTube OAuth2 creds" - } - }, - "disabled": true, - "id": "15ebb1e6-b8f5-458c-803a-ddd62105b07c" - }, - { - "parameters": { - "resource": "videoCategory", - "regionCode": "DE", - "limit": 1 - }, - "name": "YouTube18", - "type": "n8n-nodes-base.youTube", - "typeVersion": 1, - "position": [ - 500, - 630 - ], - "credentials": { - "youTubeOAuth2Api": { - "id": "62", - "name": "YouTube OAuth2 creds" - } - }, - "id": "8ec4326f-f615-4acd-bedf-7d138051058a" - }, - { - "parameters": { - "filePath": "/tmp/n8n-logo.png" - }, - "name": "Read Binary File", - "type": "n8n-nodes-base.readBinaryFile", - "typeVersion": 1, - "position": [ - 1100, - 300 - ], - "disabled": true, - "id": "01e62fe7-5350-4def-9640-18171cbde303" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second", - "type": "n8n-nodes-base.function", - "position": [ - 650, - 300 - ], - "typeVersion": 1, - "id": "bea9b966-028f-4891-892b-30415cb38452" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second1", - "type": "n8n-nodes-base.function", - "position": [ - 650, - 450 - ], - "typeVersion": 1, - "id": "74460a7d-956c-4a9c-8357-de6b2d1e6076" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second2", - "type": "n8n-nodes-base.function", - "position": [ - 1100, - 550 - ], - "typeVersion": 1, - "id": "a565a893-fdb1-45f5-96b9-846146a10c14" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second3", - "type": "n8n-nodes-base.function", - "position": [ - 1550, - 550 - ], - "typeVersion": 1, - "id": "4659b2a6-7c8d-4290-9f57-b17e9c566c50" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second4", - "type": "n8n-nodes-base.function", - "position": [ - 650, - 800 - ], - "typeVersion": 1, - "id": "15cca754-b296-4cb5-93d1-efd315175e9e" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second5", - "type": "n8n-nodes-base.function", - "position": [ - 1110, - 800 - ], - "typeVersion": 1, - "disabled": true, - "id": "caf5b31c-9e80-4796-8ded-c9e1401adbd8" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(500);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.5 second6", - "type": "n8n-nodes-base.function", - "position": [ - 1550, - 800 - ], - "typeVersion": 1, - "disabled": true, - "id": "8b08f732-62ba-48d3-980b-30b225c6a029" - }, - { - "parameters": { - "resource": "playlist", - "operation": "delete", - "playlistId": "={{$node[\"YouTube4\"].json[\"id\"]}}", - "options": {} - }, - "name": "YouTube7", - "type": "n8n-nodes-base.youTube", - "typeVersion": 1, - "position": [ - 2030, - 450 - ], - "credentials": { - "youTubeOAuth2Api": { - "id": "62", - "name": "YouTube OAuth2 creds" - } - }, - "id": "2b8b1d2f-5864-481d-a735-700380ccb2ea" - } - ], - "connections": { - "YouTube": { - "main": [ - [ - { - "node": "YouTube2", - "type": "main", - "index": 0 - } - ] - ] - }, - "YouTube1": { - "main": [ - [ - { - "node": "Sleep 0.5 second", - "type": "main", - "index": 0 - } - ] - ] - }, - "YouTube4": { - "main": [ - [ - { - "node": "Sleep 0.5 second1", - "type": "main", - "index": 0 - } - ] - ] - }, - "YouTube5": { - "main": [ - [ - { - "node": "YouTube9", - "type": "main", - "index": 0 - } - ] - ] - }, - "YouTube6": { - "main": [ - [ - { - "node": "YouTube7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "YouTube13", - "type": "main", - "index": 0 - }, - { - "node": "YouTube18", - "type": "main", - "index": 0 - }, - { - "node": "YouTube4", - "type": "main", - "index": 0 - }, - { - "node": "YouTube1", - "type": "main", - "index": 0 - } - ] - ] - }, - "YouTube9": { - "main": [ - [ - { - "node": "Sleep 0.5 second2", - "type": "main", - "index": 0 - } - ] - ] - }, - "YouTube10": { - "main": [ - [ - { - "node": "YouTube11", - "type": "main", - "index": 0 - } - ] - ] - }, - "YouTube11": { - "main": [ - [ - { - "node": "Sleep 0.5 second3", - "type": "main", - "index": 0 - } - ] - ] - }, - "YouTube12": { - "main": [ - [ - { - "node": "YouTube6", - "type": "main", - "index": 0 - } - ] - ] - }, - "YouTube13": { - "main": [ - [ - { - "node": "Sleep 0.5 second4", - "type": "main", - "index": 0 - } - ] - ] - }, - "HTTP Request": { - "main": [ - [ - { - "node": "Sleep 0.5 second5", - "type": "main", - "index": 0 - } - ] - ] - }, - "YouTube14": { - "main": [ - [ - { - "node": "HTTP Request", - "type": "main", - "index": 0 - } - ] - ] - }, - "YouTube15": { - "main": [ - [ - { - "node": "YouTube16", - "type": "main", - "index": 0 - } - ] - ] - }, - "YouTube16": { - "main": [ - [ - { - "node": "Sleep 0.5 second6", - "type": "main", - "index": 0 - } - ] - ] - }, - "YouTube2": { - "main": [ - [ - { - "node": "Read Binary File", - "type": "main", - "index": 0 - } - ] - ] - }, - "Read Binary File": { - "main": [ - [ - { - "node": "YouTube3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second": { - "main": [ - [ - { - "node": "YouTube", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second1": { - "main": [ - [ - { - "node": "YouTube5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second2": { - "main": [ - [ - { - "node": "YouTube10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second3": { - "main": [ - [ - { - "node": "YouTube12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second4": { - "main": [ - [ - { - "node": "YouTube14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second5": { - "main": [ - [ - { - "node": "YouTube15", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.5 second6": { - "main": [ - [ - { - "node": "YouTube17", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/74.json b/test-workflows/workflows/74.json deleted file mode 100644 index c841426c363..00000000000 --- a/test-workflows/workflows/74.json +++ /dev/null @@ -1,160 +0,0 @@ -{ - "createdAt": "2021-02-26T08:35:26.228Z", - "updatedAt": "2021-02-26T08:37:00.970Z", - "id": "74", - "name": "E-goi:Contact:create get getAll update", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "dc6a5a64-8c22-4032-aace-0dea668a571c" - }, - { - "parameters": { - "list": 1, - "email": "=fake{{Date.now()}}@gmail.com", - "additionalFields": {} - }, - "name": "E-goi", - "type": "n8n-nodes-base.egoi", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "egoiApi": { - "id": "63", - "name": "E-goi creds" - } - }, - "id": "25e5ee3b-abfb-427f-afc3-55b27e204f17" - }, - { - "parameters": { - "operation": "get", - "list": 1, - "contactId": "={{$node[\"E-goi\"].json[\"base\"][\"contact_id\"]}}" - }, - "name": "E-goi1", - "type": "n8n-nodes-base.egoi", - "typeVersion": 1, - "position": [ - 600, - 300 - ], - "credentials": { - "egoiApi": { - "id": "63", - "name": "E-goi creds" - } - }, - "id": "13e4101f-896b-4786-b9b7-ac5a31ad06f5" - }, - { - "parameters": { - "operation": "getAll", - "list": 1, - "limit": 1 - }, - "name": "E-goi2", - "type": "n8n-nodes-base.egoi", - "typeVersion": 1, - "position": [ - 750, - 300 - ], - "credentials": { - "egoiApi": { - "id": "63", - "name": "E-goi creds" - } - }, - "id": "39aa7752-aa1b-4db5-b1ed-988fa169b544" - }, - { - "parameters": { - "operation": "update", - "list": 1, - "contactId": "={{$node[\"E-goi\"].json[\"base\"][\"contact_id\"]}}", - "updateFields": { - "status": "inactive" - } - }, - "name": "E-goi3", - "type": "n8n-nodes-base.egoi", - "typeVersion": 1, - "position": [ - 900, - 300 - ], - "credentials": { - "egoiApi": { - "id": "63", - "name": "E-goi creds" - } - }, - "id": "d9cf87e8-dff7-4b74-adbf-8bdf5c22f541" - } - ], - "connections": { - "E-goi": { - "main": [ - [ - { - "node": "E-goi1", - "type": "main", - "index": 0 - } - ] - ] - }, - "E-goi1": { - "main": [ - [ - { - "node": "E-goi2", - "type": "main", - "index": 0 - } - ] - ] - }, - "E-goi2": { - "main": [ - [ - { - "node": "E-goi3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "E-goi", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/75.json b/test-workflows/workflows/75.json deleted file mode 100644 index 2465c014eb2..00000000000 --- a/test-workflows/workflows/75.json +++ /dev/null @@ -1,574 +0,0 @@ -{ - "createdAt": "2021-02-26T09:26:39.448Z", - "updatedAt": "2021-02-26T10:58:10.897Z", - "id": "75", - "name": "Harvest:Client:create update getAll get delete:Invoice:create update getAll get delete:Contact:create update get getAll delete:Company:get", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 150, - 300 - ], - "id": "2e356688-aa17-4377-99a8-85bdf89f4804" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "client", - "accountId": 1416330, - "operation": "create", - "name": "=Client{{Date.now()}}", - "additionalFields": {} - }, - "name": "Harvest", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 400, - 230 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "9dff6c6e-f6e9-4754-9dd5-b68c3adf590f" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "client", - "accountId": 1416330, - "operation": "update", - "id": "={{$node[\"Harvest\"].json[\"id\"]}}", - "updateFields": { - "name": "=UpdatedClient{{Date.now()}}" - } - }, - "name": "Harvest1", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 1310, - 230 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "239a0f84-f452-4d2b-b208-3024f68e2104" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "client", - "accountId": 1416330, - "limit": 1, - "filters": {} - }, - "name": "Harvest2", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 1460, - 230 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "fb51704a-377b-4d9b-ad37-0f7dfac320c2" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "client", - "accountId": 1416330, - "operation": "get", - "id": "={{$node[\"Harvest\"].json[\"id\"]}}" - }, - "name": "Harvest3", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 1610, - 230 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "b1c22046-82ed-41a2-961b-fc2fc864a23c" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "client", - "accountId": 1416330, - "operation": "delete", - "id": "={{$node[\"Harvest\"].json[\"id\"]}}" - }, - "name": "Harvest4", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 1760, - 230 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "5b049ab1-8091-4a1c-94b9-57b2239cfacf" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "company", - "accountId": 1416330 - }, - "name": "Harvest5", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 400, - 440 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "7119f466-ef7a-4ced-bef5-8deefbab4c79" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "contact", - "accountId": 1416330, - "operation": "create", - "firstName": "=FirstName{{Date.now()}}", - "clientId": "={{$node[\"Harvest\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Harvest6", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 550, - 300 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "51db9f70-0f68-4722-8ebc-3edf8f342f47" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "contact", - "accountId": 1416330, - "operation": "update", - "id": "={{$node[\"Harvest6\"].json[\"id\"]}}", - "updateFields": { - "first_name": "=FirstNameUpdated{{Date.now()}}" - } - }, - "name": "Harvest7", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 700, - 300 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "ee3d8921-fe23-4feb-a70b-6695cb2271cb" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "contact", - "accountId": 1416330, - "operation": "get", - "id": "={{$node[\"Harvest6\"].json[\"id\"]}}" - }, - "name": "Harvest8", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 850, - 300 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "e585c5d8-71f7-433a-ae83-70e0a24bed2d" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "contact", - "accountId": 1416330, - "limit": 1, - "filters": {} - }, - "name": "Harvest9", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 1000, - 300 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "e113e7b0-c8c2-4f11-a767-462b6a519c5c" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "contact", - "accountId": 1416330, - "operation": "delete", - "id": "={{$node[\"Harvest6\"].json[\"id\"]}}" - }, - "name": "Harvest10", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 1150, - 300 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "7820c685-f762-4f66-b602-e20e4dda437a" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "invoice", - "accountId": 1416330, - "operation": "create", - "clientId": "={{$node[\"Harvest\"].json[\"id\"]}}", - "additionalFields": { - "subject": "=Subject{{Date.now()}}" - } - }, - "name": "Harvest11", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 550, - 140 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "6ffb33ca-58ba-456b-a9ac-d33f3f2e2eee" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "invoice", - "accountId": 1416330, - "operation": "update", - "id": "={{$node[\"Harvest11\"].json[\"id\"]}}", - "updateFields": { - "subject": "=UpdatedSubject{{Date.now()}}" - } - }, - "name": "Harvest12", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 700, - 140 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "bb9bb3dc-ca74-4572-8c44-7bcaca67bd52" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "invoice", - "accountId": 1416330, - "limit": 1, - "filters": {} - }, - "name": "Harvest13", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 850, - 140 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "fd41f71c-0899-4887-ab85-8ba208e60b55" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "invoice", - "accountId": 1416330, - "operation": "get", - "id": "={{$node[\"Harvest11\"].json[\"id\"]}}" - }, - "name": "Harvest14", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 1000, - 140 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "0b68daaf-464e-4e04-bdca-3b67ad74b33e" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "invoice", - "accountId": 1416330, - "operation": "delete", - "id": "={{$node[\"Harvest11\"].json[\"id\"]}}" - }, - "name": "Harvest15", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 1150, - 140 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "270d7f79-c97f-4e4e-a0b7-596635eabf8c" - } - ], - "connections": { - "Harvest": { - "main": [ - [ - { - "node": "Harvest11", - "type": "main", - "index": 0 - }, - { - "node": "Harvest6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest1": { - "main": [ - [ - { - "node": "Harvest2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest2": { - "main": [ - [ - { - "node": "Harvest3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest3": { - "main": [ - [ - { - "node": "Harvest4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Harvest", - "type": "main", - "index": 0 - }, - { - "node": "Harvest5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest6": { - "main": [ - [ - { - "node": "Harvest7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest7": { - "main": [ - [ - { - "node": "Harvest8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest8": { - "main": [ - [ - { - "node": "Harvest9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest9": { - "main": [ - [ - { - "node": "Harvest10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest10": { - "main": [ - [ - { - "node": "Harvest1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest11": { - "main": [ - [ - { - "node": "Harvest12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest12": { - "main": [ - [ - { - "node": "Harvest13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest13": { - "main": [ - [ - { - "node": "Harvest14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest14": { - "main": [ - [ - { - "node": "Harvest15", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/76.json b/test-workflows/workflows/76.json deleted file mode 100644 index 9c9dfeca29f..00000000000 --- a/test-workflows/workflows/76.json +++ /dev/null @@ -1,836 +0,0 @@ -{ - "createdAt": "2021-02-26T09:54:20.362Z", - "updatedAt": "2021-03-29T15:02:36.931Z", - "id": "76", - "name": "Harvest:Project:create update getAll get delete:Task:getAll get:TimeEntry:createByDuration createByStartEnd update getAll restartTime stopTime delete:User:me get getAll update", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 160, - 650 - ], - "id": "8833cc21-1b21-4e79-b6c7-4393f7466b69" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "client", - "accountId": 1416330, - "operation": "create", - "name": "=RandomClient{{Date.now()}}", - "additionalFields": {} - }, - "name": "Harvest", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 400, - 300 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "1a1ea2ec-520a-4086-b786-358e6f6ee5d1" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "client", - "accountId": 1416330, - "operation": "delete", - "id": "={{$node[\"Harvest\"].json[\"id\"]}}" - }, - "name": "Harvest1", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 1300, - 300 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "0e833b0d-00e0-4be1-a578-e73017f5065b" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "project", - "accountId": 1416330, - "operation": "create", - "name": "=Project{{Date.now()}}", - "clientId": "={{$node[\"Harvest\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "Harvest2", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 550, - 350 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "4cd6a29d-0972-4169-af76-7b631f35a730" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "project", - "accountId": 1416330, - "operation": "update", - "id": "={{$node[\"Harvest2\"].json[\"id\"]}}", - "updateFields": {} - }, - "name": "Harvest3", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 700, - 350 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "e8ef59df-d4e2-4e27-91cc-f192082c7115" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "project", - "accountId": 1416330, - "limit": 1, - "filters": {} - }, - "name": "Harvest4", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 850, - 350 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "cabf6a20-aeda-435a-9290-0457d8c92e7d" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "project", - "accountId": 1416330, - "operation": "get", - "id": "={{$node[\"Harvest2\"].json[\"id\"]}}" - }, - "name": "Harvest5", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 1000, - 350 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "48e37176-9c45-4e1f-943c-58fcc338b060" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "project", - "accountId": 1416330, - "operation": "delete", - "id": "={{$node[\"Harvest2\"].json[\"id\"]}}" - }, - "name": "Harvest6", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 1150, - 350 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "0618ef71-88d4-4e88-9114-59f98596768a" - }, - { - "parameters": { - "authentication": "oAuth2", - "accountId": 1416330, - "limit": 1, - "filters": {} - }, - "name": "Harvest7", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 400, - 500 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "8e653471-6477-4538-9691-f7c5f053798e" - }, - { - "parameters": { - "authentication": "oAuth2", - "accountId": 1416330, - "operation": "get", - "id": "={{$node[\"Harvest7\"].json[\"id\"]}}" - }, - "name": "Harvest8", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 550, - 500 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "e0934891-d965-418d-88bc-13d10ef16171" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "timeEntry", - "accountId": 1416330, - "operation": "createByDuration", - "projectId": "27925524", - "taskId": "16181821", - "spentDate": "2021-02-26T10:20:56.825Z", - "additionalFields": {} - }, - "name": "Harvest11", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 400, - 650 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "99c627a7-eb16-4e0b-8288-218fd2ff3f11" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "timeEntry", - "accountId": 1416330, - "operation": "update", - "id": "={{$node[\"Harvest11\"].json[\"id\"]}}", - "updateFields": {} - }, - "name": "Harvest12", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 550, - 650 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "584e3df4-1d4c-4f2a-b2b9-3b5bd7ec47f9" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "timeEntry", - "accountId": 1416330, - "limit": 1, - "filters": {} - }, - "name": "Harvest13", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 700, - 650 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "4fc58913-81bf-45f9-8d2f-042898629b9e" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "timeEntry", - "accountId": 1416330, - "operation": "restartTime", - "id": "={{$node[\"Harvest11\"].json[\"id\"]}}" - }, - "name": "Harvest14", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 850, - 650 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "c83b2bda-8290-4580-bbfc-cf94e922d90c" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "timeEntry", - "accountId": 1416330, - "operation": "stopTime", - "id": "={{$node[\"Harvest11\"].json[\"id\"]}}" - }, - "name": "Harvest15", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 1000, - 650 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "dd9a6234-40c1-43e8-b901-b5580e1fa8b7" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "timeEntry", - "accountId": 1416330, - "operation": "delete", - "id": "={{$node[\"Harvest11\"].json[\"id\"]}}" - }, - "name": "Harvest16", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 1150, - 650 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "77ebc40f-31b7-4a18-8461-e6508f5a28fc" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "timeEntry", - "accountId": 1416330, - "operation": "createByStartEnd", - "projectId": "27925524", - "taskId": "16181821", - "spentDate": "2021-02-26T10:20:56.825Z", - "additionalFields": { - "ended_time": "5:00pm", - "started_time": "8:00am" - } - }, - "name": "Harvest17", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 400, - 800 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "57840c65-51d5-423f-a3c3-879093551e8e" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "timeEntry", - "accountId": 1416330, - "operation": "delete", - "id": "={{$node[\"Harvest17\"].json[\"id\"]}}" - }, - "name": "Harvest18", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 550, - 800 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "1235197c-ef59-43fb-804b-6398c4cc1a1e" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "user", - "accountId": 1416330 - }, - "name": "Harvest19", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 400, - 950 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "8a2caa48-eae1-4386-8a08-5977a03ad855" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "user", - "accountId": 1416330, - "operation": "get", - "id": "={{$node[\"Harvest19\"].json[\"id\"]}}" - }, - "name": "Harvest20", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 550, - 950 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "bcd17478-d82d-45fc-bc97-5d06fddacb36" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "user", - "accountId": 1416330, - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "Harvest21", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 700, - 950 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "f0c8258d-c081-48f1-b276-5cb95e147c7b" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "user", - "accountId": 1416330, - "operation": "update", - "id": "={{$node[\"Harvest19\"].json[\"id\"]}}", - "updateFields": { - "timezone": "Berlin" - } - }, - "name": "Harvest22", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 850, - 950 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "efad7fea-318e-4125-8fdc-025c60629fbe" - }, - { - "parameters": { - "authentication": "oAuth2", - "accountId": 1416330, - "operation": "create", - "name": "=Task{{Date.now()}}", - "additionalFields": {} - }, - "name": "Harvest9", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 700, - 500 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "2fcd0aed-3cf8-4516-808d-74bc63b99373" - }, - { - "parameters": { - "authentication": "oAuth2", - "accountId": 1416330, - "operation": "update", - "id": "={{$node[\"Harvest9\"].json[\"id\"]}}", - "updateFields": { - "name": "=Update{{$node[\"Harvest9\"].json[\"name\"]}}" - } - }, - "name": "Harvest10", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 850, - 500 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "0a403014-8e17-4efd-8c36-8b7edd360cfe" - }, - { - "parameters": { - "authentication": "oAuth2", - "accountId": 1416330, - "operation": "delete", - "id": "={{$node[\"Harvest9\"].json[\"id\"]}}" - }, - "name": "Harvest23", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 990, - 500 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "27bb65f0-6868-437b-b254-269442300f67" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Harvest", - "type": "main", - "index": 0 - }, - { - "node": "Harvest11", - "type": "main", - "index": 0 - }, - { - "node": "Harvest17", - "type": "main", - "index": 0 - }, - { - "node": "Harvest7", - "type": "main", - "index": 0 - }, - { - "node": "Harvest19", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest": { - "main": [ - [ - { - "node": "Harvest2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest2": { - "main": [ - [ - { - "node": "Harvest3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest3": { - "main": [ - [ - { - "node": "Harvest4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest4": { - "main": [ - [ - { - "node": "Harvest5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest5": { - "main": [ - [ - { - "node": "Harvest6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest6": { - "main": [ - [ - { - "node": "Harvest1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest7": { - "main": [ - [ - { - "node": "Harvest8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest11": { - "main": [ - [ - { - "node": "Harvest12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest12": { - "main": [ - [ - { - "node": "Harvest13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest13": { - "main": [ - [ - { - "node": "Harvest14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest14": { - "main": [ - [ - { - "node": "Harvest15", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest15": { - "main": [ - [ - { - "node": "Harvest16", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest17": { - "main": [ - [ - { - "node": "Harvest18", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest19": { - "main": [ - [ - { - "node": "Harvest20", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest20": { - "main": [ - [ - { - "node": "Harvest21", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest21": { - "main": [ - [ - { - "node": "Harvest22", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest8": { - "main": [ - [ - { - "node": "Harvest9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest9": { - "main": [ - [ - { - "node": "Harvest10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest10": { - "main": [ - [ - { - "node": "Harvest23", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/77.json b/test-workflows/workflows/77.json deleted file mode 100644 index f859517a2e7..00000000000 --- a/test-workflows/workflows/77.json +++ /dev/null @@ -1,446 +0,0 @@ -{ - "createdAt": "2021-02-26T10:47:07.557Z", - "updatedAt": "2021-02-26T10:54:33.074Z", - "id": "77", - "name": "Harvest:Expense:create update get getAll delete:Estimate:create update get getAll delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 220 - ], - "id": "2bb0bfe5-a448-40ae-a4be-0689032e87e9" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "client", - "accountId": 1416330, - "operation": "create", - "name": "=Client{{Date.now()}}", - "additionalFields": {} - }, - "name": "Harvest", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "31ef3552-d142-4338-89a9-830f488aaee2" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "client", - "accountId": 1416330, - "operation": "delete", - "id": "={{$node[\"Harvest\"].json[\"id\"]}}" - }, - "name": "Harvest1", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 1340, - 300 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "ea99bdb4-a747-4ab0-ac0a-9be4ae96549c" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "estimate", - "accountId": 1416330, - "operation": "create", - "clientId": "={{$node[\"Harvest\"].json[\"id\"]}}", - "additionalFields": { - "subject": "=Estimate{{Date.now()}}" - } - }, - "name": "Harvest2", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 600, - 400 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "e1f7a876-0103-4b73-8669-81ef0994da09" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "estimate", - "accountId": 1416330, - "operation": "update", - "id": "={{$node[\"Harvest2\"].json[\"id\"]}}", - "updateFields": { - "subject": "=UpdateSubject{{Date.now()}}" - } - }, - "name": "Harvest3", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 750, - 400 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "7989bc34-0e2d-4add-af9c-3fd7f69d3219" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "estimate", - "accountId": 1416330, - "operation": "get", - "id": "={{$node[\"Harvest2\"].json[\"id\"]}}" - }, - "name": "Harvest4", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 900, - 400 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "20378436-76b0-430d-94cf-e034f3534ad8" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "estimate", - "accountId": 1416330, - "limit": 1, - "filters": {} - }, - "name": "Harvest5", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 1050, - 400 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "7bbdbf6e-2741-463f-8b1d-31c17d53972f" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "estimate", - "accountId": 1416330, - "operation": "delete", - "id": "={{$node[\"Harvest2\"].json[\"id\"]}}" - }, - "name": "Harvest6", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 1200, - 400 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "c3c439b0-e7bf-4896-b948-77037cea12fa" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "expense", - "accountId": 1416330, - "operation": "create", - "projectId": "27925524", - "expenseCategoryId": "7737171", - "spentDate": "2021-02-26T10:51:40.112Z", - "additionalFields": { - "total_cost": "101" - } - }, - "name": "Harvest7", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 460, - 150 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "09619bf1-f1f8-425a-b24f-cdbaa294bda2" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "expense", - "accountId": 1416330, - "operation": "update", - "id": "={{$node[\"Harvest7\"].json[\"id\"]}}", - "updateFields": { - "total_cost": "201" - } - }, - "name": "Harvest8", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 600, - 150 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "ff10db35-ec3d-4684-85fa-682272052a4e" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "expense", - "accountId": 1416330, - "operation": "get", - "id": "={{$node[\"Harvest7\"].json[\"id\"]}}" - }, - "name": "Harvest9", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 750, - 150 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "7788ca40-e46d-4332-ac73-1e4f8a6adddd" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "expense", - "accountId": 1416330, - "limit": 1, - "filters": {} - }, - "name": "Harvest10", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 900, - 150 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "e7595ae1-7392-4f84-b18c-3097d47ddff4" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "expense", - "accountId": 1416330, - "operation": "delete", - "id": "={{$node[\"Harvest7\"].json[\"id\"]}}" - }, - "name": "Harvest11", - "type": "n8n-nodes-base.harvest", - "typeVersion": 1, - "position": [ - 1050, - 150 - ], - "credentials": { - "harvestOAuth2Api": { - "id": "64", - "name": "Harvest OAuth2 creds" - } - }, - "id": "eb9f74f8-d780-4c55-9ffd-e3540adfe808" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Harvest", - "type": "main", - "index": 0 - }, - { - "node": "Harvest7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest": { - "main": [ - [ - { - "node": "Harvest2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest2": { - "main": [ - [ - { - "node": "Harvest3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest3": { - "main": [ - [ - { - "node": "Harvest4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest4": { - "main": [ - [ - { - "node": "Harvest5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest5": { - "main": [ - [ - { - "node": "Harvest6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest6": { - "main": [ - [ - { - "node": "Harvest1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest7": { - "main": [ - [ - { - "node": "Harvest8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest8": { - "main": [ - [ - { - "node": "Harvest9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest9": { - "main": [ - [ - { - "node": "Harvest10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Harvest10": { - "main": [ - [ - { - "node": "Harvest11", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/78.json b/test-workflows/workflows/78.json deleted file mode 100644 index 1ab0e5170bd..00000000000 --- a/test-workflows/workflows/78.json +++ /dev/null @@ -1,444 +0,0 @@ -{ - "createdAt": "2021-02-26T13:19:21.412Z", - "updatedAt": "2021-06-07T09:10:58.362Z", - "id": "78", - "name": "NASA:ALL:", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 140, - 530 - ], - "id": "58ef3e12-49b0-40f0-a5d1-264dfe9b0e17" - }, - { - "parameters": { - "resource": "asteroidNeoBrowse", - "limit": 1 - }, - "name": "NASA", - "type": "n8n-nodes-base.nasa", - "typeVersion": 1, - "position": [ - 450, - 220 - ], - "credentials": { - "nasaApi": { - "id": "49", - "name": "Nasa creds" - } - }, - "id": "bb5be736-03e5-46d7-997d-e64f6673b783" - }, - { - "parameters": { - "resource": "asteroidNeoLookup", - "asteroidId": "={{$node[\"NASA\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "NASA1", - "type": "n8n-nodes-base.nasa", - "typeVersion": 1, - "position": [ - 620, - 220 - ], - "credentials": { - "nasaApi": { - "id": "49", - "name": "Nasa creds" - } - }, - "id": "e6cee073-75cd-4ff0-9c2d-a6c8287bcf0e" - }, - { - "parameters": { - "resource": "asteroidNeoFeed", - "additionalFields": { - "startDate": "2020-08-10T22:00:00.000Z", - "endDate": "2020-08-10T22:00:00.000Z" - } - }, - "name": "NASA2", - "type": "n8n-nodes-base.nasa", - "typeVersion": 1, - "position": [ - 790, - 220 - ], - "credentials": { - "nasaApi": { - "id": "49", - "name": "Nasa creds" - } - }, - "id": "3b6fad60-3b18-46c8-89d9-7097d678c124" - }, - { - "parameters": { - "resource": "donkiCoronalMassEjection", - "additionalFields": {} - }, - "name": "NASA3", - "type": "n8n-nodes-base.nasa", - "typeVersion": 1, - "position": [ - 450, - 370 - ], - "credentials": { - "nasaApi": { - "id": "49", - "name": "Nasa creds" - } - }, - "notes": "CAP_RESULTS_LENGTH=1", - "id": "d3ec4cda-449e-476f-ac32-0d31a8a96f58" - }, - { - "parameters": { - "resource": "donkiInterplanetaryShock", - "additionalFields": { - "location": "STEREO A" - } - }, - "name": "NASA4", - "type": "n8n-nodes-base.nasa", - "typeVersion": 1, - "position": [ - 450, - 680 - ], - "credentials": { - "nasaApi": { - "id": "49", - "name": "Nasa creds" - } - }, - "notes": "CAP_RESULTS_LENGTH=1", - "id": "0d290992-c9b2-411f-bba0-1bc420a412f1" - }, - { - "parameters": { - "resource": "donkiSolarFlare", - "additionalFields": {} - }, - "name": "NASA5", - "type": "n8n-nodes-base.nasa", - "typeVersion": 1, - "position": [ - 450, - 520 - ], - "credentials": { - "nasaApi": { - "id": "49", - "name": "Nasa creds" - } - }, - "notes": "CAP_RESULTS_LENGTH=1", - "id": "188fe560-87ec-4f60-a844-c0c48b7de306" - }, - { - "parameters": { - "resource": "donkiSolarEnergeticParticle", - "additionalFields": {} - }, - "name": "NASA6", - "type": "n8n-nodes-base.nasa", - "typeVersion": 1, - "position": [ - 650, - 670 - ], - "credentials": { - "nasaApi": { - "id": "49", - "name": "Nasa creds" - } - }, - "id": "741adc5a-c4c6-48c8-bced-41b14831092e" - }, - { - "parameters": { - "resource": "donkiMagnetopauseCrossing", - "additionalFields": {} - }, - "name": "NASA7", - "type": "n8n-nodes-base.nasa", - "typeVersion": 1, - "position": [ - 650, - 370 - ], - "credentials": { - "nasaApi": { - "id": "49", - "name": "Nasa creds" - } - }, - "id": "7ce89dd3-c364-49dd-9542-fd0bcfff9d63" - }, - { - "parameters": { - "resource": "donkiRadiationBeltEnhancement", - "additionalFields": {} - }, - "name": "NASA8", - "type": "n8n-nodes-base.nasa", - "typeVersion": 1, - "position": [ - 650, - 520 - ], - "credentials": { - "nasaApi": { - "id": "49", - "name": "Nasa creds" - } - }, - "id": "ed4e394b-49ed-4c92-9a54-6fc065723251" - }, - { - "parameters": { - "resource": "donkiHighSpeedStream", - "additionalFields": {} - }, - "name": "NASA9", - "type": "n8n-nodes-base.nasa", - "typeVersion": 1, - "position": [ - 450, - 830 - ], - "credentials": { - "nasaApi": { - "id": "49", - "name": "Nasa creds" - } - }, - "notes": "CAP_RESULTS_LENGTH=1", - "id": "4c483b64-1315-4531-ae03-12a825bdaf33" - }, - { - "parameters": { - "resource": "donkiWsaEnlilSimulation", - "additionalFields": {} - }, - "name": "NASA10", - "type": "n8n-nodes-base.nasa", - "typeVersion": 1, - "position": [ - 650, - 830 - ], - "credentials": { - "nasaApi": { - "id": "49", - "name": "Nasa creds" - } - }, - "notes": "CAP_RESULTS_LENGTH=1", - "id": "3e8ad703-1880-45df-b95b-309dba2f63ad" - }, - { - "parameters": { - "resource": "donkiNotifications", - "additionalFields": {} - }, - "name": "NASA11", - "type": "n8n-nodes-base.nasa", - "typeVersion": 1, - "position": [ - 450, - 980 - ], - "credentials": { - "nasaApi": { - "id": "49", - "name": "Nasa creds" - } - }, - "notes": "CAP_RESULTS_LENGTH=1", - "id": "e650443b-32c4-49dc-beee-49e361494158" - }, - { - "parameters": { - "resource": "earthImagery", - "lat": 52.52, - "lon": 13.405, - "additionalFields": { - "date": "=2019-05-05" - } - }, - "name": "NASA12", - "type": "n8n-nodes-base.nasa", - "typeVersion": 1, - "position": [ - 620, - 980 - ], - "credentials": { - "nasaApi": { - "id": "49", - "name": "Nasa creds" - } - }, - "id": "86c4b0a2-7a39-4794-b3e0-a6dd188496e9" - }, - { - "parameters": { - "additionalFields": { - "date": "=2019-05-05" - } - }, - "name": "NASA14", - "type": "n8n-nodes-base.nasa", - "typeVersion": 1, - "position": [ - 450, - 70 - ], - "credentials": { - "nasaApi": { - "id": "49", - "name": "Nasa creds" - } - }, - "id": "5d726ffa-d7b5-46dc-9e78-a2e550cbe145" - }, - { - "parameters": { - "resource": "earthAssets", - "lat": 0, - "lon": 0, - "additionalFields": { - "date": "2021-01-31T23:00:00.000Z" - } - }, - "name": "NASA13", - "type": "n8n-nodes-base.nasa", - "typeVersion": 1, - "position": [ - 160, - 790 - ], - "credentials": { - "nasaApi": { - "id": "49", - "name": "Nasa creds" - } - }, - "disabled": true, - "id": "1483c3eb-ca7b-4908-a454-4b573e56ed3a" - } - ], - "connections": { - "NASA": { - "main": [ - [ - { - "node": "NASA1", - "type": "main", - "index": 0 - } - ] - ] - }, - "NASA1": { - "main": [ - [ - { - "node": "NASA2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "NASA", - "type": "main", - "index": 0 - }, - { - "node": "NASA3", - "type": "main", - "index": 0 - }, - { - "node": "NASA7", - "type": "main", - "index": 0 - }, - { - "node": "NASA5", - "type": "main", - "index": 0 - }, - { - "node": "NASA8", - "type": "main", - "index": 0 - }, - { - "node": "NASA6", - "type": "main", - "index": 0 - }, - { - "node": "NASA4", - "type": "main", - "index": 0 - }, - { - "node": "NASA9", - "type": "main", - "index": 0 - }, - { - "node": "NASA10", - "type": "main", - "index": 0 - }, - { - "node": "NASA11", - "type": "main", - "index": 0 - }, - { - "node": "NASA12", - "type": "main", - "index": 0 - }, - { - "node": "NASA14", - "type": "main", - "index": 0 - }, - { - "node": "NASA13", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/79.json b/test-workflows/workflows/79.json deleted file mode 100644 index edc5d9782bb..00000000000 --- a/test-workflows/workflows/79.json +++ /dev/null @@ -1,219 +0,0 @@ -{ - "createdAt": "2021-02-26T15:36:21.900Z", - "updatedAt": "2021-02-26T15:40:43.297Z", - "id": "79", - "name": "ZohoCRM:Lead:create update get getAll delete getFields", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "08024b38-dc6e-48be-917a-96cba2a48960" - }, - { - "parameters": { - "lastName": "=Last{{Date.now()}}", - "additionalFields": {} - }, - "name": "Zoho CRM", - "type": "n8n-nodes-base.zohoCrm", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "zohoOAuth2Api": { - "id": "67", - "name": "Zoho OAuth2 creds" - } - }, - "id": "4496eb6a-f9a8-4e82-b160-7afe3ca37483" - }, - { - "parameters": { - "operation": "update", - "leadId": "={{$node[\"Zoho CRM\"].json[\"id\"]}}", - "additionalFields": { - "lastName": "=UpdatedLast{{Date.now()}}" - } - }, - "name": "Zoho CRM1", - "type": "n8n-nodes-base.zohoCrm", - "typeVersion": 1, - "position": [ - 600, - 300 - ], - "credentials": { - "zohoOAuth2Api": { - "id": "67", - "name": "Zoho OAuth2 creds" - } - }, - "id": "e34f782e-6772-4fbe-b332-8d9ecfbae345" - }, - { - "parameters": { - "operation": "get", - "leadId": "={{$node[\"Zoho CRM\"].json[\"id\"]}}" - }, - "name": "Zoho CRM2", - "type": "n8n-nodes-base.zohoCrm", - "typeVersion": 1, - "position": [ - 750, - 300 - ], - "alwaysOutputData": true, - "credentials": { - "zohoOAuth2Api": { - "id": "67", - "name": "Zoho OAuth2 creds" - } - }, - "id": "b225d319-d025-408c-9414-b665fc807993" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "Zoho CRM3", - "type": "n8n-nodes-base.zohoCrm", - "typeVersion": 1, - "position": [ - 900, - 300 - ], - "credentials": { - "zohoOAuth2Api": { - "id": "67", - "name": "Zoho OAuth2 creds" - } - }, - "id": "0c08ddd8-cacd-49b6-b2e0-0ab54013e93b" - }, - { - "parameters": { - "operation": "delete", - "leadId": "={{$node[\"Zoho CRM\"].json[\"id\"]}}" - }, - "name": "Zoho CRM4", - "type": "n8n-nodes-base.zohoCrm", - "typeVersion": 1, - "position": [ - 1050, - 300 - ], - "credentials": { - "zohoOAuth2Api": { - "id": "67", - "name": "Zoho OAuth2 creds" - } - }, - "id": "5e6706ca-53f4-4b90-ab9d-1396f59f5461" - }, - { - "parameters": { - "operation": "getFields" - }, - "name": "Zoho CRM5", - "type": "n8n-nodes-base.zohoCrm", - "typeVersion": 1, - "position": [ - 1200, - 300 - ], - "credentials": { - "zohoOAuth2Api": { - "id": "67", - "name": "Zoho OAuth2 creds" - } - }, - "id": "6deb175d-2b56-4bef-a5fe-f8b77181520b" - } - ], - "connections": { - "Zoho CRM": { - "main": [ - [ - { - "node": "Zoho CRM1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Zoho CRM1": { - "main": [ - [ - { - "node": "Zoho CRM2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Zoho CRM2": { - "main": [ - [ - { - "node": "Zoho CRM3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Zoho CRM3": { - "main": [ - [ - { - "node": "Zoho CRM4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Zoho CRM4": { - "main": [ - [ - { - "node": "Zoho CRM5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Zoho CRM", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/80.json b/test-workflows/workflows/80.json deleted file mode 100644 index 747916a293b..00000000000 --- a/test-workflows/workflows/80.json +++ /dev/null @@ -1,449 +0,0 @@ -{ - "createdAt": "2021-02-26T16:19:59.941Z", - "updatedAt": "2021-02-26T16:20:47.874Z", - "id": "80", - "name": "Zendesk:Ticket:create update get getAll delete:TicketField:getAll get:User:create update getAll search get delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 200, - 460 - ], - "id": "4b8759d6-5b80-4936-93a5-b13fb5796186" - }, - { - "parameters": { - "authentication": "oAuth2", - "description": "=Description{{Date.now()}}", - "additionalFields": {} - }, - "name": "Zendesk", - "type": "n8n-nodes-base.zendesk", - "typeVersion": 1, - "position": [ - 400, - 300 - ], - "credentials": { - "zendeskOAuth2Api": { - "id": "68", - "name": "Zendesk OAuth2 " - } - }, - "id": "d19f346d-1951-48ac-a774-6816c8547a9d" - }, - { - "parameters": { - "authentication": "oAuth2", - "operation": "update", - "id": "={{$node[\"Zendesk\"].json[\"id\"]}}", - "updateFields": { - "subject": "=UpdatedSubject{{Date.now()}}" - } - }, - "name": "Zendesk1", - "type": "n8n-nodes-base.zendesk", - "typeVersion": 1, - "position": [ - 550, - 300 - ], - "credentials": { - "zendeskOAuth2Api": { - "id": "68", - "name": "Zendesk OAuth2 " - } - }, - "id": "f5ff3626-892b-44ad-8eda-f5c753520a17" - }, - { - "parameters": { - "authentication": "oAuth2", - "operation": "get", - "id": "={{$node[\"Zendesk\"].json[\"id\"]}}" - }, - "name": "Zendesk2", - "type": "n8n-nodes-base.zendesk", - "typeVersion": 1, - "position": [ - 700, - 300 - ], - "credentials": { - "zendeskOAuth2Api": { - "id": "68", - "name": "Zendesk OAuth2 " - } - }, - "id": "6a72a337-f588-4c4b-844f-f96b68b2c464" - }, - { - "parameters": { - "authentication": "oAuth2", - "operation": "getAll", - "limit": 1, - "options": {} - }, - "name": "Zendesk3", - "type": "n8n-nodes-base.zendesk", - "typeVersion": 1, - "position": [ - 850, - 300 - ], - "credentials": { - "zendeskOAuth2Api": { - "id": "68", - "name": "Zendesk OAuth2 " - } - }, - "id": "a9590bd0-c6da-4d3a-9c8d-c86c00924373" - }, - { - "parameters": { - "authentication": "oAuth2", - "operation": "delete", - "id": "={{$node[\"Zendesk\"].json[\"id\"]}}" - }, - "name": "Zendesk4", - "type": "n8n-nodes-base.zendesk", - "typeVersion": 1, - "position": [ - 1000, - 300 - ], - "credentials": { - "zendeskOAuth2Api": { - "id": "68", - "name": "Zendesk OAuth2 " - } - }, - "id": "0ea03844-4270-4aad-a614-e60d2008e773" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "ticketField", - "operation": "getAll", - "limit": 1 - }, - "name": "Zendesk5", - "type": "n8n-nodes-base.zendesk", - "typeVersion": 1, - "position": [ - 400, - 450 - ], - "credentials": { - "zendeskOAuth2Api": { - "id": "68", - "name": "Zendesk OAuth2 " - } - }, - "id": "714ab216-9da0-496d-acfa-3c82f16a22f4" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "ticketField", - "ticketFieldId": "={{$node[\"Zendesk5\"].json[\"id\"]}}" - }, - "name": "Zendesk6", - "type": "n8n-nodes-base.zendesk", - "typeVersion": 1, - "position": [ - 550, - 450 - ], - "credentials": { - "zendeskOAuth2Api": { - "id": "68", - "name": "Zendesk OAuth2 " - } - }, - "id": "8ee850ce-35e2-435b-8abb-e2a8820362b3" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "user", - "name": "=Name{{Date.now()}}", - "additionalFields": {} - }, - "name": "Zendesk7", - "type": "n8n-nodes-base.zendesk", - "typeVersion": 1, - "position": [ - 400, - 600 - ], - "credentials": { - "zendeskOAuth2Api": { - "id": "68", - "name": "Zendesk OAuth2 " - } - }, - "id": "999a937f-cb90-448f-abe1-49efa8b5c6e4" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "user", - "operation": "update", - "id": "={{$node[\"Zendesk7\"].json[\"id\"]}}", - "updateFields": { - "name": "=UpdatedName{{Date.now()}}" - } - }, - "name": "Zendesk8", - "type": "n8n-nodes-base.zendesk", - "typeVersion": 1, - "position": [ - 550, - 600 - ], - "credentials": { - "zendeskOAuth2Api": { - "id": "68", - "name": "Zendesk OAuth2 " - } - }, - "id": "3ca61e62-ea9e-4431-b099-e6185c7546bb" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "user", - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "Zendesk9", - "type": "n8n-nodes-base.zendesk", - "typeVersion": 1, - "position": [ - 700, - 600 - ], - "credentials": { - "zendeskOAuth2Api": { - "id": "68", - "name": "Zendesk OAuth2 " - } - }, - "id": "6ab5a5c4-715e-4db4-9e60-44ffc3d7858b" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "user", - "operation": "search", - "limit": 1, - "filters": {} - }, - "name": "Zendesk10", - "type": "n8n-nodes-base.zendesk", - "typeVersion": 1, - "position": [ - 850, - 600 - ], - "credentials": { - "zendeskOAuth2Api": { - "id": "68", - "name": "Zendesk OAuth2 " - } - }, - "id": "1c032158-0872-4518-b7d9-c41cd7402baf" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "user", - "operation": "get", - "id": "={{$node[\"Zendesk7\"].json[\"id\"]}}" - }, - "name": "Zendesk11", - "type": "n8n-nodes-base.zendesk", - "typeVersion": 1, - "position": [ - 1000, - 600 - ], - "credentials": { - "zendeskOAuth2Api": { - "id": "68", - "name": "Zendesk OAuth2 " - } - }, - "id": "5b713747-e0ff-4918-bfa9-daac79899b90" - }, - { - "parameters": { - "authentication": "oAuth2", - "resource": "user", - "operation": "delete", - "id": "={{$node[\"Zendesk7\"].json[\"id\"]}}" - }, - "name": "Zendesk12", - "type": "n8n-nodes-base.zendesk", - "typeVersion": 1, - "position": [ - 1150, - 600 - ], - "credentials": { - "zendeskOAuth2Api": { - "id": "68", - "name": "Zendesk OAuth2 " - } - }, - "id": "e8af8a3e-7cc0-4f30-9498-aca3837919cd" - } - ], - "connections": { - "Zendesk": { - "main": [ - [ - { - "node": "Zendesk1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Zendesk1": { - "main": [ - [ - { - "node": "Zendesk2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Zendesk2": { - "main": [ - [ - { - "node": "Zendesk3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Zendesk3": { - "main": [ - [ - { - "node": "Zendesk4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Zendesk5": { - "main": [ - [ - { - "node": "Zendesk6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Zendesk", - "type": "main", - "index": 0 - }, - { - "node": "Zendesk5", - "type": "main", - "index": 0 - }, - { - "node": "Zendesk7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Zendesk7": { - "main": [ - [ - { - "node": "Zendesk8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Zendesk8": { - "main": [ - [ - { - "node": "Zendesk9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Zendesk9": { - "main": [ - [ - { - "node": "Zendesk10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Zendesk10": { - "main": [ - [ - { - "node": "Zendesk11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Zendesk11": { - "main": [ - [ - { - "node": "Zendesk12", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/81.json b/test-workflows/workflows/81.json deleted file mode 100644 index 324c5ed66ed..00000000000 --- a/test-workflows/workflows/81.json +++ /dev/null @@ -1,162 +0,0 @@ -{ - "createdAt": "2021-03-01T09:51:34.123Z", - "updatedAt": "2021-06-02T11:29:56.485Z", - "id": "81", - "name": "PhantomBuster:getAll get launch getOutput", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "85fb6aa2-9869-4db4-bd9a-daf1db2bf96e" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1 - }, - "name": "Phantombuster", - "type": "n8n-nodes-base.phantombuster", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "phantombusterApi": { - "id": "70", - "name": "Phantombuster creds" - } - }, - "id": "1b0bda87-f6ec-42a9-84db-af15ec98c377" - }, - { - "parameters": { - "operation": "get", - "agentId": "={{$node[\"Phantombuster\"].json[\"id\"]}}" - }, - "name": "Phantombuster1", - "type": "n8n-nodes-base.phantombuster", - "typeVersion": 1, - "position": [ - 600, - 300 - ], - "credentials": { - "phantombusterApi": { - "id": "70", - "name": "Phantombuster creds" - } - }, - "id": "1c0d3094-59c7-4f8c-b7d6-3544dcde6bcc" - }, - { - "parameters": { - "agentId": "={{$node[\"Phantombuster\"].json[\"id\"]}}", - "resolveData": false, - "jsonParameters": true, - "additionalFields": { - "argumentsJson": "{\n\t\"urls\": [\n\t\t\"https://n8n.io/\"\n\t],\n\t\"timeToWait\": 5000,\n\t\"pagesPerLaunch\": 1,\n\t\"onlyGetOneEmail\": false\n}" - } - }, - "name": "Phantombuster2", - "type": "n8n-nodes-base.phantombuster", - "typeVersion": 1, - "position": [ - 750, - 300 - ], - "credentials": { - "phantombusterApi": { - "id": "70", - "name": "Phantombuster creds" - } - }, - "id": "932b8b9f-b118-401c-9164-aac9942631a9" - }, - { - "parameters": { - "operation": "getOutput", - "agentId": "={{$node[\"Phantombuster\"].json[\"id\"]}}", - "resolveData": false, - "additionalFields": { - "prevContainerId": "={{$node[\"Phantombuster2\"].json[\"containerId\"]}}" - } - }, - "name": "Phantombuster3", - "type": "n8n-nodes-base.phantombuster", - "typeVersion": 1, - "position": [ - 900, - 300 - ], - "credentials": { - "phantombusterApi": { - "id": "70", - "name": "Phantombuster creds" - } - }, - "notes": "IGNORED_PROPERTIES=mostRecentEndedAt", - "id": "803d6c12-a407-4037-ae9f-62b90d17ceac" - } - ], - "connections": { - "Phantombuster": { - "main": [ - [ - { - "node": "Phantombuster1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Phantombuster1": { - "main": [ - [ - { - "node": "Phantombuster2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Phantombuster2": { - "main": [ - [ - { - "node": "Phantombuster3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Phantombuster", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/82.json b/test-workflows/workflows/82.json deleted file mode 100644 index 211675162c1..00000000000 --- a/test-workflows/workflows/82.json +++ /dev/null @@ -1,563 +0,0 @@ -{ - "createdAt": "2021-03-01T10:15:48.446Z", - "updatedAt": "2021-06-04T14:49:07.640Z", - "id": "82", - "name": "Microsoft OneDrive:Folder:create getChildren share search delete:File:upload get share download copy delete search", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "8dd4b3f2-e8ad-481a-8a37-6fc5cad4eb8e" - }, - { - "parameters": { - "resource": "folder", - "operation": "create", - "name": "=TestFolder{{Date.now()}}", - "options": {} - }, - "name": "Microsoft OneDrive", - "type": "n8n-nodes-base.microsoftOneDrive", - "typeVersion": 1, - "position": [ - 490, - 300 - ], - "credentials": { - "microsoftOneDriveOAuth2Api": { - "id": "69", - "name": "Microsoft Drive OAuth2 creds" - } - }, - "id": "60b3c5f1-1a49-4961-9d3b-7a8681b882fc" - }, - { - "parameters": { - "resource": "folder", - "folderId": "={{$node[\"Microsoft OneDrive\"].json[\"id\"]}}" - }, - "name": "Microsoft OneDrive1", - "type": "n8n-nodes-base.microsoftOneDrive", - "typeVersion": 1, - "position": [ - 2410, - 300 - ], - "alwaysOutputData": true, - "credentials": { - "microsoftOneDriveOAuth2Api": { - "id": "69", - "name": "Microsoft Drive OAuth2 creds" - } - }, - "id": "1fea4cc3-5693-470e-b04b-630bfc994fce" - }, - { - "parameters": { - "resource": "folder", - "operation": "search", - "query": "TestFolder" - }, - "name": "Microsoft OneDrive2", - "type": "n8n-nodes-base.microsoftOneDrive", - "typeVersion": 1, - "position": [ - 2850, - 150 - ], - "alwaysOutputData": true, - "credentials": { - "microsoftOneDriveOAuth2Api": { - "id": "69", - "name": "Microsoft Drive OAuth2 creds" - } - }, - "notes": "CAP_RESULTS_LENGTH=1", - "id": "d04119ed-853d-421e-a872-c02d3ab34b6d" - }, - { - "parameters": { - "resource": "folder", - "operation": "share", - "folderId": "={{$node[\"Microsoft OneDrive\"].json[\"id\"]}}", - "type": "view", - "scope": "anonymous" - }, - "name": "Microsoft OneDrive3", - "type": "n8n-nodes-base.microsoftOneDrive", - "typeVersion": 1, - "position": [ - 2560, - 300 - ], - "alwaysOutputData": true, - "credentials": { - "microsoftOneDriveOAuth2Api": { - "id": "69", - "name": "Microsoft Drive OAuth2 creds" - } - }, - "id": "2fd0be17-d65a-4c47-ada6-ed83a84a8a9c" - }, - { - "parameters": { - "fileName": "=FileName{{Date.now()}}", - "parentId": "={{$node[\"Microsoft OneDrive\"].json[\"id\"]}}", - "fileContent": "=Test written at {{Date()}}" - }, - "name": "Microsoft OneDrive4", - "type": "n8n-nodes-base.microsoftOneDrive", - "typeVersion": 1, - "position": [ - 770, - 450 - ], - "credentials": { - "microsoftOneDriveOAuth2Api": { - "id": "69", - "name": "Microsoft Drive OAuth2 creds" - } - }, - "id": "88d28811-6fdc-4d81-8d64-225c857efe27" - }, - { - "parameters": { - "operation": "get", - "fileId": "={{$node[\"Microsoft OneDrive4\"].json[\"id\"]}}" - }, - "name": "Microsoft OneDrive5", - "type": "n8n-nodes-base.microsoftOneDrive", - "typeVersion": 1, - "position": [ - 1070, - 450 - ], - "credentials": { - "microsoftOneDriveOAuth2Api": { - "id": "69", - "name": "Microsoft Drive OAuth2 creds" - } - }, - "id": "cdf9a69d-e4e0-4c8d-a154-e57910ed9c9e" - }, - { - "parameters": { - "operation": "share", - "fileId": "={{$node[\"Microsoft OneDrive4\"].json[\"id\"]}}", - "type": "view", - "scope": "anonymous" - }, - "name": "Microsoft OneDrive6", - "type": "n8n-nodes-base.microsoftOneDrive", - "typeVersion": 1, - "position": [ - 1220, - 450 - ], - "credentials": { - "microsoftOneDriveOAuth2Api": { - "id": "69", - "name": "Microsoft Drive OAuth2 creds" - } - }, - "id": "35ac9411-ebea-4929-a4b8-5fab696507c0" - }, - { - "parameters": { - "operation": "search", - "query": "Test" - }, - "name": "Microsoft OneDrive7", - "type": "n8n-nodes-base.microsoftOneDrive", - "typeVersion": 1, - "position": [ - 2120, - 450 - ], - "alwaysOutputData": true, - "credentials": { - "microsoftOneDriveOAuth2Api": { - "id": "69", - "name": "Microsoft Drive OAuth2 creds" - } - }, - "id": "d4cf2dbf-430b-4af9-a478-78f9d63c0f4e" - }, - { - "parameters": { - "operation": "download", - "fileId": "={{$node[\"Microsoft OneDrive4\"].json[\"id\"]}}" - }, - "name": "Microsoft OneDrive8", - "type": "n8n-nodes-base.microsoftOneDrive", - "typeVersion": 1, - "position": [ - 1520, - 450 - ], - "alwaysOutputData": true, - "credentials": { - "microsoftOneDriveOAuth2Api": { - "id": "69", - "name": "Microsoft Drive OAuth2 creds" - } - }, - "id": "b22405f7-c624-4f51-b72f-2cd6fba6055c" - }, - { - "parameters": { - "operation": "copy", - "fileId": "={{$node[\"Microsoft OneDrive4\"].json[\"id\"]}}", - "additionalFields": { - "name": "=CopiedFile{{Date.now()}}" - }, - "parentReference": { - "name": "=CopiedFile{{Date.now()}}", - "path": "=/drive/root:/{{$node[\"Microsoft OneDrive\"].json[\"name\"]}}" - } - }, - "name": "Microsoft OneDrive9", - "type": "n8n-nodes-base.microsoftOneDrive", - "typeVersion": 1, - "position": [ - 1670, - 450 - ], - "credentials": { - "microsoftOneDriveOAuth2Api": { - "id": "69", - "name": "Microsoft Drive OAuth2 creds" - } - }, - "id": "0a8c8d20-cc43-4a4d-a1d4-acebd6742cdd" - }, - { - "parameters": { - "operation": "delete", - "fileId": "={{$node[\"Microsoft OneDrive4\"].json[\"id\"]}}" - }, - "name": "Microsoft OneDrive10", - "type": "n8n-nodes-base.microsoftOneDrive", - "typeVersion": 1, - "position": [ - 1970, - 450 - ], - "credentials": { - "microsoftOneDriveOAuth2Api": { - "id": "69", - "name": "Microsoft Drive OAuth2 creds" - } - }, - "id": "9cbe23a3-6e32-45a8-9e9f-60c9ed5cea4e" - }, - { - "parameters": { - "resource": "folder", - "operation": "delete", - "folderId": "={{$node[\"Microsoft OneDrive\"].json[\"id\"]}}" - }, - "name": "Microsoft OneDrive11", - "type": "n8n-nodes-base.microsoftOneDrive", - "typeVersion": 1, - "position": [ - 2850, - 300 - ], - "alwaysOutputData": true, - "credentials": { - "microsoftOneDriveOAuth2Api": { - "id": "69", - "name": "Microsoft Drive OAuth2 creds" - } - }, - "id": "c33517a8-7045-45c7-8e49-e778313d2ce7" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second", - "type": "n8n-nodes-base.function", - "position": [ - 2700, - 300 - ], - "typeVersion": 1, - "id": "47de5dd5-9705-4186-a0f4-9579467897e3" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second1", - "type": "n8n-nodes-base.function", - "position": [ - 2280, - 300 - ], - "typeVersion": 1, - "id": "0987168a-7db4-4e81-bde8-4a6961f514a1" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second2", - "type": "n8n-nodes-base.function", - "position": [ - 1820, - 450 - ], - "typeVersion": 1, - "id": "eb7f14c0-6925-4c32-89f6-835e09498bce" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second3", - "type": "n8n-nodes-base.function", - "position": [ - 1370, - 450 - ], - "typeVersion": 1, - "id": "04e7f940-2bd4-4191-8157-89a3c067fdd1" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second4", - "type": "n8n-nodes-base.function", - "position": [ - 920, - 450 - ], - "typeVersion": 1, - "id": "6977a587-99f4-4998-953f-7ea20768a92b" - }, - { - "parameters": { - "functionCode": "function sleep(milliseconds) {\n return new Promise(\n resolve => setTimeout(resolve, milliseconds)\n );\n}\n\nawait sleep(800);\n\n// Output data\nreturn items;" - }, - "name": "Sleep 0.8 second5", - "type": "n8n-nodes-base.function", - "position": [ - 650, - 450 - ], - "typeVersion": 1, - "id": "7e920caf-326c-44ad-9f49-bb11d8378d12" - } - ], - "connections": { - "Microsoft OneDrive": { - "main": [ - [ - { - "node": "Sleep 0.8 second5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft OneDrive1": { - "main": [ - [ - { - "node": "Microsoft OneDrive3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft OneDrive3": { - "main": [ - [ - { - "node": "Sleep 0.8 second", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft OneDrive4": { - "main": [ - [ - { - "node": "Sleep 0.8 second4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft OneDrive5": { - "main": [ - [ - { - "node": "Microsoft OneDrive6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft OneDrive6": { - "main": [ - [ - { - "node": "Sleep 0.8 second3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft OneDrive7": { - "main": [ - [ - { - "node": "Sleep 0.8 second1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft OneDrive8": { - "main": [ - [ - { - "node": "Microsoft OneDrive9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft OneDrive9": { - "main": [ - [ - { - "node": "Sleep 0.8 second2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Microsoft OneDrive10": { - "main": [ - [ - { - "node": "Microsoft OneDrive7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Microsoft OneDrive", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second": { - "main": [ - [ - { - "node": "Microsoft OneDrive11", - "type": "main", - "index": 0 - }, - { - "node": "Microsoft OneDrive2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second1": { - "main": [ - [ - { - "node": "Microsoft OneDrive1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second2": { - "main": [ - [ - { - "node": "Microsoft OneDrive10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second3": { - "main": [ - [ - { - "node": "Microsoft OneDrive8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second4": { - "main": [ - [ - { - "node": "Microsoft OneDrive5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Sleep 0.8 second5": { - "main": [ - [ - { - "node": "Microsoft OneDrive4", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/83.json b/test-workflows/workflows/83.json deleted file mode 100644 index 7ba64106712..00000000000 --- a/test-workflows/workflows/83.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "createdAt": "2021-03-01T10:49:40.953Z", - "updatedAt": "2021-03-01T10:49:40.953Z", - "id": "83", - "name": "RSS Feed", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "2abda6cf-70a8-40c3-9446-4f7f8233e54a" - }, - { - "parameters": { - "url": "https://www.producthunt.com/feed" - }, - "name": "RSS Feed Read", - "type": "n8n-nodes-base.rssFeedRead", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "id": "46f4bb0e-011d-499c-92bd-7b1e6c814133" - }, - { - "parameters": { - "functionCode": "if(items.length !== 50){\n throw new Error('Invalid RSS feed result');\n}else{\nreturn [];\n}\n" - }, - "name": "Function", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "notesInFlow": true, - "notes": "Throw error if result.length !=50", - "id": "f4a98301-2dbe-45b2-ac1d-97df0ac58b94" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "RSS Feed Read", - "type": "main", - "index": 0 - } - ] - ] - }, - "RSS Feed Read": { - "main": [ - [ - { - "node": "Function", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/84.json b/test-workflows/workflows/84.json deleted file mode 100644 index 0a422ac4334..00000000000 --- a/test-workflows/workflows/84.json +++ /dev/null @@ -1,407 +0,0 @@ -{ - "createdAt": "2021-03-01T11:14:09.665Z", - "updatedAt": "2021-03-01T11:21:28.506Z", - "id": "84", - "name": "Matrix:Room:create invite kick leave:RoomMember:getAll:Message:create getAll:Account:me:Media:upload:Event:get", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "4653989b-2d73-400a-b9e3-05248cca34be" - }, - { - "parameters": { - "resource": "account" - }, - "name": "Matrix", - "type": "n8n-nodes-base.matrix", - "typeVersion": 1, - "position": [ - 450, - 100 - ], - "credentials": { - "matrixApi": { - "id": "71", - "name": "Matrix creds" - } - }, - "id": "47305d8a-ba2e-4bc3-8021-1abf32a300ae" - }, - { - "parameters": { - "resource": "room", - "roomName": "=Room{{Date.now()}}" - }, - "name": "Matrix1", - "type": "n8n-nodes-base.matrix", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "matrixApi": { - "id": "71", - "name": "Matrix creds" - } - }, - "id": "5d6f2b69-6762-4376-b1bb-6b3d8b823c37" - }, - { - "parameters": { - "resource": "room", - "operation": "invite", - "roomId": "={{$node[\"Matrix1\"].json[\"room_id\"]}}", - "userId": "@node8qa:matrix.org" - }, - "name": "Matrix2", - "type": "n8n-nodes-base.matrix", - "typeVersion": 1, - "position": [ - 1000, - 200 - ], - "alwaysOutputData": true, - "credentials": { - "matrixApi": { - "id": "71", - "name": "Matrix creds" - } - }, - "id": "939b7824-2a25-4b5a-9d11-57ee9107578c" - }, - { - "parameters": { - "resource": "room", - "operation": "kick", - "roomId": "={{$node[\"Matrix1\"].json[\"room_id\"]}}", - "userId": "@node8qa:matrix.org", - "reason": "test" - }, - "name": "Matrix3", - "type": "n8n-nodes-base.matrix", - "typeVersion": 1, - "position": [ - 1200, - 200 - ], - "alwaysOutputData": true, - "credentials": { - "matrixApi": { - "id": "71", - "name": "Matrix creds" - } - }, - "id": "e5d85928-b775-4eb5-9976-18075db86af0" - }, - { - "parameters": { - "resource": "room", - "operation": "leave", - "roomId": "={{$node[\"Matrix1\"].json[\"room_id\"]}}" - }, - "name": "Matrix4", - "type": "n8n-nodes-base.matrix", - "typeVersion": 1, - "position": [ - 1440, - 420 - ], - "alwaysOutputData": true, - "credentials": { - "matrixApi": { - "id": "71", - "name": "Matrix creds" - } - }, - "id": "7e684d64-ab4c-4de9-bd5b-ab1e8571c0d9" - }, - { - "parameters": { - "resource": "roomMember", - "roomId": "={{$node[\"Matrix1\"].json[\"room_id\"]}}", - "filters": {} - }, - "name": "Matrix5", - "type": "n8n-nodes-base.matrix", - "typeVersion": 1, - "position": [ - 700, - 420 - ], - "alwaysOutputData": true, - "credentials": { - "matrixApi": { - "id": "71", - "name": "Matrix creds" - } - }, - "id": "a3cd7697-4db7-4cc2-a8bf-68625273a76a" - }, - { - "parameters": { - "roomId": "={{$node[\"Matrix1\"].json[\"room_id\"]}}", - "text": "=Test {{Date.now()}}" - }, - "name": "Matrix6", - "type": "n8n-nodes-base.matrix", - "typeVersion": 1, - "position": [ - 600, - 200 - ], - "alwaysOutputData": true, - "credentials": { - "matrixApi": { - "id": "71", - "name": "Matrix creds" - } - }, - "id": "9cbac5a1-e829-40d3-acd7-ad4fdb03c1ac" - }, - { - "parameters": { - "operation": "getAll", - "roomId": "={{$node[\"Matrix1\"].json[\"room_id\"]}}", - "limit": 1, - "otherOptions": {} - }, - "name": "Matrix7", - "type": "n8n-nodes-base.matrix", - "typeVersion": 1, - "position": [ - 800, - 200 - ], - "alwaysOutputData": true, - "credentials": { - "matrixApi": { - "id": "71", - "name": "Matrix creds" - } - }, - "id": "205d5ab7-64ae-4722-b4bd-bb2a687de4b4" - }, - { - "parameters": { - "resource": "media", - "roomId": "={{$node[\"Matrix1\"].json[\"room_id\"]}}" - }, - "name": "Matrix8", - "type": "n8n-nodes-base.matrix", - "typeVersion": 1, - "position": [ - 820, - 620 - ], - "alwaysOutputData": true, - "credentials": { - "matrixApi": { - "id": "71", - "name": "Matrix creds" - } - }, - "id": "6aa74367-4d6a-495f-885e-14568c493ca1" - }, - { - "parameters": { - "filePath": "/tmp/n8n-logo.png" - }, - "name": "Read Binary File", - "type": "n8n-nodes-base.readBinaryFile", - "typeVersion": 1, - "position": [ - 600, - 620 - ], - "id": "07201442-b394-41cb-90e7-1a3f3f5e414f" - }, - { - "parameters": { - "resource": "event", - "roomId": "={{$node[\"Matrix1\"].json[\"room_id\"]}}", - "eventId": "={{$node[\"Matrix8\"].json[\"event_id\"]}}" - }, - "name": "Matrix9", - "type": "n8n-nodes-base.matrix", - "typeVersion": 1, - "position": [ - 1020, - 620 - ], - "alwaysOutputData": true, - "credentials": { - "matrixApi": { - "id": "71", - "name": "Matrix creds" - } - }, - "id": "a0c2d949-47f2-49a4-90fd-7ca465c2c579" - }, - { - "parameters": { - "mode": "chooseBranch" - }, - "name": "Merge", - "type": "n8n-nodes-base.merge", - "typeVersion": 2.1, - "position": [ - 1240, - 420 - ], - "id": "a3b8276c-5961-4508-a8c1-5d9144436ff5" - } - ], - "connections": { - "Matrix1": { - "main": [ - [ - { - "node": "Matrix6", - "type": "main", - "index": 0 - }, - { - "node": "Matrix5", - "type": "main", - "index": 0 - }, - { - "node": "Read Binary File", - "type": "main", - "index": 0 - } - ] - ] - }, - "Matrix2": { - "main": [ - [ - { - "node": "Matrix3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Matrix3": { - "main": [ - [ - { - "node": "Merge", - "type": "main", - "index": 0 - } - ] - ] - }, - "Matrix6": { - "main": [ - [ - { - "node": "Matrix7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Matrix7": { - "main": [ - [ - { - "node": "Matrix2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Read Binary File": { - "main": [ - [ - { - "node": "Matrix8", - "type": "main", - "index": 0 - } - ] - ] - }, - "Matrix8": { - "main": [ - [ - { - "node": "Matrix9", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Matrix1", - "type": "main", - "index": 0 - }, - { - "node": "Matrix", - "type": "main", - "index": 0 - } - ] - ] - }, - "Matrix5": { - "main": [ - [] - ] - }, - "Matrix9": { - "main": [ - [ - { - "node": "Merge", - "type": "main", - "index": 1 - } - ] - ] - }, - "Matrix4": { - "main": [ - [] - ] - }, - "Merge": { - "main": [ - [ - { - "node": "Matrix4", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/85.json b/test-workflows/workflows/85.json deleted file mode 100644 index 7cbe2afbb1d..00000000000 --- a/test-workflows/workflows/85.json +++ /dev/null @@ -1,119 +0,0 @@ -{ - "createdAt": "2021-03-02T10:23:05.991Z", - "updatedAt": "2021-05-25T13:21:54.785Z", - "id": "85", - "name": "Linkedin:Post:create", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 200, - 300 - ], - "id": "92f57774-0f92-4eaf-89e9-e8c33dd21cfe" - }, - { - "parameters": { - "postAs": "person", - "person": "gpZ0alGajT", - "text": "=Test Post created by person at {{new Date()}}", - "additionalFields": { - "visibility": "CONNECTIONS" - } - }, - "name": "LinkedIn", - "type": "n8n-nodes-base.linkedIn", - "typeVersion": 1, - "position": [ - 550, - 200 - ], - "credentials": { - "linkedInOAuth2Api": { - "id": "74", - "name": "LinkedIn OAuth2 creds" - } - }, - "id": "63e56abf-2054-4691-99d7-e639d2a1af45" - }, - { - "parameters": { - "postAs": "person", - "person": "gpZ0alGajT", - "text": "=Test Post created by person at {{new Date()}}", - "shareMediaCategory": "IMAGE", - "additionalFields": { - "title": "=ImagePost {{Date.now()}}", - "visibility": "CONNECTIONS" - } - }, - "name": "LinkedIn1", - "type": "n8n-nodes-base.linkedIn", - "typeVersion": 1, - "position": [ - 560, - 350 - ], - "credentials": { - "linkedInOAuth2Api": { - "id": "74", - "name": "LinkedIn OAuth2 creds" - } - }, - "id": "a6a0d2d6-f399-41a3-88fe-a4b0c2d5512e" - }, - { - "parameters": { - "filePath": "/tmp/n8n-logo.png" - }, - "name": "Read Binary File", - "type": "n8n-nodes-base.readBinaryFile", - "typeVersion": 1, - "position": [ - 420, - 350 - ], - "id": "e80c32c0-f983-46cd-becc-e030b93732c7" - } - ], - "connections": { - "Read Binary File": { - "main": [ - [ - { - "node": "LinkedIn1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Read Binary File", - "type": "main", - "index": 0 - }, - { - "node": "LinkedIn", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/86.json b/test-workflows/workflows/86.json deleted file mode 100644 index 8e279991478..00000000000 --- a/test-workflows/workflows/86.json +++ /dev/null @@ -1,610 +0,0 @@ -{ - "createdAt": "2021-03-02T16:28:15.682Z", - "updatedAt": "2021-03-02T16:51:15.335Z", - "id": "86", - "name": "ActiveCampaign:Contact:create update get getAll delete:Account:create update get getAll delete:AccountContact:create update delete:ContactTag:add remove:ContactList:add remove", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 240, - 250 - ], - "id": "5e0c4a10-4f4c-4d7e-ac88-cfb0e0147e6d" - }, - { - "parameters": { - "email": "=fake{{Date.now()}}@gmail.com", - "additionalFields": {} - }, - "name": "ActiveCampaign", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 400, - 250 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "218c5b2e-6051-4f23-ba62-8d5b9deee1c6" - }, - { - "parameters": { - "operation": "update", - "contactId": "={{$node[\"ActiveCampaign\"].json[\"id\"]}}", - "updateFields": { - "email": "=updatedFake{{Date.now()}}@gmail.com" - } - }, - "name": "ActiveCampaign1", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 1860, - 420 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "305a7c81-ca92-4e98-af9e-16793b4ef154" - }, - { - "parameters": { - "operation": "get", - "contactId": "={{$node[\"ActiveCampaign\"].json[\"id\"]}}" - }, - "name": "ActiveCampaign2", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 2060, - 420 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "0793b6d4-3d35-49c9-ac08-783568dcbaf7" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "additionalFields": {} - }, - "name": "ActiveCampaign3", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 2240, - 420 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "577ef13f-7105-4d8a-bed7-e032a4dbd41e" - }, - { - "parameters": { - "operation": "delete", - "contactId": "={{$node[\"ActiveCampaign\"].json[\"id\"]}}" - }, - "name": "ActiveCampaign4", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 2700, - 580 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "fa91c140-0213-4490-b9d5-8bc7f58f076c" - }, - { - "parameters": { - "resource": "contactList", - "listId": 1, - "contactId": "={{$node[\"ActiveCampaign\"].json[\"id\"]}}" - }, - "name": "ActiveCampaign5", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 1800, - 600 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "9ec94695-33dd-4b2d-afa5-275f25c5519d" - }, - { - "parameters": { - "resource": "contactList", - "operation": "remove", - "listId": 1, - "contactId": "={{$node[\"ActiveCampaign\"].json[\"id\"]}}" - }, - "name": "ActiveCampaign6", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 2040, - 600 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "b1f7a747-06a7-4e0c-9492-da2b0d0058ee" - }, - { - "parameters": { - "resource": "contactTag", - "tagId": "1", - "contactId": "={{$node[\"ActiveCampaign\"].json[\"id\"]}}" - }, - "name": "ActiveCampaign7", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 1800, - 160 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "2fd08b2d-5fcc-4e53-ab07-0a4ccceb4343" - }, - { - "parameters": { - "resource": "contactTag", - "operation": "remove", - "contactTagId": "={{$node[\"ActiveCampaign7\"].json[\"id\"]}}" - }, - "name": "ActiveCampaign8", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 1950, - 160 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "7a5a5918-0d77-4244-bfda-81fa9a16bb4a" - }, - { - "parameters": { - "resource": "account", - "name": "=Name{{Date.now()}}", - "additionalFields": {} - }, - "name": "ActiveCampaign9", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 550, - 300 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "c27e3344-ae6d-4c50-9b68-fbe0cc933bff" - }, - { - "parameters": { - "resource": "account", - "operation": "update", - "accountId": "={{$node[\"ActiveCampaign9\"].json[\"id\"]}}", - "updateFields": { - "name": "=updatedName{{Date.now()}}" - } - }, - "name": "ActiveCampaign10", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 1150, - 300 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "f0488b6f-4e0a-4314-8748-0107fe6615f0" - }, - { - "parameters": { - "resource": "account", - "operation": "get", - "accountId": "={{$node[\"ActiveCampaign9\"].json[\"id\"]}}" - }, - "name": "ActiveCampaign11", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 1300, - 300 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "323985d0-1ee6-40c3-ac86-7ddd93755d92" - }, - { - "parameters": { - "resource": "account", - "operation": "getAll", - "limit": 1, - "filters": {} - }, - "name": "ActiveCampaign12", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 1450, - 300 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "0056df12-007e-49fe-a03f-b784e4c05354" - }, - { - "parameters": { - "resource": "account", - "operation": "delete", - "accountId": "={{$node[\"ActiveCampaign9\"].json[\"id\"]}}" - }, - "name": "ActiveCampaign13", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 1600, - 300 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "4149b2f7-c778-40d5-9e91-a652148bdb0f" - }, - { - "parameters": { - "resource": "accountContact", - "account": "={{$node[\"ActiveCampaign9\"].json[\"id\"]}}", - "contact": "={{$node[\"ActiveCampaign\"].json[\"id\"]}}", - "additionalFields": {} - }, - "name": "ActiveCampaign14", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 700, - 400 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "88202473-515f-443d-bdc2-79a79bf72228" - }, - { - "parameters": { - "resource": "accountContact", - "operation": "update", - "accountContactId": "={{$node[\"ActiveCampaign14\"].json[\"id\"]}}", - "updateFields": { - "jobTitle": "TestJobTitle" - } - }, - "name": "ActiveCampaign15", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 850, - 400 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "d5c849a3-4bd3-4d31-80f4-b842e725620a" - }, - { - "parameters": { - "resource": "accountContact", - "operation": "delete", - "accountContactId": "={{$node[\"ActiveCampaign14\"].json[\"id\"]}}" - }, - "name": "ActiveCampaign16", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 1000, - 400 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "3fadb7d0-4353-4bc9-9099-269db90d56e9" - }, - { - "parameters": { - "mode": "chooseBranch" - }, - "name": "Merge", - "type": "n8n-nodes-base.merge", - "typeVersion": 2.1, - "position": [ - 2480, - 580 - ], - "id": "e48d6833-8e96-4fd9-ba59-e6aef2d6dfba" - } - ], - "connections": { - "ActiveCampaign": { - "main": [ - [ - { - "node": "ActiveCampaign9", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign1": { - "main": [ - [ - { - "node": "ActiveCampaign2", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign2": { - "main": [ - [ - { - "node": "ActiveCampaign3", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign3": { - "main": [ - [ - { - "node": "Merge", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign5": { - "main": [ - [ - { - "node": "ActiveCampaign6", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign7": { - "main": [ - [ - { - "node": "ActiveCampaign8", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign8": { - "main": [ - [ - { - "node": "ActiveCampaign1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "ActiveCampaign", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign9": { - "main": [ - [ - { - "node": "ActiveCampaign14", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign10": { - "main": [ - [ - { - "node": "ActiveCampaign11", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign11": { - "main": [ - [ - { - "node": "ActiveCampaign12", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign12": { - "main": [ - [ - { - "node": "ActiveCampaign13", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign14": { - "main": [ - [ - { - "node": "ActiveCampaign15", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign15": { - "main": [ - [ - { - "node": "ActiveCampaign16", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign16": { - "main": [ - [ - { - "node": "ActiveCampaign10", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign13": { - "main": [ - [ - { - "node": "ActiveCampaign5", - "type": "main", - "index": 0 - }, - { - "node": "ActiveCampaign7", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign6": { - "main": [ - [ - { - "node": "Merge", - "type": "main", - "index": 1 - } - ] - ] - }, - "Merge": { - "main": [ - [ - { - "node": "ActiveCampaign4", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/87.json b/test-workflows/workflows/87.json deleted file mode 100644 index f2e5ab49bd7..00000000000 --- a/test-workflows/workflows/87.json +++ /dev/null @@ -1,667 +0,0 @@ -{ - "createdAt": "2021-03-02T17:11:06.700Z", - "updatedAt": "2021-03-02T17:38:14.995Z", - "id": "87", - "name": "ActiveCampaign:Deal:create update get createNote updateNote getAll delete:Tag:create update get getAll delete:Connection:create update get getAll delete:List:getAll", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 50, - 550 - ], - "id": "a2295ea9-244a-4306-8154-22eb9bbcb44e" - }, - { - "parameters": { - "resource": "connection", - "service": "n8n", - "externalid": "={{Date.now()}}", - "name": "=Name{{Date.now()}}", - "logoUrl": "https://n8n.io/_nuxt/img/df5be1c.png", - "linkUrl": "https://n8n.io/" - }, - "name": "ActiveCampaign", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "5a58849c-68a7-4df6-afc6-15bfcf9e542a" - }, - { - "parameters": { - "resource": "connection", - "operation": "update", - "connectionId": "={{$node[\"ActiveCampaign\"].json[\"connection\"][\"id\"]}}", - "updateFields": { - "syncStatus": 0 - } - }, - "name": "ActiveCampaign1", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 400, - 300 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "90f92758-d9a4-4c9f-95b6-a0dfce8ad0a6" - }, - { - "parameters": { - "resource": "connection", - "operation": "get", - "connectionId": "={{$node[\"ActiveCampaign\"].json[\"connection\"][\"id\"]}}" - }, - "name": "ActiveCampaign2", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 550, - 300 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "2c023901-6976-4e87-a1cd-5578e1b0e39e" - }, - { - "parameters": { - "resource": "connection", - "operation": "getAll", - "limit": 1 - }, - "name": "ActiveCampaign3", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 700, - 300 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "3ac46999-9c81-4d69-b5af-b302cbf17495" - }, - { - "parameters": { - "resource": "connection", - "operation": "delete", - "connectionId": "={{$node[\"ActiveCampaign\"].json[\"connection\"][\"id\"]}}" - }, - "name": "ActiveCampaign4", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 850, - 300 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "6ee06c8c-76b8-421e-a663-1749ab15173c" - }, - { - "parameters": { - "email": "=fake{{Date.now()}}@gmail.com", - "additionalFields": {} - }, - "name": "ActiveCampaign5", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 250, - 470 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "7b0271b5-ffde-4e57-9389-e35cdc23f7a3" - }, - { - "parameters": { - "resource": "deal", - "title": "=Title{{Date.now()}}", - "contact": "={{$node[\"ActiveCampaign5\"].json[\"id\"]}}", - "value": 101, - "currency": "usd", - "group": "1", - "stage": "0", - "owner": "1", - "additionalFields": {} - }, - "name": "ActiveCampaign7", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 400, - 550 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "90219b3a-7ebc-497f-b757-f03f7267b82a" - }, - { - "parameters": { - "resource": "list", - "limit": 1 - }, - "name": "ActiveCampaign8", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 250, - 650 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "0311b73b-b4d4-4e26-a527-f853bbb6e919" - }, - { - "parameters": { - "resource": "tag", - "name": "=Tag{{Date.now()}}", - "additionalFields": {} - }, - "name": "ActiveCampaign9", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 250, - 800 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "f9cb63f2-8f09-4588-b72c-454a2d46d254" - }, - { - "parameters": { - "resource": "tag", - "operation": "update", - "tagId": "={{$node[\"ActiveCampaign9\"].json[\"id\"]}}", - "updateFields": {} - }, - "name": "ActiveCampaign10", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 400, - 800 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "518317dc-7765-4bf6-9430-9bb38bd15427" - }, - { - "parameters": { - "resource": "tag", - "operation": "get", - "tagId": "={{$node[\"ActiveCampaign9\"].json[\"id\"]}}" - }, - "name": "ActiveCampaign11", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 550, - 800 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "b8fa4436-7059-467f-b38e-32d1fb0d1322" - }, - { - "parameters": { - "resource": "tag", - "operation": "getAll", - "limit": 1 - }, - "name": "ActiveCampaign12", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 700, - 800 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "8c8fda95-bd1d-41c4-9b56-7946e4f8f246" - }, - { - "parameters": { - "resource": "tag", - "operation": "delete", - "tagId": "={{$node[\"ActiveCampaign9\"].json[\"id\"]}}" - }, - "name": "ActiveCampaign13", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 850, - 800 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "1e3f23a3-4905-43f3-bace-5c3bc340e6f1" - }, - { - "parameters": { - "resource": "deal", - "operation": "update", - "dealId": "={{$node[\"ActiveCampaign7\"].json[\"deal\"][\"id\"]}}", - "updateFields": { - "value": 201 - } - }, - "name": "ActiveCampaign14", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 550, - 550 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "a4c82ca4-f15b-4b4a-9f0c-4fff2720db1f" - }, - { - "parameters": { - "resource": "deal", - "operation": "get", - "dealId": "={{$node[\"ActiveCampaign7\"].json[\"deal\"][\"id\"]}}" - }, - "name": "ActiveCampaign15", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 700, - 550 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "900af275-1075-41e6-983d-f8522ea792c7" - }, - { - "parameters": { - "resource": "deal", - "operation": "createNote", - "dealId": "={{$node[\"ActiveCampaign7\"].json[\"deal\"][\"id\"]}}", - "dealNote": "TestNote" - }, - "name": "ActiveCampaign16", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 850, - 550 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "e2fcb50a-69e9-4588-958d-d9d55863bc6d" - }, - { - "parameters": { - "resource": "deal", - "operation": "updateNote", - "dealId": "={{$node[\"ActiveCampaign7\"].json[\"deal\"][\"id\"]}}", - "dealNoteId": "={{$node[\"ActiveCampaign16\"].json[\"note\"][\"id\"]}}", - "dealNote": "UpdatedNote" - }, - "name": "ActiveCampaign17", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 1000, - 550 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "eeddfcc2-e580-4f0f-80ad-382a38ef4f31" - }, - { - "parameters": { - "resource": "deal", - "operation": "getAll", - "limit": 1 - }, - "name": "ActiveCampaign18", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 1150, - 550 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "ad04ac82-0369-4006-aacd-e87b8dbbc6f8" - }, - { - "parameters": { - "resource": "deal", - "operation": "delete", - "dealId": "={{$node[\"ActiveCampaign7\"].json[\"deal\"][\"id\"]}}" - }, - "name": "ActiveCampaign19", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 1300, - 550 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "83432217-ae3f-4ecb-8cbb-fe21e1105146" - }, - { - "parameters": { - "operation": "delete", - "contactId": "={{$node[\"ActiveCampaign5\"].json[\"id\"]}}" - }, - "name": "ActiveCampaign6", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 1450, - 470 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "7492e380-426b-4c06-98bd-13a5a10b3232" - } - ], - "connections": { - "ActiveCampaign": { - "main": [ - [ - { - "node": "ActiveCampaign1", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign1": { - "main": [ - [ - { - "node": "ActiveCampaign2", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign2": { - "main": [ - [ - { - "node": "ActiveCampaign3", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign3": { - "main": [ - [ - { - "node": "ActiveCampaign4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "ActiveCampaign", - "type": "main", - "index": 0 - }, - { - "node": "ActiveCampaign5", - "type": "main", - "index": 0 - }, - { - "node": "ActiveCampaign8", - "type": "main", - "index": 0 - }, - { - "node": "ActiveCampaign9", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign5": { - "main": [ - [ - { - "node": "ActiveCampaign7", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign9": { - "main": [ - [ - { - "node": "ActiveCampaign10", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign10": { - "main": [ - [ - { - "node": "ActiveCampaign11", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign11": { - "main": [ - [ - { - "node": "ActiveCampaign12", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign12": { - "main": [ - [ - { - "node": "ActiveCampaign13", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign7": { - "main": [ - [ - { - "node": "ActiveCampaign14", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign14": { - "main": [ - [ - { - "node": "ActiveCampaign15", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign15": { - "main": [ - [ - { - "node": "ActiveCampaign16", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign16": { - "main": [ - [ - { - "node": "ActiveCampaign17", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign17": { - "main": [ - [ - { - "node": "ActiveCampaign18", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign18": { - "main": [ - [ - { - "node": "ActiveCampaign19", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign19": { - "main": [ - [ - { - "node": "ActiveCampaign6", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/88.json b/test-workflows/workflows/88.json deleted file mode 100644 index 6e0da6d560f..00000000000 --- a/test-workflows/workflows/88.json +++ /dev/null @@ -1,600 +0,0 @@ -{ - "createdAt": "2021-03-02T17:43:57.153Z", - "updatedAt": "2021-03-02T18:24:50.151Z", - "id": "88", - "name": "ActiveCampaign:EcommerceCustomer:create update get getAll delete:EcommerceOrder:create update get getAll delete:EcommerceOrderProduct:getByProductId getByOrderId getAll", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "d98ebf73-d4b9-4f3c-8959-09921d971af4" - }, - { - "parameters": { - "resource": "connection", - "service": "n8n", - "externalid": "=account{{Date.now()}}", - "name": "=AccountName{{Date.now()}}", - "logoUrl": "https://n8n.io/_nuxt/img/df5be1c.png", - "linkUrl": "https://n8n.io" - }, - "name": "ActiveCampaign", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "06f9b5c8-7772-4e1f-aa36-cff61ad6d9c7" - }, - { - "parameters": { - "resource": "ecommerceCustomer", - "connectionid": "={{$node[\"ActiveCampaign\"].json[\"connection\"][\"id\"]}}", - "externalid": "=customer{{Date.now()}}", - "email": "=fake{{Date.now()}}@gmail.com", - "additionalFields": {} - }, - "name": "ActiveCampaign1", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 600, - 350 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "3bc4598b-fbad-4f70-afbf-24094a92c3ac" - }, - { - "parameters": { - "resource": "ecommerceCustomer", - "operation": "update", - "ecommerceCustomerId": "={{$node[\"ActiveCampaign1\"].json[\"ecomCustomer\"][\"id\"]}}", - "updateFields": { - "acceptsMarketing": true - } - }, - "name": "ActiveCampaign2", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 1930, - 350 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "177ccb5e-64cb-4614-9d06-d03391a99606" - }, - { - "parameters": { - "resource": "ecommerceCustomer", - "operation": "get", - "ecommerceCustomerId": "={{$node[\"ActiveCampaign1\"].json[\"ecomCustomer\"][\"id\"]}}" - }, - "name": "ActiveCampaign3", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 2080, - 350 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "d0aac97c-66df-498b-b350-75a5b43db790" - }, - { - "parameters": { - "resource": "ecommerceCustomer", - "operation": "getAll", - "limit": 1 - }, - "name": "ActiveCampaign4", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 2230, - 350 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "01924984-0fd8-4aad-9c87-d672d22062f9" - }, - { - "parameters": { - "resource": "ecommerceCustomer", - "operation": "delete", - "ecommerceCustomerId": "={{$node[\"ActiveCampaign1\"].json[\"ecomCustomer\"][\"id\"]}}" - }, - "name": "ActiveCampaign5", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 2700, - 350 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "c0d51d56-316e-4c3a-902e-e2806b357e49" - }, - { - "parameters": { - "resource": "connection", - "operation": "delete", - "connectionId": "={{$node[\"ActiveCampaign\"].json[\"connection\"][\"id\"]}}" - }, - "name": "ActiveCampaign6", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 2960, - 310 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "0e5e9588-0159-4573-8a12-80c28597d5d2" - }, - { - "parameters": { - "resource": "ecommerceOrder", - "externalid": "=externalOrderId{{Date.now()}}", - "email": "=customerEmail{{Date.now()}}@gmail.com", - "totalPrice": 101, - "connectionid": "={{$node[\"ActiveCampaign1\"].json[\"connections\"][0][\"id\"]}}", - "customerid": "={{$node[\"ActiveCampaign1\"].json[\"ecomCustomer\"][\"id\"]}}", - "externalCreatedDate": "2021-03-02T17:48:16.000Z", - "orderProducts": [ - { - "name": "=Product{{Date.now()}}", - "price": 101, - "externalid": "=ProductId{{Date.now()}}", - "category": "Test", - "quantity": 1 - } - ], - "additionalFields": {} - }, - "name": "ActiveCampaign7", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 750, - 500 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "625154fe-1a64-4d75-aaf8-98acd9e9ada7" - }, - { - "parameters": { - "resource": "ecommerceOrder", - "operation": "update", - "orderId": "={{$node[\"ActiveCampaign7\"].json[\"ecomOrder\"][\"id\"]}}", - "updateFields": { - "totalPrice": 201 - } - }, - "name": "ActiveCampaign8", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 1330, - 500 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "426277b4-5376-46fb-a536-685e850db4f2" - }, - { - "parameters": { - "resource": "ecommerceOrder", - "operation": "get", - "orderId": "={{$node[\"ActiveCampaign7\"].json[\"ecomOrder\"][\"id\"]}}" - }, - "name": "ActiveCampaign9", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 1480, - 500 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "9f79b204-ac2e-4bc9-ba28-88f26e4361e0" - }, - { - "parameters": { - "resource": "ecommerceOrder", - "operation": "getAll", - "limit": 1 - }, - "name": "ActiveCampaign10", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 1630, - 500 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "55383188-29bf-4d80-aea0-643f2944e449" - }, - { - "parameters": { - "resource": "ecommerceOrder", - "operation": "delete", - "orderId": "={{$node[\"ActiveCampaign7\"].json[\"ecomOrder\"][\"id\"]}}" - }, - "name": "ActiveCampaign11", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 1780, - 500 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "9adb900b-6822-40b3-972b-8c3dba51d737" - }, - { - "parameters": { - "resource": "ecommerceOrderProducts", - "operation": "getByProductId", - "procuctId": "={{$node[\"ActiveCampaign7\"].json[\"ecomOrderProducts\"][0][\"id\"]}}" - }, - "name": "ActiveCampaign12", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 900, - 630 - ], - "alwaysOutputData": true, - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "6b7ec0c7-d112-40b7-87ab-92a16261a0d6" - }, - { - "parameters": { - "resource": "ecommerceOrderProducts", - "operation": "getByOrderId", - "orderId": "={{$node[\"ActiveCampaign7\"].json[\"ecomOrder\"][\"id\"]}}" - }, - "name": "ActiveCampaign13", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 1050, - 630 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "eb9239ee-e92e-438b-9301-4f91297067ee" - }, - { - "parameters": { - "resource": "ecommerceOrderProducts", - "limit": 1 - }, - "name": "ActiveCampaign14", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 1200, - 630 - ], - "alwaysOutputData": true, - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "7ea53540-9953-40a7-bcb9-0fb103bfb66a" - }, - { - "parameters": { - "operation": "getAll", - "limit": 1, - "additionalFields": { - "email": "={{$node[\"ActiveCampaign3\"].json[\"ecomCustomer\"][\"email\"]}}" - } - }, - "name": "ActiveCampaign15", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 2400, - 200 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "39812fca-6913-46d6-8210-0ec0319fd590" - }, - { - "parameters": { - "operation": "delete", - "contactId": "={{$node[\"ActiveCampaign15\"].json[\"id\"]}}" - }, - "name": "ActiveCampaign16", - "type": "n8n-nodes-base.activeCampaign", - "typeVersion": 1, - "position": [ - 2550, - 200 - ], - "credentials": { - "activeCampaignApi": { - "id": "75", - "name": "ActiveCampaign creds" - } - }, - "id": "59d52f2b-810a-437e-b5ce-885cc1ff746b" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "ActiveCampaign", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign": { - "main": [ - [ - { - "node": "ActiveCampaign1", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign1": { - "main": [ - [ - { - "node": "ActiveCampaign7", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign2": { - "main": [ - [ - { - "node": "ActiveCampaign3", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign3": { - "main": [ - [ - { - "node": "ActiveCampaign4", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign4": { - "main": [ - [ - { - "node": "ActiveCampaign15", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign5": { - "main": [ - [ - { - "node": "ActiveCampaign6", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign7": { - "main": [ - [ - { - "node": "ActiveCampaign12", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign8": { - "main": [ - [ - { - "node": "ActiveCampaign9", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign9": { - "main": [ - [ - { - "node": "ActiveCampaign10", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign10": { - "main": [ - [ - { - "node": "ActiveCampaign11", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign11": { - "main": [ - [ - { - "node": "ActiveCampaign2", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign12": { - "main": [ - [ - { - "node": "ActiveCampaign13", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign13": { - "main": [ - [ - { - "node": "ActiveCampaign14", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign14": { - "main": [ - [ - { - "node": "ActiveCampaign8", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign15": { - "main": [ - [ - { - "node": "ActiveCampaign16", - "type": "main", - "index": 0 - } - ] - ] - }, - "ActiveCampaign16": { - "main": [ - [ - { - "node": "ActiveCampaign5", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/89.json b/test-workflows/workflows/89.json deleted file mode 100644 index c1d09463899..00000000000 --- a/test-workflows/workflows/89.json +++ /dev/null @@ -1,438 +0,0 @@ -{ - "createdAt": "2021-03-03T09:10:46.509Z", - "updatedAt": "2021-03-03T09:14:14.253Z", - "id": "89", - "name": "S3:Bucket:create getAll search:File:upload getAll download copy delete:Folder:create getAll delete", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 100, - 450 - ], - "id": "5f0064e0-df3f-4b86-9ff6-5914642a97b3" - }, - { - "parameters": { - "resource": "bucket", - "name": "=Bucket{{Date.now()}}", - "additionalFields": {} - }, - "name": "S3", - "type": "n8n-nodes-base.s3", - "typeVersion": 1, - "position": [ - 300, - 300 - ], - "credentials": { - "s3": { - "id": "76", - "name": "S3 creds" - } - }, - "id": "48d6cb9a-a344-4be5-919e-3221f2f8a240" - }, - { - "parameters": { - "resource": "bucket", - "operation": "getAll", - "limit": 1 - }, - "name": "S", - "type": "n8n-nodes-base.s3", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "credentials": { - "s3": { - "id": "76", - "name": "S3 creds" - } - }, - "id": "49b3346f-3156-4c9e-af2d-73387c596049" - }, - { - "parameters": { - "resource": "bucket", - "operation": "search", - "bucketName": "={{$node[\"S\"].json[\"Name\"]}}", - "limit": 1, - "additionalFields": {} - }, - "name": "S1", - "type": "n8n-nodes-base.s3", - "typeVersion": 1, - "position": [ - 600, - 300 - ], - "credentials": { - "s3": { - "id": "76", - "name": "S3 creds" - } - }, - "id": "81e8284f-6314-473b-8eb4-8c3fbbdd88e6" - }, - { - "parameters": { - "operation": "upload", - "bucketName": "fixedbucket", - "fileName": "=File{{Date.now()}}", - "additionalFields": {}, - "tagsUi": { - "tagsValues": [] - } - }, - "name": "S2", - "type": "n8n-nodes-base.s3", - "typeVersion": 1, - "position": [ - 450, - 450 - ], - "credentials": { - "s3": { - "id": "76", - "name": "S3 creds" - } - }, - "id": "25ce2a12-596f-4a9e-b406-3810ccba7db7" - }, - { - "parameters": { - "filePath": "/tmp/n8n-logo.png" - }, - "name": "Read Binary File", - "type": "n8n-nodes-base.readBinaryFile", - "typeVersion": 1, - "position": [ - 300, - 450 - ], - "id": "c8f464bb-d963-449f-8ee7-ad8d29e70271" - }, - { - "parameters": { - "operation": "getAll", - "bucketName": "fixedbucket", - "limit": 1, - "options": {} - }, - "name": "S4", - "type": "n8n-nodes-base.s3", - "typeVersion": 1, - "position": [ - 600, - 450 - ], - "credentials": { - "s3": { - "id": "76", - "name": "S3 creds" - } - }, - "id": "349ae355-80cd-492d-b08c-2d75ccb35382" - }, - { - "parameters": { - "bucketName": "fixedbucket", - "fileKey": "={{$node[\"S4\"].json[\"Key\"]}}" - }, - "name": "S5", - "type": "n8n-nodes-base.s3", - "typeVersion": 1, - "position": [ - 750, - 450 - ], - "credentials": { - "s3": { - "id": "76", - "name": "S3 creds" - } - }, - "id": "e8e125d4-e4dc-44ef-8a80-0d7643cbe7e7" - }, - { - "parameters": { - "operation": "copy", - "sourcePath": "=/fixedbucket/{{$node[\"S4\"].json[\"Key\"]}}", - "destinationPath": "=/fixedbucket/Copied{{$node[\"S4\"].json[\"Key\"]}}", - "additionalFields": {} - }, - "name": "S6", - "type": "n8n-nodes-base.s3", - "typeVersion": 1, - "position": [ - 900, - 450 - ], - "credentials": { - "s3": { - "id": "76", - "name": "S3 creds" - } - }, - "id": "f9fee53d-4c4d-43db-9d90-e128929800ee" - }, - { - "parameters": { - "operation": "delete", - "bucketName": "fixedbucket", - "fileKey": "={{$node[\"S4\"].json[\"Key\"]}}", - "options": {} - }, - "name": "S7", - "type": "n8n-nodes-base.s3", - "typeVersion": 1, - "position": [ - 1050, - 450 - ], - "credentials": { - "s3": { - "id": "76", - "name": "S3 creds" - } - }, - "id": "2125301b-ec39-4590-91a6-b72f18f8bdfd" - }, - { - "parameters": { - "operation": "delete", - "bucketName": "fixedbucket", - "fileKey": "=Copied{{$node[\"S4\"].json[\"Key\"]}}", - "options": {} - }, - "name": "S8", - "type": "n8n-nodes-base.s3", - "typeVersion": 1, - "position": [ - 1200, - 450 - ], - "credentials": { - "s3": { - "id": "76", - "name": "S3 creds" - } - }, - "id": "19563d5e-0131-40be-afac-d9c71ae9a4b6" - }, - { - "parameters": { - "resource": "folder", - "bucketName": "fixedbucket", - "folderName": "=Folder{{Date.now()}}", - "additionalFields": {} - }, - "name": "S9", - "type": "n8n-nodes-base.s3", - "typeVersion": 1, - "position": [ - 300, - 600 - ], - "credentials": { - "s3": { - "id": "76", - "name": "S3 creds" - } - }, - "id": "7171d305-06da-4448-934a-b6fc78a1a7f4" - }, - { - "parameters": { - "resource": "folder", - "operation": "getAll", - "bucketName": "fixedbucket", - "limit": 1, - "options": {} - }, - "name": "S10", - "type": "n8n-nodes-base.s3", - "typeVersion": 1, - "position": [ - 450, - 600 - ], - "credentials": { - "s3": { - "id": "76", - "name": "S3 creds" - } - }, - "id": "ff9b78fb-9d66-4ec0-a096-2cf4d183baae" - }, - { - "parameters": { - "resource": "folder", - "operation": "delete", - "bucketName": "fixedbucket", - "folderKey": "={{$node[\"S10\"].json[\"Key\"]}}" - }, - "name": "S11", - "type": "n8n-nodes-base.s3", - "typeVersion": 1, - "position": [ - 600, - 600 - ], - "credentials": { - "s3": { - "id": "76", - "name": "S3 creds" - } - }, - "id": "8b2e8c9a-a7be-4c86-b3f5-d3f03c18a8e0" - } - ], - "connections": { - "S3": { - "main": [ - [ - { - "node": "S", - "type": "main", - "index": 0 - } - ] - ] - }, - "S": { - "main": [ - [ - { - "node": "S1", - "type": "main", - "index": 0 - } - ] - ] - }, - "S2": { - "main": [ - [ - { - "node": "S4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Read Binary File": { - "main": [ - [ - { - "node": "S2", - "type": "main", - "index": 0 - } - ] - ] - }, - "S4": { - "main": [ - [ - { - "node": "S5", - "type": "main", - "index": 0 - } - ] - ] - }, - "S5": { - "main": [ - [ - { - "node": "S6", - "type": "main", - "index": 0 - } - ] - ] - }, - "S6": { - "main": [ - [ - { - "node": "S7", - "type": "main", - "index": 0 - } - ] - ] - }, - "S7": { - "main": [ - [ - { - "node": "S8", - "type": "main", - "index": 0 - } - ] - ] - }, - "S9": { - "main": [ - [ - { - "node": "S10", - "type": "main", - "index": 0 - } - ] - ] - }, - "S10": { - "main": [ - [ - { - "node": "S11", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Read Binary File", - "type": "main", - "index": 0 - }, - { - "node": "S3", - "type": "main", - "index": 0 - }, - { - "node": "S9", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/90.json b/test-workflows/workflows/90.json deleted file mode 100644 index 971225d8783..00000000000 --- a/test-workflows/workflows/90.json +++ /dev/null @@ -1,220 +0,0 @@ -{ - "createdAt": "2021-03-03T09:55:59.197Z", - "updatedAt": "2021-03-03T09:56:30.684Z", - "id": "90", - "name": "Date&Time:formatDate", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "9f4c1cf1-66f7-4a2e-86a3-0ef54cff1666" - }, - { - "parameters": { - "value": "1614764492648", - "options": { - "fromFormat": "x" - } - }, - "name": "Date & Time", - "type": "n8n-nodes-base.dateTime", - "typeVersion": 1, - "position": [ - 400, - 300 - ], - "id": "c1251fbd-cd97-4d51-bbf0-4ecce33e588a" - }, - { - "parameters": { - "value": "1614764492648", - "toFormat": "YYYY/MM/DD", - "options": { - "fromFormat": "x" - } - }, - "name": "Date & Time1", - "type": "n8n-nodes-base.dateTime", - "typeVersion": 1, - "position": [ - 550, - 300 - ], - "id": "57ab6614-af49-4555-8158-11ee5771b2e7" - }, - { - "parameters": { - "value": "1614764492648", - "toFormat": "MMMM DD YYYY", - "options": { - "fromFormat": "x" - } - }, - "name": "Date & Time2", - "type": "n8n-nodes-base.dateTime", - "typeVersion": 1, - "position": [ - 700, - 300 - ], - "id": "bf0a4b07-62ce-4234-8dfe-a2f582d40bd8" - }, - { - "parameters": { - "value": "1614764492648", - "toFormat": "MM-DD-YYYY", - "options": { - "fromFormat": "x" - } - }, - "name": "Date & Time3", - "type": "n8n-nodes-base.dateTime", - "typeVersion": 1, - "position": [ - 850, - 300 - ], - "id": "8b429a06-bce9-49d0-9277-038bc06c8463" - }, - { - "parameters": { - "value": "1614764492648", - "toFormat": "YYYY-MM-DD", - "options": { - "fromFormat": "x" - } - }, - "name": "Date & Time4", - "type": "n8n-nodes-base.dateTime", - "typeVersion": 1, - "position": [ - 1000, - 300 - ], - "id": "8e0681ff-dd9f-4e6d-83cf-18a1e72fe1e1" - }, - { - "parameters": { - "value": "1614764492648", - "toFormat": "X", - "options": { - "fromFormat": "x" - } - }, - "name": "Date & Time5", - "type": "n8n-nodes-base.dateTime", - "typeVersion": 1, - "position": [ - 1150, - 300 - ], - "id": "4917a56c-7455-4354-a018-cec74552e203" - }, - { - "parameters": { - "functionCode": "\n// mm/dd/yyyy\nif($node[\"Date & Time\"].json[\"data\"] !== \"03/03/2021\")\n{\n throw new Error(\"Error convert date to mm/dd/yyyy\");\n}\n// yyyy/mm/dd\nif($node[\"Date & Time1\"].json[\"data\"] !== \"2021/03/03\")\n{\n throw new Error(\"Error convert date to yyyy/mm/dd\");\n}\n// mmmm dd yyyy\nif($node[\"Date & Time2\"].json[\"data\"] !== \"March 03 2021\")\n{\n throw new Error(\"Error convert date to mmmm dd yyyy\");\n}\n// mm-dd-yyyy\nif($node[\"Date & Time3\"].json[\"data\"] !== \"03-03-2021\")\n{\n throw new Error(\"Error convert date to mm-dd-yyyy\");\n}\n// yyyy-mm-dd\nif($node[\"Date & Time4\"].json[\"data\"] !== \"2021-03-03\")\n{ \n throw new Error(\"Error convert date to yyyy-mm-dd\");\n}\n// unix timestamp\nif($node[\"Date & Time5\"].json[\"data\"] !== \"1614764492\")\n{ \n throw new Error(\"Error convert date to unix timestamp\");\n}\nreturn items;" - }, - "name": "Function", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 1350, - 300 - ], - "id": "fe192bd8-40ce-4b2d-b467-837c1c208ee3" - } - ], - "connections": { - "Date & Time": { - "main": [ - [ - { - "node": "Date & Time1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Date & Time1": { - "main": [ - [ - { - "node": "Date & Time2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Date & Time2": { - "main": [ - [ - { - "node": "Date & Time3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Date & Time3": { - "main": [ - [ - { - "node": "Date & Time4", - "type": "main", - "index": 0 - } - ] - ] - }, - "Date & Time4": { - "main": [ - [ - { - "node": "Date & Time5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Date & Time5": { - "main": [ - [ - { - "node": "Function", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Date & Time", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/91.json b/test-workflows/workflows/91.json deleted file mode 100644 index 7d5813a167a..00000000000 --- a/test-workflows/workflows/91.json +++ /dev/null @@ -1,200 +0,0 @@ -{ - "createdAt": "2021-03-03T10:18:29.938Z", - "updatedAt": "2021-03-03T10:18:35.288Z", - "id": "91", - "name": "HTML Extract:json binary", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "51f39bec-0696-4ff7-93a8-26d105a5edfc" - }, - { - "parameters": { - "functionCode": "item.data = `\n\n\n\n
\"background
\"background
\"background

\n\t\t\t\t\t\tExtendable workflow automation\n\t\t\t\t\t

\"n8n
\n\t\tGithub\n\t
\"Play

\n\t\t\t\t\t\tWatch how simple it is to design a\n\t\t\t\t\t\tTypeform +\n\t\t\t\t\t\tGoogle Sheets +\n\t\t\t\t\t\tSlack workflow\n\t\t\t\t\t

Open icon

Open

\n\t\t\t\t\t\tThanks to our fair-code license, run n8n locally, or the cloud.\n\t\t\t\t\t\tDecide who gets access and where your data is stored.\n\t\t\t\t\t

Extendable icon

Extendable

\n\t\t\t\t\t\tEasy to augment with custom functions logic, and apps with minimal\n\t\t\t\t\t\tengineering effort.\n\t\t\t\t\t

Powerful icon

Powerful

\n\t\t\t\t\t\tn8n's node based editor lets you map anything to everything and go\n\t\t\t\t\t\tbeyond basic ETL.\n\t\t\t\t\t

What can I do with n8n?

Sync data between 150+ apps

\n\t\t\t\t\t\t\tMove and transform data between different apps and databases without getting caught up in API docs and troubleshooting CORS errors.\n\t\t\t\t\t\t

Design powerful workflows

Create custom integrations

\n\t\t\t\t\t\t\tSee what else you can do with n8n! Visit our\n\t\t\t\t\t\t\tMedium publication

How to get started?

\n\t\t\t\t\t\tCLI\n\t\t\t\t\t

\n\t\tClick to copy\n\t
\n\t\tClick to copy\n\t

\n\t\t\t\t\t\tDocker\n\t\t\t\t\t

\n\t\tClick to copy\n\t
\n\t\t\t\t\t\t\t\tn8n.cloud - our hosted offering is now in early access\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\tGet updates from n8n\n\t\t\t\t\t

Subscribe to our newsletter

\n\t\tBy submitting your email address you agree to your personal data being\n\t\tstored and used to provide you with information and commercial offers\n\t\tabout n8n.\n\t

\n
\n\n`;\nreturn item;" - }, - "name": "FunctionItem", - "type": "n8n-nodes-base.functionItem", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "notesInFlow": true, - "notes": "Set html data", - "id": "70ab3e66-cac8-45fd-917d-838e2538ad69" - }, - { - "parameters": { - "extractionValues": { - "values": [ - { - "key": "extracted", - "cssSelector": "li>a", - "returnArray": true - } - ] - }, - "options": { - "trimValues": true - } - }, - "name": "HTML Extract", - "type": "n8n-nodes-base.htmlExtract", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "id": "f27a2f9c-1946-4cac-96fe-d980fe2e5077" - }, - { - "parameters": { - "functionCode": "testData = [ \"Quickstart\", \"Apps & nodes\", \"Workflows\", \"Docs\", \"Github\", \"Forum\", \"Blog\", \"Contribute\", \"n8n.cloud\", \"Sign in\", \"Register\", \"Quickstart\", \"Apps & nodes\", \"Workflows\", \"Docs\", \"Github\", \"Forum\", \"Blog\", \"Contribute\", \"n8n.cloud\", \"Sign in\", \"Register\" ].join('');\nresultData = $node[\"HTML Extract\"].json[\"extracted\"].join('')\nif(testData !== resultData){\n throw new Error('Error in extracting html from json data');\n}\nreturn items;" - }, - "name": "Function", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 850, - 300 - ], - "notesInFlow": true, - "notes": "Verify the result", - "id": "97bc0163-8d74-4f5b-b65c-ec1354333908" - }, - { - "parameters": { - "mode": "jsonToBinary", - "convertAllData": false, - "options": { - "useRawData": true - } - }, - "name": "Move Binary Data", - "type": "n8n-nodes-base.moveBinaryData", - "typeVersion": 1, - "position": [ - 650, - 500 - ], - "id": "c25511ef-8cbc-4d29-bc2f-3983d900e802" - }, - { - "parameters": { - "sourceData": "binary", - "extractionValues": { - "values": [ - { - "key": "extracted", - "cssSelector": "li>a", - "returnArray": true - } - ] - }, - "options": { - "trimValues": true - } - }, - "name": "HTML Extract1", - "type": "n8n-nodes-base.htmlExtract", - "typeVersion": 1, - "position": [ - 850, - 500 - ], - "id": "9df0c1ed-008b-4820-958f-c87330a9000d" - }, - { - "parameters": { - "functionCode": "testData = [ \"Quickstart\", \"Apps & nodes\", \"Workflows\", \"Docs\", \"Github\", \"Forum\", \"Blog\", \"Contribute\", \"n8n.cloud\", \"Sign in\", \"Register\", \"Quickstart\", \"Apps & nodes\", \"Workflows\", \"Docs\", \"Github\", \"Forum\", \"Blog\", \"Contribute\", \"n8n.cloud\", \"Sign in\", \"Register\" ].join('');\nresultData = $node[\"HTML Extract1\"].json[\"extracted\"].join('')\nif(testData !== resultData){\n throw new Error('Error in extracting html from binary data');\n}\nreturn items;" - }, - "name": "Function1", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 1050, - 500 - ], - "notesInFlow": true, - "notes": "Verify the result", - "id": "a36ed52d-5256-4cbf-b96f-596574b092fc" - } - ], - "connections": { - "FunctionItem": { - "main": [ - [ - { - "node": "HTML Extract", - "type": "main", - "index": 0 - }, - { - "node": "Move Binary Data", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "FunctionItem", - "type": "main", - "index": 0 - } - ] - ] - }, - "HTML Extract": { - "main": [ - [ - { - "node": "Function", - "type": "main", - "index": 0 - } - ] - ] - }, - "Move Binary Data": { - "main": [ - [ - { - "node": "HTML Extract1", - "type": "main", - "index": 0 - } - ] - ] - }, - "HTML Extract1": { - "main": [ - [ - { - "node": "Function1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/92.json b/test-workflows/workflows/92.json deleted file mode 100644 index fd073c27c59..00000000000 --- a/test-workflows/workflows/92.json +++ /dev/null @@ -1,864 +0,0 @@ -{ - "createdAt": "2021-03-03T12:12:08.076Z", - "updatedAt": "2021-03-03T12:18:09.812Z", - "id": "92", - "name": "IF", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 260, - 300 - ], - "id": "6ae1c6d7-2986-491e-9657-e173e8c700e0" - }, - { - "parameters": { - "conditions": { - "boolean": [ - { - "value1": true, - "operation": "notEqual" - } - ] - } - }, - "name": "IF", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 450, - 100 - ], - "id": "744cd7d3-fe05-416b-afe4-3fd9f02d684b" - }, - { - "parameters": { - "conditions": { - "boolean": [], - "dateTime": [ - { - "value1": "2021-03-01T23:00:00.000Z", - "value2": "2021-02-28T23:00:00.000Z" - } - ] - } - }, - "name": "IF1", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 450, - 250 - ], - "id": "d9d7145d-0f47-4ac1-b51d-cae45a77cbab" - }, - { - "parameters": { - "conditions": { - "boolean": [], - "dateTime": [], - "number": [ - { - "value1": 5, - "value2": 10 - } - ] - } - }, - "name": "IF2", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 450, - 410 - ], - "id": "dceb69ae-c2d9-4a0a-aeb9-3ef388e64005" - }, - { - "parameters": { - "conditions": { - "boolean": [], - "dateTime": [], - "number": [], - "string": [ - { - "value1": "n8n.io", - "operation": "contains", - "value2": "io" - } - ] - } - }, - "name": "IF3", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 450, - 670 - ], - "id": "9c377027-9b03-4d11-8405-f13c773efff1" - }, - { - "parameters": { - "conditions": { - "boolean": [ - { - "value1": true, - "value2": true - } - ] - } - }, - "name": "IF4", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 620, - 100 - ], - "id": "c790a2e9-20de-45b9-b5be-f7d78e8f8e01" - }, - { - "parameters": { - "conditions": { - "boolean": [], - "dateTime": [ - { - "value1": "2021-02-27T23:00:00.000Z", - "operation": "before", - "value2": "2021-02-28T23:00:00.000Z" - } - ] - } - }, - "name": "IF5", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 610, - 250 - ], - "id": "acc6b0b6-539c-4fdb-8275-da2ad32e18e5" - }, - { - "parameters": { - "conditions": { - "boolean": [], - "dateTime": [], - "number": [ - { - "value1": 5, - "operation": "smallerEqual", - "value2": 5 - } - ] - } - }, - "name": "IF6", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 600, - 410 - ], - "id": "2132f7b3-cebc-4873-9eff-8b17e678947f" - }, - { - "parameters": { - "conditions": { - "boolean": [], - "dateTime": [], - "number": [ - { - "value1": 5, - "operation": "equal", - "value2": 5 - } - ] - } - }, - "name": "IF7", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 750, - 410 - ], - "id": "668ff49b-0ab6-476e-987c-23ad3e31f01a" - }, - { - "parameters": { - "conditions": { - "boolean": [], - "dateTime": [], - "number": [ - { - "value1": 6, - "operation": "notEqual", - "value2": 5 - } - ] - } - }, - "name": "IF8", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 900, - 410 - ], - "id": "86cb816b-0a96-4e04-baca-6fd0b81963bd" - }, - { - "parameters": { - "conditions": { - "boolean": [], - "dateTime": [], - "number": [ - { - "value1": 6, - "operation": "larger", - "value2": 5 - } - ] - } - }, - "name": "IF9", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 1050, - 410 - ], - "id": "c7b5d37c-ef3d-4e52-b577-61e07b741943" - }, - { - "parameters": { - "conditions": { - "boolean": [], - "dateTime": [], - "number": [ - { - "value1": 6, - "operation": "largerEqual", - "value2": 5 - } - ] - } - }, - "name": "IF10", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 1200, - 410 - ], - "id": "9058992b-0369-43fb-b03b-566a891e111b" - }, - { - "parameters": { - "conditions": { - "boolean": [], - "dateTime": [], - "number": [], - "string": [ - { - "value1": "n8n.io", - "operation": "endsWith", - "value2": "io" - } - ] - } - }, - "name": "IF11", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 600, - 670 - ], - "id": "e59a8821-d56d-445f-948f-cdbf113d7185" - }, - { - "parameters": { - "conditions": { - "boolean": [], - "dateTime": [], - "number": [], - "string": [ - { - "value1": "n8n", - "value2": "n8n" - } - ] - } - }, - "name": "IF12", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 750, - 670 - ], - "id": "e30e0fda-749f-4fa1-84d3-f662b35d14cd" - }, - { - "parameters": { - "conditions": { - "boolean": [], - "dateTime": [], - "number": [], - "string": [ - { - "value1": "n8n", - "operation": "notContains", - "value2": "9" - } - ] - } - }, - "name": "IF13", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 900, - 670 - ], - "id": "680373c4-912e-4c35-8dd4-6682cc215914" - }, - { - "parameters": { - "conditions": { - "boolean": [], - "dateTime": [], - "number": [], - "string": [ - { - "value1": "n8n", - "operation": "notEqual", - "value2": "n9n" - } - ] - } - }, - "name": "IF14", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 1050, - 670 - ], - "id": "1883b843-2bd0-44f1-8e1f-f371dcbb6276" - }, - { - "parameters": { - "conditions": { - "boolean": [], - "dateTime": [], - "number": [], - "string": [ - { - "value1": "n8n", - "operation": "regex", - "value2": "/n[1-8]n/i" - } - ] - } - }, - "name": "IF15", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 1200, - 670 - ], - "id": "7b167295-0811-4aa6-a769-beaac7f91a24" - }, - { - "parameters": { - "conditions": { - "boolean": [], - "dateTime": [], - "number": [], - "string": [ - { - "value1": "n8n.io", - "operation": "startsWith", - "value2": "n8n" - } - ] - } - }, - "name": "IF16", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 1350, - 670 - ], - "id": "39c6a9fd-c9ea-4528-b8ac-c9461e053ef5" - }, - { - "parameters": { - "conditions": { - "boolean": [], - "dateTime": [], - "number": [], - "string": [ - { - "operation": "isEmpty" - } - ] - } - }, - "name": "IF17", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 1500, - 670 - ], - "id": "e0b3a955-6f8d-4a7b-bd09-8eb779d9bd42" - }, - { - "parameters": { - "conditions": { - "boolean": [], - "dateTime": [], - "number": [ - { - "value1": "={{}}", - "operation": "isEmpty" - } - ] - } - }, - "name": "IF18", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [ - 1350, - 410 - ], - "id": "1b87e5de-dd4e-40b5-b54c-4402edd94462" - }, - { - "parameters": { - "functionCode": "throw Error('Problem in boolean statement');\n" - }, - "name": "Function", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 800, - 90 - ], - "notesInFlow": true, - "notes": "Boolean Error", - "id": "a2347b9b-db80-4e15-8863-32288e42f3d1" - }, - { - "parameters": { - "functionCode": "throw Error('Problem in Date&Time statement');\n" - }, - "name": "Function1", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 790, - 250 - ], - "notesInFlow": true, - "notes": "Date&Time Error", - "id": "95f68b92-15db-48db-89a4-9c8e0465be49" - }, - { - "parameters": { - "functionCode": "throw Error('Problem in Number statement');\n" - }, - "name": "Function2", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 840, - 540 - ], - "notesInFlow": true, - "notes": "Number Error", - "id": "33a9a8db-7c54-4154-ad8c-b03050b9341c" - }, - { - "parameters": { - "functionCode": "throw Error('Problem in String comparison statement');\n" - }, - "name": "Function3", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 970, - 840 - ], - "notesInFlow": true, - "notes": "String Error", - "id": "919cfdb2-72b2-41b5-aaaf-5df780fe57ba" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "IF", - "type": "main", - "index": 0 - }, - { - "node": "IF1", - "type": "main", - "index": 0 - }, - { - "node": "IF2", - "type": "main", - "index": 0 - }, - { - "node": "IF3", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF": { - "main": [ - [ - { - "node": "IF4", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Function", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF1": { - "main": [ - [ - { - "node": "IF5", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Function1", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF2": { - "main": [ - [ - { - "node": "IF6", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Function2", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF4": { - "main": [ - [], - [ - { - "node": "Function", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF5": { - "main": [ - [], - [ - { - "node": "Function1", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF10": { - "main": [ - [ - { - "node": "IF18", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Function2", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF9": { - "main": [ - [ - { - "node": "IF10", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Function2", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF8": { - "main": [ - [ - { - "node": "IF9", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Function2", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF7": { - "main": [ - [ - { - "node": "IF8", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Function2", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF6": { - "main": [ - [ - { - "node": "IF7", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Function2", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF3": { - "main": [ - [ - { - "node": "IF11", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Function3", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF11": { - "main": [ - [ - { - "node": "IF12", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Function3", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF12": { - "main": [ - [ - { - "node": "IF13", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Function3", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF13": { - "main": [ - [ - { - "node": "IF14", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Function3", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF14": { - "main": [ - [ - { - "node": "IF15", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Function3", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF15": { - "main": [ - [ - { - "node": "IF16", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Function3", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF16": { - "main": [ - [ - { - "node": "IF17", - "type": "main", - "index": 0 - } - ], - [ - { - "node": "Function3", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF18": { - "main": [ - [], - [ - { - "node": "Function2", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF17": { - "main": [ - [], - [ - { - "node": "Function3", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/93.json b/test-workflows/workflows/93.json deleted file mode 100644 index 124dd0f7d53..00000000000 --- a/test-workflows/workflows/93.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "createdAt": "2021-03-03T13:27:06.481Z", - "updatedAt": "2021-03-03T13:32:50.258Z", - "id": "93", - "name": "Move Binary Data:toJSON:toBinary", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "490486f2-7ea9-410e-9281-84cd27836115" - }, - { - "parameters": { - "mode": "jsonToBinary", - "options": {} - }, - "name": "Move Binary Data", - "type": "n8n-nodes-base.moveBinaryData", - "typeVersion": 1, - "position": [ - 600, - 300 - ], - "id": "9ddb3642-7086-4f67-8b20-9255bc2b99cc" - }, - { - "parameters": { - "functionCode": "item = {\n name:'test',\n indexes:[1,2,3],\n subobj:{\n name:'subtest'\n }\n};\nreturn item;" - }, - "name": "FunctionItem", - "type": "n8n-nodes-base.functionItem", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "notesInFlow": true, - "notes": "Set json data", - "id": "8c99a563-2438-4822-b35d-3016c7524c50" - }, - { - "parameters": { - "options": {} - }, - "name": "Move Binary Data1", - "type": "n8n-nodes-base.moveBinaryData", - "typeVersion": 1, - "position": [ - 750, - 300 - ], - "id": "43d6faba-afc5-45bd-b477-a28054b75ddf" - }, - { - "parameters": { - "functionCode": "if(JSON.stringify($node['FunctionItem'].json)!==JSON.stringify($node['Move Binary Data1'].json)){\n throw new Error('Problem in move binary node');\n}\n\nreturn items;" - }, - "name": "Function", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 900, - 300 - ], - "notesInFlow": true, - "notes": "Evaluate the conversion result", - "id": "e4fbc1b7-b88e-49c3-bb0c-9dda8a447617" - } - ], - "connections": { - "Move Binary Data": { - "main": [ - [ - { - "node": "Move Binary Data1", - "type": "main", - "index": 0 - } - ] - ] - }, - "FunctionItem": { - "main": [ - [ - { - "node": "Move Binary Data", - "type": "main", - "index": 0 - } - ] - ] - }, - "Move Binary Data1": { - "main": [ - [ - { - "node": "Function", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "FunctionItem", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/94.json b/test-workflows/workflows/94.json deleted file mode 100644 index 48f6898537a..00000000000 --- a/test-workflows/workflows/94.json +++ /dev/null @@ -1,128 +0,0 @@ -{ - "createdAt": "2021-03-03T14:18:03.010Z", - "updatedAt": "2021-03-03T14:18:09.549Z", - "id": "94", - "name": "XML:toJSON:toXML", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "50d8428b-c132-49cb-8f4c-2eeba448d666" - }, - { - "parameters": { - "mode": "jsonToxml", - "options": {} - }, - "name": "XML", - "type": "n8n-nodes-base.xml", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "id": "664b8c25-5107-4715-a463-9a954965c096" - }, - { - "parameters": { - "functionCode": "item= {\n name:'testing xml',\n arr:[{key:'item1'},{key:'item2'}],\n subobj:{\n arr:[1,2,3,4,5],\n secondarr:[{key:'subitem1'},{key:'subitem2'},{key:'subitem3'}]\n }\n};\nreturn item;" - }, - "name": "FunctionItem", - "type": "n8n-nodes-base.functionItem", - "typeVersion": 1, - "position": [ - 450, - 300 - ], - "id": "dfb38369-2fb3-4d92-b843-b663b3a4675a" - }, - { - "parameters": { - "options": { - "explicitRoot": false - } - }, - "name": "XML1", - "type": "n8n-nodes-base.xml", - "typeVersion": 1, - "position": [ - 800, - 350 - ], - "id": "7085c1d8-a216-47a7-98d1-2f5e9e3eda47" - }, - { - "parameters": { - "functionCode": "if(JSON.stringify($node['FunctionItem'].json) !== JSON.stringify($node['XML1'].json) ){\n throw new Error('Problem in XML conversion');\n}\nreturn items;" - }, - "name": "Function", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 990, - 350 - ], - "id": "f03b8331-fa37-4aeb-97c9-0a3514942f96" - } - ], - "connections": { - "XML": { - "main": [ - [ - { - "node": "XML1", - "type": "main", - "index": 0 - } - ] - ] - }, - "FunctionItem": { - "main": [ - [ - { - "node": "XML", - "type": "main", - "index": 0 - } - ] - ] - }, - "XML1": { - "main": [ - [ - { - "node": "Function", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "FunctionItem", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/95.json b/test-workflows/workflows/95.json deleted file mode 100644 index 0ccca2a1523..00000000000 --- a/test-workflows/workflows/95.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "createdAt": "2021-03-03T14:28:28.227Z", - "updatedAt": "2021-03-03T14:28:29.476Z", - "id": "95", - "name": "Set", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "32be2fcf-b143-442e-877f-96b51b0b5148" - }, - { - "parameters": { - "values": { - "string": [ - { - "name": "name", - "value": "test" - } - ] - }, - "options": {} - }, - "name": "Set", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [ - 430, - 300 - ], - "id": "17c6fa30-1a0e-4d29-8c73-ef9357d5f877" - }, - { - "parameters": { - "functionCode": "testData = JSON.stringify({\n name: \"test\"\n});\n\nif(JSON.stringify($node['Set'].json)!==testData){\n throw new Error('Error in Set node');\n}\nreturn items;" - }, - "name": "Function", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 600, - 300 - ], - "notesInFlow": true, - "notes": "Verify the result of set node", - "id": "c6e9a289-5551-4db5-8d32-a11953bc92d6" - } - ], - "connections": { - "Set": { - "main": [ - [ - { - "node": "Function", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Set", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/96.json b/test-workflows/workflows/96.json deleted file mode 100644 index c962fcb8220..00000000000 --- a/test-workflows/workflows/96.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "createdAt": "2021-03-03T14:48:52.147Z", - "updatedAt": "2021-03-03T14:49:01.728Z", - "id": "96", - "name": "MessageBird:Sms:send:Balance:get", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "a19a2b96-9d4e-40dc-ae19-ffa7d1de094c" - }, - { - "parameters": { - "resource": "balance" - }, - "name": "MessageBird", - "type": "n8n-nodes-base.messageBird", - "typeVersion": 1, - "position": [ - 500, - 240 - ], - "credentials": { - "messageBirdApi": { - "id": "61", - "name": "MessageBird creds" - } - }, - "id": "ab3e0402-21cc-4699-8ba3-b995dd5f17bc" - }, - { - "parameters": { - "originator": "4930270504079 ", - "recipients": "4930270504079 ", - "message": "TestMessage", - "additionalFields": {} - }, - "name": "MessageBird1", - "type": "n8n-nodes-base.messageBird", - "typeVersion": 1, - "position": [ - 500, - 400 - ], - "credentials": { - "messageBirdApi": { - "id": "61", - "name": "MessageBird creds" - } - }, - "id": "67922f27-a0c3-49c9-a48f-98495a45e9e3" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "MessageBird", - "type": "main", - "index": 0 - }, - { - "node": "MessageBird1", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/97.json b/test-workflows/workflows/97.json deleted file mode 100644 index e61733b956e..00000000000 --- a/test-workflows/workflows/97.json +++ /dev/null @@ -1,500 +0,0 @@ -{ - "createdAt": "2024-02-14T09:47:52.295Z", - "updatedAt": "2024-02-14T09:47:52.295Z", - "id": "97", - "name": "Crypto", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 880, - 760 - ], - "id": "17f0290e-2fc4-4bb8-a8fe-da8b0ad82d11" - }, - { - "parameters": { - "type": "SHA256", - "value": "n8n" - }, - "name": "Crypto1", - "type": "n8n-nodes-base.crypto", - "typeVersion": 1, - "position": [ - 1380, - 560 - ], - "id": "8853a37b-fcf3-4ac7-913e-964a48497339" - }, - { - "parameters": { - "type": "SHA384", - "value": "n8n" - }, - "name": "Crypto2", - "type": "n8n-nodes-base.crypto", - "typeVersion": 1, - "position": [ - 1530, - 560 - ], - "id": "cf4718ee-852d-48f0-b96e-048283221cbd" - }, - { - "parameters": { - "type": "SHA512", - "value": "n8n" - }, - "name": "Crypto3", - "type": "n8n-nodes-base.crypto", - "typeVersion": 1, - "position": [ - 1680, - 560 - ], - "id": "8d05e80a-e7ff-4ae8-9f04-8a4f33579308" - }, - { - "parameters": { - "functionCode": "testData = ['5877e26c078d6409fde54d508bf25721','636396f02b6571e40d8fe91cba550515c0cdc0e7d314c210e00b02256375a796','c7049c8950ea211bec236edffb37cbecf2aa338443c5e048c1cbb4e2ee20eb60fa9a1d34699d7a86e7362b010bb4ffe7','a8a7eec953f1f31484a479c84982d52847de602d7f220ac3903518369a7536693d60882e5eb782599e72024fb649cc03aa0a19ebce632e9039b4f604335834af']\n\nfor(let i=0;i<4;i++){\n if($node[`Crypto${i}`].json['data'] !== testData[i]){\n throw new Error(`Error in HASH: ${$node[`Crypto${i}`].parameter[\"type\"]} operation`);\n }\n}\nreturn items;" - }, - "name": "Function", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 1880, - 560 - ], - "notesInFlow": true, - "id": "d4232a52-6eed-494e-b99a-13668c58f05b", - "notes": "Verify hash values" - }, - { - "parameters": { - "value": "n8n" - }, - "name": "Crypto0", - "type": "n8n-nodes-base.crypto", - "typeVersion": 1, - "position": [ - 1230, - 560 - ], - "id": "3c6f13f3-1202-4629-be6d-8a2ecd973752" - }, - { - "parameters": { - "action": "hmac", - "value": "n8n", - "secret": "secrect" - }, - "name": "Crypto4", - "type": "n8n-nodes-base.crypto", - "typeVersion": 1, - "position": [ - 1230, - 710 - ], - "id": "9cc4ea7c-2c71-4a2c-bdb8-208576381724" - }, - { - "parameters": { - "action": "hmac", - "type": "SHA256", - "value": "n8n", - "secret": "secrect" - }, - "name": "Crypto5", - "type": "n8n-nodes-base.crypto", - "typeVersion": 1, - "position": [ - 1380, - 710 - ], - "id": "0b318b49-fd2f-4ad7-9927-4048ad87009d" - }, - { - "parameters": { - "action": "hmac", - "type": "SHA384", - "value": "n8n", - "secret": "secrect" - }, - "name": "Crypto6", - "type": "n8n-nodes-base.crypto", - "typeVersion": 1, - "position": [ - 1530, - 710 - ], - "id": "e4fc0137-576a-4401-8caf-5198ab0970e9" - }, - { - "parameters": { - "action": "hmac", - "type": "SHA512", - "value": "n8n", - "secret": "secrect" - }, - "name": "Crypto7", - "type": "n8n-nodes-base.crypto", - "typeVersion": 1, - "position": [ - 1680, - 710 - ], - "id": "f1193f43-762d-4659-9444-ebea098c897e" - }, - { - "parameters": { - "functionCode": "testData = ['3fb7c95bca84c0bf49045b4e6a279dc0','a8066096944b87daa8d0459629d8f3958d35fa453c310e7370b619d0b81ce48e','08bec8212275cd79a1c6bf52cad5b31ccd46ec87c7a8a9d1c8589c816f8a7124313528040b138229e15c32c1b3c82b80','0f53f3a374314123991b32e47159ad44e1c61d1c0e96809c1f19d54a5e955c06d5b633f376f2a8419e36ea4b63346fcb39d389714c344771140fd512ac55723a']\n\nfor(let i=4;i<8;i++){\n if($node[`Crypto${i}`].json['data'] !== testData[i-4]){\n throw new Error(`Error in Hmac: ${$node[`Crypto${i}`].parameter[\"type\"]} operation`);\n }\n}\nreturn items;" - }, - "name": "Function1", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 1880, - 710 - ], - "notesInFlow": true, - "id": "b4c78dc0-9064-4de6-9c9d-1e6d6ce4b716", - "notes": "Verify hmac values" - }, - { - "parameters": { - "action": "sign", - "value": "n8n", - "algorithm": "ripemd", - "privateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQDuY4lRGHHAW9mXYY57m/CUzM4zqQ1e0W9D3e76YpipgF6rWtUn\nS8aSD+DxGxp4MldazZTwPPcpJHcV/Hr3A/KezsY9aOpXdnUdquV85969OgyGCRJk\nBv2gowSGfy4ueomfm4PFTPF0anPir+X1IZzAyzO6igL5ZE0Y5rcVrOgLKwIDAQAB\nAoGARfQ4he8d5jwt0HHkzVoX0Zp+AgPgNAxSUcCNEbWgJdFRNoh7l0HxvcfiEu6I\nqG/hWXiNdaf2QYD9XxrNfLIQXj+2MVOh4wpeqbO1DlqiGa9J8y7rLOVO+64ODXGt\nbZns6kcWLx8gYnhwqIJHnqfzvAsFjEKuKiSxpyeK8EvjDW0CQQD91J9DzhSXyvwE\nNaZT4Y9BcEbazVv+xUVhkSs7WRWStimeb57eIrIcXPE9heiT+6QpAnm6EZQR7RWN\n48PiAfbnAkEA8G0gwMWsnpmtb9VbF2uuQxs4Bw5Nuzb6l/+0zTqMELSVCaHIGnxk\nkV08NHfnck1jp1RU9MiUFI1yfRrN6vz1HQJBAMWQ8w3Rn1Gumo2kPHvZeqlSfLPd\nV5drcF9KoL2mzxXMV4SMGLmJg9xzswlR6v8TxGhvFtPuzrNNN5OjDlohcU0CQBOC\nZ3P9FmLQSZiXkYq2/C8J2GQKLxiP/4myADPfGlqIrMdZT2mGyopZLHd9e1R1Hy8G\n0tYCKLH6QF4SfL8iw6kCQCV81eZ/3JthrEfsIMv9lxvTLaRrprI5Eei8Rl+cFhNH\nziv/tOUxppOn1SkHvxXni5F5dbNR9u4mjaCLDau+qIg=\n-----END RSA PRIVATE KEY-----" - }, - "name": "Crypto11", - "type": "n8n-nodes-base.crypto", - "typeVersion": 1, - "position": [ - 1400, - 900 - ], - "alwaysOutputData": true, - "id": "95830d32-cbdc-4fe9-914b-0b799ff503a7" - }, - { - "parameters": { - "action": "sign", - "value": "n8n", - "algorithm": "ripemd160", - "privateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQDuY4lRGHHAW9mXYY57m/CUzM4zqQ1e0W9D3e76YpipgF6rWtUn\nS8aSD+DxGxp4MldazZTwPPcpJHcV/Hr3A/KezsY9aOpXdnUdquV85969OgyGCRJk\nBv2gowSGfy4ueomfm4PFTPF0anPir+X1IZzAyzO6igL5ZE0Y5rcVrOgLKwIDAQAB\nAoGARfQ4he8d5jwt0HHkzVoX0Zp+AgPgNAxSUcCNEbWgJdFRNoh7l0HxvcfiEu6I\nqG/hWXiNdaf2QYD9XxrNfLIQXj+2MVOh4wpeqbO1DlqiGa9J8y7rLOVO+64ODXGt\nbZns6kcWLx8gYnhwqIJHnqfzvAsFjEKuKiSxpyeK8EvjDW0CQQD91J9DzhSXyvwE\nNaZT4Y9BcEbazVv+xUVhkSs7WRWStimeb57eIrIcXPE9heiT+6QpAnm6EZQR7RWN\n48PiAfbnAkEA8G0gwMWsnpmtb9VbF2uuQxs4Bw5Nuzb6l/+0zTqMELSVCaHIGnxk\nkV08NHfnck1jp1RU9MiUFI1yfRrN6vz1HQJBAMWQ8w3Rn1Gumo2kPHvZeqlSfLPd\nV5drcF9KoL2mzxXMV4SMGLmJg9xzswlR6v8TxGhvFtPuzrNNN5OjDlohcU0CQBOC\nZ3P9FmLQSZiXkYq2/C8J2GQKLxiP/4myADPfGlqIrMdZT2mGyopZLHd9e1R1Hy8G\n0tYCKLH6QF4SfL8iw6kCQCV81eZ/3JthrEfsIMv9lxvTLaRrprI5Eei8Rl+cFhNH\nziv/tOUxppOn1SkHvxXni5F5dbNR9u4mjaCLDau+qIg=\n-----END RSA PRIVATE KEY-----" - }, - "name": "Crypto12", - "type": "n8n-nodes-base.crypto", - "typeVersion": 1, - "position": [ - 1580, - 900 - ], - "alwaysOutputData": true, - "id": "66906a33-ae4d-4e65-b809-614fecbc2c56" - }, - { - "parameters": { - "action": "sign", - "value": "n8n", - "algorithm": "rmd160", - "privateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQDuY4lRGHHAW9mXYY57m/CUzM4zqQ1e0W9D3e76YpipgF6rWtUn\nS8aSD+DxGxp4MldazZTwPPcpJHcV/Hr3A/KezsY9aOpXdnUdquV85969OgyGCRJk\nBv2gowSGfy4ueomfm4PFTPF0anPir+X1IZzAyzO6igL5ZE0Y5rcVrOgLKwIDAQAB\nAoGARfQ4he8d5jwt0HHkzVoX0Zp+AgPgNAxSUcCNEbWgJdFRNoh7l0HxvcfiEu6I\nqG/hWXiNdaf2QYD9XxrNfLIQXj+2MVOh4wpeqbO1DlqiGa9J8y7rLOVO+64ODXGt\nbZns6kcWLx8gYnhwqIJHnqfzvAsFjEKuKiSxpyeK8EvjDW0CQQD91J9DzhSXyvwE\nNaZT4Y9BcEbazVv+xUVhkSs7WRWStimeb57eIrIcXPE9heiT+6QpAnm6EZQR7RWN\n48PiAfbnAkEA8G0gwMWsnpmtb9VbF2uuQxs4Bw5Nuzb6l/+0zTqMELSVCaHIGnxk\nkV08NHfnck1jp1RU9MiUFI1yfRrN6vz1HQJBAMWQ8w3Rn1Gumo2kPHvZeqlSfLPd\nV5drcF9KoL2mzxXMV4SMGLmJg9xzswlR6v8TxGhvFtPuzrNNN5OjDlohcU0CQBOC\nZ3P9FmLQSZiXkYq2/C8J2GQKLxiP/4myADPfGlqIrMdZT2mGyopZLHd9e1R1Hy8G\n0tYCKLH6QF4SfL8iw6kCQCV81eZ/3JthrEfsIMv9lxvTLaRrprI5Eei8Rl+cFhNH\nziv/tOUxppOn1SkHvxXni5F5dbNR9u4mjaCLDau+qIg=\n-----END RSA PRIVATE KEY-----" - }, - "name": "Crypto13", - "type": "n8n-nodes-base.crypto", - "typeVersion": 1, - "position": [ - 1780, - 900 - ], - "alwaysOutputData": true, - "id": "6832df1e-f3ff-479a-ac25-f04ed8be05ac" - }, - { - "parameters": { - "action": "sign", - "value": "n8n", - "algorithm": "sha1", - "privateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQDuY4lRGHHAW9mXYY57m/CUzM4zqQ1e0W9D3e76YpipgF6rWtUn\nS8aSD+DxGxp4MldazZTwPPcpJHcV/Hr3A/KezsY9aOpXdnUdquV85969OgyGCRJk\nBv2gowSGfy4ueomfm4PFTPF0anPir+X1IZzAyzO6igL5ZE0Y5rcVrOgLKwIDAQAB\nAoGARfQ4he8d5jwt0HHkzVoX0Zp+AgPgNAxSUcCNEbWgJdFRNoh7l0HxvcfiEu6I\nqG/hWXiNdaf2QYD9XxrNfLIQXj+2MVOh4wpeqbO1DlqiGa9J8y7rLOVO+64ODXGt\nbZns6kcWLx8gYnhwqIJHnqfzvAsFjEKuKiSxpyeK8EvjDW0CQQD91J9DzhSXyvwE\nNaZT4Y9BcEbazVv+xUVhkSs7WRWStimeb57eIrIcXPE9heiT+6QpAnm6EZQR7RWN\n48PiAfbnAkEA8G0gwMWsnpmtb9VbF2uuQxs4Bw5Nuzb6l/+0zTqMELSVCaHIGnxk\nkV08NHfnck1jp1RU9MiUFI1yfRrN6vz1HQJBAMWQ8w3Rn1Gumo2kPHvZeqlSfLPd\nV5drcF9KoL2mzxXMV4SMGLmJg9xzswlR6v8TxGhvFtPuzrNNN5OjDlohcU0CQBOC\nZ3P9FmLQSZiXkYq2/C8J2GQKLxiP/4myADPfGlqIrMdZT2mGyopZLHd9e1R1Hy8G\n0tYCKLH6QF4SfL8iw6kCQCV81eZ/3JthrEfsIMv9lxvTLaRrprI5Eei8Rl+cFhNH\nziv/tOUxppOn1SkHvxXni5F5dbNR9u4mjaCLDau+qIg=\n-----END RSA PRIVATE KEY-----" - }, - "name": "Crypto14", - "type": "n8n-nodes-base.crypto", - "typeVersion": 1, - "position": [ - 2040, - 900 - ], - "alwaysOutputData": true, - "id": "4549f4f2-eadb-4df0-8e27-701d62f7d750" - }, - { - "parameters": { - "action": "sign", - "value": "n8n", - "algorithm": "sha224", - "privateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQDuY4lRGHHAW9mXYY57m/CUzM4zqQ1e0W9D3e76YpipgF6rWtUn\nS8aSD+DxGxp4MldazZTwPPcpJHcV/Hr3A/KezsY9aOpXdnUdquV85969OgyGCRJk\nBv2gowSGfy4ueomfm4PFTPF0anPir+X1IZzAyzO6igL5ZE0Y5rcVrOgLKwIDAQAB\nAoGARfQ4he8d5jwt0HHkzVoX0Zp+AgPgNAxSUcCNEbWgJdFRNoh7l0HxvcfiEu6I\nqG/hWXiNdaf2QYD9XxrNfLIQXj+2MVOh4wpeqbO1DlqiGa9J8y7rLOVO+64ODXGt\nbZns6kcWLx8gYnhwqIJHnqfzvAsFjEKuKiSxpyeK8EvjDW0CQQD91J9DzhSXyvwE\nNaZT4Y9BcEbazVv+xUVhkSs7WRWStimeb57eIrIcXPE9heiT+6QpAnm6EZQR7RWN\n48PiAfbnAkEA8G0gwMWsnpmtb9VbF2uuQxs4Bw5Nuzb6l/+0zTqMELSVCaHIGnxk\nkV08NHfnck1jp1RU9MiUFI1yfRrN6vz1HQJBAMWQ8w3Rn1Gumo2kPHvZeqlSfLPd\nV5drcF9KoL2mzxXMV4SMGLmJg9xzswlR6v8TxGhvFtPuzrNNN5OjDlohcU0CQBOC\nZ3P9FmLQSZiXkYq2/C8J2GQKLxiP/4myADPfGlqIrMdZT2mGyopZLHd9e1R1Hy8G\n0tYCKLH6QF4SfL8iw6kCQCV81eZ/3JthrEfsIMv9lxvTLaRrprI5Eei8Rl+cFhNH\nziv/tOUxppOn1SkHvxXni5F5dbNR9u4mjaCLDau+qIg=\n-----END RSA PRIVATE KEY-----" - }, - "name": "Crypto15", - "type": "n8n-nodes-base.crypto", - "typeVersion": 1, - "position": [ - 2170, - 900 - ], - "alwaysOutputData": true, - "id": "07643489-a8fa-40c7-a1df-b3b910a5c83a" - }, - { - "parameters": { - "action": "sign", - "value": "n8n", - "algorithm": "sha256", - "privateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQDuY4lRGHHAW9mXYY57m/CUzM4zqQ1e0W9D3e76YpipgF6rWtUn\nS8aSD+DxGxp4MldazZTwPPcpJHcV/Hr3A/KezsY9aOpXdnUdquV85969OgyGCRJk\nBv2gowSGfy4ueomfm4PFTPF0anPir+X1IZzAyzO6igL5ZE0Y5rcVrOgLKwIDAQAB\nAoGARfQ4he8d5jwt0HHkzVoX0Zp+AgPgNAxSUcCNEbWgJdFRNoh7l0HxvcfiEu6I\nqG/hWXiNdaf2QYD9XxrNfLIQXj+2MVOh4wpeqbO1DlqiGa9J8y7rLOVO+64ODXGt\nbZns6kcWLx8gYnhwqIJHnqfzvAsFjEKuKiSxpyeK8EvjDW0CQQD91J9DzhSXyvwE\nNaZT4Y9BcEbazVv+xUVhkSs7WRWStimeb57eIrIcXPE9heiT+6QpAnm6EZQR7RWN\n48PiAfbnAkEA8G0gwMWsnpmtb9VbF2uuQxs4Bw5Nuzb6l/+0zTqMELSVCaHIGnxk\nkV08NHfnck1jp1RU9MiUFI1yfRrN6vz1HQJBAMWQ8w3Rn1Gumo2kPHvZeqlSfLPd\nV5drcF9KoL2mzxXMV4SMGLmJg9xzswlR6v8TxGhvFtPuzrNNN5OjDlohcU0CQBOC\nZ3P9FmLQSZiXkYq2/C8J2GQKLxiP/4myADPfGlqIrMdZT2mGyopZLHd9e1R1Hy8G\n0tYCKLH6QF4SfL8iw6kCQCV81eZ/3JthrEfsIMv9lxvTLaRrprI5Eei8Rl+cFhNH\nziv/tOUxppOn1SkHvxXni5F5dbNR9u4mjaCLDau+qIg=\n-----END RSA PRIVATE KEY-----" - }, - "name": "Crypto16", - "type": "n8n-nodes-base.crypto", - "typeVersion": 1, - "position": [ - 2300, - 900 - ], - "alwaysOutputData": true, - "id": "bde3009c-b253-4ff6-b7bc-89d3b02ef2b6" - }, - { - "parameters": { - "functionCode": "testData = [\n '9d0bc120a967882743370f715dfa90789c4d9322a4faf691d1f80b306c6bd900bfcba5f62946ef88ba7e1fdd008ff3efe8545b979299b14e0e0eccd3e33b1afa11397494526e31968f13d2ac3e3deaa2bc4a27862b7025444c91ebed5f1b98d2c0390630d8eabc6a7662a9ab069cb3aab273ae1c09f20f51fa8e04af4bcccbc6',\n '0b494c8146f7efd7aa53b418a7057a3a57317a0380c06c7d18114077a03fc6441b57ca8c03edff4ca6fdc2394d026893258b97d34bf0c5c44bc20bd264899eb1316da1e624db1455c73c9054ff732464f775b473b3ba67250ffd74ee42b1acfdf5539bf793d7002327d8d156424444624a625f8dd3f013d40a7ba7b6726186a9',\n '0b494c8146f7efd7aa53b418a7057a3a57317a0380c06c7d18114077a03fc6441b57ca8c03edff4ca6fdc2394d026893258b97d34bf0c5c44bc20bd264899eb1316da1e624db1455c73c9054ff732464f775b473b3ba67250ffd74ee42b1acfdf5539bf793d7002327d8d156424444624a625f8dd3f013d40a7ba7b6726186a9',\n '0b494c8146f7efd7aa53b418a7057a3a57317a0380c06c7d18114077a03fc6441b57ca8c03edff4ca6fdc2394d026893258b97d34bf0c5c44bc20bd264899eb1316da1e624db1455c73c9054ff732464f775b473b3ba67250ffd74ee42b1acfdf5539bf793d7002327d8d156424444624a625f8dd3f013d40a7ba7b6726186a9',\n 'b9d0c7c4acb8ef55b5c323f82755fb420e5145bafe4de34925e86c53c9f652eb08ec0d87a9be95ca0c0d90b16dd1b55f1200d87c13e4cdb1ae902f41998314f7b85ffc82f0f1d5296119bd92e23ae685b8b59a3a4ba4b8d54db2314c077b1b238c4ac582e36b51c18c0b5474f0d68c1f42e01c08985111ded4cfd3463068d89a',\n '1387958052cf887bd50925a8d44bbf8f138cdd23f51a3422028edf39ad413a1591f5ebd653c4f225298cd6857044648bcfb768113674e7bd11c632fb0fc40cfa646301934b8fcf4da9799272a737155a239e1f8db5e92a23bfa2aeabc6732f5be14078a5815fff542842efed681ac3b919f9d42bfc822b0fd611c0b22286f241',\n '922659a8d40b12f81080425a8676830be06f26dd8cd18cad25d02055332c94b8b9634598ef5b172ee53e53788d33c183bf0984ae3b48d792f426a601dbf2eb4771bc844bc2464de8ca5b6746bbdc2f1713a1e1d57a6970568f033e588c759e4b179b791b7fcb75d323c98cc5c6f33c3659410b159c94bc13834e81ce297ce98d'\n]\n\nfor(let i=10;i<17;i++){\n if($node[`Crypto${i}`].json['data'] !== testData[i-10]){\n throw new Error(`Error in Hmac: ${$node[`Crypto${i}`].parameter[\"algorithm\"]} operation (node:Crypto${i})`);\n }\n}\nreturn items;" - }, - "name": "Function2", - "type": "n8n-nodes-base.function", - "typeVersion": 1, - "position": [ - 2470, - 900 - ], - "alwaysOutputData": true, - "notesInFlow": true, - "id": "ae850710-ba68-44a1-892f-62dc2f270e53", - "notes": "Verify signing values" - }, - { - "parameters": { - "action": "sign", - "value": "n8n", - "algorithm": "md5", - "privateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQDuY4lRGHHAW9mXYY57m/CUzM4zqQ1e0W9D3e76YpipgF6rWtUn\nS8aSD+DxGxp4MldazZTwPPcpJHcV/Hr3A/KezsY9aOpXdnUdquV85969OgyGCRJk\nBv2gowSGfy4ueomfm4PFTPF0anPir+X1IZzAyzO6igL5ZE0Y5rcVrOgLKwIDAQAB\nAoGARfQ4he8d5jwt0HHkzVoX0Zp+AgPgNAxSUcCNEbWgJdFRNoh7l0HxvcfiEu6I\nqG/hWXiNdaf2QYD9XxrNfLIQXj+2MVOh4wpeqbO1DlqiGa9J8y7rLOVO+64ODXGt\nbZns6kcWLx8gYnhwqIJHnqfzvAsFjEKuKiSxpyeK8EvjDW0CQQD91J9DzhSXyvwE\nNaZT4Y9BcEbazVv+xUVhkSs7WRWStimeb57eIrIcXPE9heiT+6QpAnm6EZQR7RWN\n48PiAfbnAkEA8G0gwMWsnpmtb9VbF2uuQxs4Bw5Nuzb6l/+0zTqMELSVCaHIGnxk\nkV08NHfnck1jp1RU9MiUFI1yfRrN6vz1HQJBAMWQ8w3Rn1Gumo2kPHvZeqlSfLPd\nV5drcF9KoL2mzxXMV4SMGLmJg9xzswlR6v8TxGhvFtPuzrNNN5OjDlohcU0CQBOC\nZ3P9FmLQSZiXkYq2/C8J2GQKLxiP/4myADPfGlqIrMdZT2mGyopZLHd9e1R1Hy8G\n0tYCKLH6QF4SfL8iw6kCQCV81eZ/3JthrEfsIMv9lxvTLaRrprI5Eei8Rl+cFhNH\nziv/tOUxppOn1SkHvxXni5F5dbNR9u4mjaCLDau+qIg=\n-----END RSA PRIVATE KEY-----" - }, - "name": "Crypto10", - "type": "n8n-nodes-base.crypto", - "typeVersion": 1, - "position": [ - 1220, - 900 - ], - "alwaysOutputData": true, - "id": "1c33cc3f-7124-4156-99ce-47c8d79408da" - } - ], - "connections": { - "Start": { - "main": [ - [ - { - "node": "Crypto0", - "type": "main", - "index": 0 - }, - { - "node": "Crypto4", - "type": "main", - "index": 0 - }, - { - "node": "Crypto10", - "type": "main", - "index": 0 - } - ] - ] - }, - "Crypto1": { - "main": [ - [ - { - "node": "Crypto2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Crypto2": { - "main": [ - [ - { - "node": "Crypto3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Crypto3": { - "main": [ - [ - { - "node": "Function", - "type": "main", - "index": 0 - } - ] - ] - }, - "Crypto0": { - "main": [ - [ - { - "node": "Crypto1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Crypto4": { - "main": [ - [ - { - "node": "Crypto5", - "type": "main", - "index": 0 - } - ] - ] - }, - "Crypto5": { - "main": [ - [ - { - "node": "Crypto6", - "type": "main", - "index": 0 - } - ] - ] - }, - "Crypto6": { - "main": [ - [ - { - "node": "Crypto7", - "type": "main", - "index": 0 - } - ] - ] - }, - "Crypto7": { - "main": [ - [ - { - "node": "Function1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Crypto11": { - "main": [ - [ - { - "node": "Crypto12", - "type": "main", - "index": 0 - } - ] - ] - }, - "Crypto12": { - "main": [ - [ - { - "node": "Crypto13", - "type": "main", - "index": 0 - } - ] - ] - }, - "Crypto13": { - "main": [ - [ - { - "node": "Crypto14", - "type": "main", - "index": 0 - } - ] - ] - }, - "Crypto14": { - "main": [ - [ - { - "node": "Crypto15", - "type": "main", - "index": 0 - } - ] - ] - }, - "Crypto15": { - "main": [ - [ - { - "node": "Crypto16", - "type": "main", - "index": 0 - } - ] - ] - }, - "Crypto16": { - "main": [ - [ - { - "node": "Function2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Crypto10": { - "main": [ - [ - { - "node": "Crypto11", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": { - "instanceId": "8e9416f42a954d0a370d988ac3c0f916f44074a6e45189164b1a8559394a7516" - }, - "pinData": {}, - "versionId": "25a0d83c-9242-42bd-8613-6157d43d59a4", - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/test-workflows/workflows/98.json b/test-workflows/workflows/98.json deleted file mode 100644 index 833074a87aa..00000000000 --- a/test-workflows/workflows/98.json +++ /dev/null @@ -1,165 +0,0 @@ -{ - "createdAt": "2021-03-04T08:38:05.147Z", - "updatedAt": "2021-03-04T08:38:05.147Z", - "id": "98", - "name": "Disqus:Forum:get getCategories getThreads getPosts", - "active": false, - "nodes": [ - { - "parameters": {}, - "name": "Start", - "type": "n8n-nodes-base.start", - "typeVersion": 1, - "position": [ - 250, - 300 - ], - "id": "9468a1d9-c07c-4001-804d-f308db6f79a3" - }, - { - "parameters": { - "id": "disqus-demo-page", - "additionalFields": {} - }, - "name": "Disqus", - "type": "n8n-nodes-base.disqus", - "typeVersion": 1, - "position": [ - 500, - 300 - ], - "credentials": { - "disqusApi": { - "id": "5", - "name": "Disqus token" - } - }, - "id": "8c4e3006-b4d8-4015-9eeb-5cb77b7a46aa" - }, - { - "parameters": { - "operation": "getCategories", - "id": "disqus-demo-page", - "limit": 1, - "additionalFields": { - "order": "asc" - } - }, - "name": "Disqus1", - "type": "n8n-nodes-base.disqus", - "typeVersion": 1, - "position": [ - 650, - 300 - ], - "credentials": { - "disqusApi": { - "id": "5", - "name": "Disqus token" - } - }, - "id": "f1db25d5-8f78-4f29-a4f3-d27a3571370e" - }, - { - "parameters": { - "operation": "getThreads", - "id": "disqus-demo-page", - "limit": 1, - "additionalFields": { - "order": "desc" - } - }, - "name": "Disqus2", - "type": "n8n-nodes-base.disqus", - "typeVersion": 1, - "position": [ - 800, - 300 - ], - "credentials": { - "disqusApi": { - "id": "5", - "name": "Disqus token" - } - }, - "id": "4fcd6985-5dc8-4425-b852-25824964082a" - }, - { - "parameters": { - "operation": "getPosts", - "id": "disqus-demo-page", - "limit": 1, - "additionalFields": { - "order": "desc" - } - }, - "name": "Disqus3", - "type": "n8n-nodes-base.disqus", - "typeVersion": 1, - "position": [ - 950, - 300 - ], - "credentials": { - "disqusApi": { - "id": "5", - "name": "Disqus token" - } - }, - "id": "0dfe850e-186a-4072-b722-f35e15deeb16" - } - ], - "connections": { - "Disqus2": { - "main": [ - [ - { - "node": "Disqus3", - "type": "main", - "index": 0 - } - ] - ] - }, - "Disqus1": { - "main": [ - [ - { - "node": "Disqus2", - "type": "main", - "index": 0 - } - ] - ] - }, - "Disqus": { - "main": [ - [ - { - "node": "Disqus1", - "type": "main", - "index": 0 - } - ] - ] - }, - "Start": { - "main": [ - [ - { - "node": "Disqus", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "settings": {}, - "staticData": null, - "meta": null, - "pinData": null, - "versionId": null, - "triggerCount": 0, - "tags": [] -} \ No newline at end of file diff --git a/turbo.json b/turbo.json index 951664a47ee..7c478afd555 100644 --- a/turbo.json +++ b/turbo.json @@ -1,28 +1,6 @@ { - "$schema": "https://turbo.build/schema.json", - "ui": "stream", - "remoteCache": { - "enabled": true, - "timeout": 90, - "uploadTimeout": 90 - }, - "globalEnv": ["CI", "COVERAGE_ENABLED"], "tasks": { - "clean": { - "cache": false - }, - "build:playwright": { - "dependsOn": ["install-browsers:ci", "build"] - }, - "build:backend": { - "dependsOn": ["n8n#build"] - }, - "build:frontend": { - "dependsOn": ["n8n-editor-ui#build"] - }, - "build:nodes": { - "dependsOn": ["n8n-nodes-base#build", "@n8n/n8n-nodes-langchain#build"] - }, + "clean": { "cache": false }, "build": { "dependsOn": ["^build"], "outputs": ["dist/**"] @@ -32,124 +10,18 @@ }, "format": {}, "format:check": {}, - "lint:backend": { - "dependsOn": [ - "@n8n/eslint-config#build", - "^build", - "@n8n/api-types#lint", - "@n8n/config#lint", - "@n8n/decorators#lint", - "@n8n/constants#lint", - "@n8n/backend-common#lint", - "@n8n/backend-test-utils#lint", - "@n8n/db#lint", - "@n8n/di#lint", - "@n8n/client-oauth2#lint", - "@n8n/imap#lint", - "@n8n/permissions#lint", - "@n8n/task-runner#lint", - "n8n-workflow#lint", - "n8n-core#lint", - "n8n-node-dev#lint", - "n8n#lint" - ] - }, - "lint:frontend": { - "dependsOn": [ - "@n8n/eslint-config#build", - "^build", - "@n8n/rest-api-client#lint", - "@n8n/api-types#lint", - "@n8n/constants#lint", - "@n8n/i18n#lint", - "@n8n/permissions#lint", - "@n8n/stores#lint", - "@n8n/utils#lint", - "@n8n/chat#lint", - "@n8n/codemirror-lang#lint", - "@n8n/storybook#lint", - "n8n-cypress#lint", - "@n8n/composables#build", - "@n8n/design-system#lint", - "n8n-editor-ui#lint" - ] - }, - "lint:nodes": { - "dependsOn": [ - "@n8n/eslint-config#build", - "^build", - "n8n-nodes-base#lint", - "@n8n/n8n-nodes-langchain#lint", - "@n8n/json-schema-to-zod#lint" - ] - }, - "lint:testing": { - "dependsOn": [ - "@n8n/eslint-config#build", - "^build", - "n8n-playwright#lint", - "n8n-containers#lint" - ] - }, "lint": { "dependsOn": ["^build", "@n8n/eslint-config#build"] }, - "lintfix": {}, - "test:backend": { - "dependsOn": [ - "@n8n/api-types#test", - "@n8n/config#test", - "@n8n/decorators#test", - "@n8n/db#test", - "@n8n/di#test", - "@n8n/client-oauth2#test", - "@n8n/imap#test", - "@n8n/permissions#test", - "@n8n/task-runner#test", - "n8n-workflow#test", - "n8n-core#test", - "n8n#test" - ], - "outputs": ["coverage/**", "junit.xml", "cobertura-coverage.xml"], - "inputs": ["jest.config.*", "package.json", "pnpm-lock.yaml"] - }, - "test:frontend": { - "dependsOn": [ - "@n8n/rest-api-client#test", - "@n8n/api-types#test", - "@n8n/constants#test", - "@n8n/i18n#test", - "@n8n/permissions#test", - "@n8n/stores#test", - "@n8n/utils#test", - "@n8n/chat#test", - "@n8n/codemirror-lang#test", - "@n8n/composables#build", - "@n8n/design-system#test", - "n8n-editor-ui#test" - ], - "outputs": ["coverage/**", "junit.xml", "cobertura-coverage.xml"], - "inputs": ["jest.config.*", "package.json", "pnpm-lock.yaml"] - }, - "test:nodes": { - "dependsOn": [ - "n8n-nodes-base#test", - "@n8n/n8n-nodes-langchain#test", - "@n8n/json-schema-to-zod#test" - ], - "outputs": ["coverage/**", "junit.xml", "cobertura-coverage.xml"], - "inputs": ["jest.config.*", "package.json", "pnpm-lock.yaml"] - }, + "lint:fix": {}, "test": { - "outputs": ["coverage/**", "junit.xml", "cobertura-coverage.xml"] + "dependsOn": ["^build", "build"], + "outputs": ["coverage/**", "*.xml"] }, - "watch": { - "cache": false, - "persistent": true - }, - "dev": { - "cache": false, - "persistent": true + "watch": { "cache": false, "persistent": true }, + "dev": { "cache": false, "persistent": true }, + "build:playwright": { + "dependsOn": ["install-browsers:ci", "build"] }, "install-browsers:ci": { "cache": true,