n8n 1.15.2 → 1.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AbstractServer.js +3 -0
- package/dist/AbstractServer.js.map +1 -1
- package/dist/ActiveWorkflowRunner.d.ts +33 -11
- package/dist/ActiveWorkflowRunner.js +170 -131
- package/dist/ActiveWorkflowRunner.js.map +1 -1
- package/dist/CredentialsHelper.d.ts +2 -5
- package/dist/CredentialsHelper.js +1 -20
- package/dist/CredentialsHelper.js.map +1 -1
- package/dist/Interfaces.d.ts +24 -25
- package/dist/Interfaces.js.map +1 -1
- package/dist/License.js +9 -0
- package/dist/License.js.map +1 -1
- package/dist/LoadNodesAndCredentials.js +1 -1
- package/dist/LoadNodesAndCredentials.js.map +1 -1
- package/dist/Server.js +8 -146
- package/dist/Server.js.map +1 -1
- package/dist/auth/jwt.d.ts +1 -0
- package/dist/auth/jwt.js +6 -4
- package/dist/auth/jwt.js.map +1 -1
- package/dist/build.tsbuildinfo +1 -1
- package/dist/collaboration/collaboration.message.d.ts +11 -0
- package/dist/collaboration/collaboration.message.js +15 -0
- package/dist/collaboration/collaboration.message.js.map +1 -0
- package/dist/collaboration/collaboration.service.d.ts +15 -0
- package/dist/collaboration/collaboration.service.js +85 -0
- package/dist/collaboration/collaboration.service.js.map +1 -0
- package/dist/collaboration/collaboration.state.d.ts +13 -0
- package/dist/collaboration/collaboration.state.js +52 -0
- package/dist/collaboration/collaboration.state.js.map +1 -0
- package/dist/commands/BaseCommand.js +10 -0
- package/dist/commands/BaseCommand.js.map +1 -1
- package/dist/commands/start.d.ts +1 -0
- package/dist/commands/start.js +24 -7
- package/dist/commands/start.js.map +1 -1
- package/dist/config/index.d.ts +1 -0
- package/dist/config/index.js +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/schema.d.ts +6 -0
- package/dist/config/schema.js +6 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/constants.d.ts +0 -1
- package/dist/constants.js +1 -4
- package/dist/constants.js.map +1 -1
- package/dist/controllers/communityPackages.controller.js +5 -5
- package/dist/controllers/communityPackages.controller.js.map +1 -1
- package/dist/controllers/index.d.ts +2 -0
- package/dist/controllers/index.js +5 -1
- package/dist/controllers/index.js.map +1 -1
- package/dist/controllers/oauth/abstractOAuth.controller.d.ts +25 -0
- package/dist/controllers/oauth/abstractOAuth.controller.js +104 -0
- package/dist/controllers/oauth/abstractOAuth.controller.js.map +1 -0
- package/dist/controllers/oauth/oAuth1Credential.controller.d.ts +8 -0
- package/dist/controllers/oauth/oAuth1Credential.controller.js +156 -0
- package/dist/controllers/oauth/oAuth1Credential.controller.js.map +1 -0
- package/dist/controllers/oauth/oAuth2Credential.controller.d.ts +12 -0
- package/dist/controllers/oauth/oAuth2Credential.controller.js +233 -0
- package/dist/controllers/oauth/oAuth2Credential.controller.js.map +1 -0
- package/dist/controllers/passwordReset.controller.d.ts +6 -6
- package/dist/controllers/passwordReset.controller.js +35 -63
- package/dist/controllers/passwordReset.controller.js.map +1 -1
- package/dist/controllers/users.controller.js +2 -8
- package/dist/controllers/users.controller.js.map +1 -1
- package/dist/databases/entities/WorkflowEntity.d.ts +1 -0
- package/dist/databases/entities/WorkflowEntity.js +3 -0
- package/dist/databases/entities/WorkflowEntity.js.map +1 -1
- package/dist/databases/repositories/execution.repository.d.ts +0 -10
- package/dist/databases/repositories/execution.repository.js +0 -99
- package/dist/databases/repositories/execution.repository.js.map +1 -1
- package/dist/databases/repositories/sharedCredentials.repository.d.ts +2 -0
- package/dist/databases/repositories/sharedCredentials.repository.js +12 -0
- package/dist/databases/repositories/sharedCredentials.repository.js.map +1 -1
- package/dist/databases/repositories/workflow.repository.d.ts +2 -0
- package/dist/databases/repositories/workflow.repository.js +12 -0
- package/dist/databases/repositories/workflow.repository.js.map +1 -1
- package/dist/databases/utils/migrationHelpers.js +2 -2
- package/dist/databases/utils/migrationHelpers.js.map +1 -1
- package/dist/decorators/Route.d.ts +1 -0
- package/dist/decorators/Route.js +2 -1
- package/dist/decorators/Route.js.map +1 -1
- package/dist/decorators/registerController.d.ts +2 -1
- package/dist/decorators/registerController.js +5 -3
- package/dist/decorators/registerController.js.map +1 -1
- package/dist/decorators/types.d.ts +1 -0
- package/dist/eventbus/MessageEventBus/recoverEvents.js +1 -1
- package/dist/eventbus/MessageEventBus/recoverEvents.js.map +1 -1
- package/dist/executionLifecycleHooks/toSaveSettings.js +13 -9
- package/dist/executionLifecycleHooks/toSaveSettings.js.map +1 -1
- package/dist/executions/executions.service.js +1 -1
- package/dist/executions/executions.service.js.map +1 -1
- package/dist/middlewares/auth.js +1 -3
- package/dist/middlewares/auth.js.map +1 -1
- package/dist/push/abstract.push.d.ts +12 -4
- package/dist/push/abstract.push.js +39 -12
- package/dist/push/abstract.push.js.map +1 -1
- package/dist/push/index.d.ts +5 -1
- package/dist/push/index.js +16 -5
- package/dist/push/index.js.map +1 -1
- package/dist/push/sse.push.d.ts +2 -1
- package/dist/push/sse.push.js +2 -2
- package/dist/push/sse.push.js.map +1 -1
- package/dist/push/types.d.ts +8 -0
- package/dist/push/websocket.push.d.ts +2 -1
- package/dist/push/websocket.push.js +17 -2
- package/dist/push/websocket.push.js.map +1 -1
- package/dist/requests.d.ts +3 -1
- package/dist/services/frontend.service.js +4 -2
- package/dist/services/frontend.service.js.map +1 -1
- package/dist/services/jwt.service.d.ts +1 -1
- package/dist/services/jwt.service.js.map +1 -1
- package/dist/services/orchestration/main/MultiMainInstance.publisher.ee.d.ts +2 -1
- package/dist/services/orchestration/main/MultiMainInstance.publisher.ee.js +6 -0
- package/dist/services/orchestration/main/MultiMainInstance.publisher.ee.js.map +1 -1
- package/dist/services/orchestration.base.service.d.ts +3 -1
- package/dist/services/orchestration.base.service.js +3 -1
- package/dist/services/orchestration.base.service.js.map +1 -1
- package/dist/services/pruning.service.d.ts +22 -0
- package/dist/services/pruning.service.js +179 -0
- package/dist/services/pruning.service.js.map +1 -0
- package/dist/services/user.service.d.ts +8 -2
- package/dist/services/user.service.js +45 -5
- package/dist/services/user.service.js.map +1 -1
- package/oclif.manifest.json +1 -1
- package/package.json +6 -5
- package/dist/credentials/oauth2Credential.api.d.ts +0 -1
- package/dist/credentials/oauth2Credential.api.js +0 -227
- package/dist/credentials/oauth2Credential.api.js.map +0 -1
- /package/templates/{oauth-callback.html → oauth-callback.handlebars} +0 -0
package/dist/AbstractServer.js
CHANGED
|
@@ -50,6 +50,9 @@ class AbstractServer {
|
|
|
50
50
|
this.testWebhooksEnabled = false;
|
|
51
51
|
this.app = (0, express_1.default)();
|
|
52
52
|
this.app.disable('x-powered-by');
|
|
53
|
+
const proxyHops = config_1.default.getEnv('proxy_hops');
|
|
54
|
+
if (proxyHops > 0)
|
|
55
|
+
this.app.set('trust proxy', proxyHops);
|
|
53
56
|
this.protocol = config_1.default.getEnv('protocol');
|
|
54
57
|
this.sslKey = config_1.default.getEnv('ssl_key');
|
|
55
58
|
this.sslCert = config_1.default.getEnv('ssl_cert');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractServer.js","sourceRoot":"","sources":["../src/AbstractServer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAAmC;AACnC,0CAAuC;AAEvC,sDAA8B;AAC9B,8DAAsC;AACtC,kDAA0B;AAE1B,sDAA8B;AAC9B,2CAAiE;AACjE,iEAA8D;AAC9D,yCAA2B;AAG3B,mDAAgD;AAChD,qDAAoF;AACpF,+CAA0E;AAC1E,iDAA8C;AAC9C,uDAAoD;AACpD,qDAAyD;AACzD,6DAAsE;AACtE,qCAAkC;AAElC,MAAsB,cAAc;IA+BnC,YAAY,eAAgC,MAAM;QANxC,oBAAe,GAAG,IAAI,CAAC;QAEvB,wBAAmB,GAAG,KAAK,CAAC;QAKrC,IAAI,CAAC,GAAG,GAAG,IAAA,iBAAO,GAAE,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAEjC,IAAI,CAAC,QAAQ,GAAG,gBAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,gBAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,GAAG,gBAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAEzC,IAAI,CAAC,YAAY,GAAG,gBAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACpD,IAAI,CAAC,eAAe,GAAG,gBAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAC1D,IAAI,CAAC,mBAAmB,GAAG,gBAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAClE,IAAI,CAAC,sBAAsB,GAAG,gBAAM,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAExE,IAAI,CAAC,gBAAgB,GAAG,IAAA,mCAAsB,EAAC,YAAY,CAAC,CAAC;QAE7D,IAAI,CAAC,MAAM,GAAG,kBAAS,CAAC,GAAG,CAAC,eAAM,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,SAAS;IAEf,CAAC;IAEO,KAAK,CAAC,kBAAkB;QAC/B,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAGrB,MAAM,EACL,QAAQ,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,GAC1C,GAAG,wDAAa,cAAc,GAAC,CAAC;QACjC,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC;QAC1B,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;IACzB,CAAC;IAEO,sBAAsB;QAE7B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAA,qBAAW,GAAE,CAAC,CAAC;QAG5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,2BAAa,CAAC,CAAC;IAC7B,CAAC;IAEO,mBAAmB;QAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,4BAAc,CAAC,CAAC;IAC9B,CAAC;IAES,eAAe,KAAI,CAAC;IAEtB,KAAK,CAAC,gBAAgB;QAE7B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YAC3C,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAC/B,IAAI,eAAe,CAAC,SAAS,EAAE;gBAC9B,IAAI,eAAe,CAAC,QAAQ;oBAAE,IAAI,EAAE,CAAC;;oBAChC,GAAG,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;aACjD;;gBAAM,IAAA,kCAAiB,EAAC,GAAG,EAAE,IAAI,wCAAuB,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI;QACT,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAEhD,IAAI,QAAQ,KAAK,OAAO,IAAI,MAAM,IAAI,OAAO,EAAE;YAC9C,MAAM,KAAK,GAAG,wDAAa,OAAO,GAAC,CAAC;YACpC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,YAAY,CAC/B;gBACC,GAAG,EAAE,MAAM,IAAA,mBAAQ,EAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;gBACxC,IAAI,EAAE,MAAM,IAAA,mBAAQ,EAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;aAC1C,EACD,GAAG,CACH,CAAC;SACF;aAAM;YACN,MAAM,IAAI,GAAG,wDAAa,MAAM,GAAC,CAAC;YAClC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;SACrC;QAED,MAAM,IAAI,GAAG,gBAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,gBAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAEhD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAA+B,EAAE,EAAE;YAC3D,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE;gBAChC,OAAO,CAAC,GAAG,CACV,cAAc,IAAI,0EAA0E,CAC5F,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAChB;QACF,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAEzF,IAAI,CAAC,aAAa,GAAG,kBAAS,CAAC,GAAG,CAAC,6BAAa,CAAC,CAAC;QAClD,IAAI,CAAC,oBAAoB,GAAG,kBAAS,CAAC,GAAG,CAAC,2CAAoB,CAAC,CAAC;QAEhE,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE9B,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,UAAU,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,KAAK;QACV,IAAI,CAAC,kBAAM,EAAE;YACZ,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAChC,IAAI,CAAC,eAAe,EAAE,CAAC;SACvB;QAED,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAG9B,IAAI,IAAI,CAAC,eAAe,EAAE;YAEzB,IAAI,CAAC,GAAG,CAAC,GAAG,CACX,IAAI,IAAI,CAAC,eAAe,WAAW,EACnC,IAAA,sCAAqB,EAAC,kBAAS,CAAC,GAAG,CAAC,2CAAoB,CAAC,CAAC,CAC1D,CAAC;YAGF,IAAI,CAAC,GAAG,CAAC,GAAG,CACX,IAAI,IAAI,CAAC,sBAAsB,iBAAiB,EAChD,IAAA,sCAAqB,EAAC,kBAAS,CAAC,GAAG,CAAC,iCAAe,CAAC,CAAC,CACrD,CAAC;SACF;QAED,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC7B,MAAM,YAAY,GAAG,kBAAS,CAAC,GAAG,CAAC,2BAAY,CAAC,CAAC;YAGjD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,mBAAmB,WAAW,EAAE,IAAA,sCAAqB,EAAC,YAAY,CAAC,CAAC,CAAC;YAI3F,IAAI,CAAC,GAAG,CAAC,MAAM,CACd,IAAI,IAAI,CAAC,YAAY,mBAAmB,EACxC,IAAA,qBAAI,EAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAClE,CAAC;SACF;QAGD,MAAM,UAAU,GAAG,eAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAC/B,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC5C,IAAI,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE;gBACvC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,SAAS,SAAS,GAAG,CAAC,CAAC;gBACxE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;aACtB;;gBAAM,IAAI,EAAE,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,IAAI,yBAAa,EAAE;YAClB,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC3B;QAGD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,wBAAU,CAAC,CAAC;QAEzB,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QAEvB,IAAI,CAAC,kBAAM,EAAE;YACZ,OAAO,CAAC,GAAG,CAAC,YAAY,uBAAW,EAAE,CAAC,CAAC;YAEvC,MAAM,aAAa,GAAG,gBAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;YACrD,IAAI,aAAa,KAAK,IAAI,EAAE;gBAC3B,OAAO,CAAC,GAAG,CAAC,WAAW,aAAa,EAAE,CAAC,CAAC;aACxC;YAED,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,gBAAM,CAAC,CAAC,CAAC;SAC1D;IACF,CAAC;CACD;
|
|
1
|
+
{"version":3,"file":"AbstractServer.js","sourceRoot":"","sources":["../src/AbstractServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,39 +1,61 @@
|
|
|
1
|
+
import { ActiveWorkflows } from 'n8n-core';
|
|
1
2
|
import type { ExecutionError, IDeferredPromise, IExecuteResponsePromiseData, IGetExecutePollFunctions, IGetExecuteTriggerFunctions, INode, INodeExecutionData, IWorkflowBase, IWorkflowExecuteAdditionalData as IWorkflowExecuteAdditionalDataWorkflow, WorkflowActivateMode, WorkflowExecuteMode } from 'n8n-workflow';
|
|
2
3
|
import { Workflow } from 'n8n-workflow';
|
|
3
4
|
import type express from 'express';
|
|
4
|
-
import type {
|
|
5
|
+
import type { IResponseCallbackData, IWebhookManager, IWorkflowDb, WebhookRequest } from './Interfaces';
|
|
5
6
|
import type { User } from './databases/entities/User';
|
|
7
|
+
import type { WorkflowEntity } from './databases/entities/WorkflowEntity';
|
|
6
8
|
import { ActiveExecutions } from './ActiveExecutions';
|
|
7
9
|
import { NodeTypes } from './NodeTypes';
|
|
8
10
|
import { ExternalHooks } from './ExternalHooks';
|
|
9
11
|
import { WebhookService } from './services/webhook.service';
|
|
10
12
|
import { Logger } from './Logger';
|
|
13
|
+
import { WorkflowRepository } from './databases/repositories';
|
|
14
|
+
import type { MultiMainInstancePublisher } from './services/orchestration/main/MultiMainInstance.publisher.ee';
|
|
11
15
|
export declare class ActiveWorkflowRunner implements IWebhookManager {
|
|
12
16
|
private readonly logger;
|
|
13
17
|
private readonly activeExecutions;
|
|
14
18
|
private readonly externalHooks;
|
|
15
19
|
private readonly nodeTypes;
|
|
16
20
|
private readonly webhookService;
|
|
17
|
-
private
|
|
21
|
+
private readonly workflowRepository;
|
|
22
|
+
activeWorkflows: ActiveWorkflows;
|
|
18
23
|
private activationErrors;
|
|
19
|
-
private
|
|
20
|
-
|
|
24
|
+
private queuedActivations;
|
|
25
|
+
isMultiMainScenario: boolean;
|
|
26
|
+
multiMainInstancePublisher: MultiMainInstancePublisher | undefined;
|
|
27
|
+
constructor(logger: Logger, activeExecutions: ActiveExecutions, externalHooks: ExternalHooks, nodeTypes: NodeTypes, webhookService: WebhookService, workflowRepository: WorkflowRepository);
|
|
21
28
|
init(): Promise<void>;
|
|
22
29
|
removeAll(): Promise<void>;
|
|
23
30
|
executeWebhook(request: WebhookRequest, response: express.Response): Promise<IResponseCallbackData>;
|
|
24
31
|
getWebhookMethods(path: string): Promise<import("n8n-workflow").IHttpRequestMethods[]>;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
32
|
+
allActiveInMemory(): string[];
|
|
33
|
+
allActiveInStorage(user?: User): Promise<string[]>;
|
|
34
|
+
isActive(workflowId: string): Promise<boolean>;
|
|
35
|
+
getActivationError(workflowId: string): {
|
|
36
|
+
time: number;
|
|
37
|
+
error: {
|
|
38
|
+
message: string;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
addWebhooks(workflow: Workflow, additionalData: IWorkflowExecuteAdditionalDataWorkflow, mode: WorkflowExecuteMode, activation: WorkflowActivateMode): Promise<void>;
|
|
42
|
+
clearWebhooks(workflowId: string): Promise<void>;
|
|
30
43
|
runWorkflow(workflowData: IWorkflowDb, node: INode, data: INodeExecutionData[][], additionalData: IWorkflowExecuteAdditionalDataWorkflow, mode: WorkflowExecuteMode, responsePromise?: IDeferredPromise<IExecuteResponsePromiseData>): Promise<string>;
|
|
31
44
|
getExecutePollFunctions(workflowData: IWorkflowDb, additionalData: IWorkflowExecuteAdditionalDataWorkflow, mode: WorkflowExecuteMode, activation: WorkflowActivateMode): IGetExecutePollFunctions;
|
|
32
45
|
getExecuteTriggerFunctions(workflowData: IWorkflowDb, additionalData: IWorkflowExecuteAdditionalDataWorkflow, mode: WorkflowExecuteMode, activation: WorkflowActivateMode): IGetExecuteTriggerFunctions;
|
|
33
46
|
executeErrorWorkflow(error: ExecutionError, workflowData: IWorkflowBase, mode: WorkflowExecuteMode): void;
|
|
34
|
-
|
|
35
|
-
|
|
47
|
+
addActiveWorkflows(activationMode: WorkflowActivateMode): Promise<void>;
|
|
48
|
+
addAllTriggerAndPollerBasedWorkflows(): Promise<void>;
|
|
49
|
+
removeAllTriggerAndPollerBasedWorkflows(): Promise<void>;
|
|
50
|
+
add(workflowId: string, activationMode: WorkflowActivateMode, existingWorkflow?: WorkflowEntity): Promise<void>;
|
|
51
|
+
private countTriggers;
|
|
52
|
+
addQueuedWorkflowActivation(activationMode: WorkflowActivateMode, workflowData: WorkflowEntity): void;
|
|
36
53
|
removeQueuedWorkflowActivation(workflowId: string): void;
|
|
37
54
|
removeAllQueuedWorkflowActivations(): void;
|
|
38
55
|
remove(workflowId: string): Promise<void>;
|
|
56
|
+
addTriggersAndPollers(dbWorkflow: WorkflowEntity, workflow: Workflow, { activationMode, executionMode, additionalData, }: {
|
|
57
|
+
activationMode: WorkflowActivateMode;
|
|
58
|
+
executionMode: WorkflowExecuteMode;
|
|
59
|
+
additionalData: IWorkflowExecuteAdditionalDataWorkflow;
|
|
60
|
+
}): Promise<void>;
|
|
39
61
|
}
|
|
@@ -31,9 +31,12 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
31
31
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
32
32
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
33
33
|
};
|
|
34
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
|
+
};
|
|
34
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
38
|
exports.ActiveWorkflowRunner = void 0;
|
|
36
|
-
const typedi_1 = require("typedi");
|
|
39
|
+
const typedi_1 = __importStar(require("typedi"));
|
|
37
40
|
const n8n_core_1 = require("n8n-core");
|
|
38
41
|
const n8n_workflow_1 = require("n8n-workflow");
|
|
39
42
|
const Db = __importStar(require("./Db"));
|
|
@@ -52,57 +55,29 @@ const utils_1 = require("./utils");
|
|
|
52
55
|
const typeorm_1 = require("typeorm");
|
|
53
56
|
const webhook_service_1 = require("./services/webhook.service");
|
|
54
57
|
const Logger_1 = require("./Logger");
|
|
58
|
+
const repositories_1 = require("./databases/repositories");
|
|
59
|
+
const config_1 = __importDefault(require("./config"));
|
|
55
60
|
const WEBHOOK_PROD_UNREGISTERED_HINT = "The workflow must be active for a production URL to run successfully. You can activate the workflow using the toggle in the top-right of the editor. Note that unlike test URL calls, production URL calls aren't shown on the canvas (only in the executions list)";
|
|
56
61
|
let ActiveWorkflowRunner = class ActiveWorkflowRunner {
|
|
57
|
-
constructor(logger, activeExecutions, externalHooks, nodeTypes, webhookService) {
|
|
62
|
+
constructor(logger, activeExecutions, externalHooks, nodeTypes, webhookService, workflowRepository) {
|
|
58
63
|
this.logger = logger;
|
|
59
64
|
this.activeExecutions = activeExecutions;
|
|
60
65
|
this.externalHooks = externalHooks;
|
|
61
66
|
this.nodeTypes = nodeTypes;
|
|
62
67
|
this.webhookService = webhookService;
|
|
68
|
+
this.workflowRepository = workflowRepository;
|
|
63
69
|
this.activeWorkflows = new n8n_core_1.ActiveWorkflows();
|
|
64
70
|
this.activationErrors = {};
|
|
65
|
-
this.
|
|
71
|
+
this.queuedActivations = {};
|
|
72
|
+
this.isMultiMainScenario = config_1.default.getEnv('executions.mode') === 'queue' && config_1.default.getEnv('leaderSelection.enabled');
|
|
66
73
|
}
|
|
67
74
|
async init() {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
if (workflowsData.length !== 0) {
|
|
73
|
-
this.logger.info(' ================================');
|
|
74
|
-
this.logger.info(' Start Active Workflows:');
|
|
75
|
-
this.logger.info(' ================================');
|
|
76
|
-
for (const workflowData of workflowsData) {
|
|
77
|
-
this.logger.info(` - ${workflowData.name} (ID: ${workflowData.id})`);
|
|
78
|
-
this.logger.debug(`Initializing active workflow "${workflowData.name}" (startup)`, {
|
|
79
|
-
workflowName: workflowData.name,
|
|
80
|
-
workflowId: workflowData.id,
|
|
81
|
-
});
|
|
82
|
-
try {
|
|
83
|
-
await this.add(workflowData.id, 'init', workflowData);
|
|
84
|
-
this.logger.verbose(`Successfully started workflow "${workflowData.name}"`, {
|
|
85
|
-
workflowName: workflowData.name,
|
|
86
|
-
workflowId: workflowData.id,
|
|
87
|
-
});
|
|
88
|
-
this.logger.info(' => Started');
|
|
89
|
-
}
|
|
90
|
-
catch (error) {
|
|
91
|
-
n8n_workflow_1.ErrorReporterProxy.error(error);
|
|
92
|
-
this.logger.info(' => ERROR: Workflow could not be activated on first try, keep on trying if not an auth issue');
|
|
93
|
-
this.logger.info(` ${error.message}`);
|
|
94
|
-
this.logger.error(`Issue on initial workflow activation try "${workflowData.name}" (startup)`, {
|
|
95
|
-
workflowName: workflowData.name,
|
|
96
|
-
workflowId: workflowData.id,
|
|
97
|
-
});
|
|
98
|
-
this.executeErrorWorkflow(error, workflowData, 'internal');
|
|
99
|
-
if (!error.message.includes('Authorization')) {
|
|
100
|
-
this.addQueuedWorkflowActivation('init', workflowData);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
this.logger.verbose('Finished initializing active workflows (startup)');
|
|
75
|
+
if (this.isMultiMainScenario) {
|
|
76
|
+
const { MultiMainInstancePublisher } = await Promise.resolve().then(() => __importStar(require('./services/orchestration/main/MultiMainInstance.publisher.ee')));
|
|
77
|
+
this.multiMainInstancePublisher = typedi_1.default.get(MultiMainInstancePublisher);
|
|
78
|
+
await this.multiMainInstancePublisher.init();
|
|
105
79
|
}
|
|
80
|
+
await this.addActiveWorkflows('init');
|
|
106
81
|
await this.externalHooks.run('activeWorkflows.initialized', []);
|
|
107
82
|
await this.webhookService.populateCache();
|
|
108
83
|
}
|
|
@@ -110,7 +85,7 @@ let ActiveWorkflowRunner = class ActiveWorkflowRunner {
|
|
|
110
85
|
let activeWorkflowIds = [];
|
|
111
86
|
this.logger.verbose('Call to remove all active workflows received (removeAll)');
|
|
112
87
|
activeWorkflowIds.push(...this.activeWorkflows.allActiveWorkflows());
|
|
113
|
-
const activeWorkflows = await this.
|
|
88
|
+
const activeWorkflows = await this.allActiveInStorage();
|
|
114
89
|
activeWorkflowIds = [...activeWorkflowIds, ...activeWorkflows];
|
|
115
90
|
activeWorkflowIds = Array.from(new Set(activeWorkflowIds));
|
|
116
91
|
const removePromises = [];
|
|
@@ -175,10 +150,13 @@ let ActiveWorkflowRunner = class ActiveWorkflowRunner {
|
|
|
175
150
|
async getWebhookMethods(path) {
|
|
176
151
|
return this.webhookService.getWebhookMethods(path);
|
|
177
152
|
}
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
153
|
+
allActiveInMemory() {
|
|
154
|
+
return this.activeWorkflows.allActiveWorkflows();
|
|
155
|
+
}
|
|
156
|
+
async allActiveInStorage(user) {
|
|
157
|
+
const isFullAccess = !user || user.globalRole.name === 'owner';
|
|
158
|
+
if (isFullAccess) {
|
|
159
|
+
const activeWorkflows = await this.workflowRepository.find({
|
|
182
160
|
select: ['id'],
|
|
183
161
|
where: { active: true },
|
|
184
162
|
});
|
|
@@ -186,40 +164,35 @@ let ActiveWorkflowRunner = class ActiveWorkflowRunner {
|
|
|
186
164
|
.map((workflow) => workflow.id)
|
|
187
165
|
.filter((workflowId) => !this.activationErrors[workflowId]);
|
|
188
166
|
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
.filter((workflowId) => !this.activationErrors[workflowId]);
|
|
207
|
-
}
|
|
167
|
+
const where = (0, UserManagementHelper_1.whereClause)({
|
|
168
|
+
user,
|
|
169
|
+
entityType: 'workflow',
|
|
170
|
+
});
|
|
171
|
+
const activeWorkflows = await this.workflowRepository.find({
|
|
172
|
+
select: ['id'],
|
|
173
|
+
where: { active: true },
|
|
174
|
+
});
|
|
175
|
+
const activeIds = activeWorkflows.map((workflow) => workflow.id);
|
|
176
|
+
Object.assign(where, { workflowId: (0, typeorm_1.In)(activeIds) });
|
|
177
|
+
const sharings = await Db.collections.SharedWorkflow.find({
|
|
178
|
+
select: ['workflowId'],
|
|
179
|
+
where,
|
|
180
|
+
});
|
|
181
|
+
return sharings
|
|
182
|
+
.map((sharing) => sharing.workflowId)
|
|
183
|
+
.filter((workflowId) => !this.activationErrors[workflowId]);
|
|
208
184
|
}
|
|
209
|
-
async isActive(
|
|
210
|
-
const workflow = await
|
|
185
|
+
async isActive(workflowId) {
|
|
186
|
+
const workflow = await this.workflowRepository.findOne({
|
|
211
187
|
select: ['active'],
|
|
212
|
-
where: { id },
|
|
188
|
+
where: { id: workflowId },
|
|
213
189
|
});
|
|
214
190
|
return !!(workflow === null || workflow === void 0 ? void 0 : workflow.active);
|
|
215
191
|
}
|
|
216
|
-
getActivationError(
|
|
217
|
-
|
|
218
|
-
return undefined;
|
|
219
|
-
}
|
|
220
|
-
return this.activationErrors[id];
|
|
192
|
+
getActivationError(workflowId) {
|
|
193
|
+
return this.activationErrors[workflowId];
|
|
221
194
|
}
|
|
222
|
-
async
|
|
195
|
+
async addWebhooks(workflow, additionalData, mode, activation) {
|
|
223
196
|
const webhooks = WebhookHelpers.getWorkflowWebhooks(workflow, additionalData, undefined, true);
|
|
224
197
|
let path = '';
|
|
225
198
|
for (const webhookData of webhooks) {
|
|
@@ -251,7 +224,7 @@ let ActiveWorkflowRunner = class ActiveWorkflowRunner {
|
|
|
251
224
|
continue;
|
|
252
225
|
}
|
|
253
226
|
try {
|
|
254
|
-
await this.
|
|
227
|
+
await this.clearWebhooks(workflow.id);
|
|
255
228
|
}
|
|
256
229
|
catch (error1) {
|
|
257
230
|
n8n_workflow_1.ErrorReporterProxy.error(error1);
|
|
@@ -269,7 +242,7 @@ let ActiveWorkflowRunner = class ActiveWorkflowRunner {
|
|
|
269
242
|
await this.webhookService.populateCache();
|
|
270
243
|
await workflows_services_1.WorkflowsService.saveStaticData(workflow);
|
|
271
244
|
}
|
|
272
|
-
async
|
|
245
|
+
async clearWebhooks(workflowId) {
|
|
273
246
|
const workflowData = await Db.collections.Workflow.findOne({
|
|
274
247
|
where: { id: workflowId },
|
|
275
248
|
relations: ['shared', 'shared.user', 'shared.user.globalRole'],
|
|
@@ -410,62 +383,110 @@ let ActiveWorkflowRunner = class ActiveWorkflowRunner {
|
|
|
410
383
|
};
|
|
411
384
|
WorkflowExecuteAdditionalData.executeErrorWorkflow(workflowData, fullRunData, mode);
|
|
412
385
|
}
|
|
413
|
-
async
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
386
|
+
async addActiveWorkflows(activationMode) {
|
|
387
|
+
const dbWorkflows = await this.workflowRepository.getAllActive();
|
|
388
|
+
if (dbWorkflows.length === 0)
|
|
389
|
+
return;
|
|
390
|
+
this.logger.info(' ================================');
|
|
391
|
+
this.logger.info(' Start Active Workflows:');
|
|
392
|
+
this.logger.info(' ================================');
|
|
393
|
+
for (const dbWorkflow of dbWorkflows) {
|
|
394
|
+
this.logger.info(` - ${dbWorkflow.display()}`);
|
|
395
|
+
this.logger.debug(`Initializing active workflow ${dbWorkflow.display()} (startup)`, {
|
|
396
|
+
workflowName: dbWorkflow.name,
|
|
397
|
+
workflowId: dbWorkflow.id,
|
|
398
|
+
});
|
|
399
|
+
try {
|
|
400
|
+
await this.add(dbWorkflow.id, activationMode, dbWorkflow);
|
|
401
|
+
this.logger.verbose(`Successfully started workflow ${dbWorkflow.display()}`, {
|
|
402
|
+
workflowName: dbWorkflow.name,
|
|
403
|
+
workflowId: dbWorkflow.id,
|
|
404
|
+
});
|
|
405
|
+
this.logger.info(' => Started');
|
|
421
406
|
}
|
|
422
|
-
|
|
423
|
-
|
|
407
|
+
catch (error) {
|
|
408
|
+
n8n_workflow_1.ErrorReporterProxy.error(error);
|
|
409
|
+
this.logger.info(' => ERROR: Workflow could not be activated on first try, keep on trying if not an auth issue');
|
|
410
|
+
this.logger.info(` ${error.message}`);
|
|
411
|
+
this.logger.error(`Issue on initial workflow activation try of ${dbWorkflow.display()} (startup)`, {
|
|
412
|
+
workflowName: dbWorkflow.name,
|
|
413
|
+
workflowId: dbWorkflow.id,
|
|
414
|
+
});
|
|
415
|
+
this.executeErrorWorkflow(error, dbWorkflow, 'internal');
|
|
416
|
+
if (error.message.includes('Authorization'))
|
|
417
|
+
continue;
|
|
418
|
+
this.addQueuedWorkflowActivation('init', dbWorkflow);
|
|
424
419
|
}
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
420
|
+
}
|
|
421
|
+
this.logger.verbose('Finished activating workflows (startup)');
|
|
422
|
+
}
|
|
423
|
+
async addAllTriggerAndPollerBasedWorkflows() {
|
|
424
|
+
this.logger.debug('[Leadership change] Adding all trigger- and poller-based workflows...');
|
|
425
|
+
await this.addActiveWorkflows('leadershipChange');
|
|
426
|
+
}
|
|
427
|
+
async removeAllTriggerAndPollerBasedWorkflows() {
|
|
428
|
+
this.logger.debug('[Leadership change] Removing all trigger- and poller-based workflows...');
|
|
429
|
+
await this.activeWorkflows.removeAllTriggerAndPollerBasedWorkflows();
|
|
430
|
+
}
|
|
431
|
+
async add(workflowId, activationMode, existingWorkflow) {
|
|
432
|
+
var _a, _b, _c, _d;
|
|
433
|
+
let workflow;
|
|
434
|
+
let shouldAddWebhooks = true;
|
|
435
|
+
let shouldAddTriggersAndPollers = true;
|
|
436
|
+
if (this.isMultiMainScenario && activationMode !== 'leadershipChange') {
|
|
437
|
+
shouldAddWebhooks = (_b = (_a = this.multiMainInstancePublisher) === null || _a === void 0 ? void 0 : _a.isLeader) !== null && _b !== void 0 ? _b : false;
|
|
438
|
+
shouldAddTriggersAndPollers = (_d = (_c = this.multiMainInstancePublisher) === null || _c === void 0 ? void 0 : _c.isLeader) !== null && _d !== void 0 ? _d : false;
|
|
439
|
+
}
|
|
440
|
+
if (this.isMultiMainScenario && activationMode === 'leadershipChange') {
|
|
441
|
+
shouldAddWebhooks = false;
|
|
442
|
+
shouldAddTriggersAndPollers = true;
|
|
443
|
+
}
|
|
444
|
+
try {
|
|
445
|
+
const dbWorkflow = existingWorkflow !== null && existingWorkflow !== void 0 ? existingWorkflow : (await this.workflowRepository.findById(workflowId));
|
|
446
|
+
if (!dbWorkflow) {
|
|
447
|
+
throw new n8n_workflow_1.WorkflowActivationError(`Failed to find workflow with ID "${workflowId}"`);
|
|
448
|
+
}
|
|
449
|
+
workflow = new n8n_workflow_1.Workflow({
|
|
450
|
+
id: dbWorkflow.id,
|
|
451
|
+
name: dbWorkflow.name,
|
|
452
|
+
nodes: dbWorkflow.nodes,
|
|
453
|
+
connections: dbWorkflow.connections,
|
|
454
|
+
active: dbWorkflow.active,
|
|
431
455
|
nodeTypes: this.nodeTypes,
|
|
432
|
-
staticData:
|
|
433
|
-
settings:
|
|
456
|
+
staticData: dbWorkflow.staticData,
|
|
457
|
+
settings: dbWorkflow.settings,
|
|
434
458
|
});
|
|
435
|
-
const canBeActivated =
|
|
459
|
+
const canBeActivated = workflow.checkIfWorkflowCanBeActivated(constants_1.STARTING_NODES);
|
|
436
460
|
if (!canBeActivated) {
|
|
437
|
-
|
|
438
|
-
throw new Error('The workflow can not be activated because it does not contain any nodes which could start the workflow. Only workflows which have trigger or webhook nodes can be activated.');
|
|
461
|
+
throw new n8n_workflow_1.WorkflowActivationError(`Workflow ${dbWorkflow.display()} has no node to start the workflow - at least one trigger, poller or webhook node is required`);
|
|
439
462
|
}
|
|
440
|
-
const
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
throw new Error('Workflow cannot be activated because it has no owner');
|
|
463
|
+
const sharing = dbWorkflow.shared.find((shared) => shared.role.name === 'owner');
|
|
464
|
+
if (!sharing) {
|
|
465
|
+
throw new n8n_workflow_1.WorkflowActivationError(`Workflow ${dbWorkflow.display()} has no owner`);
|
|
444
466
|
}
|
|
445
|
-
const additionalData = await WorkflowExecuteAdditionalData.getBase(
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
467
|
+
const additionalData = await WorkflowExecuteAdditionalData.getBase(sharing.user.id);
|
|
468
|
+
if (shouldAddWebhooks) {
|
|
469
|
+
this.logger.debug('============');
|
|
470
|
+
this.logger.debug(`Adding webhooks for workflow "${dbWorkflow.display()}"`);
|
|
471
|
+
this.logger.debug('============');
|
|
472
|
+
await this.addWebhooks(workflow, additionalData, 'trigger', activationMode);
|
|
473
|
+
}
|
|
474
|
+
if (shouldAddTriggersAndPollers) {
|
|
475
|
+
this.logger.debug('============');
|
|
476
|
+
this.logger.debug(`Adding triggers and pollers for workflow "${dbWorkflow.display()}"`);
|
|
477
|
+
this.logger.debug('============');
|
|
478
|
+
await this.addTriggersAndPollers(dbWorkflow, workflow, {
|
|
479
|
+
activationMode,
|
|
480
|
+
executionMode: 'trigger',
|
|
481
|
+
additionalData,
|
|
455
482
|
});
|
|
456
483
|
}
|
|
457
484
|
this.removeQueuedWorkflowActivation(workflowId);
|
|
458
|
-
if (this.activationErrors[workflowId]
|
|
485
|
+
if (this.activationErrors[workflowId]) {
|
|
459
486
|
delete this.activationErrors[workflowId];
|
|
460
487
|
}
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
const triggerCount = workflowInstance.queryNodes(triggerFilter).length +
|
|
464
|
-
workflowInstance.getPollNodes().length +
|
|
465
|
-
WebhookHelpers.getWorkflowWebhooks(workflowInstance, additionalData, undefined, true)
|
|
466
|
-
.length;
|
|
467
|
-
await workflows_services_1.WorkflowsService.updateWorkflowTriggerCount(workflowInstance.id, triggerCount);
|
|
468
|
-
}
|
|
488
|
+
const triggerCount = this.countTriggers(workflow, additionalData);
|
|
489
|
+
await workflows_services_1.WorkflowsService.updateWorkflowTriggerCount(workflow.id, triggerCount);
|
|
469
490
|
}
|
|
470
491
|
catch (error) {
|
|
471
492
|
this.activationErrors[workflowId] = {
|
|
@@ -476,7 +497,13 @@ let ActiveWorkflowRunner = class ActiveWorkflowRunner {
|
|
|
476
497
|
};
|
|
477
498
|
throw error;
|
|
478
499
|
}
|
|
479
|
-
await workflows_services_1.WorkflowsService.saveStaticData(
|
|
500
|
+
await workflows_services_1.WorkflowsService.saveStaticData(workflow);
|
|
501
|
+
}
|
|
502
|
+
countTriggers(workflow, additionalData) {
|
|
503
|
+
const triggerFilter = (nodeType) => !!nodeType.trigger && !nodeType.description.name.includes('manualTrigger');
|
|
504
|
+
return (workflow.queryNodes(triggerFilter).length +
|
|
505
|
+
workflow.getPollNodes().length +
|
|
506
|
+
WebhookHelpers.getWorkflowWebhooks(workflow, additionalData, undefined, true).length);
|
|
480
507
|
}
|
|
481
508
|
addQueuedWorkflowActivation(activationMode, workflowData) {
|
|
482
509
|
const workflowId = workflowData.id;
|
|
@@ -491,7 +518,7 @@ let ActiveWorkflowRunner = class ActiveWorkflowRunner {
|
|
|
491
518
|
}
|
|
492
519
|
catch (error) {
|
|
493
520
|
n8n_workflow_1.ErrorReporterProxy.error(error);
|
|
494
|
-
let lastTimeout = this.
|
|
521
|
+
let lastTimeout = this.queuedActivations[workflowId].lastTimeout;
|
|
495
522
|
if (lastTimeout < constants_1.WORKFLOW_REACTIVATE_MAX_TIMEOUT) {
|
|
496
523
|
lastTimeout = Math.min(lastTimeout * 2, constants_1.WORKFLOW_REACTIVATE_MAX_TIMEOUT);
|
|
497
524
|
}
|
|
@@ -499,8 +526,8 @@ let ActiveWorkflowRunner = class ActiveWorkflowRunner {
|
|
|
499
526
|
workflowId,
|
|
500
527
|
workflowName,
|
|
501
528
|
});
|
|
502
|
-
this.
|
|
503
|
-
this.
|
|
529
|
+
this.queuedActivations[workflowId].lastTimeout = lastTimeout;
|
|
530
|
+
this.queuedActivations[workflowId].timeout = setTimeout(retryFunction, lastTimeout);
|
|
504
531
|
return;
|
|
505
532
|
}
|
|
506
533
|
this.logger.info(` -> Activation of workflow "${workflowName}" (${workflowId}) was successful!`, {
|
|
@@ -509,7 +536,7 @@ let ActiveWorkflowRunner = class ActiveWorkflowRunner {
|
|
|
509
536
|
});
|
|
510
537
|
};
|
|
511
538
|
this.removeQueuedWorkflowActivation(workflowId);
|
|
512
|
-
this.
|
|
539
|
+
this.queuedActivations[workflowId] = {
|
|
513
540
|
activationMode,
|
|
514
541
|
lastTimeout: constants_1.WORKFLOW_REACTIVATE_INITIAL_TIMEOUT,
|
|
515
542
|
timeout: setTimeout(retryFunction, constants_1.WORKFLOW_REACTIVATE_INITIAL_TIMEOUT),
|
|
@@ -517,19 +544,19 @@ let ActiveWorkflowRunner = class ActiveWorkflowRunner {
|
|
|
517
544
|
};
|
|
518
545
|
}
|
|
519
546
|
removeQueuedWorkflowActivation(workflowId) {
|
|
520
|
-
if (this.
|
|
521
|
-
clearTimeout(this.
|
|
522
|
-
delete this.
|
|
547
|
+
if (this.queuedActivations[workflowId]) {
|
|
548
|
+
clearTimeout(this.queuedActivations[workflowId].timeout);
|
|
549
|
+
delete this.queuedActivations[workflowId];
|
|
523
550
|
}
|
|
524
551
|
}
|
|
525
552
|
removeAllQueuedWorkflowActivations() {
|
|
526
|
-
for (const workflowId in this.
|
|
553
|
+
for (const workflowId in this.queuedActivations) {
|
|
527
554
|
this.removeQueuedWorkflowActivation(workflowId);
|
|
528
555
|
}
|
|
529
556
|
}
|
|
530
557
|
async remove(workflowId) {
|
|
531
558
|
try {
|
|
532
|
-
await this.
|
|
559
|
+
await this.clearWebhooks(workflowId);
|
|
533
560
|
}
|
|
534
561
|
catch (error) {
|
|
535
562
|
n8n_workflow_1.ErrorReporterProxy.error(error);
|
|
@@ -538,7 +565,7 @@ let ActiveWorkflowRunner = class ActiveWorkflowRunner {
|
|
|
538
565
|
if (this.activationErrors[workflowId] !== undefined) {
|
|
539
566
|
delete this.activationErrors[workflowId];
|
|
540
567
|
}
|
|
541
|
-
if (this.
|
|
568
|
+
if (this.queuedActivations[workflowId] !== undefined) {
|
|
542
569
|
this.removeQueuedWorkflowActivation(workflowId);
|
|
543
570
|
}
|
|
544
571
|
if (this.activeWorkflows.isActive(workflowId)) {
|
|
@@ -548,6 +575,17 @@ let ActiveWorkflowRunner = class ActiveWorkflowRunner {
|
|
|
548
575
|
}
|
|
549
576
|
}
|
|
550
577
|
}
|
|
578
|
+
async addTriggersAndPollers(dbWorkflow, workflow, { activationMode, executionMode, additionalData, }) {
|
|
579
|
+
const getTriggerFunctions = this.getExecuteTriggerFunctions(dbWorkflow, additionalData, executionMode, activationMode);
|
|
580
|
+
const getPollFunctions = this.getExecutePollFunctions(dbWorkflow, additionalData, executionMode, activationMode);
|
|
581
|
+
if (workflow.getTriggerNodes().length !== 0 || workflow.getPollNodes().length !== 0) {
|
|
582
|
+
await this.activeWorkflows.add(workflow.id, workflow, additionalData, executionMode, activationMode, getTriggerFunctions, getPollFunctions);
|
|
583
|
+
this.logger.verbose(`Workflow ${dbWorkflow.display()} activated`, {
|
|
584
|
+
workflowId: dbWorkflow.id,
|
|
585
|
+
workflowName: dbWorkflow.name,
|
|
586
|
+
});
|
|
587
|
+
}
|
|
588
|
+
}
|
|
551
589
|
};
|
|
552
590
|
exports.ActiveWorkflowRunner = ActiveWorkflowRunner;
|
|
553
591
|
exports.ActiveWorkflowRunner = ActiveWorkflowRunner = __decorate([
|
|
@@ -556,6 +594,7 @@ exports.ActiveWorkflowRunner = ActiveWorkflowRunner = __decorate([
|
|
|
556
594
|
ActiveExecutions_1.ActiveExecutions,
|
|
557
595
|
ExternalHooks_1.ExternalHooks,
|
|
558
596
|
NodeTypes_1.NodeTypes,
|
|
559
|
-
webhook_service_1.WebhookService
|
|
597
|
+
webhook_service_1.WebhookService,
|
|
598
|
+
repositories_1.WorkflowRepository])
|
|
560
599
|
], ActiveWorkflowRunner);
|
|
561
600
|
//# sourceMappingURL=ActiveWorkflowRunner.js.map
|