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.
Files changed (87) hide show
  1. package/dist/cjs/build.tsbuildinfo +1 -1
  2. package/dist/cjs/dynamic-credentials-helpers.d.ts +11 -2
  3. package/dist/cjs/dynamic-credentials-helpers.d.ts.map +1 -1
  4. package/dist/cjs/dynamic-credentials-helpers.js +40 -2
  5. package/dist/cjs/dynamic-credentials-helpers.js.map +1 -1
  6. package/dist/cjs/execution-context.d.ts +8 -0
  7. package/dist/cjs/execution-context.d.ts.map +1 -1
  8. package/dist/cjs/execution-context.js +12 -0
  9. package/dist/cjs/execution-context.js.map +1 -1
  10. package/dist/cjs/expression.d.ts +53 -0
  11. package/dist/cjs/expression.d.ts.map +1 -1
  12. package/dist/cjs/expression.js +141 -34
  13. package/dist/cjs/expression.js.map +1 -1
  14. package/dist/cjs/expressions/native-evaluation/evaluator.d.ts.map +1 -1
  15. package/dist/cjs/expressions/native-evaluation/evaluator.js +80 -10
  16. package/dist/cjs/expressions/native-evaluation/evaluator.js.map +1 -1
  17. package/dist/cjs/expressions/native-evaluation/grammar.d.ts +1 -1
  18. package/dist/cjs/expressions/native-evaluation/grammar.d.ts.map +1 -1
  19. package/dist/cjs/expressions/native-evaluation/grammar.js +52 -2
  20. package/dist/cjs/expressions/native-evaluation/grammar.js.map +1 -1
  21. package/dist/cjs/expressions/native-evaluation/index.d.ts.map +1 -1
  22. package/dist/cjs/expressions/native-evaluation/index.js +52 -10
  23. package/dist/cjs/expressions/native-evaluation/index.js.map +1 -1
  24. package/dist/cjs/expressions/native-evaluation/parser.d.ts +11 -0
  25. package/dist/cjs/expressions/native-evaluation/parser.d.ts.map +1 -1
  26. package/dist/cjs/expressions/native-evaluation/parser.js +86 -10
  27. package/dist/cjs/expressions/native-evaluation/parser.js.map +1 -1
  28. package/dist/cjs/extensions/expression-parser.js +2 -2
  29. package/dist/cjs/extensions/expression-parser.js.map +1 -1
  30. package/dist/cjs/interfaces.d.ts +71 -8
  31. package/dist/cjs/interfaces.d.ts.map +1 -1
  32. package/dist/cjs/interfaces.js.map +1 -1
  33. package/dist/cjs/message-event-bus.d.ts +8 -3
  34. package/dist/cjs/message-event-bus.d.ts.map +1 -1
  35. package/dist/cjs/message-event-bus.js +42 -4
  36. package/dist/cjs/message-event-bus.js.map +1 -1
  37. package/dist/cjs/redaction-channels.d.ts +45 -2
  38. package/dist/cjs/redaction-channels.d.ts.map +1 -1
  39. package/dist/cjs/redaction-channels.js +90 -2
  40. package/dist/cjs/redaction-channels.js.map +1 -1
  41. package/dist/cjs/run-execution-data/run-execution-data.v1.d.ts +5 -0
  42. package/dist/cjs/run-execution-data/run-execution-data.v1.d.ts.map +1 -1
  43. package/dist/cjs/run-execution-data/run-execution-data.v1.js.map +1 -1
  44. package/dist/esm/dynamic-credentials-helpers.d.ts +11 -2
  45. package/dist/esm/dynamic-credentials-helpers.d.ts.map +1 -1
  46. package/dist/esm/dynamic-credentials-helpers.js +39 -2
  47. package/dist/esm/dynamic-credentials-helpers.js.map +1 -1
  48. package/dist/esm/execution-context.d.ts +8 -0
  49. package/dist/esm/execution-context.d.ts.map +1 -1
  50. package/dist/esm/execution-context.js +12 -0
  51. package/dist/esm/execution-context.js.map +1 -1
  52. package/dist/esm/expression.d.ts +53 -0
  53. package/dist/esm/expression.d.ts.map +1 -1
  54. package/dist/esm/expression.js +142 -35
  55. package/dist/esm/expression.js.map +1 -1
  56. package/dist/esm/expressions/native-evaluation/evaluator.d.ts.map +1 -1
  57. package/dist/esm/expressions/native-evaluation/evaluator.js +81 -11
  58. package/dist/esm/expressions/native-evaluation/evaluator.js.map +1 -1
  59. package/dist/esm/expressions/native-evaluation/grammar.d.ts +1 -1
  60. package/dist/esm/expressions/native-evaluation/grammar.d.ts.map +1 -1
  61. package/dist/esm/expressions/native-evaluation/grammar.js +51 -1
  62. package/dist/esm/expressions/native-evaluation/grammar.js.map +1 -1
  63. package/dist/esm/expressions/native-evaluation/index.d.ts.map +1 -1
  64. package/dist/esm/expressions/native-evaluation/index.js +54 -12
  65. package/dist/esm/expressions/native-evaluation/index.js.map +1 -1
  66. package/dist/esm/expressions/native-evaluation/parser.d.ts +11 -0
  67. package/dist/esm/expressions/native-evaluation/parser.d.ts.map +1 -1
  68. package/dist/esm/expressions/native-evaluation/parser.js +86 -11
  69. package/dist/esm/expressions/native-evaluation/parser.js.map +1 -1
  70. package/dist/esm/extensions/expression-parser.js +2 -2
  71. package/dist/esm/extensions/expression-parser.js.map +1 -1
  72. package/dist/esm/interfaces.d.ts +71 -8
  73. package/dist/esm/interfaces.d.ts.map +1 -1
  74. package/dist/esm/interfaces.js.map +1 -1
  75. package/dist/esm/message-event-bus.d.ts +8 -3
  76. package/dist/esm/message-event-bus.d.ts.map +1 -1
  77. package/dist/esm/message-event-bus.js +41 -3
  78. package/dist/esm/message-event-bus.js.map +1 -1
  79. package/dist/esm/redaction-channels.d.ts +45 -2
  80. package/dist/esm/redaction-channels.d.ts.map +1 -1
  81. package/dist/esm/redaction-channels.js +84 -2
  82. package/dist/esm/redaction-channels.js.map +1 -1
  83. package/dist/esm/run-execution-data/run-execution-data.v1.d.ts +5 -0
  84. package/dist/esm/run-execution-data/run-execution-data.v1.d.ts.map +1 -1
  85. package/dist/esm/run-execution-data/run-execution-data.v1.js.map +1 -1
  86. package/dist/esm/typecheck.tsbuildinfo +1 -1
  87. 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): DynamicCredentialsUsage;
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;;;;GAIG;AACH,wBAAgB,gCAAgC,CAC/C,aAAa,EAAE,iBAAiB,GAAG,SAAS,GAC1C,uBAAuB,CAiBzB;AAED,yFAAyF;AACzF,UAAU,6BAA6B;IACtC,iCAAiC,CAAC,EAAE,OAAO,CAAC;IAC5C,sCAAsC,CAAC,EAAE,OAAO,CAAC;IACjD,gCAAgC,CAAC,EAAE,MAAM,CAAC;CAC1C;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC3C,MAAM,EAAE,6BAA6B,EACrC,KAAK,EAAE,uBAAuB,GAC5B,IAAI,CAUN;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,CAsBrC"}
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":"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"}
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":"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"}
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":"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"}
@@ -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;AAe3F,OAAO,KAAK,EACX,WAAW,EACX,eAAe,EACf,sBAAsB,EACtB,kBAAkB,EAClB,MAAM,cAAc,CAAC;AAkMtB,qBAAa,UAAU;IAWV,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAVrC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAyC;IAExE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAuB;IAElD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAM;IAE5C,OAAO,CAAC,MAAM,CAAC,eAAe,CAAS;IAEvC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAS;IAExC,YAA6B,QAAQ,EAAE,MAAM,EAAI;IAEjD;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAI1B;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAKjC;;;;OAIG;IACH,OAAa,oBAAoB,CAAC,OAAO,EAAE;QAC1C,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,CAAC;QACpC,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,QAAQ,EAAE,MAAM,CAAC;QACjB,gBAAgB,EAAE,MAAM,CAAC;QACzB,aAAa,CAAC,EAAE,qBAAqB,CAAC;QACtC,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB;;;;;;WAMG;QACH,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,0GAA0G;QAC1G,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC3B,GAAG,OAAO,CAAC,IAAI,CAAC,CAkEhB;IAED,yHAAyH;IACnH,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAGvC;IAEK,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAEpC;IAEK,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAarD;IAED;;;OAGG;IACH,OAAa,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CASpD;IAED;;;OAGG;IACH,MAAM,CAAC,uBAAuB,IAAI,QAAQ,GAAG,IAAI,GAAG,SAAS,CAG5D;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAEpE;IAED,mJAAmJ;IACnJ,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEjD;IAED,MAAM,CAAC,uBAAuB,CAAC,IAAI,EAAE,WAAW,QA2J/C;IAED,MAAM,CAAC,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,mCAEvE;IAED;;;;OAIG;IACH,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA+BhD;IAED;;;;;;;OAOG;IACH,2BAA2B,CAC1B,cAAc,EAAE,kBAAkB,EAClC,IAAI,EAAE,sBAAsB,EAC5B,oBAAoB,UAAQ,GAC1B,kBAAkB,GAAG,eAAe,GAAG,kBAAkB,EAAE,GAAG,eAAe,EAAE,CAsFjF;IAED,OAAO,CAAC,qBAAqB;IAkB7B,OAAO,CAAC,gBAAgB;CAuDxB"}
1
+ {"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../../src/expression.ts"],"names":[],"mappings":"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"}
@@ -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
- // Dynamic import to avoid loading expression-runtime in browser environments
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 (0, expression_evaluator_proxy_1.evaluateExpression)(expression, data);
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
- throw error;
685
- if (isSyntaxError(error))
686
- throw new errors_1.UserError('invalid syntax');
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 null;
691
- throw new errors_1.UserError(match.groups.msg);
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;