n8n 2.27.3 → 2.28.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/abstract-server.js +0 -4
- package/dist/abstract-server.js.map +1 -1
- package/dist/active-workflow-manager.js +4 -1
- package/dist/active-workflow-manager.js.map +1 -1
- package/dist/agent-library-bundle.js +7 -3
- package/dist/build.tsbuildinfo +1 -1
- package/dist/commands/audit.js +6 -0
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/base-command.d.ts +1 -0
- package/dist/commands/base-command.js +36 -2
- package/dist/commands/base-command.js.map +1 -1
- package/dist/commands/start.js +18 -9
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/worker.js +2 -0
- package/dist/commands/worker.js.map +1 -1
- package/dist/constants.d.ts +1 -0
- package/dist/constants.js +5 -1
- package/dist/constants.js.map +1 -1
- package/dist/controllers/api-keys.controller.d.ts +17 -0
- package/dist/controllers/api-keys.controller.js +19 -0
- package/dist/controllers/api-keys.controller.js.map +1 -1
- package/dist/controllers/e2e.controller.js +1 -0
- package/dist/controllers/e2e.controller.js.map +1 -1
- package/dist/controllers/telemetry.controller.d.ts +3 -1
- package/dist/controllers/telemetry.controller.js +17 -7
- package/dist/controllers/telemetry.controller.js.map +1 -1
- package/dist/controllers/users.controller.d.ts +1 -1
- package/dist/credentials/credentials.service.d.ts +5 -0
- package/dist/credentials/credentials.service.js +17 -3
- package/dist/credentials/credentials.service.js.map +1 -1
- package/dist/evaluation.ee/evaluation-config.controller.d.ts +7 -1
- package/dist/evaluation.ee/evaluation-config.controller.js +30 -1
- package/dist/evaluation.ee/evaluation-config.controller.js.map +1 -1
- package/dist/evaluation.ee/evaluation-dataset.service.d.ts +24 -0
- package/dist/evaluation.ee/evaluation-dataset.service.js +185 -0
- package/dist/evaluation.ee/evaluation-dataset.service.js.map +1 -0
- package/dist/evaluation.ee/llm-judge-provider-registry.js +2 -2
- package/dist/evaluation.ee/llm-judge-provider-registry.js.map +1 -1
- package/dist/evaluation.ee/test-runner/test-runner.service.ee.js +6 -6
- package/dist/evaluation.ee/test-runner/test-runner.service.ee.js.map +1 -1
- package/dist/evaluation.ee/test-runner/workflow-compiler.service.d.ts +2 -0
- package/dist/evaluation.ee/test-runner/workflow-compiler.service.js +27 -0
- package/dist/evaluation.ee/test-runner/workflow-compiler.service.js.map +1 -1
- package/dist/eventbus/event-message-classes/index.d.ts +2 -2
- package/dist/eventbus/event-message-classes/index.js +2 -0
- package/dist/eventbus/event-message-classes/index.js.map +1 -1
- package/dist/events/event.service.d.ts +2 -1
- package/dist/events/event.service.js.map +1 -1
- package/dist/events/maps/instance-ai.event-map.d.ts +15 -0
- package/dist/events/maps/instance-ai.event-map.js +3 -0
- package/dist/events/maps/instance-ai.event-map.js.map +1 -0
- package/dist/events/maps/relay.event-map.d.ts +8 -1
- package/dist/events/relays/log-streaming.event-relay.d.ts +2 -0
- package/dist/events/relays/log-streaming.event-relay.js +26 -0
- package/dist/events/relays/log-streaming.event-relay.js.map +1 -1
- package/dist/events/relays/telemetry.event-relay.d.ts +1 -0
- package/dist/events/relays/telemetry.event-relay.js +11 -0
- package/dist/events/relays/telemetry.event-relay.js.map +1 -1
- package/dist/execution-lifecycle/execution-lifecycle-hooks.js +1 -0
- package/dist/execution-lifecycle/execution-lifecycle-hooks.js.map +1 -1
- package/dist/execution-lifecycle/shared/shared-hook-functions.d.ts +2 -1
- package/dist/execution-lifecycle/shared/shared-hook-functions.js +8 -3
- package/dist/execution-lifecycle/shared/shared-hook-functions.js.map +1 -1
- package/dist/executions/execution-data/azure-store.ee.d.ts +15 -0
- package/dist/executions/execution-data/azure-store.ee.js +116 -0
- package/dist/executions/execution-data/azure-store.ee.js.map +1 -0
- package/dist/executions/execution-data/db-store.d.ts +7 -0
- package/dist/executions/execution-data/db-store.js +21 -0
- package/dist/executions/execution-data/db-store.js.map +1 -1
- package/dist/executions/execution-data/types.d.ts +3 -0
- package/dist/executions/execution-persistence.d.ts +17 -3
- package/dist/executions/execution-persistence.js +121 -18
- package/dist/executions/execution-persistence.js.map +1 -1
- package/dist/executions/execution.service.d.ts +3 -1
- package/dist/executions/execution.service.js +10 -4
- package/dist/executions/execution.service.js.map +1 -1
- package/dist/executions/sum-binary-data-bytes.d.ts +2 -0
- package/dist/executions/sum-binary-data-bytes.js +46 -0
- package/dist/executions/sum-binary-data-bytes.js.map +1 -0
- package/dist/interfaces.d.ts +22 -0
- package/dist/license/license.service.d.ts +3 -1
- package/dist/license/license.service.js +36 -51
- package/dist/license/license.service.js.map +1 -1
- package/dist/metrics/prometheus/execution-data-metrics.service.js +2 -1
- package/dist/metrics/prometheus/execution-data-metrics.service.js.map +1 -1
- package/dist/metrics/prometheus/instance-ai-metrics.service.d.ts +12 -0
- package/dist/metrics/prometheus/instance-ai-metrics.service.js +101 -0
- package/dist/metrics/prometheus/instance-ai-metrics.service.js.map +1 -0
- package/dist/metrics/prometheus/instance-role-metrics.service.js +2 -2
- package/dist/metrics/prometheus/instance-role-metrics.service.js.map +1 -1
- package/dist/metrics/prometheus/prometheus.service.d.ts +4 -1
- package/dist/metrics/prometheus/prometheus.service.js +11 -2
- package/dist/metrics/prometheus/prometheus.service.js.map +1 -1
- package/dist/metrics/prometheus/webhook-and-form-metrics.service.d.ts +23 -0
- package/dist/metrics/prometheus/webhook-and-form-metrics.service.js +72 -0
- package/dist/metrics/prometheus/webhook-and-form-metrics.service.js.map +1 -0
- package/dist/metrics/prometheus/workflow-info-metrics.service.d.ts +12 -0
- package/dist/metrics/prometheus/workflow-info-metrics.service.js +66 -0
- package/dist/metrics/prometheus/workflow-info-metrics.service.js.map +1 -0
- package/dist/middlewares/body-parser.js +2 -2
- package/dist/middlewares/body-parser.js.map +1 -1
- package/dist/middlewares/list-query/dtos/workflow.filter.dto.d.ts +2 -0
- package/dist/middlewares/list-query/dtos/workflow.filter.dto.js +12 -0
- package/dist/middlewares/list-query/dtos/workflow.filter.dto.js.map +1 -1
- package/dist/modules/agents/agent-execution.service.d.ts +8 -1
- package/dist/modules/agents/agent-execution.service.js +26 -2
- package/dist/modules/agents/agent-execution.service.js.map +1 -1
- package/dist/modules/agents/agent-knowledge-commands.d.ts +27 -0
- package/dist/modules/agents/agent-knowledge-commands.js +415 -0
- package/dist/modules/agents/agent-knowledge-commands.js.map +1 -0
- package/dist/modules/agents/agent-knowledge-gate.d.ts +2 -0
- package/dist/modules/agents/agent-knowledge-gate.js +9 -0
- package/dist/modules/agents/agent-knowledge-gate.js.map +1 -0
- package/dist/modules/agents/agent-knowledge-retrieval.d.ts +184 -0
- package/dist/modules/agents/agent-knowledge-retrieval.js +172 -0
- package/dist/modules/agents/agent-knowledge-retrieval.js.map +1 -0
- package/dist/modules/agents/agent-knowledge-sandbox.service.d.ts +40 -0
- package/dist/modules/agents/agent-knowledge-sandbox.service.js +591 -0
- package/dist/modules/agents/agent-knowledge-sandbox.service.js.map +1 -0
- package/dist/modules/agents/agent-knowledge-storage.d.ts +21 -0
- package/dist/modules/agents/agent-knowledge-storage.js +89 -0
- package/dist/modules/agents/agent-knowledge-storage.js.map +1 -0
- package/dist/modules/agents/agent-knowledge.service.d.ts +25 -5
- package/dist/modules/agents/agent-knowledge.service.js +230 -7
- package/dist/modules/agents/agent-knowledge.service.js.map +1 -1
- package/dist/modules/agents/agent-runtime-reconstruction.service.d.ts +8 -2
- package/dist/modules/agents/agent-runtime-reconstruction.service.js +49 -11
- package/dist/modules/agents/agent-runtime-reconstruction.service.js.map +1 -1
- package/dist/modules/agents/agent-sandbox.controller.d.ts +18 -0
- package/dist/modules/agents/agent-sandbox.controller.js +71 -0
- package/dist/modules/agents/agent-sandbox.controller.js.map +1 -0
- package/dist/modules/agents/agent-telemetry.d.ts +5 -0
- package/dist/modules/agents/agent-telemetry.js +60 -0
- package/dist/modules/agents/agent-telemetry.js.map +1 -0
- package/dist/modules/agents/agents.controller.d.ts +4 -4
- package/dist/modules/agents/agents.controller.js +24 -23
- package/dist/modules/agents/agents.controller.js.map +1 -1
- package/dist/modules/agents/agents.module.d.ts +1 -1
- package/dist/modules/agents/agents.module.js +7 -1
- package/dist/modules/agents/agents.module.js.map +1 -1
- package/dist/modules/agents/agents.service.d.ts +5 -2
- package/dist/modules/agents/agents.service.js +68 -15
- package/dist/modules/agents/agents.service.js.map +1 -1
- package/dist/modules/agents/builder/agents-builder-prompts.d.ts +1 -1
- package/dist/modules/agents/builder/agents-builder-prompts.js +7 -0
- package/dist/modules/agents/builder/agents-builder-prompts.js.map +1 -1
- package/dist/modules/agents/builder/agents-builder-settings.service.d.ts +12 -6
- package/dist/modules/agents/builder/agents-builder-settings.service.js +29 -12
- package/dist/modules/agents/builder/agents-builder-settings.service.js.map +1 -1
- package/dist/modules/agents/builder/agents-builder-tools.service.d.ts +12 -4
- package/dist/modules/agents/builder/agents-builder-tools.service.js +118 -14
- package/dist/modules/agents/builder/agents-builder-tools.service.js.map +1 -1
- package/dist/modules/agents/builder/agents-builder.service.d.ts +7 -0
- package/dist/modules/agents/builder/agents-builder.service.js +24 -6
- package/dist/modules/agents/builder/agents-builder.service.js.map +1 -1
- package/dist/modules/agents/builder/builder-tool-names.d.ts +1 -0
- package/dist/modules/agents/builder/builder-tool-names.js +1 -0
- package/dist/modules/agents/builder/builder-tool-names.js.map +1 -1
- package/dist/modules/agents/builder/from-ai-node-parameters.d.ts +7 -0
- package/dist/modules/agents/builder/from-ai-node-parameters.js +43 -0
- package/dist/modules/agents/builder/from-ai-node-parameters.js.map +1 -0
- package/dist/modules/agents/builder/get-resource-locator-options.tool.d.ts +10 -0
- package/dist/modules/agents/builder/get-resource-locator-options.tool.js +148 -0
- package/dist/modules/agents/builder/get-resource-locator-options.tool.js.map +1 -0
- package/dist/modules/agents/builder/prompts/tools.prompt.d.ts +1 -1
- package/dist/modules/agents/builder/prompts/tools.prompt.js +11 -0
- package/dist/modules/agents/builder/prompts/tools.prompt.js.map +1 -1
- package/dist/modules/agents/builder/skills/index.js +2 -0
- package/dist/modules/agents/builder/skills/index.js.map +1 -1
- package/dist/modules/agents/builder/skills/resource-locators.skill.d.ts +2 -0
- package/dist/modules/agents/builder/skills/resource-locators.skill.js +107 -0
- package/dist/modules/agents/builder/skills/resource-locators.skill.js.map +1 -0
- package/dist/modules/agents/builder/verify-mcp-server.tool.d.ts +2 -0
- package/dist/modules/agents/builder/verify-mcp-server.tool.js +1 -1
- package/dist/modules/agents/builder/verify-mcp-server.tool.js.map +1 -1
- package/dist/modules/agents/entities/agent-file.entity.d.ts +11 -0
- package/dist/modules/agents/entities/agent-file.entity.js +50 -0
- package/dist/modules/agents/entities/agent-file.entity.js.map +1 -0
- package/dist/modules/agents/execution-recorder.js +4 -7
- package/dist/modules/agents/execution-recorder.js.map +1 -1
- package/dist/modules/agents/integrations/agent-chat-bridge.d.ts +1 -1
- package/dist/modules/agents/integrations/agent-chat-bridge.js +7 -9
- package/dist/modules/agents/integrations/agent-chat-bridge.js.map +1 -1
- package/dist/modules/agents/integrations/agent-chat-integration.d.ts +7 -3
- package/dist/modules/agents/integrations/agent-chat-integration.js +5 -0
- package/dist/modules/agents/integrations/agent-chat-integration.js.map +1 -1
- package/dist/modules/agents/integrations/integration-action-executor.d.ts +704 -0
- package/dist/modules/agents/integrations/integration-action-executor.js +36 -22
- package/dist/modules/agents/integrations/integration-action-executor.js.map +1 -1
- package/dist/modules/agents/integrations/integration-context-query-executor.js +23 -4
- package/dist/modules/agents/integrations/integration-context-query-executor.js.map +1 -1
- package/dist/modules/agents/integrations/integration-helpers.d.ts +12 -1
- package/dist/modules/agents/integrations/integration-helpers.js +17 -8
- package/dist/modules/agents/integrations/integration-helpers.js.map +1 -1
- package/dist/modules/agents/integrations/integration-message-context.service.js +2 -4
- package/dist/modules/agents/integrations/integration-message-context.service.js.map +1 -1
- package/dist/modules/agents/integrations/integration-tools.d.ts +11 -3
- package/dist/modules/agents/integrations/integration-tools.js +19 -118
- package/dist/modules/agents/integrations/integration-tools.js.map +1 -1
- package/dist/modules/agents/integrations/platforms/linear-integration.d.ts +3 -1
- package/dist/modules/agents/integrations/platforms/linear-integration.js +22 -6
- package/dist/modules/agents/integrations/platforms/linear-integration.js.map +1 -1
- package/dist/modules/agents/integrations/platforms/linear-operations.js +19 -29
- package/dist/modules/agents/integrations/platforms/linear-operations.js.map +1 -1
- package/dist/modules/agents/integrations/platforms/n8n-chat-integration.d.ts +20 -0
- package/dist/modules/agents/integrations/platforms/n8n-chat-integration.js +99 -0
- package/dist/modules/agents/integrations/platforms/n8n-chat-integration.js.map +1 -0
- package/dist/modules/agents/integrations/platforms/slack-integration.d.ts +2 -1
- package/dist/modules/agents/integrations/platforms/slack-integration.js +5 -0
- package/dist/modules/agents/integrations/platforms/slack-integration.js.map +1 -1
- package/dist/modules/agents/integrations/platforms/slack-operations.js +3 -2
- package/dist/modules/agents/integrations/platforms/slack-operations.js.map +1 -1
- package/dist/modules/agents/integrations/platforms/telegram-integration.d.ts +11 -2
- package/dist/modules/agents/integrations/platforms/telegram-integration.js +43 -14
- package/dist/modules/agents/integrations/platforms/telegram-integration.js.map +1 -1
- package/dist/modules/agents/integrations/slack-app-setup.service.d.ts +3 -1
- package/dist/modules/agents/integrations/slack-app-setup.service.js +19 -11
- package/dist/modules/agents/integrations/slack-app-setup.service.js.map +1 -1
- package/dist/modules/agents/json-config/from-json-config.d.ts +2 -1
- package/dist/modules/agents/json-config/from-json-config.js +11 -1
- package/dist/modules/agents/json-config/from-json-config.js.map +1 -1
- package/dist/modules/agents/json-config/mcp-client-factory.d.ts +2 -0
- package/dist/modules/agents/json-config/mcp-client-factory.js +2 -2
- package/dist/modules/agents/json-config/mcp-client-factory.js.map +1 -1
- package/dist/modules/agents/repositories/agent-file.repository.d.ts +8 -0
- package/dist/modules/agents/repositories/agent-file.repository.js +38 -0
- package/dist/modules/agents/repositories/agent-file.repository.js.map +1 -0
- package/dist/modules/agents/sub-agents/sub-agent-foreground-runner.js +5 -0
- package/dist/modules/agents/sub-agents/sub-agent-foreground-runner.js.map +1 -1
- package/dist/modules/agents/tools/knowledge/search-knowledge.tool.d.ts +90 -0
- package/dist/modules/agents/tools/knowledge/search-knowledge.tool.js +209 -0
- package/dist/modules/agents/tools/knowledge/search-knowledge.tool.js.map +1 -0
- package/dist/modules/agents/tools/workflow-tool-factory.js +6 -8
- package/dist/modules/agents/tools/workflow-tool-factory.js.map +1 -1
- package/dist/modules/agents/tracing/builder-telemetry.d.ts +6 -1
- package/dist/modules/agents/tracing/builder-telemetry.js +26 -5
- package/dist/modules/agents/tracing/builder-telemetry.js.map +1 -1
- package/dist/modules/agents/utils/agent-memory-scope.d.ts +1 -0
- package/dist/modules/agents/utils/agent-memory-scope.js +6 -1
- package/dist/modules/agents/utils/agent-memory-scope.js.map +1 -1
- package/dist/modules/agents/utils/execution-to-message-mapper.js +54 -5
- package/dist/modules/agents/utils/execution-to-message-mapper.js.map +1 -1
- package/dist/modules/agents/utils/messages-envelope.d.ts +7 -0
- package/dist/modules/agents/utils/messages-envelope.js +97 -0
- package/dist/modules/agents/utils/messages-envelope.js.map +1 -0
- package/dist/modules/community-packages/community-packages.service.d.ts +3 -1
- package/dist/modules/community-packages/community-packages.service.js +17 -9
- package/dist/modules/community-packages/community-packages.service.js.map +1 -1
- package/dist/modules/community-packages/npm-utils.js +13 -6
- package/dist/modules/community-packages/npm-utils.js.map +1 -1
- package/dist/modules/data-table/multer-upload-middleware.d.ts +8 -1
- package/dist/modules/data-table/multer-upload-middleware.js +79 -30
- package/dist/modules/data-table/multer-upload-middleware.js.map +1 -1
- package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/n8n-oauth/index.d.ts +2 -0
- package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/n8n-oauth/index.js +19 -0
- package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/n8n-oauth/index.js.map +1 -0
- package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/n8n-oauth/metadata.d.ts +20 -0
- package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/n8n-oauth/metadata.js +12 -0
- package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/n8n-oauth/metadata.js.map +1 -0
- package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/n8n-oauth/n8n-oauth-extractor.d.ts +12 -0
- package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/n8n-oauth/n8n-oauth-extractor.js +85 -0
- package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/n8n-oauth/n8n-oauth-extractor.js.map +1 -0
- package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/n8n-oauth/n8n-oauth-seeder.d.ts +10 -0
- package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/n8n-oauth/n8n-oauth-seeder.js +78 -0
- package/dist/modules/dynamic-credentials.ee/context-establishment-hooks/n8n-oauth/n8n-oauth-seeder.js.map +1 -0
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/n8n-identifier.d.ts +3 -1
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/n8n-identifier.js +17 -2
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/n8n-identifier.js.map +1 -1
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-introspection-identifier.d.ts +4 -2
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-introspection-identifier.js +20 -40
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-introspection-identifier.js.map +1 -1
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-metadata-http-client.d.ts +21 -0
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-metadata-http-client.js +77 -0
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-metadata-http-client.js.map +1 -0
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-userinfo-identifier.d.ts +3 -1
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-userinfo-identifier.js +18 -39
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/oauth2-userinfo-identifier.js.map +1 -1
- package/dist/modules/dynamic-credentials.ee/dynamic-credentials.controller.d.ts +4 -2
- package/dist/modules/dynamic-credentials.ee/dynamic-credentials.controller.js +46 -2
- package/dist/modules/dynamic-credentials.ee/dynamic-credentials.controller.js.map +1 -1
- package/dist/modules/dynamic-credentials.ee/dynamic-credentials.module.js +3 -0
- package/dist/modules/dynamic-credentials.ee/dynamic-credentials.module.js.map +1 -1
- package/dist/modules/dynamic-credentials.ee/services/authorize-intent.service.d.ts +14 -0
- package/dist/modules/dynamic-credentials.ee/services/authorize-intent.service.js +39 -0
- package/dist/modules/dynamic-credentials.ee/services/authorize-intent.service.js.map +1 -0
- package/dist/modules/dynamic-credentials.ee/services/credential-check-proxy.service.d.ts +7 -3
- package/dist/modules/dynamic-credentials.ee/services/credential-check-proxy.service.js +23 -21
- package/dist/modules/dynamic-credentials.ee/services/credential-check-proxy.service.js.map +1 -1
- package/dist/modules/dynamic-credentials.ee/services/credential-resolver-workflow.service.d.ts +4 -0
- package/dist/modules/dynamic-credentials.ee/services/credential-resolver-workflow.service.js +111 -63
- package/dist/modules/dynamic-credentials.ee/services/credential-resolver-workflow.service.js.map +1 -1
- package/dist/modules/dynamic-credentials.ee/services/dynamic-credential-storage.service.js +0 -1
- package/dist/modules/dynamic-credentials.ee/services/dynamic-credential-storage.service.js.map +1 -1
- package/dist/modules/dynamic-credentials.ee/services/index.d.ts +1 -0
- package/dist/modules/dynamic-credentials.ee/services/index.js +1 -0
- package/dist/modules/dynamic-credentials.ee/services/index.js.map +1 -1
- package/dist/modules/external-secrets.ee/providers/aws-secrets-manager.d.ts +3 -1
- package/dist/modules/external-secrets.ee/providers/aws-secrets-manager.js +4 -1
- package/dist/modules/external-secrets.ee/providers/aws-secrets-manager.js.map +1 -1
- package/dist/modules/external-secrets.ee/providers/azure-key-vault/azure-key-vault.js.map +1 -1
- package/dist/modules/external-secrets.ee/providers/gcp-secrets-manager/gcp-secrets-manager.js.map +1 -1
- package/dist/modules/external-secrets.ee/providers/infisical.d.ts +4 -1
- package/dist/modules/external-secrets.ee/providers/infisical.js +45 -30
- package/dist/modules/external-secrets.ee/providers/infisical.js.map +1 -1
- package/dist/modules/external-secrets.ee/providers/one-password.js.map +1 -1
- package/dist/modules/external-secrets.ee/providers/vault.d.ts +5 -1
- package/dist/modules/external-secrets.ee/providers/vault.js +66 -61
- package/dist/modules/external-secrets.ee/providers/vault.js.map +1 -1
- package/dist/modules/insights/database/repositories/insights-by-period.repository.d.ts +2 -2
- package/dist/modules/insights/insights.service.d.ts +2 -2
- package/dist/modules/instance-ai/entities/index.d.ts +1 -0
- package/dist/modules/instance-ai/entities/index.js +3 -1
- package/dist/modules/instance-ai/entities/index.js.map +1 -1
- package/dist/modules/instance-ai/entities/instance-ai-thread-grant.entity.d.ts +9 -0
- package/dist/modules/instance-ai/entities/instance-ai-thread-grant.entity.js +45 -0
- package/dist/modules/instance-ai/entities/instance-ai-thread-grant.entity.js.map +1 -0
- package/dist/modules/instance-ai/eval/eval-mocked-credentials-helper.d.ts +3 -3
- package/dist/modules/instance-ai/eval/eval-mocked-credentials-helper.js +2 -2
- package/dist/modules/instance-ai/eval/eval-mocked-credentials-helper.js.map +1 -1
- package/dist/modules/instance-ai/eval/llm-wire-server.d.ts +2 -2
- package/dist/modules/instance-ai/eval/llm-wire-server.js +5 -5
- package/dist/modules/instance-ai/eval/llm-wire-server.js.map +1 -1
- package/dist/modules/instance-ai/eval/thread-credential-allowlist.service.d.ts +6 -0
- package/dist/modules/instance-ai/eval/thread-credential-allowlist.service.js +29 -0
- package/dist/modules/instance-ai/eval/thread-credential-allowlist.service.js.map +1 -0
- package/dist/modules/instance-ai/instance-ai-credit.service.d.ts +26 -0
- package/dist/modules/instance-ai/instance-ai-credit.service.js +210 -0
- package/dist/modules/instance-ai/instance-ai-credit.service.js.map +1 -0
- package/dist/modules/instance-ai/instance-ai-model.service.d.ts +20 -0
- package/dist/modules/instance-ai/instance-ai-model.service.js +135 -0
- package/dist/modules/instance-ai/instance-ai-model.service.js.map +1 -0
- package/dist/modules/instance-ai/instance-ai-run-probe.d.ts +5 -0
- package/dist/modules/instance-ai/instance-ai-run-probe.js +26 -0
- package/dist/modules/instance-ai/instance-ai-run-probe.js.map +1 -0
- package/dist/modules/instance-ai/instance-ai-settings.service.d.ts +2 -0
- package/dist/modules/instance-ai/instance-ai-settings.service.js +12 -1
- package/dist/modules/instance-ai/instance-ai-settings.service.js.map +1 -1
- package/dist/modules/instance-ai/instance-ai-temporary-workflow.service.d.ts +15 -0
- package/dist/modules/instance-ai/instance-ai-temporary-workflow.service.js +140 -0
- package/dist/modules/instance-ai/instance-ai-temporary-workflow.service.js.map +1 -0
- package/dist/modules/instance-ai/instance-ai.adapter.service.d.ts +4 -2
- package/dist/modules/instance-ai/instance-ai.adapter.service.js +69 -10
- package/dist/modules/instance-ai/instance-ai.adapter.service.js.map +1 -1
- package/dist/modules/instance-ai/instance-ai.controller.d.ts +20 -2
- package/dist/modules/instance-ai/instance-ai.controller.js +62 -4
- package/dist/modules/instance-ai/instance-ai.controller.js.map +1 -1
- package/dist/modules/instance-ai/instance-ai.module.d.ts +2 -1
- package/dist/modules/instance-ai/instance-ai.module.js +3 -0
- package/dist/modules/instance-ai/instance-ai.module.js.map +1 -1
- package/dist/modules/instance-ai/instance-ai.service.d.ts +42 -22
- package/dist/modules/instance-ai/instance-ai.service.js +408 -379
- package/dist/modules/instance-ai/instance-ai.service.js.map +1 -1
- package/dist/modules/instance-ai/internal-messages.d.ts +4 -0
- package/dist/modules/instance-ai/internal-messages.js +24 -3
- package/dist/modules/instance-ai/internal-messages.js.map +1 -1
- package/dist/modules/instance-ai/mcp/instance-ai-mcp-connection.controller.d.ts +1 -1
- package/dist/modules/instance-ai/mcp/instance-ai-mcp-connection.controller.js +2 -6
- package/dist/modules/instance-ai/mcp/instance-ai-mcp-connection.controller.js.map +1 -1
- package/dist/modules/instance-ai/mcp/instance-ai-mcp-registry.service.d.ts +6 -1
- package/dist/modules/instance-ai/mcp/instance-ai-mcp-registry.service.js +52 -2
- package/dist/modules/instance-ai/mcp/instance-ai-mcp-registry.service.js.map +1 -1
- package/dist/modules/instance-ai/message-parser.js +2 -0
- package/dist/modules/instance-ai/message-parser.js.map +1 -1
- package/dist/modules/instance-ai/observability.d.ts +13 -0
- package/dist/modules/instance-ai/observability.js +23 -0
- package/dist/modules/instance-ai/observability.js.map +1 -0
- package/dist/modules/instance-ai/repositories/index.d.ts +1 -0
- package/dist/modules/instance-ai/repositories/index.js +3 -1
- package/dist/modules/instance-ai/repositories/index.js.map +1 -1
- package/dist/modules/instance-ai/repositories/instance-ai-thread-grant.repository.d.ts +7 -0
- package/dist/modules/instance-ai/repositories/instance-ai-thread-grant.repository.js +40 -0
- package/dist/modules/instance-ai/repositories/instance-ai-thread-grant.repository.js.map +1 -0
- package/dist/modules/instance-ai/sandbox/instance-ai-sandbox.service.js +2 -1
- package/dist/modules/instance-ai/sandbox/instance-ai-sandbox.service.js.map +1 -1
- package/dist/modules/instance-ai/storage/typeorm-agent-memory.js +4 -6
- package/dist/modules/instance-ai/storage/typeorm-agent-memory.js.map +1 -1
- package/dist/modules/instance-ai/web-research/fetch-and-extract.d.ts +2 -3
- package/dist/modules/instance-ai/web-research/fetch-and-extract.js +34 -44
- package/dist/modules/instance-ai/web-research/fetch-and-extract.js.map +1 -1
- package/dist/modules/log-streaming.ee/destinations/message-event-bus-destination-from-db.d.ts +2 -1
- package/dist/modules/log-streaming.ee/destinations/message-event-bus-destination-from-db.js +2 -2
- package/dist/modules/log-streaming.ee/destinations/message-event-bus-destination-from-db.js.map +1 -1
- package/dist/modules/log-streaming.ee/destinations/message-event-bus-destination-webhook.ee.d.ts +8 -8
- package/dist/modules/log-streaming.ee/destinations/message-event-bus-destination-webhook.ee.js +43 -60
- package/dist/modules/log-streaming.ee/destinations/message-event-bus-destination-webhook.ee.js.map +1 -1
- package/dist/modules/log-streaming.ee/log-streaming-destination.service.d.ts +3 -1
- package/dist/modules/log-streaming.ee/log-streaming-destination.service.js +6 -3
- package/dist/modules/log-streaming.ee/log-streaming-destination.service.js.map +1 -1
- package/dist/modules/log-streaming.ee/log-streaming.controller.d.ts +3 -1
- package/dist/modules/log-streaming.ee/log-streaming.controller.js +6 -3
- package/dist/modules/log-streaming.ee/log-streaming.controller.js.map +1 -1
- package/dist/modules/mcp/dto/update-allowed-redirect-uris.dto.d.ts +9 -0
- package/dist/modules/mcp/dto/update-allowed-redirect-uris.dto.js +35 -0
- package/dist/modules/mcp/dto/update-allowed-redirect-uris.dto.js.map +1 -0
- package/dist/modules/mcp/mcp-protected-resource.d.ts +4 -1
- package/dist/modules/mcp/mcp-protected-resource.js +9 -3
- package/dist/modules/mcp/mcp-protected-resource.js.map +1 -1
- package/dist/modules/mcp/mcp.service.d.ts +5 -2
- package/dist/modules/mcp/mcp.service.js +8 -3
- package/dist/modules/mcp/mcp.service.js.map +1 -1
- package/dist/modules/mcp/mcp.settings.controller.d.ts +7 -0
- package/dist/modules/mcp/mcp.settings.controller.js +24 -0
- package/dist/modules/mcp/mcp.settings.controller.js.map +1 -1
- package/dist/modules/mcp/mcp.settings.service.d.ts +2 -0
- package/dist/modules/mcp/mcp.settings.service.js +15 -0
- package/dist/modules/mcp/mcp.settings.service.js.map +1 -1
- package/dist/modules/mcp/mcp.typeguards.d.ts +0 -1
- package/dist/modules/mcp/mcp.typeguards.js +9 -12
- package/dist/modules/mcp/mcp.typeguards.js.map +1 -1
- package/dist/modules/mcp/mcp.utils.js +2 -1
- package/dist/modules/mcp/mcp.utils.js.map +1 -1
- package/dist/modules/mcp/tools/execute-workflow.tool.d.ts +10 -8
- package/dist/modules/mcp/tools/execute-workflow.tool.js +25 -13
- package/dist/modules/mcp/tools/execute-workflow.tool.js.map +1 -1
- package/dist/modules/mcp/tools/get-workflow-details.tool.js +2 -0
- package/dist/modules/mcp/tools/get-workflow-details.tool.js.map +1 -1
- package/dist/modules/mcp/tools/schemas.d.ts +128 -0
- package/dist/modules/mcp/tools/schemas.js +9 -0
- package/dist/modules/mcp/tools/schemas.js.map +1 -1
- package/dist/modules/mcp/tools/workflow-builder/create-workflow-from-code.tool.js +15 -4
- package/dist/modules/mcp/tools/workflow-builder/create-workflow-from-code.tool.js.map +1 -1
- package/dist/modules/mcp/tools/workflow-builder/credential-validation.d.ts +13 -2
- package/dist/modules/mcp/tools/workflow-builder/credential-validation.js +144 -23
- package/dist/modules/mcp/tools/workflow-builder/credential-validation.js.map +1 -1
- package/dist/modules/mcp/tools/workflow-builder/update-workflow.tool.js +23 -6
- package/dist/modules/mcp/tools/workflow-builder/update-workflow.tool.js.map +1 -1
- package/dist/modules/mcp/tools/workflow-builder/workflow-operations.d.ts +31 -1
- package/dist/modules/mcp/tools/workflow-builder/workflow-operations.js +22 -0
- package/dist/modules/mcp/tools/workflow-builder/workflow-operations.js.map +1 -1
- package/dist/modules/n8n-packages/engine/import-pipeline.js +40 -19
- package/dist/modules/n8n-packages/engine/import-pipeline.js.map +1 -1
- package/dist/modules/n8n-packages/entities/credential/credential-importer.d.ts +8 -4
- package/dist/modules/n8n-packages/entities/credential/credential-importer.js +40 -6
- package/dist/modules/n8n-packages/entities/credential/credential-importer.js.map +1 -1
- package/dist/modules/n8n-packages/entities/credential/credential-matcher.d.ts +7 -3
- package/dist/modules/n8n-packages/entities/credential/credential-matcher.js +30 -5
- package/dist/modules/n8n-packages/entities/credential/credential-matcher.js.map +1 -1
- package/dist/modules/n8n-packages/entities/credential/credential-missing-mode.d.ts +3 -0
- package/dist/modules/n8n-packages/entities/credential/credential-missing-mode.js +17 -0
- package/dist/modules/n8n-packages/entities/credential/credential-missing-mode.js.map +1 -1
- package/dist/modules/n8n-packages/entities/credential/credential.types.d.ts +10 -4
- package/dist/modules/n8n-packages/entities/credential/credential.types.js +2 -0
- package/dist/modules/n8n-packages/entities/credential/credential.types.js.map +1 -1
- package/dist/modules/n8n-packages/entities/credential/id-based-credential-matcher.d.ts +3 -4
- package/dist/modules/n8n-packages/entities/credential/id-based-credential-matcher.js +10 -11
- package/dist/modules/n8n-packages/entities/credential/id-based-credential-matcher.js.map +1 -1
- package/dist/modules/n8n-packages/entities/workflow/workflow-import.types.d.ts +6 -6
- package/dist/modules/n8n-packages/entities/workflow/workflow-importer.d.ts +3 -3
- package/dist/modules/n8n-packages/entities/workflow/workflow-importer.js +12 -10
- package/dist/modules/n8n-packages/entities/workflow/workflow-importer.js.map +1 -1
- package/dist/modules/n8n-packages/entities/workflow/workflow-publisher.d.ts +6 -2
- package/dist/modules/n8n-packages/entities/workflow/workflow-publisher.js +33 -11
- package/dist/modules/n8n-packages/entities/workflow/workflow-publisher.js.map +1 -1
- package/dist/modules/n8n-packages/entities/workflow/workflow-publishing-policy.types.d.ts +8 -0
- package/dist/modules/n8n-packages/n8n-packages.types.d.ts +23 -3
- package/dist/modules/n8n-packages/n8n-packages.types.js.map +1 -1
- package/dist/modules/oauth-jwe/oauth-jwe.schemas.d.ts +12 -12
- package/dist/modules/oauth-server/oauth-consent.controller.js +1 -0
- package/dist/modules/oauth-server/oauth-consent.controller.js.map +1 -1
- package/dist/modules/oauth-server/oauth-consent.service.d.ts +1 -0
- package/dist/modules/oauth-server/oauth-consent.service.js +2 -0
- package/dist/modules/oauth-server/oauth-consent.service.js.map +1 -1
- package/dist/modules/oauth-server/oauth-server.module.js +1 -1
- package/dist/modules/oauth-server/oauth-server.module.js.map +1 -1
- package/dist/modules/oauth-server/oauth-server.service.d.ts +2 -0
- package/dist/modules/oauth-server/oauth-server.service.js +48 -1
- package/dist/modules/oauth-server/oauth-server.service.js.map +1 -1
- package/dist/modules/oauth-server/oauth.controller.js +4 -1
- package/dist/modules/oauth-server/oauth.controller.js.map +1 -1
- package/dist/modules/otel/otel.service.d.ts +3 -1
- package/dist/modules/otel/otel.service.js +6 -3
- package/dist/modules/otel/otel.service.js.map +1 -1
- package/dist/modules/quick-connect/handlers/firecrawl.handler.d.ts +3 -0
- package/dist/modules/quick-connect/handlers/firecrawl.handler.js +20 -7
- package/dist/modules/quick-connect/handlers/firecrawl.handler.js.map +1 -1
- package/dist/modules/quick-connect/quick-connect.config.d.ts +17 -17
- package/dist/modules/quick-connect/quick-connect.module.d.ts +3 -3
- package/dist/modules/source-control.ee/source-control-import.service.ee.js +1 -1
- package/dist/modules/source-control.ee/source-control-import.service.ee.js.map +1 -1
- package/dist/modules/source-control.ee/source-control.controller.ee.d.ts +4 -4
- package/dist/modules/source-control.ee/source-control.service.ee.d.ts +2 -2
- package/dist/modules/sso-oidc/oidc.service.ee.d.ts +3 -1
- package/dist/modules/sso-oidc/oidc.service.ee.js +15 -25
- package/dist/modules/sso-oidc/oidc.service.ee.js.map +1 -1
- package/dist/modules/sso-saml/saml.service.ee.d.ts +3 -1
- package/dist/modules/sso-saml/saml.service.ee.js +15 -15
- package/dist/modules/sso-saml/saml.service.ee.js.map +1 -1
- package/dist/modules/token-exchange/services/jwks-resolver.d.ts +3 -1
- package/dist/modules/token-exchange/services/jwks-resolver.js +11 -3
- package/dist/modules/token-exchange/services/jwks-resolver.js.map +1 -1
- package/dist/oauth/oauth.service.d.ts +8 -3
- package/dist/oauth/oauth.service.js +106 -47
- package/dist/oauth/oauth.service.js.map +1 -1
- package/dist/oauth/types.d.ts +1 -1
- package/dist/oauth/types.js.map +1 -1
- package/dist/posthog/index.js +4 -3
- package/dist/posthog/index.js.map +1 -1
- package/dist/public-api/index.js +46 -3
- package/dist/public-api/index.js.map +1 -1
- package/dist/public-api/swagger-theme.css +14 -0
- package/dist/public-api/types.d.ts +2 -0
- package/dist/public-api/v1/handlers/credentials/credentials.handler.js +1 -1
- package/dist/public-api/v1/handlers/credentials/credentials.handler.js.map +1 -1
- package/dist/public-api/v1/handlers/data-tables/data-tables.handler.js +4 -3
- package/dist/public-api/v1/handlers/data-tables/data-tables.handler.js.map +1 -1
- package/dist/public-api/v1/handlers/discover/discover.service.js +9 -11
- package/dist/public-api/v1/handlers/discover/discover.service.js.map +1 -1
- package/dist/public-api/v1/handlers/executions/executions.handler.js +8 -4
- package/dist/public-api/v1/handlers/executions/executions.handler.js.map +1 -1
- package/dist/public-api/v1/handlers/workflows/workflows.handler.js +3 -1
- package/dist/public-api/v1/handlers/workflows/workflows.handler.js.map +1 -1
- package/dist/public-api/v1/handlers/workflows/workflows.service.d.ts +1 -2
- package/dist/public-api/v1/handlers/workflows/workflows.service.js +3 -2
- package/dist/public-api/v1/handlers/workflows/workflows.service.js.map +1 -1
- package/dist/public-api/v1/openapi.yml +124 -2
- package/dist/response-helper.d.ts +2 -1
- package/dist/response-helper.js +2 -17
- package/dist/response-helper.js.map +1 -1
- package/dist/scaling/constants.d.ts +2 -2
- package/dist/scaling/constants.js +3 -0
- package/dist/scaling/constants.js.map +1 -1
- package/dist/scaling/execution-stop.service.d.ts +15 -0
- package/dist/scaling/execution-stop.service.js +59 -0
- package/dist/scaling/execution-stop.service.js.map +1 -0
- package/dist/scaling/job-processor.js +8 -2
- package/dist/scaling/job-processor.js.map +1 -1
- package/dist/scaling/multi-main-setup.ee.d.ts +1 -0
- package/dist/scaling/multi-main-setup.ee.js +6 -6
- package/dist/scaling/multi-main-setup.ee.js.map +1 -1
- package/dist/scaling/pubsub/pubsub.event-map.d.ts +4 -0
- package/dist/scaling/pubsub/pubsub.types.d.ts +3 -1
- package/dist/security-audit/risk-reporters/instance-risk-reporter.d.ts +3 -1
- package/dist/security-audit/risk-reporters/instance-risk-reporter.js +27 -20
- package/dist/security-audit/risk-reporters/instance-risk-reporter.js.map +1 -1
- package/dist/server.d.ts +1 -0
- package/dist/server.js +1 -0
- package/dist/server.js.map +1 -1
- package/dist/services/ai-gateway.service.d.ts +5 -1
- package/dist/services/ai-gateway.service.js +53 -32
- package/dist/services/ai-gateway.service.js.map +1 -1
- package/dist/services/ai-workflow-builder.service.d.ts +4 -3
- package/dist/services/ai-workflow-builder.service.js +9 -5
- package/dist/services/ai-workflow-builder.service.js.map +1 -1
- package/dist/services/credentials-tester.service.js +16 -15
- package/dist/services/credentials-tester.service.js.map +1 -1
- package/dist/services/dynamic-templates.service.d.ts +3 -1
- package/dist/services/dynamic-templates.service.js +13 -9
- package/dist/services/dynamic-templates.service.js.map +1 -1
- package/dist/services/frontend.service.d.ts +6 -1
- package/dist/services/frontend.service.js +39 -2
- package/dist/services/frontend.service.js.map +1 -1
- package/dist/services/node-resource-explorer.service.js +4 -22
- package/dist/services/node-resource-explorer.service.js.map +1 -1
- package/dist/services/project.service.ee.d.ts +3 -2
- package/dist/services/project.service.ee.js +14 -3
- package/dist/services/project.service.ee.js.map +1 -1
- package/dist/services/protected-resource.registry.d.ts +1 -0
- package/dist/services/protected-resource.registry.js.map +1 -1
- package/dist/services/public-api-key.service.d.ts +6 -2
- package/dist/services/public-api-key.service.js +56 -10
- package/dist/services/public-api-key.service.js.map +1 -1
- package/dist/services/role.service.d.ts +2 -2
- package/dist/services/role.service.js.map +1 -1
- package/dist/services/trigger-auth-identity-seeder-proxy.service.d.ts +10 -0
- package/dist/services/trigger-auth-identity-seeder-proxy.service.js +33 -0
- package/dist/services/trigger-auth-identity-seeder-proxy.service.js.map +1 -0
- package/dist/services/workflow-statistics.service.d.ts +3 -13
- package/dist/services/workflow-statistics.service.js +77 -64
- package/dist/services/workflow-statistics.service.js.map +1 -1
- package/dist/task-runners/task-broker/task-broker-server.js +2 -1
- package/dist/task-runners/task-broker/task-broker-server.js.map +1 -1
- package/dist/task-runners/task-runner-module.js +2 -0
- package/dist/task-runners/task-runner-module.js.map +1 -1
- package/dist/telemetry/index.d.ts +25 -2
- package/dist/telemetry/index.js +80 -12
- package/dist/telemetry/index.js.map +1 -1
- package/dist/utils/ai-proxy-fetch.d.ts +3 -0
- package/dist/utils/ai-proxy-fetch.js +27 -0
- package/dist/utils/ai-proxy-fetch.js.map +1 -0
- package/dist/utils/auth-fetch.d.ts +3 -1
- package/dist/utils/auth-fetch.js +3 -4
- package/dist/utils/auth-fetch.js.map +1 -1
- package/dist/utils/strapi-utils.d.ts +8 -4
- package/dist/utils/strapi-utils.js +25 -9
- package/dist/utils/strapi-utils.js.map +1 -1
- package/dist/webhooks/live-webhooks.js +1 -0
- package/dist/webhooks/live-webhooks.js.map +1 -1
- package/dist/webhooks/test-webhooks.controller.d.ts +8 -0
- package/dist/webhooks/test-webhooks.controller.js +39 -0
- package/dist/webhooks/test-webhooks.controller.js.map +1 -0
- package/dist/webhooks/webhook-form-data.js +9 -1
- package/dist/webhooks/webhook-form-data.js.map +1 -1
- package/dist/webhooks/webhook-helpers.js +16 -0
- package/dist/webhooks/webhook-helpers.js.map +1 -1
- package/dist/webhooks/webhook-request-handler.js +35 -0
- package/dist/webhooks/webhook-request-handler.js.map +1 -1
- package/dist/workflow-execute-additional-data.js +15 -0
- package/dist/workflow-execute-additional-data.js.map +1 -1
- package/dist/workflow-helpers.d.ts +7 -2
- package/dist/workflow-helpers.js +50 -1
- package/dist/workflow-helpers.js.map +1 -1
- package/dist/workflows/publication/publication-result.d.ts +2 -0
- package/dist/workflows/publication/publication-status-reporter.d.ts +1 -0
- package/dist/workflows/publication/publication-status-reporter.js +22 -1
- package/dist/workflows/publication/publication-status-reporter.js.map +1 -1
- package/dist/workflows/publication/published-workflow-enqueuer.d.ts +13 -0
- package/dist/workflows/publication/published-workflow-enqueuer.js +53 -0
- package/dist/workflows/publication/published-workflow-enqueuer.js.map +1 -0
- package/dist/workflows/publication/published-workflow-trigger-deactivator.d.ts +16 -0
- package/dist/workflows/publication/published-workflow-trigger-deactivator.js +79 -0
- package/dist/workflows/publication/published-workflow-trigger-deactivator.js.map +1 -0
- package/dist/workflows/publication/workflow-publication-applier.d.ts +6 -1
- package/dist/workflows/publication/workflow-publication-applier.js +39 -3
- package/dist/workflows/publication/workflow-publication-applier.js.map +1 -1
- package/dist/workflows/publication/workflow-publication-lifecycle-lock.d.ts +13 -0
- package/dist/workflows/publication/workflow-publication-lifecycle-lock.js +104 -0
- package/dist/workflows/publication/workflow-publication-lifecycle-lock.js.map +1 -0
- package/dist/workflows/publication/workflow-publication-outbox-cleanup.service.d.ts +19 -0
- package/dist/workflows/publication/workflow-publication-outbox-cleanup.service.js +109 -0
- package/dist/workflows/publication/workflow-publication-outbox-cleanup.service.js.map +1 -0
- package/dist/workflows/publication/workflow-publication-outbox-consumer.d.ts +11 -4
- package/dist/workflows/publication/workflow-publication-outbox-consumer.js +105 -45
- package/dist/workflows/publication/workflow-publication-outbox-consumer.js.map +1 -1
- package/dist/workflows/triggers/non-webhook-trigger-registrar.d.ts +4 -5
- package/dist/workflows/triggers/non-webhook-trigger-registrar.js +30 -9
- package/dist/workflows/triggers/non-webhook-trigger-registrar.js.map +1 -1
- package/dist/workflows/triggers/trigger-activation-retry.d.ts +2 -0
- package/dist/workflows/triggers/trigger-activation-retry.js +23 -0
- package/dist/workflows/triggers/trigger-activation-retry.js.map +1 -0
- package/dist/workflows/triggers/webhook-trigger-registrar.d.ts +3 -2
- package/dist/workflows/triggers/webhook-trigger-registrar.js +60 -32
- package/dist/workflows/triggers/webhook-trigger-registrar.js.map +1 -1
- package/dist/workflows/triggers/workflow-trigger-activator.d.ts +6 -3
- package/dist/workflows/triggers/workflow-trigger-activator.js +126 -60
- package/dist/workflows/triggers/workflow-trigger-activator.js.map +1 -1
- package/dist/workflows/workflow-creation.service.d.ts +1 -0
- package/dist/workflows/workflow-creation.service.js +17 -8
- package/dist/workflows/workflow-creation.service.js.map +1 -1
- package/dist/workflows/workflow-entity-mapper.d.ts +5 -0
- package/dist/workflows/workflow-entity-mapper.js +22 -0
- package/dist/workflows/workflow-entity-mapper.js.map +1 -0
- package/dist/workflows/workflow-execution.service.d.ts +6 -2
- package/dist/workflows/workflow-execution.service.js +36 -13
- package/dist/workflows/workflow-execution.service.js.map +1 -1
- package/dist/workflows/workflow-history/workflow-history.service.js +1 -0
- package/dist/workflows/workflow-history/workflow-history.service.js.map +1 -1
- package/dist/workflows/workflow-published-data.service.d.ts +1 -3
- package/dist/workflows/workflow-published-data.service.js +2 -9
- package/dist/workflows/workflow-published-data.service.js.map +1 -1
- package/dist/workflows/workflow-validation.service.js +2 -1
- package/dist/workflows/workflow-validation.service.js.map +1 -1
- package/dist/workflows/workflow.service.d.ts +4 -3
- package/dist/workflows/workflow.service.js +72 -33
- package/dist/workflows/workflow.service.js.map +1 -1
- package/dist/workflows/workflows.controller.d.ts +3 -2
- package/dist/workflows/workflows.controller.js +12 -23
- package/dist/workflows/workflows.controller.js.map +1 -1
- package/package.json +55 -37
- package/templates/form-trigger.handlebars +8 -1
|
@@ -0,0 +1,53 @@
|
|
|
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
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.PublishedWorkflowEnqueuer = void 0;
|
|
13
|
+
const backend_common_1 = require("@n8n/backend-common");
|
|
14
|
+
const config_1 = require("@n8n/config");
|
|
15
|
+
const db_1 = require("@n8n/db");
|
|
16
|
+
const decorators_1 = require("@n8n/decorators");
|
|
17
|
+
const di_1 = require("@n8n/di");
|
|
18
|
+
const workflow_publication_outbox_consumer_1 = require("../../workflows/publication/workflow-publication-outbox-consumer");
|
|
19
|
+
let PublishedWorkflowEnqueuer = class PublishedWorkflowEnqueuer {
|
|
20
|
+
constructor(logger, workflowsConfig, outboxRepository, outboxConsumer) {
|
|
21
|
+
this.logger = logger;
|
|
22
|
+
this.workflowsConfig = workflowsConfig;
|
|
23
|
+
this.outboxRepository = outboxRepository;
|
|
24
|
+
this.outboxConsumer = outboxConsumer;
|
|
25
|
+
this.logger = this.logger.scoped('workflow-publication');
|
|
26
|
+
}
|
|
27
|
+
async enqueueActiveWorkflows() {
|
|
28
|
+
await this.outboxRepository.enqueueAllActiveWorkflows();
|
|
29
|
+
this.logger.debug('Enqueued active workflow publication records');
|
|
30
|
+
}
|
|
31
|
+
async enqueueOnLeaderTakeover() {
|
|
32
|
+
if (!this.workflowsConfig.useWorkflowPublicationService)
|
|
33
|
+
return;
|
|
34
|
+
await this.enqueueActiveWorkflows();
|
|
35
|
+
this.outboxConsumer.startPolling();
|
|
36
|
+
await this.outboxConsumer.drainPending();
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
exports.PublishedWorkflowEnqueuer = PublishedWorkflowEnqueuer;
|
|
40
|
+
__decorate([
|
|
41
|
+
(0, decorators_1.OnLeaderTakeover)(),
|
|
42
|
+
__metadata("design:type", Function),
|
|
43
|
+
__metadata("design:paramtypes", []),
|
|
44
|
+
__metadata("design:returntype", Promise)
|
|
45
|
+
], PublishedWorkflowEnqueuer.prototype, "enqueueOnLeaderTakeover", null);
|
|
46
|
+
exports.PublishedWorkflowEnqueuer = PublishedWorkflowEnqueuer = __decorate([
|
|
47
|
+
(0, di_1.Service)(),
|
|
48
|
+
__metadata("design:paramtypes", [backend_common_1.Logger,
|
|
49
|
+
config_1.WorkflowsConfig,
|
|
50
|
+
db_1.WorkflowPublicationOutboxRepository,
|
|
51
|
+
workflow_publication_outbox_consumer_1.WorkflowPublicationOutboxConsumer])
|
|
52
|
+
], PublishedWorkflowEnqueuer);
|
|
53
|
+
//# sourceMappingURL=published-workflow-enqueuer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"published-workflow-enqueuer.js","sourceRoot":"","sources":["../../../src/workflows/publication/published-workflow-enqueuer.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wDAA6C;AAC7C,wCAA8C;AAC9C,gCAA8D;AAC9D,gDAAmD;AACnD,gCAAkC;AAElC,uHAAiH;AAO1G,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;IACrC,YACkB,MAAc,EACd,eAAgC,EAChC,gBAAqD,EACrD,cAAiD;QAHjD,WAAM,GAAN,MAAM,CAAQ;QACd,oBAAe,GAAf,eAAe,CAAiB;QAChC,qBAAgB,GAAhB,gBAAgB,CAAqC;QACrD,mBAAc,GAAd,cAAc,CAAmC;QAElE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAC1D,CAAC;IAMD,KAAK,CAAC,sBAAsB;QAC3B,MAAM,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,EAAE,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACnE,CAAC;IAQK,AAAN,KAAK,CAAC,uBAAuB;QAC5B,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,6BAA6B;YAAE,OAAO;QAChE,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACpC,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;QACnC,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;IAC1C,CAAC;CACD,CAAA;AA/BY,8DAAyB;AAyB/B;IADL,IAAA,6BAAgB,GAAE;;;;wEAMlB;oCA9BW,yBAAyB;IADrC,IAAA,YAAO,GAAE;qCAGiB,uBAAM;QACG,wBAAe;QACd,wCAAmC;QACrC,wEAAiC;GALvD,yBAAyB,CA+BrC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Logger } from '@n8n/backend-common';
|
|
2
|
+
import { WorkflowsConfig } from '@n8n/config';
|
|
3
|
+
import { ActiveWorkflowTriggers, ErrorReporter } from 'n8n-core';
|
|
4
|
+
import { WorkflowPublicationLifecycleLock } from '../../workflows/publication/workflow-publication-lifecycle-lock';
|
|
5
|
+
import { WorkflowPublicationOutboxConsumer } from '../../workflows/publication/workflow-publication-outbox-consumer';
|
|
6
|
+
export declare class PublishedWorkflowTriggerDeactivator {
|
|
7
|
+
private readonly logger;
|
|
8
|
+
private readonly workflowsConfig;
|
|
9
|
+
private readonly errorReporter;
|
|
10
|
+
private readonly lifecycleLock;
|
|
11
|
+
private readonly activeWorkflowTriggers;
|
|
12
|
+
private readonly outboxConsumer;
|
|
13
|
+
constructor(logger: Logger, workflowsConfig: WorkflowsConfig, errorReporter: ErrorReporter, lifecycleLock: WorkflowPublicationLifecycleLock, activeWorkflowTriggers: ActiveWorkflowTriggers, outboxConsumer: WorkflowPublicationOutboxConsumer);
|
|
14
|
+
deactivateAllNonWebhookTriggers(): Promise<void>;
|
|
15
|
+
private deactivateWorkflow;
|
|
16
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
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
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.PublishedWorkflowTriggerDeactivator = void 0;
|
|
13
|
+
const backend_common_1 = require("@n8n/backend-common");
|
|
14
|
+
const config_1 = require("@n8n/config");
|
|
15
|
+
const constants_1 = require("@n8n/constants");
|
|
16
|
+
const decorators_1 = require("@n8n/decorators");
|
|
17
|
+
const di_1 = require("@n8n/di");
|
|
18
|
+
const n8n_core_1 = require("n8n-core");
|
|
19
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
20
|
+
const workflow_publication_lifecycle_lock_1 = require("../../workflows/publication/workflow-publication-lifecycle-lock");
|
|
21
|
+
const workflow_publication_outbox_consumer_1 = require("../../workflows/publication/workflow-publication-outbox-consumer");
|
|
22
|
+
const STEPDOWN_TEARDOWN_TIMEOUT_MS = 30 * constants_1.Time.seconds.toMilliseconds;
|
|
23
|
+
let PublishedWorkflowTriggerDeactivator = class PublishedWorkflowTriggerDeactivator {
|
|
24
|
+
constructor(logger, workflowsConfig, errorReporter, lifecycleLock, activeWorkflowTriggers, outboxConsumer) {
|
|
25
|
+
this.logger = logger;
|
|
26
|
+
this.workflowsConfig = workflowsConfig;
|
|
27
|
+
this.errorReporter = errorReporter;
|
|
28
|
+
this.lifecycleLock = lifecycleLock;
|
|
29
|
+
this.activeWorkflowTriggers = activeWorkflowTriggers;
|
|
30
|
+
this.outboxConsumer = outboxConsumer;
|
|
31
|
+
this.logger = this.logger.scoped('workflow-publication');
|
|
32
|
+
}
|
|
33
|
+
async deactivateAllNonWebhookTriggers() {
|
|
34
|
+
if (!this.workflowsConfig.useWorkflowPublicationService)
|
|
35
|
+
return;
|
|
36
|
+
this.outboxConsumer.stopPolling();
|
|
37
|
+
const workflowIds = new Set([
|
|
38
|
+
...this.activeWorkflowTriggers.getNonWebhookTriggerWorkflowIds(),
|
|
39
|
+
...this.lifecycleLock.getLockedWorkflowIds(),
|
|
40
|
+
]);
|
|
41
|
+
const lockedWorkflowIds = [];
|
|
42
|
+
for (const workflowId of workflowIds) {
|
|
43
|
+
if (this.lifecycleLock.isLocked(workflowId)) {
|
|
44
|
+
lockedWorkflowIds.push(workflowId);
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
await this.deactivateWorkflow(workflowId);
|
|
48
|
+
}
|
|
49
|
+
for (const workflowId of lockedWorkflowIds) {
|
|
50
|
+
await this.deactivateWorkflow(workflowId);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async deactivateWorkflow(workflowId) {
|
|
54
|
+
const { timedOut } = await this.lifecycleLock.runExclusiveOrTimeout(workflowId, async () => {
|
|
55
|
+
await this.activeWorkflowTriggers.remove(workflowId);
|
|
56
|
+
}, STEPDOWN_TEARDOWN_TIMEOUT_MS);
|
|
57
|
+
if (timedOut) {
|
|
58
|
+
this.errorReporter.error(new n8n_workflow_1.UnexpectedError(`Timed out waiting for an in-flight publication record for workflow "${workflowId}" before trigger teardown; tore down anyway`), { shouldBeLogged: true });
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
exports.PublishedWorkflowTriggerDeactivator = PublishedWorkflowTriggerDeactivator;
|
|
63
|
+
__decorate([
|
|
64
|
+
(0, decorators_1.OnLeaderStepdown)(),
|
|
65
|
+
(0, decorators_1.OnShutdown)(),
|
|
66
|
+
__metadata("design:type", Function),
|
|
67
|
+
__metadata("design:paramtypes", []),
|
|
68
|
+
__metadata("design:returntype", Promise)
|
|
69
|
+
], PublishedWorkflowTriggerDeactivator.prototype, "deactivateAllNonWebhookTriggers", null);
|
|
70
|
+
exports.PublishedWorkflowTriggerDeactivator = PublishedWorkflowTriggerDeactivator = __decorate([
|
|
71
|
+
(0, di_1.Service)(),
|
|
72
|
+
__metadata("design:paramtypes", [backend_common_1.Logger,
|
|
73
|
+
config_1.WorkflowsConfig,
|
|
74
|
+
n8n_core_1.ErrorReporter,
|
|
75
|
+
workflow_publication_lifecycle_lock_1.WorkflowPublicationLifecycleLock,
|
|
76
|
+
n8n_core_1.ActiveWorkflowTriggers,
|
|
77
|
+
workflow_publication_outbox_consumer_1.WorkflowPublicationOutboxConsumer])
|
|
78
|
+
], PublishedWorkflowTriggerDeactivator);
|
|
79
|
+
//# sourceMappingURL=published-workflow-trigger-deactivator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"published-workflow-trigger-deactivator.js","sourceRoot":"","sources":["../../../src/workflows/publication/published-workflow-trigger-deactivator.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wDAA6C;AAC7C,wCAA8C;AAC9C,8CAAsC;AACtC,gDAA+D;AAC/D,gCAAkC;AAClC,uCAAiE;AACjE,+CAA+C;AAE/C,qHAA+G;AAC/G,uHAAiH;AAOjH,MAAM,4BAA4B,GAAG,EAAE,GAAG,gBAAI,CAAC,OAAO,CAAC,cAAc,CAAC;AAO/D,IAAM,mCAAmC,GAAzC,MAAM,mCAAmC;IAC/C,YACkB,MAAc,EACd,eAAgC,EAChC,aAA4B,EAC5B,aAA+C,EAC/C,sBAA8C,EAC9C,cAAiD;QALjD,WAAM,GAAN,MAAM,CAAQ;QACd,oBAAe,GAAf,eAAe,CAAiB;QAChC,kBAAa,GAAb,aAAa,CAAe;QAC5B,kBAAa,GAAb,aAAa,CAAkC;QAC/C,2BAAsB,GAAtB,sBAAsB,CAAwB;QAC9C,mBAAc,GAAd,cAAc,CAAmC;QAElE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAC1D,CAAC;IAOK,AAAN,KAAK,CAAC,+BAA+B;QACpC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,6BAA6B;YAAE,OAAO;QAEhE,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;QAIlC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;YAC3B,GAAG,IAAI,CAAC,sBAAsB,CAAC,+BAA+B,EAAE;YAChE,GAAG,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE;SAC5C,CAAC,CAAC;QACH,MAAM,iBAAiB,GAAa,EAAE,CAAC;QAEvC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC7C,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACnC,SAAS;YACV,CAAC;YACD,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC3C,CAAC;QAED,KAAK,MAAM,UAAU,IAAI,iBAAiB,EAAE,CAAC;YAC5C,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC3C,CAAC;IACF,CAAC;IAQO,KAAK,CAAC,kBAAkB,CAAC,UAAkB;QAClD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAClE,UAAU,EACV,KAAK,IAAI,EAAE;YACV,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACtD,CAAC,EACD,4BAA4B,CAC5B,CAAC;QAEF,IAAI,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,aAAa,CAAC,KAAK,CACvB,IAAI,8BAAe,CAClB,uEAAuE,UAAU,6CAA6C,CAC9H,EACD,EAAE,cAAc,EAAE,IAAI,EAAE,CACxB,CAAC;QACH,CAAC;IACF,CAAC;CACD,CAAA;AAnEY,kFAAmC;AAiBzC;IAFL,IAAA,6BAAgB,GAAE;IAClB,IAAA,uBAAU,GAAE;;;;0FAyBZ;8CAzCW,mCAAmC;IAD/C,IAAA,YAAO,GAAE;qCAGiB,uBAAM;QACG,wBAAe;QACjB,wBAAa;QACb,sEAAgC;QACvB,iCAAsB;QAC9B,wEAAiC;GAPvD,mCAAmC,CAmE/C"}
|
|
@@ -1,14 +1,19 @@
|
|
|
1
|
+
import { Logger } from '@n8n/backend-common';
|
|
1
2
|
import { WorkflowHistoryRepository, WorkflowPublicationOutbox, WorkflowPublishedVersionRepository, WorkflowRepository } from '@n8n/db';
|
|
2
3
|
import type { PublicationResult } from '../../workflows/publication/publication-result';
|
|
3
4
|
import { WorkflowTriggerActivator } from '../../workflows/triggers/workflow-trigger-activator';
|
|
4
5
|
export declare class WorkflowPublicationApplier {
|
|
6
|
+
private readonly logger;
|
|
5
7
|
private readonly workflowRepository;
|
|
6
8
|
private readonly workflowHistoryRepository;
|
|
7
9
|
private readonly workflowPublishedVersionRepository;
|
|
8
10
|
private readonly workflowTriggerActivator;
|
|
9
|
-
constructor(workflowRepository: WorkflowRepository, workflowHistoryRepository: WorkflowHistoryRepository, workflowPublishedVersionRepository: WorkflowPublishedVersionRepository, workflowTriggerActivator: WorkflowTriggerActivator);
|
|
11
|
+
constructor(logger: Logger, workflowRepository: WorkflowRepository, workflowHistoryRepository: WorkflowHistoryRepository, workflowPublishedVersionRepository: WorkflowPublishedVersionRepository, workflowTriggerActivator: WorkflowTriggerActivator);
|
|
10
12
|
apply(record: WorkflowPublicationOutbox): Promise<PublicationResult>;
|
|
13
|
+
private publish;
|
|
14
|
+
private unpublish;
|
|
11
15
|
private classifyActivationOutcome;
|
|
16
|
+
private toActivationError;
|
|
12
17
|
private resolveVersions;
|
|
13
18
|
private advancePublishedVersion;
|
|
14
19
|
}
|
|
@@ -10,30 +10,43 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.WorkflowPublicationApplier = void 0;
|
|
13
|
+
const backend_common_1 = require("@n8n/backend-common");
|
|
13
14
|
const db_1 = require("@n8n/db");
|
|
14
15
|
const di_1 = require("@n8n/di");
|
|
15
16
|
const n8n_workflow_1 = require("n8n-workflow");
|
|
16
17
|
const trigger_diff_1 = require("../../workflows/publication/trigger-diff");
|
|
18
|
+
const trigger_activation_retry_1 = require("../../workflows/triggers/trigger-activation-retry");
|
|
17
19
|
const workflow_trigger_activator_1 = require("../../workflows/triggers/workflow-trigger-activator");
|
|
18
20
|
let WorkflowPublicationApplier = class WorkflowPublicationApplier {
|
|
19
|
-
constructor(workflowRepository, workflowHistoryRepository, workflowPublishedVersionRepository, workflowTriggerActivator) {
|
|
21
|
+
constructor(logger, workflowRepository, workflowHistoryRepository, workflowPublishedVersionRepository, workflowTriggerActivator) {
|
|
22
|
+
this.logger = logger;
|
|
20
23
|
this.workflowRepository = workflowRepository;
|
|
21
24
|
this.workflowHistoryRepository = workflowHistoryRepository;
|
|
22
25
|
this.workflowPublishedVersionRepository = workflowPublishedVersionRepository;
|
|
23
26
|
this.workflowTriggerActivator = workflowTriggerActivator;
|
|
27
|
+
this.logger = this.logger.scoped('workflow-publication');
|
|
24
28
|
}
|
|
25
29
|
async apply(record) {
|
|
26
30
|
const { workflow, oldVersion, newVersion } = await this.resolveVersions(record);
|
|
27
31
|
if (!workflow)
|
|
28
32
|
return { type: 'skipped', reason: 'workflow-not-found' };
|
|
29
33
|
if (workflow.activeVersionId === null) {
|
|
30
|
-
return
|
|
34
|
+
return await this.unpublish(workflow, oldVersion, record);
|
|
31
35
|
}
|
|
32
36
|
if (!newVersion)
|
|
33
37
|
return { type: 'version-missing' };
|
|
38
|
+
return await this.publish(workflow, oldVersion, newVersion, record);
|
|
39
|
+
}
|
|
40
|
+
async publish(workflow, oldVersion, newVersion, record) {
|
|
34
41
|
const oldTriggerNodes = this.workflowTriggerActivator.getEnabledTriggerNodes(oldVersion);
|
|
35
42
|
const desiredTriggerNodes = this.workflowTriggerActivator.getEnabledTriggerNodes(newVersion);
|
|
36
43
|
const { toAdd, toRemove } = (0, trigger_diff_1.computeTriggerDiff)(oldTriggerNodes, desiredTriggerNodes);
|
|
44
|
+
this.logger.debug(`Calculated trigger diff for workflow publication: ${toAdd.size} to add, ${toRemove.size} to remove`, {
|
|
45
|
+
workflowId: record.workflowId,
|
|
46
|
+
publishedVersionId: record.publishedVersionId,
|
|
47
|
+
toAdd: Array.from(toAdd),
|
|
48
|
+
toRemove: Array.from(toRemove),
|
|
49
|
+
});
|
|
37
50
|
this.workflowTriggerActivator
|
|
38
51
|
.getUnregisteredNonWebhookTriggerNodeIds(record.workflowId, desiredTriggerNodes)
|
|
39
52
|
.forEach((nodeId) => toAdd.add(nodeId));
|
|
@@ -59,15 +72,37 @@ let WorkflowPublicationApplier = class WorkflowPublicationApplier {
|
|
|
59
72
|
}
|
|
60
73
|
return { type: 'completed' };
|
|
61
74
|
}
|
|
75
|
+
async unpublish(workflow, oldVersion, record) {
|
|
76
|
+
if (!oldVersion)
|
|
77
|
+
return { type: 'skipped', reason: 'workflow-inactive' };
|
|
78
|
+
const toRemove = new Set(this.workflowTriggerActivator.getEnabledTriggerNodes(oldVersion).map((node) => node.id));
|
|
79
|
+
if (toRemove.size > 0) {
|
|
80
|
+
await this.workflowTriggerActivator.deactivate(workflow, oldVersion, toRemove);
|
|
81
|
+
}
|
|
82
|
+
await this.workflowPublishedVersionRepository.removePublishedVersion(record.workflowId);
|
|
83
|
+
return { type: 'unpublished' };
|
|
84
|
+
}
|
|
62
85
|
classifyActivationOutcome(outcome) {
|
|
63
86
|
if (outcome.failures.length === 0)
|
|
64
87
|
return { type: 'completed' };
|
|
88
|
+
const allDeterministic = outcome.failures.every((failure) => !(0, trigger_activation_retry_1.isTransientActivationError)(failure.error));
|
|
89
|
+
if (outcome.activated.length === 0 && allDeterministic) {
|
|
90
|
+
return { type: 'failed', error: this.toActivationError(outcome.failures) };
|
|
91
|
+
}
|
|
65
92
|
return {
|
|
66
93
|
type: 'partial',
|
|
67
94
|
activatedNodeIds: outcome.activated,
|
|
68
95
|
failures: outcome.failures,
|
|
69
96
|
};
|
|
70
97
|
}
|
|
98
|
+
toActivationError(failures) {
|
|
99
|
+
if (failures.length === 1)
|
|
100
|
+
return failures[0].error;
|
|
101
|
+
const detail = failures
|
|
102
|
+
.map((failure) => `"${failure.nodeName}": ${failure.error.message}`)
|
|
103
|
+
.join('; ');
|
|
104
|
+
return new Error(`Triggers failed to activate: ${detail}`);
|
|
105
|
+
}
|
|
71
106
|
async resolveVersions(record) {
|
|
72
107
|
const [workflow, currentlyPublishedVersion, newVersion] = await Promise.all([
|
|
73
108
|
this.workflowRepository.findOneBy({ id: record.workflowId }),
|
|
@@ -88,7 +123,8 @@ let WorkflowPublicationApplier = class WorkflowPublicationApplier {
|
|
|
88
123
|
exports.WorkflowPublicationApplier = WorkflowPublicationApplier;
|
|
89
124
|
exports.WorkflowPublicationApplier = WorkflowPublicationApplier = __decorate([
|
|
90
125
|
(0, di_1.Service)(),
|
|
91
|
-
__metadata("design:paramtypes", [
|
|
126
|
+
__metadata("design:paramtypes", [backend_common_1.Logger,
|
|
127
|
+
db_1.WorkflowRepository,
|
|
92
128
|
db_1.WorkflowHistoryRepository,
|
|
93
129
|
db_1.WorkflowPublishedVersionRepository,
|
|
94
130
|
workflow_trigger_activator_1.WorkflowTriggerActivator])
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-publication-applier.js","sourceRoot":"","sources":["../../../src/workflows/publication/workflow-publication-applier.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gCAOiB;AACjB,gCAAkC;AAClC,+CAA2C;AAG3C,uEAA0E;AAC1E,
|
|
1
|
+
{"version":3,"file":"workflow-publication-applier.js","sourceRoot":"","sources":["../../../src/workflows/publication/workflow-publication-applier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare class WorkflowPublicationLifecycleLock {
|
|
2
|
+
private readonly stateByWorkflowId;
|
|
3
|
+
isLocked(workflowId: string): boolean;
|
|
4
|
+
getLockedWorkflowIds(): string[];
|
|
5
|
+
runExclusive<T>(workflowId: string, fn: () => Promise<T>): Promise<T>;
|
|
6
|
+
runExclusiveOrTimeout(workflowId: string, fn: () => Promise<void>, timeoutMs: number): Promise<{
|
|
7
|
+
timedOut: boolean;
|
|
8
|
+
}>;
|
|
9
|
+
private getOrCreateState;
|
|
10
|
+
private acquire;
|
|
11
|
+
private release;
|
|
12
|
+
private acquireWithTimeout;
|
|
13
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.WorkflowPublicationLifecycleLock = void 0;
|
|
10
|
+
const di_1 = require("@n8n/di");
|
|
11
|
+
let WorkflowPublicationLifecycleLock = class WorkflowPublicationLifecycleLock {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.stateByWorkflowId = new Map();
|
|
14
|
+
}
|
|
15
|
+
isLocked(workflowId) {
|
|
16
|
+
return this.stateByWorkflowId.has(workflowId);
|
|
17
|
+
}
|
|
18
|
+
getLockedWorkflowIds() {
|
|
19
|
+
return Array.from(this.stateByWorkflowId.keys());
|
|
20
|
+
}
|
|
21
|
+
async runExclusive(workflowId, fn) {
|
|
22
|
+
await this.acquire(workflowId);
|
|
23
|
+
try {
|
|
24
|
+
return await fn();
|
|
25
|
+
}
|
|
26
|
+
finally {
|
|
27
|
+
this.release(workflowId);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async runExclusiveOrTimeout(workflowId, fn, timeoutMs) {
|
|
31
|
+
const acquired = await this.acquireWithTimeout(workflowId, timeoutMs);
|
|
32
|
+
if (!acquired) {
|
|
33
|
+
await fn();
|
|
34
|
+
return { timedOut: true };
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
await fn();
|
|
38
|
+
}
|
|
39
|
+
finally {
|
|
40
|
+
this.release(workflowId);
|
|
41
|
+
}
|
|
42
|
+
return { timedOut: false };
|
|
43
|
+
}
|
|
44
|
+
getOrCreateState(workflowId) {
|
|
45
|
+
let state = this.stateByWorkflowId.get(workflowId);
|
|
46
|
+
if (!state) {
|
|
47
|
+
state = { locked: false, waiters: [] };
|
|
48
|
+
this.stateByWorkflowId.set(workflowId, state);
|
|
49
|
+
}
|
|
50
|
+
return state;
|
|
51
|
+
}
|
|
52
|
+
async acquire(workflowId) {
|
|
53
|
+
const state = this.getOrCreateState(workflowId);
|
|
54
|
+
if (!state.locked) {
|
|
55
|
+
state.locked = true;
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
await new Promise((resolve) => state.waiters.push(resolve));
|
|
59
|
+
}
|
|
60
|
+
release(workflowId) {
|
|
61
|
+
const state = this.stateByWorkflowId.get(workflowId);
|
|
62
|
+
if (!state)
|
|
63
|
+
return;
|
|
64
|
+
const next = state.waiters.shift();
|
|
65
|
+
if (next) {
|
|
66
|
+
next();
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
this.stateByWorkflowId.delete(workflowId);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async acquireWithTimeout(workflowId, timeoutMs) {
|
|
73
|
+
const state = this.getOrCreateState(workflowId);
|
|
74
|
+
if (!state.locked) {
|
|
75
|
+
state.locked = true;
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
return await new Promise((resolve) => {
|
|
79
|
+
let settled = false;
|
|
80
|
+
const waiter = () => {
|
|
81
|
+
if (settled)
|
|
82
|
+
return;
|
|
83
|
+
settled = true;
|
|
84
|
+
clearTimeout(timer);
|
|
85
|
+
resolve(true);
|
|
86
|
+
};
|
|
87
|
+
const timer = setTimeout(() => {
|
|
88
|
+
if (settled)
|
|
89
|
+
return;
|
|
90
|
+
settled = true;
|
|
91
|
+
const index = state.waiters.indexOf(waiter);
|
|
92
|
+
if (index !== -1)
|
|
93
|
+
state.waiters.splice(index, 1);
|
|
94
|
+
resolve(false);
|
|
95
|
+
}, timeoutMs);
|
|
96
|
+
state.waiters.push(waiter);
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
exports.WorkflowPublicationLifecycleLock = WorkflowPublicationLifecycleLock;
|
|
101
|
+
exports.WorkflowPublicationLifecycleLock = WorkflowPublicationLifecycleLock = __decorate([
|
|
102
|
+
(0, di_1.Service)()
|
|
103
|
+
], WorkflowPublicationLifecycleLock);
|
|
104
|
+
//# sourceMappingURL=workflow-publication-lifecycle-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-publication-lifecycle-lock.js","sourceRoot":"","sources":["../../../src/workflows/publication/workflow-publication-lifecycle-lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Logger } from '@n8n/backend-common';
|
|
2
|
+
import { WorkflowsConfig } from '@n8n/config';
|
|
3
|
+
import { WorkflowPublicationOutboxRepository } from '@n8n/db';
|
|
4
|
+
import { InstanceSettings, Tracing } from 'n8n-core';
|
|
5
|
+
export declare class WorkflowPublicationOutboxCleanupService {
|
|
6
|
+
private readonly workflowsConfig;
|
|
7
|
+
private readonly outboxRepository;
|
|
8
|
+
private readonly instanceSettings;
|
|
9
|
+
private readonly tracing;
|
|
10
|
+
private cleanupInterval;
|
|
11
|
+
private isShuttingDown;
|
|
12
|
+
private readonly logger;
|
|
13
|
+
constructor(logger: Logger, workflowsConfig: WorkflowsConfig, outboxRepository: WorkflowPublicationOutboxRepository, instanceSettings: InstanceSettings, tracing: Tracing);
|
|
14
|
+
init(): void;
|
|
15
|
+
startCleanup(): void;
|
|
16
|
+
stopCleanup(): void;
|
|
17
|
+
shutdown(): void;
|
|
18
|
+
private cleanup;
|
|
19
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
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
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.WorkflowPublicationOutboxCleanupService = void 0;
|
|
13
|
+
const backend_common_1 = require("@n8n/backend-common");
|
|
14
|
+
const config_1 = require("@n8n/config");
|
|
15
|
+
const constants_1 = require("@n8n/constants");
|
|
16
|
+
const db_1 = require("@n8n/db");
|
|
17
|
+
const decorators_1 = require("@n8n/decorators");
|
|
18
|
+
const di_1 = require("@n8n/di");
|
|
19
|
+
const n8n_core_1 = require("n8n-core");
|
|
20
|
+
let WorkflowPublicationOutboxCleanupService = class WorkflowPublicationOutboxCleanupService {
|
|
21
|
+
constructor(logger, workflowsConfig, outboxRepository, instanceSettings, tracing) {
|
|
22
|
+
this.workflowsConfig = workflowsConfig;
|
|
23
|
+
this.outboxRepository = outboxRepository;
|
|
24
|
+
this.instanceSettings = instanceSettings;
|
|
25
|
+
this.tracing = tracing;
|
|
26
|
+
this.isShuttingDown = false;
|
|
27
|
+
this.logger = logger.scoped('workflow-publication');
|
|
28
|
+
}
|
|
29
|
+
init() {
|
|
30
|
+
if (!this.instanceSettings.isLeader)
|
|
31
|
+
return;
|
|
32
|
+
this.startCleanup();
|
|
33
|
+
if (this.cleanupInterval)
|
|
34
|
+
void this.cleanup();
|
|
35
|
+
}
|
|
36
|
+
startCleanup() {
|
|
37
|
+
if (!this.workflowsConfig.useWorkflowPublicationService)
|
|
38
|
+
return;
|
|
39
|
+
if (this.isShuttingDown || this.cleanupInterval)
|
|
40
|
+
return;
|
|
41
|
+
const intervalSeconds = this.workflowsConfig.publicationOutboxCleanupIntervalSeconds;
|
|
42
|
+
this.cleanupInterval = setInterval(async () => await this.cleanup(), intervalSeconds * constants_1.Time.seconds.toMilliseconds);
|
|
43
|
+
this.logger.debug(`Outbox cleanup scheduled every ${intervalSeconds}s`);
|
|
44
|
+
}
|
|
45
|
+
stopCleanup() {
|
|
46
|
+
clearInterval(this.cleanupInterval);
|
|
47
|
+
this.cleanupInterval = undefined;
|
|
48
|
+
}
|
|
49
|
+
shutdown() {
|
|
50
|
+
this.isShuttingDown = true;
|
|
51
|
+
this.stopCleanup();
|
|
52
|
+
}
|
|
53
|
+
async cleanup() {
|
|
54
|
+
const completedRetentionSeconds = this.workflowsConfig.publicationOutboxCompletedRetentionHours * constants_1.Time.hours.toSeconds;
|
|
55
|
+
const failedRetentionSeconds = this.workflowsConfig.publicationOutboxFailedRetentionHours * constants_1.Time.hours.toSeconds;
|
|
56
|
+
const batchSize = this.workflowsConfig.publicationOutboxCleanupBatchSize;
|
|
57
|
+
await this.tracing.startSpan({ name: 'Publication outbox cleanup', op: 'publication.outbox.cleanup' }, async (span) => {
|
|
58
|
+
let totalDeleted = 0;
|
|
59
|
+
try {
|
|
60
|
+
let deleted;
|
|
61
|
+
do {
|
|
62
|
+
deleted = await this.outboxRepository.deleteTerminalOlderThan(completedRetentionSeconds, failedRetentionSeconds, batchSize);
|
|
63
|
+
totalDeleted += deleted;
|
|
64
|
+
} while (deleted >= batchSize && !this.isShuttingDown);
|
|
65
|
+
span.setStatus({ code: 1 });
|
|
66
|
+
if (totalDeleted > 0) {
|
|
67
|
+
this.logger.debug('Cleaned up terminal workflow publication outbox records', {
|
|
68
|
+
count: totalDeleted,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
span.setStatus({ code: 2 });
|
|
74
|
+
this.logger.error('Failed to clean up workflow publication outbox records', { error });
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
span.setAttribute('n8n.publication.records_deleted', totalDeleted);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
exports.WorkflowPublicationOutboxCleanupService = WorkflowPublicationOutboxCleanupService;
|
|
83
|
+
__decorate([
|
|
84
|
+
(0, decorators_1.OnLeaderTakeover)(),
|
|
85
|
+
__metadata("design:type", Function),
|
|
86
|
+
__metadata("design:paramtypes", []),
|
|
87
|
+
__metadata("design:returntype", void 0)
|
|
88
|
+
], WorkflowPublicationOutboxCleanupService.prototype, "startCleanup", null);
|
|
89
|
+
__decorate([
|
|
90
|
+
(0, decorators_1.OnLeaderStepdown)(),
|
|
91
|
+
__metadata("design:type", Function),
|
|
92
|
+
__metadata("design:paramtypes", []),
|
|
93
|
+
__metadata("design:returntype", void 0)
|
|
94
|
+
], WorkflowPublicationOutboxCleanupService.prototype, "stopCleanup", null);
|
|
95
|
+
__decorate([
|
|
96
|
+
(0, decorators_1.OnShutdown)(),
|
|
97
|
+
__metadata("design:type", Function),
|
|
98
|
+
__metadata("design:paramtypes", []),
|
|
99
|
+
__metadata("design:returntype", void 0)
|
|
100
|
+
], WorkflowPublicationOutboxCleanupService.prototype, "shutdown", null);
|
|
101
|
+
exports.WorkflowPublicationOutboxCleanupService = WorkflowPublicationOutboxCleanupService = __decorate([
|
|
102
|
+
(0, di_1.Service)(),
|
|
103
|
+
__metadata("design:paramtypes", [backend_common_1.Logger,
|
|
104
|
+
config_1.WorkflowsConfig,
|
|
105
|
+
db_1.WorkflowPublicationOutboxRepository,
|
|
106
|
+
n8n_core_1.InstanceSettings,
|
|
107
|
+
n8n_core_1.Tracing])
|
|
108
|
+
], WorkflowPublicationOutboxCleanupService);
|
|
109
|
+
//# sourceMappingURL=workflow-publication-outbox-cleanup.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-publication-outbox-cleanup.service.js","sourceRoot":"","sources":["../../../src/workflows/publication/workflow-publication-outbox-cleanup.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Logger } from '@n8n/backend-common';
|
|
2
2
|
import { WorkflowsConfig } from '@n8n/config';
|
|
3
3
|
import { WorkflowPublicationOutbox, WorkflowPublicationOutboxRepository } from '@n8n/db';
|
|
4
|
-
import { ErrorReporter, InstanceSettings } from 'n8n-core';
|
|
4
|
+
import { ErrorReporter, InstanceSettings, Tracing } from 'n8n-core';
|
|
5
5
|
import { PublicationStatusReporter } from '../../workflows/publication/publication-status-reporter';
|
|
6
|
+
import { WorkflowPublicationLifecycleLock } from '../../workflows/publication/workflow-publication-lifecycle-lock';
|
|
6
7
|
import { WorkflowPublicationApplier } from '../../workflows/publication/workflow-publication-applier';
|
|
7
8
|
export declare class WorkflowPublicationOutboxConsumer {
|
|
8
9
|
private readonly logger;
|
|
@@ -12,16 +13,22 @@ export declare class WorkflowPublicationOutboxConsumer {
|
|
|
12
13
|
private readonly applier;
|
|
13
14
|
private readonly reporter;
|
|
14
15
|
private readonly instanceSettings;
|
|
16
|
+
private readonly lifecycleLock;
|
|
17
|
+
private readonly tracing;
|
|
15
18
|
private pollTimeout;
|
|
16
19
|
private isPolling;
|
|
17
20
|
private isShuttingDown;
|
|
18
|
-
|
|
19
|
-
|
|
21
|
+
private activeDrain;
|
|
22
|
+
constructor(logger: Logger, workflowsConfig: WorkflowsConfig, errorReporter: ErrorReporter, outboxRepository: WorkflowPublicationOutboxRepository, applier: WorkflowPublicationApplier, reporter: PublicationStatusReporter, instanceSettings: InstanceSettings, lifecycleLock: WorkflowPublicationLifecycleLock, tracing: Tracing);
|
|
23
|
+
init(): Promise<void>;
|
|
20
24
|
startPolling(): void;
|
|
21
25
|
stopPolling(): void;
|
|
22
|
-
shutdown(): void
|
|
26
|
+
shutdown(): Promise<void>;
|
|
27
|
+
wakeUp(): Promise<void>;
|
|
23
28
|
private schedulePollCycle;
|
|
24
29
|
private pollCycle;
|
|
30
|
+
drainPending(): Promise<number>;
|
|
31
|
+
private runDrain;
|
|
25
32
|
private shouldKeepPolling;
|
|
26
33
|
processRecord(record: WorkflowPublicationOutbox): Promise<void>;
|
|
27
34
|
}
|