@n8n/engine 0.12.0 → 0.14.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 (116) hide show
  1. package/dist/admittance/admittance-rejected.error.d.ts +4 -0
  2. package/dist/admittance/admittance-rejected.error.js +13 -0
  3. package/dist/admittance/admittance-rejected.error.js.map +1 -0
  4. package/dist/admittance/admittance.types.d.ts +12 -0
  5. package/dist/admittance/admittance.types.js +3 -0
  6. package/dist/admittance/admittance.types.js.map +1 -0
  7. package/dist/admittance/allow-all-admittance.d.ts +4 -0
  8. package/dist/admittance/allow-all-admittance.js +10 -0
  9. package/dist/admittance/allow-all-admittance.js.map +1 -0
  10. package/dist/admittance/index.d.ts +3 -0
  11. package/dist/admittance/index.js +8 -0
  12. package/dist/admittance/index.js.map +1 -0
  13. package/dist/build.tsbuildinfo +1 -1
  14. package/dist/common/errors.d.ts +3 -0
  15. package/dist/common/errors.js +11 -0
  16. package/dist/common/errors.js.map +1 -0
  17. package/dist/common/index.d.ts +2 -0
  18. package/dist/common/index.js +6 -0
  19. package/dist/common/index.js.map +1 -0
  20. package/dist/common/json.d.ts +4 -0
  21. package/dist/common/json.js +3 -0
  22. package/dist/common/json.js.map +1 -0
  23. package/dist/database/data-source.d.ts +3 -0
  24. package/dist/database/data-source.js +19 -0
  25. package/dist/database/data-source.js.map +1 -0
  26. package/dist/database/entities/index.d.ts +5 -0
  27. package/dist/database/entities/index.js +9 -0
  28. package/dist/database/entities/index.js.map +1 -0
  29. package/dist/database/entities/workflow-execution.entity.d.ts +15 -0
  30. package/dist/database/entities/workflow-execution.entity.js +78 -0
  31. package/dist/database/entities/workflow-execution.entity.js.map +1 -0
  32. package/dist/database/entities/workflow-step-execution.entity.d.ts +14 -0
  33. package/dist/database/entities/workflow-step-execution.entity.js +72 -0
  34. package/dist/database/entities/workflow-step-execution.entity.js.map +1 -0
  35. package/dist/database/generate-id.d.ts +1 -0
  36. package/dist/database/generate-id.js +8 -0
  37. package/dist/database/generate-id.js.map +1 -0
  38. package/dist/database/index.d.ts +4 -0
  39. package/dist/database/index.js +13 -0
  40. package/dist/database/index.js.map +1 -0
  41. package/dist/database/migrations/1778529600000-CreateWorkflowExecution.d.ts +5 -0
  42. package/dist/database/migrations/1778529600000-CreateWorkflowExecution.js +48 -0
  43. package/dist/database/migrations/1778529600000-CreateWorkflowExecution.js.map +1 -0
  44. package/dist/database/migrations/1784890100000-CreateWorkflowStepExecution.d.ts +5 -0
  45. package/dist/database/migrations/1784890100000-CreateWorkflowStepExecution.js +67 -0
  46. package/dist/database/migrations/1784890100000-CreateWorkflowStepExecution.js.map +1 -0
  47. package/dist/database/migrations/index.d.ts +2 -0
  48. package/dist/database/migrations/index.js +10 -0
  49. package/dist/database/migrations/index.js.map +1 -0
  50. package/dist/database/typeorm-execution-store.d.ts +13 -0
  51. package/dist/database/typeorm-execution-store.js +27 -0
  52. package/dist/database/typeorm-execution-store.js.map +1 -0
  53. package/dist/database/typeorm-step-store.d.ts +17 -0
  54. package/dist/database/typeorm-step-store.js +51 -0
  55. package/dist/database/typeorm-step-store.js.map +1 -0
  56. package/dist/dependencies/external-dependencies.d.ts +23 -0
  57. package/dist/dependencies/external-dependencies.js +3 -0
  58. package/dist/dependencies/external-dependencies.js.map +1 -0
  59. package/dist/dependencies/index.d.ts +1 -0
  60. package/dist/dependencies/index.js +3 -0
  61. package/dist/dependencies/index.js.map +1 -0
  62. package/dist/execution/execution-start-handler.d.ts +10 -0
  63. package/dist/execution/execution-start-handler.js +43 -0
  64. package/dist/execution/execution-start-handler.js.map +1 -0
  65. package/dist/execution/execution-store.d.ts +29 -0
  66. package/dist/execution/execution-store.js +13 -0
  67. package/dist/execution/execution-store.js.map +1 -0
  68. package/dist/execution/execution.types.d.ts +3 -0
  69. package/dist/execution/execution.types.js +3 -0
  70. package/dist/execution/execution.types.js.map +1 -0
  71. package/dist/execution/index.d.ts +9 -0
  72. package/dist/execution/index.js +14 -0
  73. package/dist/execution/index.js.map +1 -0
  74. package/dist/execution/orchestration-worker.d.ts +9 -0
  75. package/dist/execution/orchestration-worker.js +28 -0
  76. package/dist/execution/orchestration-worker.js.map +1 -0
  77. package/dist/execution/start-execution.service.d.ts +22 -0
  78. package/dist/execution/start-execution.service.js +34 -0
  79. package/dist/execution/start-execution.service.js.map +1 -0
  80. package/dist/execution/step-store.d.ts +35 -0
  81. package/dist/execution/step-store.js +13 -0
  82. package/dist/execution/step-store.js.map +1 -0
  83. package/dist/graph/index.d.ts +2 -0
  84. package/dist/graph/index.js +7 -0
  85. package/dist/graph/index.js.map +1 -0
  86. package/dist/graph/workflow-graph-queries.d.ts +3 -0
  87. package/dist/graph/workflow-graph-queries.js +17 -0
  88. package/dist/graph/workflow-graph-queries.js.map +1 -0
  89. package/dist/graph/workflow-graph.d.ts +19 -0
  90. package/dist/graph/workflow-graph.js +3 -0
  91. package/dist/graph/workflow-graph.js.map +1 -0
  92. package/dist/index.d.ts +11 -0
  93. package/dist/index.js +15 -1
  94. package/dist/index.js.map +1 -1
  95. package/dist/queue/in-memory-work-queue.d.ts +12 -0
  96. package/dist/queue/in-memory-work-queue.js +53 -0
  97. package/dist/queue/in-memory-work-queue.js.map +1 -0
  98. package/dist/queue/index.d.ts +2 -0
  99. package/dist/queue/index.js +6 -0
  100. package/dist/queue/index.js.map +1 -0
  101. package/dist/queue/work-queue.types.d.ts +16 -0
  102. package/dist/queue/work-queue.types.js +3 -0
  103. package/dist/queue/work-queue.types.js.map +1 -0
  104. package/dist/serve.js +56 -19
  105. package/dist/serve.js.map +1 -1
  106. package/dist/server/create-engine-server.d.ts +9 -1
  107. package/dist/server/create-engine-server.js +10 -1
  108. package/dist/server/create-engine-server.js.map +1 -1
  109. package/dist/server/index.d.ts +1 -0
  110. package/dist/server/routes/workflow-executions.d.ts +3 -0
  111. package/dist/server/routes/workflow-executions.js +65 -0
  112. package/dist/server/routes/workflow-executions.js.map +1 -0
  113. package/dist/testing/start-engine-server.d.ts +2 -1
  114. package/dist/testing/start-engine-server.js +2 -2
  115. package/dist/testing/start-engine-server.js.map +1 -1
  116. package/package.json +9 -2
