Commit Graph

144 Commits

Author SHA1 Message Date
Michael Kret
306b68da6b feat(HTTP Request Node): Option to provide SSL Certificates in Http Request Node (#9125)
Co-authored-by: कारतोफ्फेलस्क्रिप्ट™ <aditya@netroy.in>
2024-04-24 17:28:02 +03:00
Iván Ovejero
b8ab049932 refactor(core, editor): Remove legacy nodesAccess (no-changelog) (#9016) 2024-04-05 13:17:34 +02:00
Iván Ovejero
744327c20d fix(core): Ensure status on Axios errors is available to the BE (#9015) 2024-04-03 18:00:27 +02:00
Iván Ovejero
7d52419d6f refactor(core): Remove dead utils (no-changelog) (#8947) 2024-03-25 17:59:42 +01:00
Elias Meire
1fb0dd4f1c fix(core): Stringify all Luxon DateTimes in cleanupParameterData (#8959) 2024-03-25 08:44:10 +00:00
कारतोफ्फेलस्क्रिप्ट™
33ab781aef fix(core): Improve handling of invalid objects in cleanupParameterData (no-chanhelog) (#8910) 2024-03-18 18:35:49 +01:00
pemontto
d85d0ecf45 fix(core): Remove HTTP body for GET, HEAD, and OPTIONS requests (#3621)
Co-authored-by: Jonathan Bennetts <jonathan.bennetts@gmail.com>
Co-authored-by: कारतोफ्फेलस्क्रिप्ट™ <aditya@netroy.in>
2024-03-14 11:17:20 +00:00
कारतोफ्फेलस्क्रिप्ट™
246c988b93 fix(core): Ensure maxRedirects is used for any http request defining it (#8706) 2024-02-22 17:56:48 +01:00
Elias Meire
7531f34386 fix(core): Use hostname from URL instead of Host header for SNI (#8562) 2024-02-06 19:38:36 +01:00
Elias Meire
f1910a10a6 fix(core): Forward authorization header when on same domain (#8507) 2024-01-31 15:11:29 +01:00
Iván Ovejero
3734c89cf6 fix(core): Ensure waiting executions account for workflow timezone (#8340) 2024-01-16 18:28:19 +01:00
Iván Ovejero
d4c93b1607 fix(core): Prevent issues with missing or mismatching encryption key (#8332) 2024-01-16 18:25:53 +01:00
कारतोफ्फेलस्क्रिप्ट™
0776814ed8 fix(core): Prevent invalid compressed responses from making executions stuck forever (#8315) 2024-01-12 15:18:46 +01:00
कारतोफ्फेलस्क्रिप्ट™
216ec079c9 feat(editor): Create separate components for JS and JSON editors (no-changelog) (#8156)
## Summary
This is part-1 of refactoring our code editors to extract different type
of editors into their own components.
In part-2 we'll
1. delete a of unused or duplicate code
2. switch to a `useEditor` composable to bring more UX consistency
across all the code editors.

## Review / Merge checklist
- [x] PR title and summary are descriptive
- [x] Tests included
2023-12-29 10:49:27 +01:00
कारतोफ्फेलस्क्रिप्ट™
f69ddcd796 refactor(core): Use Dependency Injection for all Controller classes (no-changelog) (#8146)
## Review / Merge checklist
- [x] PR title and summary are descriptive
2023-12-27 11:50:43 +01:00
Iván Ovejero
b16dd21909 refactor(core): Switch plain errors in core to ApplicationError (no-changelog) (#7873)
Ensure all errors in `core` are `ApplicationError` or children of it and
contain no variables in the message, to continue normalizing all the
errors we report to Sentry

Follow-up to: https://github.com/n8n-io/n8n/pull/7857
2023-11-30 09:06:19 +01:00
Iván Ovejero
dff8456382 refactor(core): Reorganize error hierarchy in core and workflow packages (no-changelog) (#7820)
Ensure all errors in `core` and `workflow` inherit from
`ApplicationError` so that we start normalizing all the errors we report
to Sentry

Follow-up to:
https://github.com/n8n-io/n8n/pull/7757#discussion_r1404338844

### `core` package

`ApplicationError`
- `FileSystemError` (abstract)
	- `FileNotFoundError`
	- `DisallowedFilepathError`
- `BinaryDataError` (abstract)
	- `InvalidModeError`
	- `InvalidManagerError`
- `InvalidExecutionMetadataError`

### `workflow` package

`ApplicationError`
- `ExecutionBaseError` (abstract)
	- `WorkflowActivationError`
		- `WorkflowDeactivationError`
		- `WebhookTakenError`
	- `WorkflowOperationError`
		- `SubworkflowOperationError`
			- `CliWorkflowOperationError`
	- `ExpressionError`
		- `ExpressionExtensionError`
	- `NodeError` (abstract)
		- `NodeOperationError`
		- `NodeApiError`
	- `NodeSSLError`

Up next:
- Reorganize errors in `cli`
- Flatten the hierarchy in `workflow` (do we really need
`ExecutionBaseError`?)
- Remove `ExecutionError` type
- Stop throwing plain `Error`s
- Replace `severity` with `level`
- Add node and credential types as `tags`
- Add workflow IDs and execution IDs as `extras`
2023-11-27 15:33:21 +01:00
Csaba Tuncsik
152883eed1 build: Upgrade lint related packages (#7790) 2023-11-27 09:11:52 +01:00
कारतोफ्फेलस्क्रिप्ट™
0bd4e742da refactor(core): Migrate from crypto-js to native crypto (#7556)
[`crypto-js` has been
discontinued](1da3dabf93)

PS: We'll remove `crypto-js` usage from `n8n-workflow` and
`@n8n_io/license-sdk` in separate PRs.
2023-11-03 13:26:20 +01:00
Iván Ovejero
6d42fad31a refactor(core): Consolidate binary file not found errors (no-changelog) (#7585)
Logging was originally to see if there was a binary data file failing to
be written for [this
user](https://linear.app/n8n/issue/PAY-844/filesystem-binary-data-mode-causing-alerts-in-cloud)
but the cause was not a file failed to be written but a missing `fileId`
in a binary data item in an execution. The error should no longer be
thrown as of 1.12. See story for more info.

This PR is for cleanup and to consolidate any file not found errors in
the context of binary data, to track if this happens again.
2023-11-03 11:41:15 +01:00
Jan Oberhauser
655efeaf66 feat(core): Add optional Error-Output (#7460)
Add an additional optional error output to which all items get sent that
could not be processed.
![Screenshot from 2023-10-18
17-29-15](https://github.com/n8n-io/n8n/assets/6249596/e9732807-ab2b-4662-a5f6-bdff24f7ad55)

Github issue / Community forum post (link here to close automatically):
https://community.n8n.io/t/error-connector-for-nodes/3094

https://community.n8n.io/t/error-handling-at-node-level-detect-node-execution-status/26791

---------

Co-authored-by: OlegIvaniv <me@olegivaniv.com>
2023-10-30 18:42:47 +01:00
कारतोफ्फेलस्क्रिप्ट™
35bb42c1b9 refactor(core): Avoid passing around static state like default timezone (no-changelog) (#7221) 2023-10-27 14:17:52 +02:00
कारतोफ्फेलस्क्रिप्ट™
65e5593233 fix(core): Upgrade crypto-js to address CVE-2023-46233 (#7519)
[GH Advisory](https://github.com/advisories/GHSA-xwcq-pm8m-c4vf)
2023-10-26 11:21:53 +02:00
कारतोफ्फेलस्क्रिप्ट™
05586a900d refactor(core): Make Logger a service (no-changelog) (#7494) 2023-10-25 16:35:22 +02:00
कारतोफ्फेलस्क्रिप्ट™
8ff9f97493 fix(core): Create instance settings directory recursively (no-changelog) (#7506) 2023-10-24 15:10:22 +02:00
Iván Ovejero
78243edd18 refactor(core): Make pruning via lifecycle configuration in S3 mode mandatory (#7482)
Since we do not store which executions produced binary data, for pruning
on S3 we need to query for binary data items for each execution in order
to delete them. To minimize requests to S3, allow the user to skip
pruning requests when setting TTL at bucket level.
2023-10-24 10:37:02 +02:00
कारतोफ्फेलस्क्रिप्ट™
a9fdd018f4 fix(core): Always derive instanceId from the encryption key (no-changlog) (#7501)
This was the expected behavior, until I changed it in
https://github.com/n8n-io/n8n/pull/7471
2023-10-24 09:55:57 +02:00
कारतोफ्फेलस्क्रिप्ट™
b6de910cbe refactor(core): Abstract away InstanceSettings and encryptionKey into injectable services (no-changelog) (#7471)
This change ensures that things like `encryptionKey` and `instanceId`
are always available directly where they are needed, instead of passing
them around throughout the code.
2023-10-23 13:39:35 +02:00
Iván Ovejero
609f0837cf test(core): Add test for suppressing error on non-existing filepath (no-changelog) (#7421)
Follow-up to #7411
2023-10-13 11:52:17 +02:00
Iván Ovejero
0847623f85 feat(core): Switch binary filesystem mode to nested path structure (#7307)
Depends on #7253 | Story:
[PAY-863](https://linear.app/n8n/issue/PAY-863/switch-binary-filesystem-mode-to-nested-path-structure)

This PR introduces `filesystem-v2` to store binary data in the
filesystem in the same format as `s3`.
2023-10-10 10:06:06 +02:00
कारतोफ्फेलस्क्रिप्ट™
597669aa62 refactor(core): Move copyInputItems to node helpers (no-changelog) (#7299) 2023-10-06 16:25:58 +02:00
Iván Ovejero
63e11e4be9 fix(core): Prevent object deletion request on no prefix match (#7366) 2023-10-06 15:46:39 +02:00
Iván Ovejero
1a661e6d00 feat(core): Integrate object store as binary data manager (#7253)
Depends on: #7225 | Story:
[PAY-848](https://linear.app/n8n/issue/PAY-848)

This PR integrates the object store service as a new binary data manager
for Enterprise.
2023-10-05 15:25:17 +02:00
Iván Ovejero
fa845453bb feat(core): Introduce object store service (#7225)
Depends on https://github.com/n8n-io/n8n/pull/7220 | Story:
[PAY-840](https://linear.app/n8n/issue/PAY-840/introduce-object-store-service-and-manager-for-binary-data)

This PR introduces an object store service for Enterprise edition. Note
that the service is tested but currently unused - it will be integrated
soon as a binary data manager, and later for execution data.
`amazonaws.com` in the host is temporarily hardcoded until we integrate
the service and test against AWS, Cloudflare and Backblaze, in the next
PR.

This is ready for review - the PR it depends on is approved and waiting
for CI.

---------

Co-authored-by: कारतोफ्फेलस्क्रिप्ट™ <aditya@netroy.in>
2023-09-27 09:42:35 +02:00
Iván Ovejero
6d6e2488c6 refactor(core): Generalize binary data manager interface (no-changelog) (#7164)
Depends on: #7092 | Story:
[PAY-768](https://linear.app/n8n/issue/PAY-768)

This PR: 
- Generalizes the `IBinaryDataManager` interface.
- Adjusts `Filesystem.ts` to satisfy the interface.
- Sets up an S3 client stub to be filled in in the next PR.
- Turns `BinaryDataManager` into an injectable service.
- Adjusts the config schema and adds new validators.

Note that the PR looks large but all the main changes are in
`packages/core/src/binaryData`.

Out of scope:
- `BinaryDataManager` (now `BinaryDataService`) and `Filesystem.ts` (now
`fs.client.ts`) were slightly refactored for maintainability, but fully
overhauling them is **not** the focus of this PR, which is meant to
clear the way for the S3 implementation. Future improvements for these
two should include setting up a backwards-compatible dir structure that
makes it easier to locate binary data files to delete, removing
duplication, simplifying cloning methods, using integers for binary data
size instead of `prettyBytes()`, writing tests for existing binary data
logic, etc.

---------

Co-authored-by: कारतोफ्फेलस्क्रिप्ट™ <aditya@netroy.in>
2023-09-22 17:22:12 +02:00
Iván Ovejero
e8e44f6b6e refactor(core): Log binary data file write errors (no-changelog) (#7237)
This PR adds logging for binary data file write errors, to capture why
executions sometimes point to non-existing binary data files. See
[Sentry
error](https://n8nio.sentry.io/issues/4495134693/?alert_rule_id=14556563&alert_type=issue&notification_uuid=4b50a5da-6ae9-472e-9658-984cca824762&project=4503924908883968&referrer=slack).
2023-09-22 11:48:20 +02:00
Elias Meire
67b985fe89 fix(core): Handle filename* with quotes in Content-Disposition header (#7229)
Github issue / Community forum post (link here to close automatically):
2023-09-21 14:54:10 +02:00
Iván Ovejero
cd08c8e4c6 refactor(core): Implement soft-deletions for executions (#7092)
Based on #7065 | Story: https://linear.app/n8n/issue/PAY-771

n8n on filesystem mode marks binary data to delete on manual execution
deletion, on unsaved execution completion, and on every execution
pruning cycle. We later prune binary data in a separate cycle via these
marker files, based on the configured TTL. In the context of introducing
an S3 client to manage binary data, the filesystem mode's mark-and-prune
setup is too tightly coupled to the general binary data management
client interface.

This PR...
- Ensures the deletion of an execution causes the deletion of any binary
data associated to it. This does away with the need for binary data TTL
and simplifies the filesystem mode's mark-and-prune setup.
- Refactors all execution deletions (including pruning) to cause soft
deletions, hard-deletes soft-deleted executions based on the existing
pruning config, and adjusts execution endpoints to filter out
soft-deleted executions. This reduces DB load, and keeps binary data
around long enough for users to access it when building workflows with
unsaved executions.
- Moves all execution pruning work from an execution lifecycle hook to
`execution.repository.ts`. This keeps related logic in a single place.
- Removes all marking logic from the binary data manager. This
simplifies the interface that the S3 client will meet.
- Adds basic sanity-check tests to pruning logic and execution deletion.

Out of scope:

- Improving existing pruning logic.
- Improving existing execution repository logic.
- Adjusting dir structure for filesystem mode.

---------

Co-authored-by: कारतोफ्फेलस्क्रिप्ट™ <aditya@netroy.in>
2023-09-20 15:21:42 +02:00
Elias Meire
d41546b899 fix(core): Make parsing of content-type and content-disposition headers more flexible (#7217)
fixes #7149
2023-09-20 14:40:06 +02:00
Michael Kret
3a474552b2 feat(Set Node): Overhaul (#6348)
Github issue / Community forum post (link here to close automatically):
https://github.com/n8n-io/n8n/pull/6348

---------

Co-authored-by: Giulio Andreini <g.andreini@gmail.com>
Co-authored-by: Marcus <marcus@n8n.io>
2023-09-19 13:16:35 +03:00
कारतोफ्फेलस्क्रिप्ट™
2f647974f4 refactor: Use actual nodes/credentials in cli and core tests (no-changelog) (#7115) 2023-09-06 10:23:47 +02:00
कारतोफ्फेलस्क्रिप्ट™
6aa7b93473 refactor(core): Deprecate prepareOutputData (no-changelog) (#7091) 2023-09-05 12:59:02 +02:00
Iván Ovejero
8cd4db0ab7 refactor(core): Simplify marking logic in binary data manager (no-changelog) (#7046)
- For a saved execution, we write to disk binary data and metadata.
These two are only ever deleted via `POST /executions/delete`. No marker
file, so untouched by pruning.
- For an unsaved execution, we write to disk binary data, binary data
metadata, and a marker file at `/meta`. We later delete all three during
pruning.
- The third flow is legacy. Currently, if the execution is unsaved, we
actually store it in the DB while running the workflow and immediately
after the workflow is finished during the `onWorkflowPostExecute()` hook
we delete that execution, so the second flow applies. But formerly, we
did not store unsaved executions in the DB ("ephemeral executions") and
so we needed to write a marker file at `/persistMeta` so that, if the
ephemeral execution crashed after the step where binary data was stored,
we had a way to later delete its associated dangling binary data via a
second pruning cycle, and if the ephemeral execution succeeded, then we
immediately cleaned up the marker file at `/persistMeta` during the
`onWorkflowPostExecute()` hook.

This creation and cleanup at `/persistMeta` is still happening, but this
third flow no longer has a purpose, as we now store unsaved executions
in the DB and delete them immediately after. Hence the third flow can be
removed.
2023-08-31 16:02:20 +02:00
कारतोफ्फेलस्क्रिप्ट™
d97edbcffa fix(core): Make node execution order configurable, and backward-compatible (#6507)
* fix(core): Make node execution order configurable, and backward-compatible

*  Also add new Merge-Node behaviour

*  Fix typo

* Fix lint issue

* update labels

* rename legacy to v0

* remove the unnecessary log

* default all new workflows to use v1 execution-order

* remove the controller changes

* clone default settings to avoid it getting modified

---------

Co-authored-by: Jan Oberhauser <jan.oberhauser@gmail.com>
2023-07-05 18:47:34 +02:00
Jan Oberhauser
b8458a53f6 feat(core)!: Change data processing for multi-input-nodes (#4238)
Co-authored-by: कारतोफ्फेलस्क्रिप्ट™ <aditya@netroy.in>
2023-06-23 12:07:52 +02:00
Jan Oberhauser
0287d5becd feat(core): Change node execution order (most top-left one first) (#6246)
* feat(core): Change node execution order (most top-left one first)

*  Fix issue with multi-output-nodes

*  Remove not needed meta-entry in test

* fix the e2e test

---------

Co-authored-by: कारतोफ्फेलस्क्रिप्ट™ <aditya@netroy.in>
2023-06-22 21:11:29 +02:00
Jan Oberhauser
4b0e0b7970 fix(core): Fix pairedItem for alwaysOutputData & multi identical resolve (#6405) 2023-06-21 10:38:28 +03:00
Chris Wu
1111c915f2 refactor(core): Replace lodash's "soft-deprecated" individual packages with lodash to resolve CVE (no-changelog) (#6450)
Co-authored-by: कारतोफ्फेलस्क्रिप्ट™ <aditya@netroy.in>
2023-06-16 16:26:35 +02:00
Iván Ovejero
06fa6f1fb3 ci: Expand ESLint to tests in BE packages (no-changelog) (#6147)
* 🔧 Adjust base ESLint config

* 🔧 Adjust `lint` and `lintfix` in `nodes-base`

* 🔧 Include `test` and `utils` in `nodes-base`

* 📘 Convert JS tests to TS

* 👕 Apply lintfixes
2023-05-02 10:37:19 +02:00
Filipe Dobreira
18d5156994 fix(IF Node): Fix typo in combine description (no-changelog) (#5964) 2023-04-14 13:22:41 +01:00