n8n 1.101.1 → 1.102.1
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/bin/n8n +3 -11
- package/dist/auth/auth.service.d.ts +9 -5
- package/dist/auth/auth.service.js +46 -27
- package/dist/auth/auth.service.js.map +1 -1
- package/dist/auth/jwt.js +1 -1
- package/dist/auth/jwt.js.map +1 -1
- package/dist/build.tsbuildinfo +1 -1
- package/dist/command-registry.d.ts +17 -0
- package/dist/command-registry.js +191 -0
- package/dist/command-registry.js.map +1 -0
- package/dist/commands/audit.d.ts +13 -8
- package/dist/commands/audit.js +33 -21
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/base-command.d.ts +4 -3
- package/dist/commands/base-command.js +15 -11
- package/dist/commands/base-command.js.map +1 -1
- package/dist/commands/community-node.d.ts +19 -22
- package/dist/commands/community-node.js +34 -30
- package/dist/commands/community-node.js.map +1 -1
- package/dist/commands/db/revert.d.ts +3 -9
- package/dist/commands/db/revert.js +22 -15
- package/dist/commands/db/revert.js.map +1 -1
- package/dist/commands/execute-batch.d.ts +40 -17
- package/dist/commands/execute-batch.js +120 -96
- package/dist/commands/execute-batch.js.map +1 -1
- package/dist/commands/execute.d.ts +16 -8
- package/dist/commands/execute.js +24 -15
- package/dist/commands/execute.js.map +1 -1
- package/dist/commands/export/credentials.d.ts +28 -13
- package/dist/commands/export/credentials.js +47 -37
- package/dist/commands/export/credentials.js.map +1 -1
- package/dist/commands/export/workflow.d.ts +25 -12
- package/dist/commands/export/workflow.js +43 -34
- package/dist/commands/export/workflow.js.map +1 -1
- package/dist/commands/import/credentials.d.ts +19 -10
- package/dist/commands/import/credentials.js +44 -28
- package/dist/commands/import/credentials.js.map +1 -1
- package/dist/commands/import/workflow.d.ts +19 -10
- package/dist/commands/import/workflow.js +41 -28
- package/dist/commands/import/workflow.js.map +1 -1
- package/dist/commands/ldap/reset.d.ts +16 -9
- package/dist/commands/ldap/reset.js +37 -22
- package/dist/commands/ldap/reset.js.map +1 -1
- package/dist/commands/license/clear.d.ts +0 -2
- package/dist/commands/license/clear.js +15 -4
- package/dist/commands/license/clear.js.map +1 -1
- package/dist/commands/license/info.d.ts +0 -2
- package/dist/commands/license/info.js +15 -4
- package/dist/commands/license/info.js.map +1 -1
- package/dist/commands/list/workflow.d.ts +13 -8
- package/dist/commands/list/workflow.js +26 -19
- package/dist/commands/list/workflow.js.map +1 -1
- package/dist/commands/mfa/disable.d.ts +10 -8
- package/dist/commands/mfa/disable.js +22 -15
- package/dist/commands/mfa/disable.js.map +1 -1
- package/dist/commands/start.d.ts +16 -9
- package/dist/commands/start.js +31 -25
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/update/workflow.d.ts +16 -9
- package/dist/commands/update/workflow.js +24 -21
- package/dist/commands/update/workflow.js.map +1 -1
- package/dist/commands/user-management/reset.d.ts +0 -2
- package/dist/commands/user-management/reset.js +16 -5
- package/dist/commands/user-management/reset.js.map +1 -1
- package/dist/commands/webhook.d.ts +0 -5
- package/dist/commands/webhook.js +15 -8
- package/dist/commands/webhook.js.map +1 -1
- package/dist/commands/worker.d.ts +12 -11
- package/dist/commands/worker.js +29 -14
- package/dist/commands/worker.js.map +1 -1
- package/dist/config/index.js +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/controller.registry.js +1 -1
- package/dist/controller.registry.js.map +1 -1
- package/dist/controllers/ai.controller.d.ts +1 -1
- package/dist/controllers/ai.controller.js +16 -0
- package/dist/controllers/ai.controller.js.map +1 -1
- package/dist/controllers/auth.controller.js +10 -3
- package/dist/controllers/auth.controller.js.map +1 -1
- package/dist/controllers/community-packages.controller.js +2 -2
- package/dist/controllers/community-packages.controller.js.map +1 -1
- package/dist/controllers/e2e.controller.js +13 -3
- package/dist/controllers/e2e.controller.js.map +1 -1
- package/dist/controllers/invitation.controller.js +1 -1
- package/dist/controllers/invitation.controller.js.map +1 -1
- package/dist/controllers/me.controller.js +2 -2
- package/dist/controllers/me.controller.js.map +1 -1
- package/dist/controllers/mfa.controller.d.ts +1 -0
- package/dist/controllers/mfa.controller.js +24 -6
- package/dist/controllers/mfa.controller.js.map +1 -1
- package/dist/controllers/oauth/abstract-oauth.controller.d.ts +1 -0
- package/dist/controllers/oauth/abstract-oauth.controller.js +6 -1
- package/dist/controllers/oauth/abstract-oauth.controller.js.map +1 -1
- package/dist/controllers/oauth/oauth2-credential.controller.js +2 -1
- package/dist/controllers/oauth/oauth2-credential.controller.js.map +1 -1
- package/dist/controllers/owner.controller.js +1 -1
- package/dist/controllers/owner.controller.js.map +1 -1
- package/dist/controllers/password-reset.controller.js +1 -1
- package/dist/controllers/password-reset.controller.js.map +1 -1
- package/dist/controllers/users.controller.d.ts +1 -0
- package/dist/credential-types.js +6 -5
- package/dist/credential-types.js.map +1 -1
- package/dist/credentials-helper.d.ts +1 -0
- package/dist/credentials-helper.js +12 -1
- package/dist/credentials-helper.js.map +1 -1
- package/dist/environments.ee/source-control/source-control-export.service.ee.js +5 -1
- package/dist/environments.ee/source-control/source-control-export.service.ee.js.map +1 -1
- package/dist/environments.ee/source-control/source-control-git.service.ee.js +4 -0
- package/dist/environments.ee/source-control/source-control-git.service.ee.js.map +1 -1
- package/dist/environments.ee/source-control/source-control.service.ee.js +5 -4
- package/dist/environments.ee/source-control/source-control.service.ee.js.map +1 -1
- package/dist/errors/response-errors/content-too-large.error.d.ts +4 -0
- package/dist/errors/response-errors/content-too-large.error.js +11 -0
- package/dist/errors/response-errors/content-too-large.error.js.map +1 -0
- package/dist/errors/response-errors/too-many-requests.error.d.ts +4 -0
- package/dist/errors/response-errors/too-many-requests.error.js +11 -0
- package/dist/errors/response-errors/too-many-requests.error.js.map +1 -0
- package/dist/evaluation.ee/test-runner/test-runner.service.ee.js +1 -1
- package/dist/evaluation.ee/test-runner/test-runner.service.ee.js.map +1 -1
- package/dist/events/relays/telemetry.event-relay.js +7 -2
- package/dist/events/relays/telemetry.event-relay.js.map +1 -1
- package/dist/license/license.service.js +2 -0
- package/dist/license/license.service.js.map +1 -1
- package/dist/mfa/constants.d.ts +2 -0
- package/dist/mfa/constants.js +6 -0
- package/dist/mfa/constants.js.map +1 -0
- package/dist/mfa/mfa.service.d.ts +11 -2
- package/dist/mfa/mfa.service.js +39 -2
- package/dist/mfa/mfa.service.js.map +1 -1
- package/dist/modules/insights/insights.module.d.ts +1 -5
- package/dist/modules/insights/insights.module.js +6 -8
- package/dist/modules/insights/insights.module.js.map +1 -1
- package/dist/public-api/v1/openapi.yml +2 -2
- package/dist/push/index.js +1 -1
- package/dist/push/index.js.map +1 -1
- package/dist/requests.d.ts +4 -0
- package/dist/scaling/job-processor.js +1 -0
- package/dist/scaling/job-processor.js.map +1 -1
- package/dist/scaling/scaling.types.d.ts +1 -0
- package/dist/server.d.ts +1 -3
- package/dist/server.js +14 -18
- package/dist/server.js.map +1 -1
- package/dist/services/community-packages.service.d.ts +1 -1
- package/dist/services/community-packages.service.js +7 -9
- package/dist/services/community-packages.service.js.map +1 -1
- package/dist/services/frontend.service.d.ts +3 -1
- package/dist/services/frontend.service.js +9 -2
- package/dist/services/frontend.service.js.map +1 -1
- package/dist/services/hooks.service.d.ts +1 -0
- package/dist/services/hooks.service.js +3 -2
- package/dist/services/hooks.service.js.map +1 -1
- package/dist/services/user.service.d.ts +1 -0
- package/dist/services/user.service.js +1 -0
- package/dist/services/user.service.js.map +1 -1
- package/dist/sso.ee/oidc/routes/oidc.controller.ee.js +3 -1
- package/dist/sso.ee/oidc/routes/oidc.controller.ee.js.map +1 -1
- package/dist/sso.ee/saml/routes/saml.controller.ee.js +1 -1
- package/dist/sso.ee/saml/routes/saml.controller.ee.js.map +1 -1
- package/dist/task-runners/task-runner-process.d.ts +1 -0
- package/dist/task-runners/task-runner-process.js +7 -2
- package/dist/task-runners/task-runner-process.js.map +1 -1
- package/dist/telemetry/index.d.ts +1 -3
- package/dist/telemetry/index.js +1 -4
- package/dist/telemetry/index.js.map +1 -1
- package/dist/webhooks/webhook-helpers.js +1 -1
- package/dist/webhooks/webhook-helpers.js.map +1 -1
- package/dist/workflow-execute-additional-data.js +1 -0
- package/dist/workflow-execute-additional-data.js.map +1 -1
- package/dist/workflow-runner.js +2 -0
- package/dist/workflow-runner.js.map +1 -1
- package/dist/zod-alias-support.d.ts +9 -0
- package/dist/zod-alias-support.js +8 -0
- package/dist/zod-alias-support.js.map +1 -0
- package/package.json +24 -26
- package/dist/help.d.ts +0 -4
- package/dist/help.js +0 -12
- package/dist/help.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"community-node.js","sourceRoot":"","sources":["../../src/commands/community-node.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"community-node.js","sourceRoot":"","sources":["../../src/commands/community-node.ts"],"names":[],"mappings":";;;;;;;;;AACA,gCAA0F;AAC1F,gDAA0C;AAC1C,gCAAoC;AACpC,6BAAwB;AAExB,2EAAuE;AACvE,sFAAiF;AAEjF,iDAA6C;AAE7C,MAAM,WAAW,GAAG,OAAC,CAAC,MAAM,CAAC;IAC5B,SAAS,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,QAAQ,EAAE;IACjE,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC,CAAC,QAAQ,EAAE;IAC9E,UAAU,EAAE,OAAC;SACX,MAAM,EAAE;SACR,QAAQ,CACR,oHAAoH,CACpH;SACA,QAAQ,EAAE;IACZ,MAAM,EAAE,OAAC;SACP,MAAM,EAAE;SACR,QAAQ,CACR,6HAA6H,CAC7H;SACA,QAAQ,EAAE;CACZ,CAAC,CAAC;AAWI,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,0BAAwC;IAC1E,KAAK,CAAC,GAAG;QACR,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAEvB,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC;QAClC,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,CAAC;QACxC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAE5B,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;YACrE,OAAO;QACR,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YACjD,OAAO;QACR,CAAC;QAED,IAAI,CAAC,WAAW,IAAI,CAAC,cAAc,EAAE,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;YACjE,OAAO;QACR,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;YACzC,OAAO;QACR,CAAC;QAED,IAAI,cAAc,IAAI,MAAM,EAAE,CAAC;YAC9B,MAAM,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;IACF,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAAY;QACvB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,cAAsB,EAAE,MAAc;QAC/D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAE7C,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,MAAM,YAAY,CAAC,CAAC;YAC7C,OAAO;QACR,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC;QAErE,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,cAAc,YAAY,CAAC,CAAC;YACtE,OAAO;QACR,CAAC;QAED,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YACxC,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,cAAc,2BAA2B,CAAC,CAAC;IAC1F,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc;QAChC,OAAO,MAAM,cAAS,CAAC,GAAG,CAAC,mBAAc,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,cAAsB;QACjD,OAAO,MAAM,cAAS,CAAC,GAAG,CAAC,0BAAqB,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,IAAU,EAAE,YAAoB;QACtD,OAAO,MAAM,cAAS,CAAC,GAAG,CAAC,wCAAkB,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,WAAmB;QACzC,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAEtE,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,WAAW,YAAY,CAAC,CAAC;YACrD,OAAO;QACR,CAAC;QAED,MAAM,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;QAEjE,MAAM,cAAc,GAAG,gBAAgB,EAAE,cAAc,CAAC;QAExD,IAAI,CAAC,cAAc,EAAE,CAAC;YACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,WAAW,YAAY,CAAC,CAAC;YACtD,OAAO;QACR,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;YACnC,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;QAED,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,iBAAiB;QACtB,MAAM,cAAS,CAAC,GAAG,CAAC,qDAAwB,CAAC,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC9E,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,IAAoB;QAC7C,OAAO,MAAM,cAAS,CAAC,GAAG,CAAC,6BAAwB,CAAC,CAAC,MAAM,CAAC;YAC3D,IAAI,EAAE,IAAI,CAAC,IAAI;SACf,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,WAAmB,EAAE,gBAAmC;QACpF,OAAO,MAAM,cAAS,CAAC,GAAG,CAAC,qDAAwB,CAAC,CAAC,aAAa,CACjE,WAAW,EACX,gBAAgB,CAChB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,WAAmB;QAC7C,OAAO,MAAM,cAAS,CAAC,GAAG,CAAC,qDAAwB,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACxF,CAAC;CACD,CAAA;AAtHY,sCAAa;wBAAb,aAAa;IATzB,IAAA,oBAAO,EAAC;QACR,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,gDAAgD;QAC7D,QAAQ,EAAE;YACT,+CAA+C;YAC/C,qDAAqD;SACrD;QACD,WAAW;KACX,CAAC;GACW,aAAa,CAsHzB"}
|
|
@@ -1,16 +1,10 @@
|
|
|
1
1
|
import { Logger } from '@n8n/backend-common';
|
|
2
2
|
import { MigrationExecutor, DataSource as Connection } from '@n8n/typeorm';
|
|
3
|
-
import { Command } from '@oclif/core';
|
|
4
3
|
export declare function main(logger: Logger, connection: Connection, migrationExecutor: MigrationExecutor): Promise<void>;
|
|
5
|
-
export declare class DbRevertMigrationCommand
|
|
6
|
-
|
|
7
|
-
static examples: string[];
|
|
8
|
-
static flags: {
|
|
9
|
-
help: import("@oclif/core/lib/interfaces").BooleanFlag<void>;
|
|
10
|
-
};
|
|
11
|
-
protected logger: Logger;
|
|
4
|
+
export declare class DbRevertMigrationCommand {
|
|
5
|
+
private readonly logger;
|
|
12
6
|
private connection;
|
|
13
|
-
|
|
7
|
+
constructor(logger: Logger);
|
|
14
8
|
run(): Promise<void>;
|
|
15
9
|
catch(error: Error): Promise<void>;
|
|
16
10
|
protected finally(error: Error | undefined): Promise<void>;
|
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
2
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
12
|
exports.DbRevertMigrationCommand = void 0;
|
|
4
13
|
exports.main = main;
|
|
5
14
|
const backend_common_1 = require("@n8n/backend-common");
|
|
6
15
|
const db_1 = require("@n8n/db");
|
|
16
|
+
const decorators_1 = require("@n8n/decorators");
|
|
7
17
|
const di_1 = require("@n8n/di");
|
|
8
18
|
const typeorm_1 = require("@n8n/typeorm");
|
|
9
|
-
const core_1 = require("@oclif/core");
|
|
10
19
|
async function main(logger, connection, migrationExecutor) {
|
|
11
20
|
const executedMigrations = await migrationExecutor.getExecutedMigrations();
|
|
12
21
|
const lastExecutedMigration = executedMigrations.at(0);
|
|
@@ -36,13 +45,9 @@ async function main(logger, connection, migrationExecutor) {
|
|
|
36
45
|
});
|
|
37
46
|
await connection.destroy();
|
|
38
47
|
}
|
|
39
|
-
|
|
40
|
-
constructor() {
|
|
41
|
-
|
|
42
|
-
this.logger = di_1.Container.get(backend_common_1.Logger);
|
|
43
|
-
}
|
|
44
|
-
async init() {
|
|
45
|
-
await this.parse(DbRevertMigrationCommand);
|
|
48
|
+
let DbRevertMigrationCommand = class DbRevertMigrationCommand {
|
|
49
|
+
constructor(logger) {
|
|
50
|
+
this.logger = logger;
|
|
46
51
|
}
|
|
47
52
|
async run() {
|
|
48
53
|
const connectionOptions = {
|
|
@@ -66,13 +71,15 @@ class DbRevertMigrationCommand extends core_1.Command {
|
|
|
66
71
|
async finally(error) {
|
|
67
72
|
if (this.connection?.isInitialized)
|
|
68
73
|
await this.connection.destroy();
|
|
69
|
-
|
|
74
|
+
process.exit(error ? 1 : 0);
|
|
70
75
|
}
|
|
71
|
-
}
|
|
72
|
-
exports.DbRevertMigrationCommand = DbRevertMigrationCommand;
|
|
73
|
-
DbRevertMigrationCommand.description = 'Revert last database migration';
|
|
74
|
-
DbRevertMigrationCommand.examples = ['$ n8n db:revert'];
|
|
75
|
-
DbRevertMigrationCommand.flags = {
|
|
76
|
-
help: core_1.Flags.help({ char: 'h' }),
|
|
77
76
|
};
|
|
77
|
+
exports.DbRevertMigrationCommand = DbRevertMigrationCommand;
|
|
78
|
+
exports.DbRevertMigrationCommand = DbRevertMigrationCommand = __decorate([
|
|
79
|
+
(0, decorators_1.Command)({
|
|
80
|
+
name: 'db:revert',
|
|
81
|
+
description: 'Revert last database migration',
|
|
82
|
+
}),
|
|
83
|
+
__metadata("design:paramtypes", [backend_common_1.Logger])
|
|
84
|
+
], DbRevertMigrationCommand);
|
|
78
85
|
//# sourceMappingURL=revert.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revert.js","sourceRoot":"","sources":["../../../src/commands/db/revert.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"revert.js","sourceRoot":"","sources":["../../../src/commands/db/revert.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,46 @@
|
|
|
1
1
|
import type { User } from '@n8n/db';
|
|
2
2
|
import type { IWorkflowBase } from 'n8n-workflow';
|
|
3
|
+
import { z } from 'zod';
|
|
3
4
|
import { BaseCommand } from './base-command';
|
|
4
5
|
import type { IExecutionResult, IResult, IWorkflowExecutionProgress } from '../types/commands.types';
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
declare const flagsSchema: z.ZodObject<{
|
|
7
|
+
debug: z.ZodDefault<z.ZodBoolean>;
|
|
8
|
+
ids: z.ZodOptional<z.ZodString>;
|
|
9
|
+
concurrency: z.ZodDefault<z.ZodNumber>;
|
|
10
|
+
output: z.ZodOptional<z.ZodString>;
|
|
11
|
+
snapshot: z.ZodOptional<z.ZodString>;
|
|
12
|
+
compare: z.ZodOptional<z.ZodString>;
|
|
13
|
+
shallow: z.ZodOptional<z.ZodBoolean>;
|
|
14
|
+
githubWorkflow: z.ZodOptional<z.ZodBoolean>;
|
|
15
|
+
skipList: z.ZodOptional<z.ZodString>;
|
|
16
|
+
retries: z.ZodDefault<z.ZodNumber>;
|
|
17
|
+
shortOutput: z.ZodOptional<z.ZodBoolean>;
|
|
18
|
+
}, "strip", z.ZodTypeAny, {
|
|
19
|
+
debug: boolean;
|
|
20
|
+
concurrency: number;
|
|
21
|
+
retries: number;
|
|
22
|
+
output?: string | undefined;
|
|
23
|
+
ids?: string | undefined;
|
|
24
|
+
snapshot?: string | undefined;
|
|
25
|
+
compare?: string | undefined;
|
|
26
|
+
shallow?: boolean | undefined;
|
|
27
|
+
githubWorkflow?: boolean | undefined;
|
|
28
|
+
skipList?: string | undefined;
|
|
29
|
+
shortOutput?: boolean | undefined;
|
|
30
|
+
}, {
|
|
31
|
+
debug?: boolean | undefined;
|
|
32
|
+
concurrency?: number | undefined;
|
|
33
|
+
output?: string | undefined;
|
|
34
|
+
ids?: string | undefined;
|
|
35
|
+
snapshot?: string | undefined;
|
|
36
|
+
compare?: string | undefined;
|
|
37
|
+
shallow?: boolean | undefined;
|
|
38
|
+
githubWorkflow?: boolean | undefined;
|
|
39
|
+
skipList?: string | undefined;
|
|
40
|
+
retries?: number | undefined;
|
|
41
|
+
shortOutput?: boolean | undefined;
|
|
42
|
+
}>;
|
|
43
|
+
export declare class ExecuteBatch extends BaseCommand<z.infer<typeof flagsSchema>> {
|
|
7
44
|
static cancelled: boolean;
|
|
8
45
|
static workflowExecutionsProgress: IWorkflowExecutionProgress[][];
|
|
9
46
|
static shallow: boolean;
|
|
@@ -14,21 +51,6 @@ export declare class ExecuteBatch extends BaseCommand {
|
|
|
14
51
|
static debug: boolean;
|
|
15
52
|
static executionTimeout: number;
|
|
16
53
|
static instanceOwner: User;
|
|
17
|
-
static examples: string[];
|
|
18
|
-
static flags: {
|
|
19
|
-
help: import("@oclif/core/lib/interfaces").BooleanFlag<void>;
|
|
20
|
-
debug: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
21
|
-
ids: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
22
|
-
concurrency: import("@oclif/core/lib/interfaces").OptionFlag<number, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
23
|
-
output: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
24
|
-
snapshot: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
25
|
-
compare: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
26
|
-
shallow: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
27
|
-
githubWorkflow: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
28
|
-
skipList: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
29
|
-
retries: import("@oclif/core/lib/interfaces").OptionFlag<number, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
30
|
-
shortOutput: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
31
|
-
};
|
|
32
54
|
static aliases: string[];
|
|
33
55
|
needsCommunityPackages: boolean;
|
|
34
56
|
needsTaskRunner: boolean;
|
|
@@ -44,3 +66,4 @@ export declare class ExecuteBatch extends BaseCommand {
|
|
|
44
66
|
initializeLogs(): void;
|
|
45
67
|
startThread(workflowData: IWorkflowBase): Promise<IExecutionResult>;
|
|
46
68
|
}
|
|
69
|
+
export {};
|
|
@@ -1,18 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
2
8
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
9
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
10
|
};
|
|
11
|
+
var ExecuteBatch_1;
|
|
5
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
13
|
exports.ExecuteBatch = void 0;
|
|
7
14
|
const db_1 = require("@n8n/db");
|
|
15
|
+
const decorators_1 = require("@n8n/decorators");
|
|
8
16
|
const di_1 = require("@n8n/di");
|
|
9
|
-
const core_1 = require("@oclif/core");
|
|
10
17
|
const fs_1 = __importDefault(require("fs"));
|
|
11
18
|
const json_diff_1 = require("json-diff");
|
|
12
19
|
const pick_1 = __importDefault(require("lodash/pick"));
|
|
13
20
|
const n8n_workflow_1 = require("n8n-workflow");
|
|
14
21
|
const os_1 = __importDefault(require("os"));
|
|
15
22
|
const path_1 = require("path");
|
|
23
|
+
const zod_1 = require("zod");
|
|
16
24
|
const active_executions_1 = require("../active-executions");
|
|
17
25
|
const ownership_service_1 = require("../services/ownership.service");
|
|
18
26
|
const utils_1 = require("../utils");
|
|
@@ -20,17 +28,65 @@ const workflow_runner_1 = require("../workflow-runner");
|
|
|
20
28
|
const base_command_1 = require("./base-command");
|
|
21
29
|
const config_1 = __importDefault(require("../config"));
|
|
22
30
|
const re = /\d+/;
|
|
23
|
-
|
|
31
|
+
const flagsSchema = zod_1.z.object({
|
|
32
|
+
debug: zod_1.z
|
|
33
|
+
.boolean()
|
|
34
|
+
.describe('Toggles on displaying all errors and debug messages.')
|
|
35
|
+
.default(false),
|
|
36
|
+
ids: zod_1.z
|
|
37
|
+
.string()
|
|
38
|
+
.describe('Specifies workflow IDs to get executed, separated by a comma or a file containing the ids')
|
|
39
|
+
.optional(),
|
|
40
|
+
concurrency: zod_1.z
|
|
41
|
+
.number()
|
|
42
|
+
.int()
|
|
43
|
+
.default(1)
|
|
44
|
+
.describe('How many workflows can run in parallel. Defaults to 1 which means no concurrency.'),
|
|
45
|
+
output: zod_1.z
|
|
46
|
+
.string()
|
|
47
|
+
.describe('Enable execution saving, You must inform an existing folder to save execution via this param')
|
|
48
|
+
.optional(),
|
|
49
|
+
snapshot: zod_1.z
|
|
50
|
+
.string()
|
|
51
|
+
.describe('Enables snapshot saving. You must inform an existing folder to save snapshots via this param.')
|
|
52
|
+
.optional(),
|
|
53
|
+
compare: zod_1.z
|
|
54
|
+
.string()
|
|
55
|
+
.describe('Compares current execution with an existing snapshot. You must inform an existing folder where the snapshots are saved.')
|
|
56
|
+
.optional(),
|
|
57
|
+
shallow: zod_1.z
|
|
58
|
+
.boolean()
|
|
59
|
+
.describe('Compares only if attributes output from node are the same, with no regards to nested JSON objects.')
|
|
60
|
+
.optional(),
|
|
61
|
+
githubWorkflow: zod_1.z
|
|
62
|
+
.boolean()
|
|
63
|
+
.describe('Enables more lenient comparison for GitHub workflows. This is useful for reducing false positives when comparing Test workflows.')
|
|
64
|
+
.optional(),
|
|
65
|
+
skipList: zod_1.z
|
|
66
|
+
.string()
|
|
67
|
+
.describe('File containing a comma separated list of workflow IDs to skip.')
|
|
68
|
+
.optional(),
|
|
69
|
+
retries: zod_1.z
|
|
70
|
+
.number()
|
|
71
|
+
.int()
|
|
72
|
+
.default(1)
|
|
73
|
+
.describe('Retries failed workflows up to N tries. Default is 1. Set 0 to disable.'),
|
|
74
|
+
shortOutput: zod_1.z
|
|
75
|
+
.boolean()
|
|
76
|
+
.describe('Omits the full execution information from output, displaying only summary.')
|
|
77
|
+
.optional(),
|
|
78
|
+
});
|
|
79
|
+
let ExecuteBatch = ExecuteBatch_1 = class ExecuteBatch extends base_command_1.BaseCommand {
|
|
24
80
|
constructor() {
|
|
25
81
|
super(...arguments);
|
|
26
82
|
this.needsCommunityPackages = true;
|
|
27
83
|
this.needsTaskRunner = true;
|
|
28
84
|
}
|
|
29
85
|
async stopProcess(skipExit = false) {
|
|
30
|
-
if (
|
|
86
|
+
if (ExecuteBatch_1.cancelled) {
|
|
31
87
|
process.exit(0);
|
|
32
88
|
}
|
|
33
|
-
|
|
89
|
+
ExecuteBatch_1.cancelled = true;
|
|
34
90
|
await di_1.Container.get(active_executions_1.ActiveExecutions).shutdown(true);
|
|
35
91
|
if (skipExit !== true) {
|
|
36
92
|
process.exit(0);
|
|
@@ -71,9 +127,9 @@ class ExecuteBatch extends base_command_1.BaseCommand {
|
|
|
71
127
|
await this.initExternalHooks();
|
|
72
128
|
}
|
|
73
129
|
async run() {
|
|
74
|
-
const { flags } =
|
|
75
|
-
|
|
76
|
-
|
|
130
|
+
const { flags } = this;
|
|
131
|
+
ExecuteBatch_1.debug = flags.debug;
|
|
132
|
+
ExecuteBatch_1.concurrency = flags.concurrency || 1;
|
|
77
133
|
const ids = [];
|
|
78
134
|
const skipIds = [];
|
|
79
135
|
if (flags.snapshot !== undefined) {
|
|
@@ -87,7 +143,7 @@ class ExecuteBatch extends base_command_1.BaseCommand {
|
|
|
87
143
|
this.logger.error('The parameter --snapshot must be an existing directory');
|
|
88
144
|
return;
|
|
89
145
|
}
|
|
90
|
-
|
|
146
|
+
ExecuteBatch_1.snapshot = flags.snapshot;
|
|
91
147
|
}
|
|
92
148
|
if (flags.compare !== undefined) {
|
|
93
149
|
if (fs_1.default.existsSync(flags.compare)) {
|
|
@@ -100,7 +156,7 @@ class ExecuteBatch extends base_command_1.BaseCommand {
|
|
|
100
156
|
this.logger.error('The parameter --compare must be an existing directory');
|
|
101
157
|
return;
|
|
102
158
|
}
|
|
103
|
-
|
|
159
|
+
ExecuteBatch_1.compare = flags.compare;
|
|
104
160
|
}
|
|
105
161
|
if (flags.output !== undefined) {
|
|
106
162
|
if (fs_1.default.existsSync(flags.output)) {
|
|
@@ -148,12 +204,12 @@ class ExecuteBatch extends base_command_1.BaseCommand {
|
|
|
148
204
|
}
|
|
149
205
|
}
|
|
150
206
|
if (flags.shallow) {
|
|
151
|
-
|
|
207
|
+
ExecuteBatch_1.shallow = true;
|
|
152
208
|
}
|
|
153
209
|
if (flags.githubWorkflow) {
|
|
154
|
-
|
|
210
|
+
ExecuteBatch_1.githubWorkflow = true;
|
|
155
211
|
}
|
|
156
|
-
|
|
212
|
+
ExecuteBatch_1.instanceOwner = await di_1.Container.get(ownership_service_1.OwnershipService).getInstanceOwner();
|
|
157
213
|
const query = di_1.Container.get(db_1.WorkflowRepository).createQueryBuilder('workflows');
|
|
158
214
|
if (ids.length > 0) {
|
|
159
215
|
query.andWhere('workflows.id in (:...ids)', { ids });
|
|
@@ -162,14 +218,14 @@ class ExecuteBatch extends base_command_1.BaseCommand {
|
|
|
162
218
|
query.andWhere('workflows.id not in (:...skipIds)', { skipIds });
|
|
163
219
|
}
|
|
164
220
|
const allWorkflows = (await query.getMany());
|
|
165
|
-
if (
|
|
221
|
+
if (ExecuteBatch_1.debug) {
|
|
166
222
|
process.stdout.write(`Found ${allWorkflows.length} workflows to execute.\n`);
|
|
167
223
|
}
|
|
168
224
|
const results = await this.runTests([...allWorkflows]);
|
|
169
225
|
let { retries } = flags;
|
|
170
226
|
while (retries > 0 &&
|
|
171
227
|
results.summary.warningExecutions + results.summary.failedExecutions > 0 &&
|
|
172
|
-
!
|
|
228
|
+
!ExecuteBatch_1.cancelled) {
|
|
173
229
|
const failedWorkflowIds = results.summary.errors.map((execution) => execution.workflowId);
|
|
174
230
|
failedWorkflowIds.push(...results.summary.warnings.map((execution) => execution.workflowId));
|
|
175
231
|
const newWorkflowList = allWorkflows.filter((workflow) => failedWorkflowIds.includes(workflow.id));
|
|
@@ -201,7 +257,7 @@ class ExecuteBatch extends base_command_1.BaseCommand {
|
|
|
201
257
|
}
|
|
202
258
|
await this.stopProcess(true);
|
|
203
259
|
if (results.summary.failedExecutions > 0) {
|
|
204
|
-
|
|
260
|
+
process.exit(1);
|
|
205
261
|
}
|
|
206
262
|
}
|
|
207
263
|
mergeResults(results, retryResults) {
|
|
@@ -240,17 +296,17 @@ class ExecuteBatch extends base_command_1.BaseCommand {
|
|
|
240
296
|
coveredNodes: {},
|
|
241
297
|
executions: [],
|
|
242
298
|
};
|
|
243
|
-
if (
|
|
299
|
+
if (ExecuteBatch_1.debug) {
|
|
244
300
|
this.initializeLogs();
|
|
245
301
|
}
|
|
246
302
|
return await new Promise(async (res) => {
|
|
247
303
|
const promisesArray = [];
|
|
248
|
-
for (let i = 0; i <
|
|
304
|
+
for (let i = 0; i < ExecuteBatch_1.concurrency; i++) {
|
|
249
305
|
const promise = new Promise(async (resolve) => {
|
|
250
306
|
let workflow;
|
|
251
307
|
while (allWorkflows.length > 0) {
|
|
252
308
|
workflow = allWorkflows.shift();
|
|
253
|
-
if (
|
|
309
|
+
if (ExecuteBatch_1.cancelled) {
|
|
254
310
|
process.stdout.write(`Thread ${i + 1} resolving and quitting.`);
|
|
255
311
|
resolve(true);
|
|
256
312
|
break;
|
|
@@ -259,21 +315,21 @@ class ExecuteBatch extends base_command_1.BaseCommand {
|
|
|
259
315
|
resolve(true);
|
|
260
316
|
return;
|
|
261
317
|
}
|
|
262
|
-
if (
|
|
263
|
-
|
|
318
|
+
if (ExecuteBatch_1.debug) {
|
|
319
|
+
ExecuteBatch_1.workflowExecutionsProgress[i].push({
|
|
264
320
|
workflowId: workflow.id,
|
|
265
321
|
status: 'running',
|
|
266
322
|
});
|
|
267
323
|
this.updateStatus();
|
|
268
324
|
}
|
|
269
325
|
await this.startThread(workflow).then((executionResult) => {
|
|
270
|
-
if (
|
|
271
|
-
|
|
326
|
+
if (ExecuteBatch_1.debug) {
|
|
327
|
+
ExecuteBatch_1.workflowExecutionsProgress[i].pop();
|
|
272
328
|
}
|
|
273
329
|
result.executions.push(executionResult);
|
|
274
330
|
if (executionResult.executionStatus === 'success') {
|
|
275
|
-
if (
|
|
276
|
-
|
|
331
|
+
if (ExecuteBatch_1.debug) {
|
|
332
|
+
ExecuteBatch_1.workflowExecutionsProgress[i].push({
|
|
277
333
|
workflowId: workflow.id,
|
|
278
334
|
status: 'success',
|
|
279
335
|
});
|
|
@@ -294,8 +350,8 @@ class ExecuteBatch extends base_command_1.BaseCommand {
|
|
|
294
350
|
workflowId: executionResult.workflowId,
|
|
295
351
|
error: executionResult.error,
|
|
296
352
|
});
|
|
297
|
-
if (
|
|
298
|
-
|
|
353
|
+
if (ExecuteBatch_1.debug) {
|
|
354
|
+
ExecuteBatch_1.workflowExecutionsProgress[i].push({
|
|
299
355
|
workflowId: workflow.id,
|
|
300
356
|
status: 'warning',
|
|
301
357
|
});
|
|
@@ -308,8 +364,8 @@ class ExecuteBatch extends base_command_1.BaseCommand {
|
|
|
308
364
|
workflowId: executionResult.workflowId,
|
|
309
365
|
error: executionResult.error,
|
|
310
366
|
});
|
|
311
|
-
if (
|
|
312
|
-
|
|
367
|
+
if (ExecuteBatch_1.debug) {
|
|
368
|
+
ExecuteBatch_1.workflowExecutionsProgress[i].push({
|
|
313
369
|
workflowId: workflow.id,
|
|
314
370
|
status: 'error',
|
|
315
371
|
});
|
|
@@ -326,7 +382,7 @@ class ExecuteBatch extends base_command_1.BaseCommand {
|
|
|
326
382
|
promisesArray.push(promise);
|
|
327
383
|
}
|
|
328
384
|
await Promise.allSettled(promisesArray);
|
|
329
|
-
if (
|
|
385
|
+
if (ExecuteBatch_1.githubWorkflow) {
|
|
330
386
|
if (result.summary.errors.length < 6) {
|
|
331
387
|
const errorMessage = result.summary.errors.map((error) => {
|
|
332
388
|
return `*${error.workflowId}*: ${error.error}`;
|
|
@@ -346,15 +402,15 @@ class ExecuteBatch extends base_command_1.BaseCommand {
|
|
|
346
402
|
fs_1.default.appendFileSync(output, `${key}=${value}${os_1.default.EOL}`);
|
|
347
403
|
}
|
|
348
404
|
updateStatus() {
|
|
349
|
-
if (
|
|
405
|
+
if (ExecuteBatch_1.cancelled) {
|
|
350
406
|
return;
|
|
351
407
|
}
|
|
352
408
|
if (process.stdout.isTTY) {
|
|
353
|
-
process.stdout.moveCursor(0, -
|
|
409
|
+
process.stdout.moveCursor(0, -ExecuteBatch_1.concurrency);
|
|
354
410
|
process.stdout.cursorTo(0);
|
|
355
411
|
process.stdout.clearLine(0);
|
|
356
412
|
}
|
|
357
|
-
|
|
413
|
+
ExecuteBatch_1.workflowExecutionsProgress.map((concurrentThread, index) => {
|
|
358
414
|
let message = `${index + 1}: `;
|
|
359
415
|
concurrentThread.map((executionItem, workflowIndex) => {
|
|
360
416
|
let openColor = '\x1b[0m';
|
|
@@ -387,9 +443,9 @@ class ExecuteBatch extends base_command_1.BaseCommand {
|
|
|
387
443
|
process.stdout.write('**********************************************\n');
|
|
388
444
|
process.stdout.write('\n');
|
|
389
445
|
process.stdout.write('Batch number:\n');
|
|
390
|
-
|
|
391
|
-
for (let i = 0; i <
|
|
392
|
-
|
|
446
|
+
ExecuteBatch_1.workflowExecutionsProgress = [];
|
|
447
|
+
for (let i = 0; i < ExecuteBatch_1.concurrency; i++) {
|
|
448
|
+
ExecuteBatch_1.workflowExecutionsProgress.push([]);
|
|
393
449
|
process.stdout.write(`${i + 1}: \n`);
|
|
394
450
|
}
|
|
395
451
|
}
|
|
@@ -441,19 +497,19 @@ class ExecuteBatch extends base_command_1.BaseCommand {
|
|
|
441
497
|
executionResult.error = 'Workflow execution timed out.';
|
|
442
498
|
executionResult.executionStatus = 'warning';
|
|
443
499
|
resolve(executionResult);
|
|
444
|
-
},
|
|
500
|
+
}, ExecuteBatch_1.executionTimeout);
|
|
445
501
|
try {
|
|
446
502
|
const startingNode = (0, utils_1.findCliWorkflowStart)(workflowData.nodes);
|
|
447
503
|
const runData = {
|
|
448
504
|
executionMode: 'cli',
|
|
449
505
|
startNodes: [{ name: startingNode.name, sourceData: null }],
|
|
450
506
|
workflowData,
|
|
451
|
-
userId:
|
|
507
|
+
userId: ExecuteBatch_1.instanceOwner.id,
|
|
452
508
|
};
|
|
453
509
|
const executionId = await workflowRunner.run(runData);
|
|
454
510
|
const activeExecutions = di_1.Container.get(active_executions_1.ActiveExecutions);
|
|
455
511
|
const data = await activeExecutions.getPostExecutePromise(executionId);
|
|
456
|
-
if (gotCancel ||
|
|
512
|
+
if (gotCancel || ExecuteBatch_1.cancelled) {
|
|
457
513
|
clearTimeout(timeoutTimer);
|
|
458
514
|
return;
|
|
459
515
|
}
|
|
@@ -479,7 +535,7 @@ class ExecuteBatch extends base_command_1.BaseCommand {
|
|
|
479
535
|
}
|
|
480
536
|
}
|
|
481
537
|
else {
|
|
482
|
-
if (
|
|
538
|
+
if (ExecuteBatch_1.shallow) {
|
|
483
539
|
Object.keys(data.data.resultData.runData).map((nodeName) => {
|
|
484
540
|
data.data.resultData.runData[nodeName].map((taskData) => {
|
|
485
541
|
if (taskData.data === undefined) {
|
|
@@ -557,13 +613,13 @@ class ExecuteBatch extends base_command_1.BaseCommand {
|
|
|
557
613
|
});
|
|
558
614
|
}
|
|
559
615
|
const serializedData = this.formatJsonOutput(data);
|
|
560
|
-
if (
|
|
616
|
+
if (ExecuteBatch_1.compare === undefined) {
|
|
561
617
|
executionResult.executionStatus = 'success';
|
|
562
618
|
}
|
|
563
619
|
else {
|
|
564
|
-
const fileName = `${
|
|
565
|
-
?
|
|
566
|
-
:
|
|
620
|
+
const fileName = `${ExecuteBatch_1.compare.endsWith(path_1.sep)
|
|
621
|
+
? ExecuteBatch_1.compare
|
|
622
|
+
: ExecuteBatch_1.compare + path_1.sep}${workflowData.id}-snapshot.json`;
|
|
567
623
|
if (fs_1.default.existsSync(fileName)) {
|
|
568
624
|
const contents = fs_1.default.readFileSync(fileName, { encoding: 'utf-8' });
|
|
569
625
|
const expected = (0, n8n_workflow_1.jsonParse)(contents);
|
|
@@ -572,7 +628,7 @@ class ExecuteBatch extends base_command_1.BaseCommand {
|
|
|
572
628
|
if (changes !== undefined) {
|
|
573
629
|
const changesJson = JSON.stringify(changes);
|
|
574
630
|
if (changesJson.includes('__deleted')) {
|
|
575
|
-
if (
|
|
631
|
+
if (ExecuteBatch_1.githubWorkflow) {
|
|
576
632
|
const deletedChanges = changesJson.match(/__deleted/g) ?? [];
|
|
577
633
|
executionResult.error = `Workflow contains ${deletedChanges.length} deleted data.`;
|
|
578
634
|
}
|
|
@@ -598,10 +654,10 @@ class ExecuteBatch extends base_command_1.BaseCommand {
|
|
|
598
654
|
executionResult.executionStatus = 'warning';
|
|
599
655
|
}
|
|
600
656
|
}
|
|
601
|
-
if (
|
|
602
|
-
const fileName = `${
|
|
603
|
-
?
|
|
604
|
-
:
|
|
657
|
+
if (ExecuteBatch_1.snapshot !== undefined) {
|
|
658
|
+
const fileName = `${ExecuteBatch_1.snapshot.endsWith(path_1.sep)
|
|
659
|
+
? ExecuteBatch_1.snapshot
|
|
660
|
+
: ExecuteBatch_1.snapshot + path_1.sep}${workflowData.id}-snapshot.json`;
|
|
605
661
|
fs_1.default.writeFileSync(fileName, serializedData);
|
|
606
662
|
}
|
|
607
663
|
}
|
|
@@ -620,60 +676,28 @@ class ExecuteBatch extends base_command_1.BaseCommand {
|
|
|
620
676
|
resolve(executionResult);
|
|
621
677
|
});
|
|
622
678
|
}
|
|
623
|
-
}
|
|
679
|
+
};
|
|
624
680
|
exports.ExecuteBatch = ExecuteBatch;
|
|
625
|
-
ExecuteBatch.description = '\nExecutes multiple workflows once';
|
|
626
681
|
ExecuteBatch.cancelled = false;
|
|
627
682
|
ExecuteBatch.shallow = false;
|
|
628
683
|
ExecuteBatch.concurrency = 1;
|
|
629
684
|
ExecuteBatch.githubWorkflow = false;
|
|
630
685
|
ExecuteBatch.debug = false;
|
|
631
686
|
ExecuteBatch.executionTimeout = 3 * 60 * 1000;
|
|
632
|
-
ExecuteBatch.examples = [
|
|
633
|
-
'$ n8n executeBatch',
|
|
634
|
-
'$ n8n executeBatch --concurrency=10 --skipList=/data/skipList.json',
|
|
635
|
-
'$ n8n executeBatch --debug --output=/data/output.json',
|
|
636
|
-
'$ n8n executeBatch --ids=10,13,15 --shortOutput',
|
|
637
|
-
'$ n8n executeBatch --snapshot=/data/snapshots --shallow',
|
|
638
|
-
'$ n8n executeBatch --compare=/data/previousExecutionData --retries=2',
|
|
639
|
-
];
|
|
640
|
-
ExecuteBatch.flags = {
|
|
641
|
-
help: core_1.Flags.help({ char: 'h' }),
|
|
642
|
-
debug: core_1.Flags.boolean({
|
|
643
|
-
description: 'Toggles on displaying all errors and debug messages.',
|
|
644
|
-
}),
|
|
645
|
-
ids: core_1.Flags.string({
|
|
646
|
-
description: 'Specifies workflow IDs to get executed, separated by a comma or a file containing the ids',
|
|
647
|
-
}),
|
|
648
|
-
concurrency: core_1.Flags.integer({
|
|
649
|
-
default: 1,
|
|
650
|
-
description: 'How many workflows can run in parallel. Defaults to 1 which means no concurrency.',
|
|
651
|
-
}),
|
|
652
|
-
output: core_1.Flags.string({
|
|
653
|
-
description: 'Enable execution saving, You must inform an existing folder to save execution via this param',
|
|
654
|
-
}),
|
|
655
|
-
snapshot: core_1.Flags.string({
|
|
656
|
-
description: 'Enables snapshot saving. You must inform an existing folder to save snapshots via this param.',
|
|
657
|
-
}),
|
|
658
|
-
compare: core_1.Flags.string({
|
|
659
|
-
description: 'Compares current execution with an existing snapshot. You must inform an existing folder where the snapshots are saved.',
|
|
660
|
-
}),
|
|
661
|
-
shallow: core_1.Flags.boolean({
|
|
662
|
-
description: 'Compares only if attributes output from node are the same, with no regards to nested JSON objects.',
|
|
663
|
-
}),
|
|
664
|
-
githubWorkflow: core_1.Flags.boolean({
|
|
665
|
-
description: 'Enables more lenient comparison for GitHub workflows. This is useful for reducing false positives when comparing Test workflows.',
|
|
666
|
-
}),
|
|
667
|
-
skipList: core_1.Flags.string({
|
|
668
|
-
description: 'File containing a comma separated list of workflow IDs to skip.',
|
|
669
|
-
}),
|
|
670
|
-
retries: core_1.Flags.integer({
|
|
671
|
-
description: 'Retries failed workflows up to N tries. Default is 1. Set 0 to disable.',
|
|
672
|
-
default: 1,
|
|
673
|
-
}),
|
|
674
|
-
shortOutput: core_1.Flags.boolean({
|
|
675
|
-
description: 'Omits the full execution information from output, displaying only summary.',
|
|
676
|
-
}),
|
|
677
|
-
};
|
|
678
687
|
ExecuteBatch.aliases = ['executeBatch'];
|
|
688
|
+
exports.ExecuteBatch = ExecuteBatch = ExecuteBatch_1 = __decorate([
|
|
689
|
+
(0, decorators_1.Command)({
|
|
690
|
+
name: 'execute-batch',
|
|
691
|
+
description: 'Executes multiple workflows once',
|
|
692
|
+
examples: [
|
|
693
|
+
'',
|
|
694
|
+
'--concurrency=10 --skipList=/data/skipList.json',
|
|
695
|
+
'--debug --output=/data/output.json',
|
|
696
|
+
'--ids=10,13,15 --shortOutput',
|
|
697
|
+
'--snapshot=/data/snapshots --shallow',
|
|
698
|
+
'--compare=/data/previousExecutionData --retries=2',
|
|
699
|
+
],
|
|
700
|
+
flagsSchema,
|
|
701
|
+
})
|
|
702
|
+
], ExecuteBatch);
|
|
679
703
|
//# sourceMappingURL=execute-batch.js.map
|