package/dist/serve.js CHANGED
@@ -2,26 +2,63 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const config_1 = require("@n8n/config");
4
4
  const di_1 = require("@n8n/di");
5
+ const admittance_1 = require("./admittance");
6
+ const database_1 = require("./database");
7
+ const execution_1 = require("./execution");
8
+ const queue_1 = require("./queue");
5
9
  const server_1 = require("./server");
6
- const config = di_1.Container.get(config_1.EngineConfig);
7
- const { app } = (0, server_1.createEngineServer)();
8
- const server = app.listen(config.port, config.host, () => {
9
- console.log(`engine: listening on http://${config.host}:${config.port}`);
10
- });
11
- let shuttingDown = false;
12
- const shutdown = (signal) => {
13
- if (shuttingDown)
14
- return;
15
- shuttingDown = true;
16
- console.log(`engine: received ${signal}, shutting down`);
17
- server.close((error) => {
18
- if (error) {
10
+ async function main() {
11
+ const config = di_1.Container.get(config_1.EngineConfig);
12
+ let dataSource;
13
+ if (config.databaseUrl) {
14
+ dataSource = (0, database_1.createDataSource)(config.databaseUrl);
15
+ await dataSource.initialize();
16
+ await dataSource.runMigrations();
17
+ }
18
+ else {
19
+ console.warn('engine: N8N_ENGINE_DATABASE_URL not set; running in healthcheck-only mode (workflow execution endpoints disabled)');
20
+ }
21
+ const orchestrationQueue = new queue_1.InMemoryWorkQueue();
22
+ const stepQueue = new queue_1.InMemoryWorkQueue();
23
+ let worker;
24
+ if (dataSource) {
25
+ const executionStore = new database_1.TypeOrmExecutionStore(dataSource.getRepository(database_1.WorkflowExecution));
26
+ const stepStore = new database_1.TypeOrmStepStore(dataSource.getRepository(database_1.WorkflowStepExecution));
27
+ worker = new execution_1.OrchestrationWorker(orchestrationQueue, new execution_1.ExecutionStartHandler(executionStore, stepStore, stepQueue));
28
+ worker.start();
29
+ }
30
+ const { app } = (0, server_1.createEngineServer)(dataSource
31
+ ? { dataSource, admittance: new admittance_1.AllowAllAdmittance(), workQueue: orchestrationQueue }
32
+ : undefined);
33
+ const server = app.listen(config.port, config.host, () => {
34
+ console.log(`engine: listening on http://${config.host}:${config.port}`);
35
+ });
36
+ let shuttingDown = false;
37
+ const shutdown = async (signal) => {
38
+ if (shuttingDown)
39
+ return;
40
+ shuttingDown = true;
41
+ console.log(`engine: received ${signal}, shutting down`);
42
+ await new Promise((resolve, reject) => {
43
+ server.close((error) => (error ? reject(error) : resolve()));
44
+ });
45
+ if (worker)
46
+ await worker.stop();
47
+ if (dataSource?.isInitialized)
48
+ await dataSource.destroy();
49
+ process.exit(0);
50
+ };
51
+ const onSignal = (signal) => {
52
+ shutdown(signal).catch((error) => {
19
53
  console.error('engine: error during shutdown', error);
20
54
  process.exit(1);
21
- }
22
- process.exit(0);
23
- });
24
- };
25
- process.on('SIGTERM', () => shutdown('SIGTERM'));
26
- process.on('SIGINT', () => shutdown('SIGINT'));
55
+ });
56
+ };
57
+ process.on('SIGTERM', () => onSignal('SIGTERM'));
58
+ process.on('SIGINT', () => onSignal('SIGINT'));
59
+ }
60
+ main().catch((error) => {
61
+ console.error('engine: failed to start', error);
62
+ process.exit(1);
63
+ });
27
64
  //# sourceMappingURL=serve.js.map
