UNPKG

n8n

Version:

n8n Workflow Automation Tool

139 lines 7.16 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 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; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ExternalSecretsProviderConnectionManager = void 0; const backend_common_1 = require("@n8n/backend-common"); const di_1 = require("@n8n/di"); const n8n_workflow_1 = require("n8n-workflow"); const provider_lifecycle_service_1 = require("./provider-lifecycle.service"); const provider_registry_service_1 = require("./provider-registry.service"); const retry_manager_service_1 = require("./retry-manager.service"); let ExternalSecretsProviderConnectionManager = class ExternalSecretsProviderConnectionManager { constructor(logger, providerRegistry, providerLifecycle, retryManager) { this.logger = logger; this.providerRegistry = providerRegistry; this.providerLifecycle = providerLifecycle; this.retryManager = retryManager; this.logger = this.logger.scoped('external-secrets'); } async upsertProviderConnection(providerKey, providerType, config) { if (this.providerRegistry.has(providerKey)) { await this.replaceProviderConnection(providerKey, providerType, config); return; } await this.addProviderConnection(providerKey, providerType, config); } async removeProviderConnection(providerKey) { this.retryManager.cancelRetry(providerKey); this.logger.debug('Removing external secrets provider connection', { providerKey, }); const existingProvider = this.providerRegistry.get(providerKey); if (existingProvider) { await this.providerLifecycle.disconnect(existingProvider); this.providerRegistry.remove(providerKey); } } async connectProviderWithRetry(providerKey) { return await this.retryManager.runWithRetry(providerKey, async () => await this.connectProvider(providerKey)); } async disconnectProvider(providerKey) { this.retryManager.cancelRetry(providerKey); const provider = this.providerRegistry.get(providerKey); if (provider) { await this.providerLifecycle.disconnect(provider); } } async addProviderConnection(providerKey, providerType, config) { this.logger.debug('Adding external secrets provider connection', { providerKey, providerType, }); const result = await this.providerLifecycle.initialize(providerType, config); if (!result.success || !result.provider) { this.logger.error('Failed to initialize external secrets provider connection', { providerKey, providerType, error: result.error, }); return; } this.providerRegistry.set(providerKey, result.provider); if (config.connected) { await this.connectProviderWithRetry(providerKey); } } async replaceProviderConnection(providerKey, providerType, config) { this.logger.debug('Replacing external secrets provider connection', { providerKey, providerType, }); const initResult = await this.providerLifecycle.initialize(providerType, config); if (!initResult.success || !initResult.provider) { const error = initResult.error ?? new n8n_workflow_1.UnexpectedError(`Failed to initialize provider ${providerKey}`); this.logger.error('Failed to initialize replacement external secrets provider connection', { providerKey, providerType, error, }); await this.removeProviderConnection(providerKey); return; } const replacementProvider = initResult.provider; if (config.connected) { const replacementResult = await this.retryManager.runWithRetry(providerKey, async () => await this.connectAndSwapProviderConnection(providerKey, providerType, replacementProvider)); if (!replacementResult.success) { await this.swapProviderConnection(providerKey, providerType, replacementProvider); } } else { await this.swapProviderConnection(providerKey, providerType, replacementProvider); } } async connectAndSwapProviderConnection(providerKey, providerType, replacementProvider) { const connectResult = await this.providerLifecycle.connect(replacementProvider); if (!connectResult.success) { this.logger.error('Failed to connect replacement external secrets provider connection', { providerKey, providerType, error: connectResult.error, }); return connectResult; } return await this.swapProviderConnection(providerKey, providerType, replacementProvider); } async swapProviderConnection(providerKey, providerType, replacementProvider) { const existingProvider = this.providerRegistry.get(providerKey); this.providerRegistry.set(providerKey, replacementProvider); if (existingProvider && existingProvider !== replacementProvider) { this.logger.debug('Disconnecting previous external secrets provider connection', { providerKey, providerType, }); await this.providerLifecycle.disconnect(existingProvider); } return { success: true }; } async connectProvider(providerKey) { const provider = this.providerRegistry.get(providerKey); if (!provider) { this.logger.warn(`Cannot connect provider ${providerKey}: not found in registry`); throw new Error(`Provider ${providerKey} not found in registry`); } return await this.providerLifecycle.connect(provider); } }; exports.ExternalSecretsProviderConnectionManager = ExternalSecretsProviderConnectionManager; exports.ExternalSecretsProviderConnectionManager = ExternalSecretsProviderConnectionManager = __decorate([ (0, di_1.Service)(), __metadata("design:paramtypes", [backend_common_1.Logger, provider_registry_service_1.ExternalSecretsProviderRegistry, provider_lifecycle_service_1.ExternalSecretsProviderLifecycle, retry_manager_service_1.ExternalSecretsRetryManager]) ], ExternalSecretsProviderConnectionManager); //# sourceMappingURL=external-secrets-provider-connection-manager.ee.js.map