n8n-workflow 2.44.1 → 2.45.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/build.tsbuildinfo +1 -1
- package/dist/cjs/dynamic-credentials-helpers.d.ts +11 -2
- package/dist/cjs/dynamic-credentials-helpers.d.ts.map +1 -1
- package/dist/cjs/dynamic-credentials-helpers.js +40 -2
- package/dist/cjs/dynamic-credentials-helpers.js.map +1 -1
- package/dist/cjs/execution-context.d.ts +8 -0
- package/dist/cjs/execution-context.d.ts.map +1 -1
- package/dist/cjs/execution-context.js +12 -0
- package/dist/cjs/execution-context.js.map +1 -1
- package/dist/cjs/expression.d.ts +53 -0
- package/dist/cjs/expression.d.ts.map +1 -1
- package/dist/cjs/expression.js +141 -34
- package/dist/cjs/expression.js.map +1 -1
- package/dist/cjs/expressions/native-evaluation/evaluator.d.ts.map +1 -1
- package/dist/cjs/expressions/native-evaluation/evaluator.js +80 -10
- package/dist/cjs/expressions/native-evaluation/evaluator.js.map +1 -1
- package/dist/cjs/expressions/native-evaluation/grammar.d.ts +1 -1
- package/dist/cjs/expressions/native-evaluation/grammar.d.ts.map +1 -1
- package/dist/cjs/expressions/native-evaluation/grammar.js +52 -2
- package/dist/cjs/expressions/native-evaluation/grammar.js.map +1 -1
- package/dist/cjs/expressions/native-evaluation/index.d.ts.map +1 -1
- package/dist/cjs/expressions/native-evaluation/index.js +52 -10
- package/dist/cjs/expressions/native-evaluation/index.js.map +1 -1
- package/dist/cjs/expressions/native-evaluation/parser.d.ts +11 -0
- package/dist/cjs/expressions/native-evaluation/parser.d.ts.map +1 -1
- package/dist/cjs/expressions/native-evaluation/parser.js +86 -10
- package/dist/cjs/expressions/native-evaluation/parser.js.map +1 -1
- package/dist/cjs/extensions/expression-parser.js +2 -2
- package/dist/cjs/extensions/expression-parser.js.map +1 -1
- package/dist/cjs/interfaces.d.ts +71 -8
- package/dist/cjs/interfaces.d.ts.map +1 -1
- package/dist/cjs/interfaces.js.map +1 -1
- package/dist/cjs/message-event-bus.d.ts +8 -3
- package/dist/cjs/message-event-bus.d.ts.map +1 -1
- package/dist/cjs/message-event-bus.js +42 -4
- package/dist/cjs/message-event-bus.js.map +1 -1
- package/dist/cjs/redaction-channels.d.ts +45 -2
- package/dist/cjs/redaction-channels.d.ts.map +1 -1
- package/dist/cjs/redaction-channels.js +90 -2
- package/dist/cjs/redaction-channels.js.map +1 -1
- package/dist/cjs/run-execution-data/run-execution-data.v1.d.ts +5 -0
- package/dist/cjs/run-execution-data/run-execution-data.v1.d.ts.map +1 -1
- package/dist/cjs/run-execution-data/run-execution-data.v1.js.map +1 -1
- package/dist/esm/dynamic-credentials-helpers.d.ts +11 -2
- package/dist/esm/dynamic-credentials-helpers.d.ts.map +1 -1
- package/dist/esm/dynamic-credentials-helpers.js +39 -2
- package/dist/esm/dynamic-credentials-helpers.js.map +1 -1
- package/dist/esm/execution-context.d.ts +8 -0
- package/dist/esm/execution-context.d.ts.map +1 -1
- package/dist/esm/execution-context.js +12 -0
- package/dist/esm/execution-context.js.map +1 -1
- package/dist/esm/expression.d.ts +53 -0
- package/dist/esm/expression.d.ts.map +1 -1
- package/dist/esm/expression.js +142 -35
- package/dist/esm/expression.js.map +1 -1
- package/dist/esm/expressions/native-evaluation/evaluator.d.ts.map +1 -1
- package/dist/esm/expressions/native-evaluation/evaluator.js +81 -11
- package/dist/esm/expressions/native-evaluation/evaluator.js.map +1 -1
- package/dist/esm/expressions/native-evaluation/grammar.d.ts +1 -1
- package/dist/esm/expressions/native-evaluation/grammar.d.ts.map +1 -1
- package/dist/esm/expressions/native-evaluation/grammar.js +51 -1
- package/dist/esm/expressions/native-evaluation/grammar.js.map +1 -1
- package/dist/esm/expressions/native-evaluation/index.d.ts.map +1 -1
- package/dist/esm/expressions/native-evaluation/index.js +54 -12
- package/dist/esm/expressions/native-evaluation/index.js.map +1 -1
- package/dist/esm/expressions/native-evaluation/parser.d.ts +11 -0
- package/dist/esm/expressions/native-evaluation/parser.d.ts.map +1 -1
- package/dist/esm/expressions/native-evaluation/parser.js +86 -11
- package/dist/esm/expressions/native-evaluation/parser.js.map +1 -1
- package/dist/esm/extensions/expression-parser.js +2 -2
- package/dist/esm/extensions/expression-parser.js.map +1 -1
- package/dist/esm/interfaces.d.ts +71 -8
- package/dist/esm/interfaces.d.ts.map +1 -1
- package/dist/esm/interfaces.js.map +1 -1
- package/dist/esm/message-event-bus.d.ts +8 -3
- package/dist/esm/message-event-bus.d.ts.map +1 -1
- package/dist/esm/message-event-bus.js +41 -3
- package/dist/esm/message-event-bus.js.map +1 -1
- package/dist/esm/redaction-channels.d.ts +45 -2
- package/dist/esm/redaction-channels.d.ts.map +1 -1
- package/dist/esm/redaction-channels.js +84 -2
- package/dist/esm/redaction-channels.js.map +1 -1
- package/dist/esm/run-execution-data/run-execution-data.v1.d.ts +5 -0
- package/dist/esm/run-execution-data/run-execution-data.v1.d.ts.map +1 -1
- package/dist/esm/run-execution-data/run-execution-data.v1.js.map +1 -1
- package/dist/esm/typecheck.tsbuildinfo +1 -1
- package/package.json +6 -6
|
@@ -16,18 +16,27 @@ export declare function runDataAttemptedDynamicCredentials(runData: IRunData | u
|
|
|
16
16
|
* Summarizes a run's private-credential usage so a sub-execution can report it to its caller.
|
|
17
17
|
* Credentials resolve under the sub-workflow's own context, so the parent would otherwise never
|
|
18
18
|
* flag that its embedded output used a private credential; recurses via the child's task flags.
|
|
19
|
+
*
|
|
20
|
+
* Also reports `usedCredentialIds`: every credential the run's workflows reference, private or
|
|
21
|
+
* not, which credential usability redaction reads.
|
|
19
22
|
*/
|
|
20
|
-
export declare function summarizeDynamicCredentialsUsage(executionData: IRunExecutionData | undefined
|
|
23
|
+
export declare function summarizeDynamicCredentialsUsage(executionData: IRunExecutionData | undefined,
|
|
24
|
+
/** The credentials the run's own workflow references. */
|
|
25
|
+
workflowCredentialIds?: readonly string[]): DynamicCredentialsUsage;
|
|
26
|
+
/** The credentials sub-workflows reported onto the run's tasks. */
|
|
27
|
+
export declare function runDataUsedCredentialIds(runData: IRunData | undefined): string[];
|
|
21
28
|
/** The per-node dynamic-credential flags carried on `IWorkflowExecuteAdditionalData`. */
|
|
22
29
|
interface DynamicCredentialsUsageTarget {
|
|
23
30
|
currentNodeUsedDynamicCredentials?: boolean;
|
|
24
31
|
currentNodeAttemptedDynamicCredentials?: boolean;
|
|
25
32
|
dynamicCredentialsResolvedUserId?: string;
|
|
33
|
+
currentNodeUsedCredentialIds?: string[];
|
|
26
34
|
}
|
|
27
35
|
/**
|
|
28
36
|
* Applies a reported usage summary onto the per-node flags additively (flags only ever get set,
|
|
29
37
|
* matching the other flag writers — the engine resets them per node). Resolved user id is
|
|
30
|
-
* execution-scoped, so a present value wins (matches credential resolution).
|
|
38
|
+
* execution-scoped, so a present value wins (matches credential resolution). The plain
|
|
39
|
+
* credential ids are joined with the ones the node already collected.
|
|
31
40
|
*/
|
|
32
41
|
export declare function applyDynamicCredentialsUsage(target: DynamicCredentialsUsageTarget, usage: DynamicCredentialsUsage): void;
|
|
33
42
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-credentials-helpers.d.ts","sourceRoot":"","sources":["../../src/dynamic-credentials-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAEjF;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,CAMpF;AAED;;;;GAIG;AACH,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,CAIzF;AAED
|
|
1
|
+
{"version":3,"file":"dynamic-credentials-helpers.d.ts","sourceRoot":"","sources":["../../src/dynamic-credentials-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAEjF;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,CAMpF;AAED;;;;GAIG;AACH,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,CAIzF;AAED;;;;;;;GAOG;AACH,wBAAgB,gCAAgC,CAC/C,aAAa,EAAE,iBAAiB,GAAG,SAAS;AAC5C,yDAAyD;AACzD,qBAAqB,GAAE,SAAS,MAAM,EAAO,GAC3C,uBAAuB,CAqBzB;AAED,mEAAmE;AACnE,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,EAAE,CAWhF;AAED,yFAAyF;AACzF,UAAU,6BAA6B;IACtC,iCAAiC,CAAC,EAAE,OAAO,CAAC;IAC5C,sCAAsC,CAAC,EAAE,OAAO,CAAC;IACjD,gCAAgC,CAAC,EAAE,MAAM,CAAC;IAC1C,4BAA4B,CAAC,EAAE,MAAM,EAAE,CAAC;CACxC;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC3C,MAAM,EAAE,6BAA6B,EACrC,KAAK,EAAE,uBAAuB,GAC5B,IAAI,CAeN;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,GAAG,KAAK,CAKjG;AAED;;;;GAIG;AACH,wBAAgB,mCAAmC,CAClD,KAAK,EAAE,OAAO,GACZ,uBAAuB,GAAG,SAAS,CA0BrC"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.runDataUsedDynamicCredentials = runDataUsedDynamicCredentials;
|
|
4
4
|
exports.runDataAttemptedDynamicCredentials = runDataAttemptedDynamicCredentials;
|
|
5
5
|
exports.summarizeDynamicCredentialsUsage = summarizeDynamicCredentialsUsage;
|
|
6
|
+
exports.runDataUsedCredentialIds = runDataUsedCredentialIds;
|
|
6
7
|
exports.applyDynamicCredentialsUsage = applyDynamicCredentialsUsage;
|
|
7
8
|
exports.attachDynamicCredentialsUsage = attachDynamicCredentialsUsage;
|
|
8
9
|
exports.takeAttachedDynamicCredentialsUsage = takeAttachedDynamicCredentialsUsage;
|
|
@@ -29,10 +30,20 @@ function runDataAttemptedDynamicCredentials(runData) {
|
|
|
29
30
|
* Summarizes a run's private-credential usage so a sub-execution can report it to its caller.
|
|
30
31
|
* Credentials resolve under the sub-workflow's own context, so the parent would otherwise never
|
|
31
32
|
* flag that its embedded output used a private credential; recurses via the child's task flags.
|
|
33
|
+
*
|
|
34
|
+
* Also reports `usedCredentialIds`: every credential the run's workflows reference, private or
|
|
35
|
+
* not, which credential usability redaction reads.
|
|
32
36
|
*/
|
|
33
|
-
function summarizeDynamicCredentialsUsage(executionData
|
|
37
|
+
function summarizeDynamicCredentialsUsage(executionData,
|
|
38
|
+
/** The credentials the run's own workflow references. */
|
|
39
|
+
workflowCredentialIds = []) {
|
|
34
40
|
const runData = executionData?.resultData?.runData;
|
|
35
41
|
const usage = {};
|
|
42
|
+
const usedCredentialIds = new Set(workflowCredentialIds);
|
|
43
|
+
for (const id of runDataUsedCredentialIds(runData))
|
|
44
|
+
usedCredentialIds.add(id);
|
|
45
|
+
if (usedCredentialIds.size > 0)
|
|
46
|
+
usage.usedCredentialIds = [...usedCredentialIds].sort();
|
|
36
47
|
if (runDataUsedDynamicCredentials(runData)) {
|
|
37
48
|
usage.usedDynamicCredentials = true;
|
|
38
49
|
const resolvedUserId = executionData?.executionData?.runtimeData?.executedByUserId;
|
|
@@ -45,10 +56,27 @@ function summarizeDynamicCredentialsUsage(executionData) {
|
|
|
45
56
|
}
|
|
46
57
|
return usage;
|
|
47
58
|
}
|
|
59
|
+
/** The credentials sub-workflows reported onto the run's tasks. */
|
|
60
|
+
function runDataUsedCredentialIds(runData) {
|
|
61
|
+
const ids = new Set();
|
|
62
|
+
for (const tasks of Object.values(runData ?? {})) {
|
|
63
|
+
for (const task of tasks) {
|
|
64
|
+
// Persisted run data is not validated, so read the ids only when they are a list.
|
|
65
|
+
const taskIds = task?.usedCredentialIds;
|
|
66
|
+
if (!Array.isArray(taskIds))
|
|
67
|
+
continue;
|
|
68
|
+
for (const id of taskIds)
|
|
69
|
+
if (typeof id === 'string')
|
|
70
|
+
ids.add(id);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return [...ids];
|
|
74
|
+
}
|
|
48
75
|
/**
|
|
49
76
|
* Applies a reported usage summary onto the per-node flags additively (flags only ever get set,
|
|
50
77
|
* matching the other flag writers — the engine resets them per node). Resolved user id is
|
|
51
|
-
* execution-scoped, so a present value wins (matches credential resolution).
|
|
78
|
+
* execution-scoped, so a present value wins (matches credential resolution). The plain
|
|
79
|
+
* credential ids are joined with the ones the node already collected.
|
|
52
80
|
*/
|
|
53
81
|
function applyDynamicCredentialsUsage(target, usage) {
|
|
54
82
|
if (usage.usedDynamicCredentials) {
|
|
@@ -60,6 +88,11 @@ function applyDynamicCredentialsUsage(target, usage) {
|
|
|
60
88
|
if (usage.attemptedDynamicCredentials) {
|
|
61
89
|
target.currentNodeAttemptedDynamicCredentials = true;
|
|
62
90
|
}
|
|
91
|
+
if (usage.usedCredentialIds?.length) {
|
|
92
|
+
target.currentNodeUsedCredentialIds = [
|
|
93
|
+
...new Set([...(target.currentNodeUsedCredentialIds ?? []), ...usage.usedCredentialIds]),
|
|
94
|
+
];
|
|
95
|
+
}
|
|
63
96
|
}
|
|
64
97
|
/**
|
|
65
98
|
* Rides a usage summary on an error crossing the sub-execution boundary, so a caller that
|
|
@@ -97,6 +130,11 @@ function takeAttachedDynamicCredentialsUsage(error) {
|
|
|
97
130
|
typeof attached.dynamicCredentialsResolvedUserId === 'string') {
|
|
98
131
|
usage.dynamicCredentialsResolvedUserId = attached.dynamicCredentialsResolvedUserId;
|
|
99
132
|
}
|
|
133
|
+
if ('usedCredentialIds' in attached && Array.isArray(attached.usedCredentialIds)) {
|
|
134
|
+
const ids = attached.usedCredentialIds.filter((id) => typeof id === 'string');
|
|
135
|
+
if (ids.length > 0)
|
|
136
|
+
usage.usedCredentialIds = ids;
|
|
137
|
+
}
|
|
100
138
|
return Object.keys(usage).length > 0 ? usage : undefined;
|
|
101
139
|
}
|
|
102
140
|
//# sourceMappingURL=dynamic-credentials-helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-credentials-helpers.js","sourceRoot":"","sources":["../../src/dynamic-credentials-helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dynamic-credentials-helpers.js","sourceRoot":"","sources":["../../src/dynamic-credentials-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -136,6 +136,10 @@ declare const ExecutionContextSchemaV1: z.ZodObject<{
|
|
|
136
136
|
manual: z.ZodBoolean;
|
|
137
137
|
source: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"workflow">, z.ZodLiteral<"instance">]>>;
|
|
138
138
|
}, z.core.$strip>]>>;
|
|
139
|
+
subWorkflowRedaction: z.ZodOptional<z.ZodObject<{
|
|
140
|
+
production: z.ZodBoolean;
|
|
141
|
+
manual: z.ZodBoolean;
|
|
142
|
+
}, z.core.$strip>>;
|
|
139
143
|
executedByUserId: z.ZodOptional<z.ZodString>;
|
|
140
144
|
usesDynamicCredentials: z.ZodOptional<z.ZodBoolean>;
|
|
141
145
|
}, z.core.$strip>;
|
|
@@ -172,6 +176,10 @@ export declare const ExecutionContextSchema: z.ZodDiscriminatedUnion<[z.ZodObjec
|
|
|
172
176
|
manual: z.ZodBoolean;
|
|
173
177
|
source: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"workflow">, z.ZodLiteral<"instance">]>>;
|
|
174
178
|
}, z.core.$strip>]>>;
|
|
179
|
+
subWorkflowRedaction: z.ZodOptional<z.ZodObject<{
|
|
180
|
+
production: z.ZodBoolean;
|
|
181
|
+
manual: z.ZodBoolean;
|
|
182
|
+
}, z.core.$strip>>;
|
|
175
183
|
executedByUserId: z.ZodOptional<z.ZodString>;
|
|
176
184
|
usesDynamicCredentials: z.ZodOptional<z.ZodBoolean>;
|
|
177
185
|
}, z.core.$strip>]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution-context.d.ts","sourceRoot":"","sources":["../../src/execution-context.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,EAAE,EAAE,KAAK,OAAO,EAAE,MAAM,QAAQ,CAAC;AAIzC;;;GAGG;AACH,KAAK,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AACtD,KAAK,SAAS,GAAG,aAAa,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAAG,SAAS,EAAE,CAAC;AAa5E,QAAA,MAAM,uBAAuB;;;;iBAmB3B,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE1E,eAAO,MAAM,qBAAqB;;;;mBAI/B,CAAC;AAEJ;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEtE;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IAClC,+DAA+D;IAC/D,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,uFAAuF;IACvF,uBAAuB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,eAAO,MAAM,wBAAwB;;;iBAGG,CAAC;AAEzC,QAAA,MAAM,yBAAyB;;;;iBAY7B,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE9E,eAAO,MAAM,uBAAuB;;;;mBAIjC,CAAC;AAEJ;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE1E,eAAO,MAAM,uBAAuB,YACnC,KAAK,EACL,OAAO,EACP,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,OAAO,EACP,SAAS,EACT,SAAS,EACT,YAAY,EACZ,MAAM,EACN,OAAO,CACE,CAAC;AAIX,MAAM,MAAM,yBAAyB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;AASjF,QAAA,MAAM,wBAAwB;;;iBAG5B,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE5E,QAAA,MAAM,qBAAqB,2EAA0D,CAAC;AAEtF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAErE;;;;;;;;;;GAUG;AACH,QAAA,MAAM,wBAAwB;;;;;iBAK5B,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE5E;;;;GAIG;AACH,QAAA,MAAM,sBAAsB;;;;;;;;mBAG1B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAExE,QAAA,MAAM,wBAAwB
|
|
1
|
+
{"version":3,"file":"execution-context.d.ts","sourceRoot":"","sources":["../../src/execution-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -158,6 +158,15 @@ const ExecutionContextSchemaV1 = v4_1.default.object({
|
|
|
158
158
|
* regardless of any subsequent changes to the workflow setting.
|
|
159
159
|
*/
|
|
160
160
|
redaction: RedactionSettingSchema.optional(),
|
|
161
|
+
/**
|
|
162
|
+
* Redaction channels that the sub-workflows of this execution reported to it.
|
|
163
|
+
* A sub-workflow reports the channels it redacts (and what its own
|
|
164
|
+
* sub-workflows reported), because the caller keeps a copy of its output.
|
|
165
|
+
* Kept apart from `redaction`, which stays the snapshot taken at start, so
|
|
166
|
+
* the read path can tell why an execution is redacted. Readers combine the
|
|
167
|
+
* two fields, strictest per channel. A channel is never lowered.
|
|
168
|
+
*/
|
|
169
|
+
subWorkflowRedaction: v4_1.default.object({ production: v4_1.default.boolean(), manual: v4_1.default.boolean() }).optional(),
|
|
161
170
|
/**
|
|
162
171
|
* The n8n user the execution ran as. Stamped at context establishment by
|
|
163
172
|
* deriving the user from the identity carrier with the same identifier that
|
|
@@ -197,6 +206,9 @@ function toErrorWorkflowContext(context) {
|
|
|
197
206
|
parentExecutionId: context.parentExecutionId,
|
|
198
207
|
}),
|
|
199
208
|
...(context.redaction !== undefined && { redaction: context.redaction }),
|
|
209
|
+
...(context.subWorkflowRedaction !== undefined && {
|
|
210
|
+
subWorkflowRedaction: context.subWorkflowRedaction,
|
|
211
|
+
}),
|
|
200
212
|
...(context.executedByUserId !== undefined && {
|
|
201
213
|
executedByUserId: context.executedByUserId,
|
|
202
214
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution-context.js","sourceRoot":"","sources":["../../src/execution-context.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"execution-context.js","sourceRoot":"","sources":["../../src/execution-context.ts"],"names":[],"mappings":";;;;;;;AAAA,gDAAyC;AAEzC,mCAAoC;AASpC,MAAM,eAAe,GAAyB,YAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CACzD,YAAC,CAAC,KAAK,CAAC;IACP,YAAC,CAAC,MAAM,EAAE;IACV,YAAC,CAAC,MAAM,EAAE;IACV,YAAC,CAAC,OAAO,EAAE;IACX,YAAC,CAAC,IAAI,EAAE;IACR,YAAC,CAAC,MAAM,CAAC,YAAC,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC;IACrC,YAAC,CAAC,KAAK,CAAC,eAAe,CAAC;CACxB,CAAC,CACF,CAAC;AAEF,MAAM,uBAAuB,GAAG,YAAC,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,YAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAErB;;;;;;;;;OASG;IACH,SAAS,EAAE,YAAC,CAAC,MAAM,CAAC,YAAC,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC;IAEhD;;OAEG;IACH,QAAQ,EAAE,YAAC,CAAC,MAAM,CAAC,YAAC,CAAC,MAAM,EAAE,EAAE,YAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CACtD,CAAC,CAAC;AAIU,QAAA,qBAAqB,GAAG,YAAC;KACpC,kBAAkB,CAAC,SAAS,EAAE,CAAC,uBAAuB,CAAC,CAAC;KACxD,IAAI,CAAC;IACL,KAAK,EAAE,kBAAkB;CACzB,CAAC,CAAC;AA4BS,QAAA,wBAAwB,GAAG,YAAC,CAAC,MAAM,CAAC;IAChD,SAAS,EAAE,YAAC,CAAC,KAAK,CAAC,YAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACrC,uBAAuB,EAAE,YAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9C,CAAuC,CAAC;AAEzC,MAAM,yBAAyB,GAAG,YAAC,CAAC,MAAM,CAAC;IAC1C,OAAO,EAAE,YAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB;;;OAGG;IACH,QAAQ,EAAE,YAAC,CAAC,MAAM,EAAE;IAEpB;;OAEG;IACH,QAAQ,EAAE,YAAC,CAAC,MAAM,CAAC,YAAC,CAAC,MAAM,EAAE,EAAE,YAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CACtD,CAAC,CAAC;AAIU,QAAA,uBAAuB,GAAG,YAAC;KACtC,kBAAkB,CAAC,SAAS,EAAE,CAAC,yBAAyB,CAAC,CAAC;KAC1D,IAAI,CAAC;IACL,KAAK,EAAE,oBAAoB;CAC3B,CAAC,CAAC;AAQS,QAAA,uBAAuB,GAAG;IACtC,KAAK;IACL,OAAO;IACP,YAAY;IACZ,UAAU;IACV,QAAQ;IACR,OAAO;IACP,SAAS;IACT,SAAS;IACT,YAAY;IACZ,MAAM;IACN,OAAO;CACE,CAAC;AAEX,MAAM,yBAAyB,GAAG,YAAC,CAAC,IAAI,CAAC,QAAA,uBAAuB,CAAC,CAAC;AAIlE,MAAM,qBAAqB,GAAG,YAAC,CAAC,KAAK,CAAC;IACrC,YAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACjB,YAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IAChB,YAAC,CAAC,OAAO,CAAC,YAAY,CAAC;IACvB,YAAC,CAAC,OAAO,CAAC,aAAa,CAAC;CACxB,CAAC,CAAC;AAEH,MAAM,wBAAwB,GAAG,YAAC,CAAC,MAAM,CAAC;IACzC,OAAO,EAAE,YAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,MAAM,EAAE,qBAAqB;CAC7B,CAAC,CAAC;AAIH,MAAM,qBAAqB,GAAG,YAAC,CAAC,KAAK,CAAC,CAAC,YAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,YAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAItF;;;;;;;;;;GAUG;AACH,MAAM,wBAAwB,GAAG,YAAC,CAAC,MAAM,CAAC;IACzC,OAAO,EAAE,YAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,UAAU,EAAE,YAAC,CAAC,OAAO,EAAE;IACvB,MAAM,EAAE,YAAC,CAAC,OAAO,EAAE;IACnB,MAAM,EAAE,qBAAqB,CAAC,QAAQ,EAAE;CACxC,CAAC,CAAC;AAIH;;;;GAIG;AACH,MAAM,sBAAsB,GAAG,YAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE;IAC9D,wBAAwB;IACxB,wBAAwB;CACxB,CAAC,CAAC;AAIH,MAAM,wBAAwB,GAAG,YAAC,CAAC,MAAM,CAAC;IACzC,OAAO,EAAE,YAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB;;OAEG;IACH,aAAa,EAAE,YAAC,CAAC,MAAM,EAAE;IAEzB;;OAEG;IACH,MAAM,EAAE,yBAAyB;IAEjC;;OAEG;IACH,WAAW,EAAE,YAAC;SACZ,MAAM,CAAC;QACP,IAAI,EAAE,YAAC,CAAC,MAAM,EAAE;QAChB,IAAI,EAAE,YAAC,CAAC,MAAM,EAAE;KAChB,CAAC;SACD,QAAQ,EAAE;IAEZ;;;OAGG;IACH,iBAAiB,EAAE,YAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAExC;;;;OAIG;IACH,WAAW,EAAE,YAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC;QACvC,WAAW,EACV,yLAAyL;KAC1L,CAAC;IAEF;;;;;;OAMG;IACH,eAAe,EAAE,YAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC;QAC3C,WAAW,EACV,0LAA0L;KAC3L,CAAC;IAEF;;;;OAIG;IACH,SAAS,EAAE,sBAAsB,CAAC,QAAQ,EAAE;IAE5C;;;;;;;OAOG;IACH,oBAAoB,EAAE,YAAC,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,YAAC,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,YAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE;IAE3F;;;;;;;;;OASG;IACH,gBAAgB,EAAE,YAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAEvC;;;;;;;;OAQG;IACH,sBAAsB,EAAE,YAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAC9C,CAAC,CAAC;AAIU,QAAA,sBAAsB,GAAG,YAAC;KACrC,kBAAkB,CAAC,SAAS,EAAE,CAAC,wBAAwB,CAAC,CAAC;KACzD,IAAI,CAAC;IACL,KAAK,EAAE,mBAAmB;CAC1B,CAAC,CAAC;AAwBJ,gCACC,OAAsC;IAEtC,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAE/B,OAAO;QACN,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;QAC9E,GAAG,CAAC,OAAO,CAAC,iBAAiB,KAAK,SAAS,IAAI;YAC9C,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;SAC5C,CAAC;QACF,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;QACxE,GAAG,CAAC,OAAO,CAAC,oBAAoB,KAAK,SAAS,IAAI;YACjD,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;SAClD,CAAC;QACF,GAAG,CAAC,OAAO,CAAC,gBAAgB,KAAK,SAAS,IAAI;YAC7C,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;SAC1C,CAAC;QACF,GAAG,CAAC,OAAO,CAAC,sBAAsB,KAAK,SAAS,IAAI;YACnD,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;SACtD,CAAC;KACF,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,0BAA0B,GAAG,YAAC,CAAC,MAAM,CAAC;IAC3C,MAAM,EAAE,YAAC,CAAC,OAAO,CAAC,WAAW,CAAC;IAC9B,QAAQ,EAAE,YAAC,CAAC,MAAM,EAAE;IACpB;;;;OAIG;IACH,OAAO,EAAE,YAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,aAAa,EAAE,YAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,aAAa,EAAE,YAAC,CAAC,KAAK,CAAC,YAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC7C,8FAA8F;IAC9F,OAAO,EAAE,YAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,YAAC,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,YAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC3E,CAAC,CAAC;AAEH,sFAAsF;AACtF,MAAM,wBAAwB,GAAG,0BAA0B,CAAC,MAAM,CAAC;IAClE,OAAO,EAAE,YAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,KAAK,EAAE,QAAA,wBAAwB;CAC/B,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,4BAA4B,GAAG,0BAA0B,CAAC,MAAM,CAAC;IACtE,OAAO,EAAE,YAAC,CAAC,SAAS,EAAE;IACtB,KAAK,EAAE,QAAA,wBAAwB,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC;AAEU,QAAA,sBAAsB,GAAG,YAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE;IACrE,wBAAwB;IACxB,4BAA4B;CAC5B,CAAC,CAAC;AAyDI,MAAM,SAAS,GAAG,CAAoB,KAAsB,EAAE,MAAS,EAAE,EAAE;IACjF,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,IAAI,QAAQ,CAAC;IAClD,IAAI,CAAC;QACJ,MAAM,gBAAgB,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAA,iBAAS,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC9E,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACvD,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;YACvB,MAAM,WAAW,CAAC,KAAK,CAAC;QACzB,CAAC;QACD,wGAAwG;QACxG,OAAO,WAAW,CAAC,IAAI,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,EAAE,EAAE;YACvD,KAAK,EAAE,KAAK;SACZ,CAAC,CAAC;IACJ,CAAC;AACF,CAAC,CAAC;AAfW,QAAA,SAAS,GAAT,SAAS,CAepB;AAEF;;;;GAIG;AACI,MAAM,kBAAkB,GAAG,CAAC,KAAsB,EAAqB,EAAE;IAC/E,wGAAwG;IACxG,OAAO,IAAA,QAAA,SAAS,EAAC,KAAK,EAAE,QAAA,sBAAsB,CAAC,CAAC;AACjD,CAAC,CAAC;AAHW,QAAA,kBAAkB,GAAlB,kBAAkB,CAG7B;AAEF;;;;;;;GAOG;AACI,MAAM,mBAAmB,GAAG,CAAC,KAAsB,EAAsB,EAAE;IACjF,yGAAyG;IACzG,OAAO,IAAA,QAAA,SAAS,EAAC,KAAK,EAAE,QAAA,uBAAuB,CAAC,CAAC;AAClD,CAAC,CAAC;AAHW,QAAA,mBAAmB,GAAnB,mBAAmB,CAG9B;AAEK,MAAM,iBAAiB,GAAG,CAAC,KAAsB,EAAoB,EAAE;IAC7E,uGAAuG;IACvG,OAAO,IAAA,QAAA,SAAS,EAAC,KAAK,EAAE,QAAA,qBAAqB,CAAC,CAAC;AAChD,CAAC,CAAC;AAHW,QAAA,iBAAiB,GAAjB,iBAAiB,CAG5B"}
|
package/dist/cjs/expression.d.ts
CHANGED
|
@@ -1,5 +1,37 @@
|
|
|
1
1
|
import type { ObservabilityProvider } from '@n8n/expression-runtime';
|
|
2
2
|
import type { IDataObject, INodeParameters, IWorkflowDataProxyData, NodeParameterValue } from './interfaces';
|
|
3
|
+
/** What one engine did with one expression. `errorClass` names the failure without its message. */
|
|
4
|
+
export type ExpressionEvaluationOutcome = {
|
|
5
|
+
ok: true;
|
|
6
|
+
value: unknown;
|
|
7
|
+
} | {
|
|
8
|
+
ok: false;
|
|
9
|
+
error: unknown;
|
|
10
|
+
errorClass: string;
|
|
11
|
+
};
|
|
12
|
+
export interface ExpressionShadowContext {
|
|
13
|
+
/** The expression after `extendSyntax`, as the engines receive it. */
|
|
14
|
+
expression: string;
|
|
15
|
+
/** The expression as the user wrote it, without the leading `=`. */
|
|
16
|
+
source: string;
|
|
17
|
+
data: IWorkflowDataProxyData;
|
|
18
|
+
timezone: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Runs a second engine next to the legacy engine to compare the two. The
|
|
22
|
+
* legacy engine still gives the result: the runner only observes it.
|
|
23
|
+
*/
|
|
24
|
+
export interface ExpressionShadowRunner {
|
|
25
|
+
/**
|
|
26
|
+
* Called before the legacy engine evaluates an expression. Returns a callback
|
|
27
|
+
* for the legacy outcome, or `undefined` to skip this expression.
|
|
28
|
+
*/
|
|
29
|
+
beforeLegacy(context: ExpressionShadowContext): ((legacy: ExpressionEvaluationOutcome) => void) | undefined;
|
|
30
|
+
}
|
|
31
|
+
export interface ShadowEvaluator {
|
|
32
|
+
evaluate(expression: string, data: IWorkflowDataProxyData, timezone: string): ExpressionEvaluationOutcome;
|
|
33
|
+
dispose(): Promise<void>;
|
|
34
|
+
}
|
|
3
35
|
export declare class Expression {
|
|
4
36
|
private readonly timezone;
|
|
5
37
|
private static expressionEngine;
|
|
@@ -7,6 +39,7 @@ export declare class Expression {
|
|
|
7
39
|
private static readonly BROWSER_CALLER;
|
|
8
40
|
private static useSharedCaller;
|
|
9
41
|
private static nativeEvaluation;
|
|
42
|
+
private static shadowRunner?;
|
|
10
43
|
constructor(timezone: string);
|
|
11
44
|
/**
|
|
12
45
|
* Check if VM evaluator should be used for evaluation.
|
|
@@ -47,6 +80,20 @@ export declare class Expression {
|
|
|
47
80
|
/** Experimental: interpret expressions that fit the native subset in-process. Applies to every engine. */
|
|
48
81
|
nativeEvaluation?: boolean;
|
|
49
82
|
}): Promise<void>;
|
|
83
|
+
private static buildEvaluator;
|
|
84
|
+
/**
|
|
85
|
+
* Start a QuickJS evaluator for a shadow run, next to whatever engine is
|
|
86
|
+
* active. It has its own bridge and caller, so it never changes what the main
|
|
87
|
+
* engine does, and it uses the same sandbox hooks, so the comparison is fair.
|
|
88
|
+
*/
|
|
89
|
+
static createQuickJsShadowEvaluator(options: {
|
|
90
|
+
bridgeTimeout: number;
|
|
91
|
+
bridgeMemoryLimit: number;
|
|
92
|
+
maxCodeCacheSize: number;
|
|
93
|
+
runtimeBundle?: string;
|
|
94
|
+
}): Promise<ShadowEvaluator>;
|
|
95
|
+
/** Install the runner that compares a second engine with legacy, or remove it with `undefined`. */
|
|
96
|
+
static setShadowRunner(runner: ExpressionShadowRunner | undefined): void;
|
|
50
97
|
/** Returns whether an isolate was newly acquired; `false` means this caller already held one and must not release it. */
|
|
51
98
|
acquireIsolate(): Promise<boolean>;
|
|
52
99
|
releaseIsolate(): Promise<void>;
|
|
@@ -92,5 +139,11 @@ export declare class Expression {
|
|
|
92
139
|
resolveSimpleParameterValue(parameterValue: NodeParameterValue, data: IWorkflowDataProxyData, returnObjectAsString?: boolean): NodeParameterValue | INodeParameters | NodeParameterValue[] | INodeParameters[];
|
|
93
140
|
private finalizeResolvedValue;
|
|
94
141
|
private renderExpression;
|
|
142
|
+
private static startShadow;
|
|
143
|
+
/**
|
|
144
|
+
* Evaluate with the legacy engine. A failure without `thrown` is one the
|
|
145
|
+
* editor shows as `null`; a shadow run still counts it as an error.
|
|
146
|
+
*/
|
|
147
|
+
private evaluateLegacy;
|
|
95
148
|
}
|
|
96
149
|
//# sourceMappingURL=expression.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../../src/expression.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAwB,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../../src/expression.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/expression.js
CHANGED
|
@@ -56,6 +56,30 @@ const isTypeError = (error) => error instanceof TypeError || (error instanceof E
|
|
|
56
56
|
if (isExpressionError(error))
|
|
57
57
|
throw error;
|
|
58
58
|
});
|
|
59
|
+
// Expression code can set `name` to any text, so only these names leave the engine.
|
|
60
|
+
const KNOWN_ERROR_CLASSES = new Set([
|
|
61
|
+
'Error AggregateError EvalError InternalError RangeError ReferenceError SyntaxError',
|
|
62
|
+
'TypeError URIError ExpressionError ExpressionExtensionError UserError',
|
|
63
|
+
]
|
|
64
|
+
.join(' ')
|
|
65
|
+
.split(' '));
|
|
66
|
+
function errorClassOf(error) {
|
|
67
|
+
// Timeout and memory errors share the name `ExpressionError`, so classify them first.
|
|
68
|
+
const runtimeClass = (0, expression_runtime_1.classifyExpressionError)(error);
|
|
69
|
+
if (runtimeClass !== 'unknown')
|
|
70
|
+
return runtimeClass;
|
|
71
|
+
// A minified build renames classes, and n8n errors take their `name` from the
|
|
72
|
+
// constructor, so check the class before the name. The subclass comes first.
|
|
73
|
+
if (error instanceof expression_extension_error_1.ExpressionExtensionError)
|
|
74
|
+
return 'ExpressionExtensionError';
|
|
75
|
+
if (error instanceof expression_error_1.ExpressionError)
|
|
76
|
+
return 'ExpressionError';
|
|
77
|
+
if (error instanceof errors_1.UserError)
|
|
78
|
+
return 'UserError';
|
|
79
|
+
if (!(error instanceof Error))
|
|
80
|
+
return typeof error;
|
|
81
|
+
return KNOWN_ERROR_CLASSES.has(error.name) ? error.name : 'other';
|
|
82
|
+
}
|
|
59
83
|
/**
|
|
60
84
|
* Map errors from the VM expression evaluator to host-side error types.
|
|
61
85
|
*
|
|
@@ -228,6 +252,7 @@ class Expression {
|
|
|
228
252
|
static BROWSER_CALLER = {};
|
|
229
253
|
static useSharedCaller = false;
|
|
230
254
|
static nativeEvaluation = false;
|
|
255
|
+
static shadowRunner;
|
|
231
256
|
constructor(timezone) {
|
|
232
257
|
this.timezone = timezone;
|
|
233
258
|
}
|
|
@@ -262,31 +287,7 @@ class Expression {
|
|
|
262
287
|
return;
|
|
263
288
|
this.expressionEngine = options.engine;
|
|
264
289
|
if (!this.vmEvaluator) {
|
|
265
|
-
|
|
266
|
-
const runtime = await import('@n8n/expression-runtime');
|
|
267
|
-
const createBridge = options.engine === 'quickjs'
|
|
268
|
-
? () => new runtime.QuickJsBridge({
|
|
269
|
-
timeout: options.bridgeTimeout,
|
|
270
|
-
memoryLimit: options.bridgeMemoryLimit,
|
|
271
|
-
logger: LoggerProxy,
|
|
272
|
-
runtimeBundle: options.runtimeBundle,
|
|
273
|
-
})
|
|
274
|
-
: () => new runtime.IsolatedVmBridge({
|
|
275
|
-
timeout: options.bridgeTimeout,
|
|
276
|
-
memoryLimit: options.bridgeMemoryLimit,
|
|
277
|
-
logger: LoggerProxy,
|
|
278
|
-
compileCache: options.compileCache,
|
|
279
|
-
});
|
|
280
|
-
const evaluator = new runtime.ExpressionEvaluator({
|
|
281
|
-
createBridge,
|
|
282
|
-
maxCodeCacheSize: options.maxCodeCacheSize,
|
|
283
|
-
poolSize: options.poolSize,
|
|
284
|
-
idleTimeoutMs: options.idleTimeoutMs,
|
|
285
|
-
lazyAcquire: options.lazyAcquire,
|
|
286
|
-
hooks: expression_sandboxing_1.expressionSandboxHooks,
|
|
287
|
-
logger: LoggerProxy,
|
|
288
|
-
observability: options.observability,
|
|
289
|
-
});
|
|
290
|
+
const evaluator = await this.buildEvaluator({ ...options, engine: options.engine });
|
|
290
291
|
// Publish the evaluator only once it is usable. A half-started one
|
|
291
292
|
// would leave `shouldUseVm` reporting the engine as active while no
|
|
292
293
|
// bridge is acquired, so callers could neither retry the start nor
|
|
@@ -319,6 +320,73 @@ class Expression {
|
|
|
319
320
|
}
|
|
320
321
|
}
|
|
321
322
|
}
|
|
323
|
+
static async buildEvaluator(options) {
|
|
324
|
+
// Dynamic import to avoid loading expression-runtime in browser environments
|
|
325
|
+
const runtime = await import('@n8n/expression-runtime');
|
|
326
|
+
const createBridge = options.engine === 'quickjs'
|
|
327
|
+
? () => new runtime.QuickJsBridge({
|
|
328
|
+
timeout: options.bridgeTimeout,
|
|
329
|
+
memoryLimit: options.bridgeMemoryLimit,
|
|
330
|
+
logger: LoggerProxy,
|
|
331
|
+
runtimeBundle: options.runtimeBundle,
|
|
332
|
+
})
|
|
333
|
+
: () => new runtime.IsolatedVmBridge({
|
|
334
|
+
timeout: options.bridgeTimeout,
|
|
335
|
+
memoryLimit: options.bridgeMemoryLimit,
|
|
336
|
+
logger: LoggerProxy,
|
|
337
|
+
compileCache: options.compileCache,
|
|
338
|
+
});
|
|
339
|
+
return new runtime.ExpressionEvaluator({
|
|
340
|
+
createBridge,
|
|
341
|
+
maxCodeCacheSize: options.maxCodeCacheSize,
|
|
342
|
+
poolSize: options.poolSize,
|
|
343
|
+
idleTimeoutMs: options.idleTimeoutMs,
|
|
344
|
+
lazyAcquire: options.lazyAcquire,
|
|
345
|
+
hooks: expression_sandboxing_1.expressionSandboxHooks,
|
|
346
|
+
logger: LoggerProxy,
|
|
347
|
+
observability: options.observability,
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Start a QuickJS evaluator for a shadow run, next to whatever engine is
|
|
352
|
+
* active. It has its own bridge and caller, so it never changes what the main
|
|
353
|
+
* engine does, and it uses the same sandbox hooks, so the comparison is fair.
|
|
354
|
+
*/
|
|
355
|
+
static async createQuickJsShadowEvaluator(options) {
|
|
356
|
+
const evaluator = await this.buildEvaluator({
|
|
357
|
+
...options,
|
|
358
|
+
engine: 'quickjs',
|
|
359
|
+
poolSize: 1,
|
|
360
|
+
lazyAcquire: true,
|
|
361
|
+
});
|
|
362
|
+
const caller = {};
|
|
363
|
+
try {
|
|
364
|
+
await evaluator.initialize();
|
|
365
|
+
await evaluator.acquire(caller);
|
|
366
|
+
}
|
|
367
|
+
catch (error) {
|
|
368
|
+
await evaluator.dispose().catch(() => { });
|
|
369
|
+
throw error;
|
|
370
|
+
}
|
|
371
|
+
return {
|
|
372
|
+
evaluate: (expression, data, timezone) => {
|
|
373
|
+
try {
|
|
374
|
+
return { ok: true, value: evaluator.evaluate(expression, data, caller, { timezone }) };
|
|
375
|
+
}
|
|
376
|
+
catch (error) {
|
|
377
|
+
return { ok: false, error: mapVmError(error), errorClass: errorClassOf(error) };
|
|
378
|
+
}
|
|
379
|
+
},
|
|
380
|
+
dispose: async () => {
|
|
381
|
+
await evaluator.release(caller);
|
|
382
|
+
await evaluator.dispose();
|
|
383
|
+
},
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
/** Install the runner that compares a second engine with legacy, or remove it with `undefined`. */
|
|
387
|
+
static setShadowRunner(runner) {
|
|
388
|
+
this.shadowRunner = runner;
|
|
389
|
+
}
|
|
322
390
|
/** Returns whether an isolate was newly acquired; `false` means this caller already held one and must not release it. */
|
|
323
391
|
async acquireIsolate() {
|
|
324
392
|
if (Expression.vmEvaluator)
|
|
@@ -637,7 +705,7 @@ class Expression {
|
|
|
637
705
|
}
|
|
638
706
|
// Execute the expression
|
|
639
707
|
const extendedExpression = (0, expression_extension_1.extendSyntax)(parameterValue);
|
|
640
|
-
const returnValue = this.renderExpression(extendedExpression, data);
|
|
708
|
+
const returnValue = this.renderExpression(extendedExpression, data, parameterValue);
|
|
641
709
|
return this.finalizeResolvedValue(returnValue, returnObjectAsString);
|
|
642
710
|
}
|
|
643
711
|
finalizeResolvedValue(returnValue, returnObjectAsString) {
|
|
@@ -653,7 +721,7 @@ class Expression {
|
|
|
653
721
|
// the previous inline code relied on.
|
|
654
722
|
return returnValue;
|
|
655
723
|
}
|
|
656
|
-
renderExpression(expression, data) {
|
|
724
|
+
renderExpression(expression, data, source) {
|
|
657
725
|
const evaluator = Expression.vmEvaluator;
|
|
658
726
|
if (evaluator && Expression.isVmEngineSelected()) {
|
|
659
727
|
const caller = Expression.useSharedCaller ? Expression.BROWSER_CALLER : this;
|
|
@@ -676,22 +744,61 @@ class Expression {
|
|
|
676
744
|
throw new errors_1.UnexpectedError(`The ${Expression.expressionEngine} expression engine has not been initialized. Call Expression.initExpressionEngine() during application startup.`);
|
|
677
745
|
}
|
|
678
746
|
// Fall back to current implementation
|
|
747
|
+
const finishShadow = Expression.startShadow({
|
|
748
|
+
expression,
|
|
749
|
+
source,
|
|
750
|
+
data,
|
|
751
|
+
timezone: this.timezone,
|
|
752
|
+
});
|
|
753
|
+
const legacy = this.evaluateLegacy(expression, data);
|
|
754
|
+
if (finishShadow) {
|
|
755
|
+
try {
|
|
756
|
+
finishShadow(legacy.ok
|
|
757
|
+
? { ok: true, value: legacy.value }
|
|
758
|
+
: { ok: false, error: legacy.error, errorClass: errorClassOf(legacy.error) });
|
|
759
|
+
}
|
|
760
|
+
catch {
|
|
761
|
+
// A shadow run only observes: its failure must not reach the user.
|
|
762
|
+
}
|
|
763
|
+
}
|
|
764
|
+
if (legacy.ok)
|
|
765
|
+
return legacy.value;
|
|
766
|
+
if (legacy.thrown)
|
|
767
|
+
throw legacy.thrown;
|
|
768
|
+
return null;
|
|
769
|
+
}
|
|
770
|
+
static startShadow(context) {
|
|
771
|
+
if (!this.shadowRunner)
|
|
772
|
+
return undefined;
|
|
679
773
|
try {
|
|
680
|
-
return
|
|
774
|
+
return this.shadowRunner.beforeLegacy(context);
|
|
775
|
+
}
|
|
776
|
+
catch {
|
|
777
|
+
return undefined;
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
/**
|
|
781
|
+
* Evaluate with the legacy engine. A failure without `thrown` is one the
|
|
782
|
+
* editor shows as `null`; a shadow run still counts it as an error.
|
|
783
|
+
*/
|
|
784
|
+
evaluateLegacy(expression, data) {
|
|
785
|
+
try {
|
|
786
|
+
return { ok: true, value: (0, expression_evaluator_proxy_1.evaluateExpression)(expression, data) };
|
|
681
787
|
}
|
|
682
788
|
catch (error) {
|
|
683
789
|
if (isExpressionError(error))
|
|
684
|
-
|
|
685
|
-
if (isSyntaxError(error))
|
|
686
|
-
|
|
790
|
+
return { ok: false, error, thrown: error };
|
|
791
|
+
if (isSyntaxError(error)) {
|
|
792
|
+
return { ok: false, error, thrown: new errors_1.UserError('invalid syntax') };
|
|
793
|
+
}
|
|
687
794
|
if (isTypeError(error) && runtime_environment_1.IS_FRONTEND && error.message.endsWith('is not a function')) {
|
|
688
795
|
const match = error.message.match(/(?<msg>[^.]+is not a function)/);
|
|
689
796
|
if (!match?.groups?.msg)
|
|
690
|
-
return
|
|
691
|
-
|
|
797
|
+
return { ok: false, error };
|
|
798
|
+
return { ok: false, error, thrown: new errors_1.UserError(match.groups.msg) };
|
|
692
799
|
}
|
|
800
|
+
return { ok: false, error };
|
|
693
801
|
}
|
|
694
|
-
return null;
|
|
695
802
|
}
|
|
696
803
|
}
|
|
697
804
|
exports.Expression = Expression;
|