package/dist/serve.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"serve.js","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":";;AAAA,wCAA2C;AAC3C,gCAAoC;AAEpC,qCAA8C;AAE9C,MAAM,MAAM,GAAG,cAAS,CAAC,GAAG,CAAC,qBAAY,CAAC,CAAC;AAE3C,MAAM,EAAE,GAAG,EAAE,GAAG,IAAA,2BAAkB,GAAE,CAAC;AAErC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;IACxD,OAAO,CAAC,GAAG,CAAC,+BAA+B,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1E,CAAC,CAAC,CAAC;AAEH,IAAI,YAAY,GAAG,KAAK,CAAC;AACzB,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAQ,EAAE;IACzC,IAAI,YAAY;QAAE,OAAO;IACzB,YAAY,GAAG,IAAI,CAAC;IACpB,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,iBAAiB,CAAC,CAAC;IACzD,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACtB,IAAI,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AACjD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,12 @@
1
+ import type { DataSource } from '@n8n/typeorm';
1
2
  import { type Application } from 'express';
2
- export declare function createEngineServer(): {
3
+ import type { AdmittanceService } from '../admittance';
4
+ import type { OrchestrationMessage, WorkQueue } from '../queue';
5
+ export interface EngineServerDeps {
6
+ dataSource: DataSource;
7
+ admittance: AdmittanceService;
8
+ workQueue: WorkQueue<OrchestrationMessage>;
9
+ }
10
+ export declare function createEngineServer(deps?: EngineServerDeps): {
3
11
  app: Application;
4
12
  };
@@ -5,11 +5,20 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.createEngineServer = createEngineServer;
7
7
  const express_1 = __importDefault(require("express"));
8
- function createEngineServer() {
8
+ const database_1 = require("../database");
9
+ const start_execution_service_1 = require("../execution/start-execution.service");
10
+ const workflow_executions_1 = require("./routes/workflow-executions");
11
+ function createEngineServer(deps) {
9
12
  const app = (0, express_1.default)();
13
+ app.use(express_1.default.json());
10
14
  app.get('/healthz', (_req, res) => {
11
15
  res.status(200).json({ status: 'ok' });
12
16
  });
17
+ if (deps) {
18
+ const executionStore = new database_1.TypeOrmExecutionStore(deps.dataSource.getRepository(database_1.WorkflowExecution));
19
+ const startExecution = new start_execution_service_1.StartExecutionService(deps.admittance, executionStore, deps.workQueue);
20
+ app.use('/api/workflow-executions', (0, workflow_executions_1.createWorkflowExecutionsRouter)(startExecution));
21
+ }
13
22
  return { app };
14
23
  }
15
24
  //# sourceMappingURL=create-engine-server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-engine-server.js","sourceRoot":"","sources":["../../src/server/create-engine-server.ts"],"names":[],"mappings":";;;;;;AAAA,sDAAoD;AAEpD;IACC,MAAM,GAAG,GAAG,IAAA,iBAAO,GAAE,CAAC;IAEtB,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QACjC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,GAAG,EAAE,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"create-engine-server.js","sourceRoot":"","sources":["../../src/server/create-engine-server.ts"],"names":[],"mappings":";;;;;;AACA,sDAAoD;AAGpD,0CAAuE;AACvE,kFAA6E;AAE7E,sEAA8E;AAa9E,4BAAmC,IAAuB;IACzD,MAAM,GAAG,GAAG,IAAA,iBAAO,GAAE,CAAC;IACtB,GAAG,CAAC,GAAG,CAAC,iBAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAExB,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QACjC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,IAAI,IAAI,EAAE,CAAC;QACV,MAAM,cAAc,GAAG,IAAI,gCAAqB,CAC/C,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,4BAAiB,CAAC,CAChD,CAAC;QACF,MAAM,cAAc,GAAG,IAAI,+CAAqB,CAC/C,IAAI,CAAC,UAAU,EACf,cAAc,EACd,IAAI,CAAC,SAAS,CACd,CAAC;QACF,GAAG,CAAC,GAAG,CAAC,0BAA0B,EAAE,IAAA,oDAA8B,EAAC,cAAc,CAAC,CAAC,CAAC;IACrF,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,CAAC;AAChB,CAAC"}
@@ -1 +1,2 @@
1
1
  export { createEngineServer } from './create-engine-server';
2
+ export type { EngineServerDeps } from './create-engine-server';
@@ -0,0 +1,3 @@
1
+ import { type Router as RouterType } from 'express';
2
+ import type { StartExecutionService } from '../../execution/start-execution.service';
3
+ export declare function createWorkflowExecutionsRouter(startExecution: StartExecutionService): RouterType;
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createWorkflowExecutionsRouter = createWorkflowExecutionsRouter;
4
+ const express_1 = require("express");
5
+ const zod_1 = require("zod");
6
+ const admittance_1 = require("../../admittance");
7
+ const jsonValueSchema = zod_1.z.lazy(() => zod_1.z.union([
8
+ zod_1.z.string(),
9
+ zod_1.z.number(),
10
+ zod_1.z.boolean(),
11
+ zod_1.z.null(),
12
+ zod_1.z.array(jsonValueSchema),
13
+ zod_1.z.record(jsonValueSchema),
14
+ ]));
15
+ const jsonObjectSchema = zod_1.z.record(jsonValueSchema);
16
+ const StepTypeSchema = zod_1.z.enum(['trigger', 'v1-node', 'wait', 'subworkflow', 'batch']);
17
+ const GraphNodeSchema = zod_1.z.object({
18
+ id: zod_1.z.string(),
19
+ name: zod_1.z.string(),
20
+ type: StepTypeSchema,
21
+ config: zod_1.z.unknown().optional(),
22
+ });
23
+ const GraphEdgeSchema = zod_1.z.object({
24
+ from: zod_1.z.string(),
25
+ to: zod_1.z.string(),
26
+ outputIndex: zod_1.z.number().int().nonnegative().default(0),
27
+ inputIndex: zod_1.z.number().int().nonnegative().default(0),
28
+ isBackEdge: zod_1.z.boolean().optional(),
29
+ });
30
+ const WorkflowGraphSchema = zod_1.z.object({
31
+ nodes: zod_1.z.array(GraphNodeSchema),
32
+ edges: zod_1.z.array(GraphEdgeSchema),
33
+ });
34
+ const StartExecutionBody = zod_1.z.object({
35
+ workflowId: zod_1.z.string().min(1),
36
+ graph: WorkflowGraphSchema,
37
+ triggerPayload: jsonObjectSchema.nullable().optional(),
38
+ mode: zod_1.z.enum(['production', 'manual']).optional(),
39
+ });
40
+ function createWorkflowExecutionsRouter(startExecution) {
41
+ const router = (0, express_1.Router)();
42
+ router.post('/', async (req, res) => {
43
+ const parsed = StartExecutionBody.safeParse(req.body);
44
+ if (!parsed.success) {
45
+ res.status(400).json({
46
+ error: 'invalid_request',
47
+ details: parsed.error.flatten(),
48
+ });
49
+ return;
50
+ }
51
+ try {
52
+ const result = await startExecution.start(parsed.data);
53
+ res.status(201).json(result);
54
+ }
55
+ catch (error) {
56
+ if (error instanceof admittance_1.AdmittanceRejectedError) {
57
+ res.status(429).json({ error: 'admittance_rejected', reason: error.reason });
58
+ return;
59
+ }
60
+ throw error;
61
+ }
62
+ });
63
+ return router;
64
+ }
65
+ //# sourceMappingURL=workflow-executions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-executions.js","sourceRoot":"","sources":["../../../src/server/routes/workflow-executions.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- export declare function startEngineServer(): Promise<{
1
+ import { type EngineServerDeps } from '../server';
2
+ export declare function startEngineServer(deps?: EngineServerDeps): Promise<{
2
3
  url: string;
3
4
  stop: () => Promise<void>;
4
5
  }>;
@@ -2,8 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.startEngineServer = startEngineServer;
4
4
  const server_1 = require("../server");
5
- async function startEngineServer() {
6
- const { app } = (0, server_1.createEngineServer)();
5
+ async function startEngineServer(deps) {
6
+ const { app } = (0, server_1.createEngineServer)(deps);
7
7
  const server = await new Promise((resolve, reject) => {
8
8
  const s = app.listen(0, '127.0.0.1', () => resolve(s));
9
9
  s.on('error', reject);
@@ -1 +1 @@
1
- {"version":3,"file":"start-engine-server.js","sourceRoot":"","sources":["../../src/testing/start-engine-server.ts"],"names":[],"mappings":";;;AAEA,sCAA+C;AAExC,KAAK;IAIX,MAAM,EAAE,GAAG,EAAE,GAAG,IAAA,2BAAkB,GAAE,CAAC;IAErC,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC5D,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IACjC,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,GAAG,GAAG,oBAAoB,OAAO,CAAC,IAAI,EAAE,CAAC;IAE/C,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE;QACtC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACtB,IAAI,KAAK;oBAAE,MAAM,CAAC,KAAK,CAAC,CAAC;;oBACpB,OAAO,EAAE,CAAC;YAChB,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"start-engine-server.js","sourceRoot":"","sources":["../../src/testing/start-engine-server.ts"],"names":[],"mappings":";;;AAEA,sCAAsE;AAE/D,KAAK,4BAA4B,IAAuB;IAI9D,MAAM,EAAE,GAAG,EAAE,GAAG,IAAA,2BAAkB,EAAC,IAAI,CAAC,CAAC;IAEzC,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC5D,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IACjC,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,GAAG,GAAG,oBAAoB,OAAO,CAAC,IAAI,EAAE,CAAC;IAE/C,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE;QACtC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACtB,IAAI,KAAK;oBAAE,MAAM,CAAC,KAAK,CAAC,CAAC;;oBACpB,OAAO,EAAE,CAAC;YAChB,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@n8n/engine",
3
- "version": "0.12.0",
3
+ "version": "0.14.0",
4
4
  "description": "n8n workflow execution engine (v2)",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -11,14 +11,21 @@
11
11
  ],
12
12
  "dependencies": {
13
13
  "express": "5.1.0",
14
+ "pg": "8.21.0",
14
15
  "reflect-metadata": "0.2.2",
16
+ "uuid": "11.1.1",
17
+ "zod": "3.25.76",
15
18
  "@n8n/di": "0.16.0",
16
- "@n8n/config": "2.30.0"
19
+ "@n8n/typeorm": "0.7.0",
20
+ "@n8n/config": "2.32.0"
17
21
  },
18
22
  "devDependencies": {
23
+ "@testcontainers/postgresql": "^11.13.0",
19
24
  "@types/express": "^5.0.1",
25
+ "@types/pg": "^8.15.6",
20
26
  "@types/supertest": "^6.0.3",
21
27
  "supertest": "^7.1.1",
28
+ "testcontainers": "^11.13.0",
22
29
  "typescript": "7.0.2",
23
30
  "vitest": "^4.1.9",
24
31
  "@n8n/typescript-config": "1.9.0",