n8n 2.19.2 → 2.20.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/build.tsbuildinfo +1 -1
- package/dist/chat/chat-execution-manager.js +7 -1
- package/dist/chat/chat-execution-manager.js.map +1 -1
- package/dist/collaboration/collaboration.service.d.ts +1 -0
- package/dist/collaboration/collaboration.service.js +31 -0
- package/dist/collaboration/collaboration.service.js.map +1 -1
- package/dist/commands/execute.d.ts +2 -2
- package/dist/commands/export/credentials.d.ts +2 -2
- package/dist/commands/export/credentials.js +1 -1
- package/dist/commands/export/credentials.js.map +1 -1
- package/dist/commands/export/workflow.d.ts +4 -4
- package/dist/commands/import/credentials.d.ts +12 -2
- package/dist/commands/import/credentials.js +89 -11
- package/dist/commands/import/credentials.js.map +1 -1
- package/dist/commands/import/workflow.d.ts +2 -2
- package/dist/commands/ttwf/generate.d.ts +3 -3
- package/dist/controllers/e2e.controller.js +1 -1
- package/dist/controllers/e2e.controller.js.map +1 -1
- package/dist/controllers/oauth/oauth2-credential.controller.d.ts +6 -4
- package/dist/controllers/oauth/oauth2-credential.controller.js +12 -5
- package/dist/controllers/oauth/oauth2-credential.controller.js.map +1 -1
- package/dist/credentials/credentials.controller.js +1 -1
- package/dist/credentials/credentials.controller.js.map +1 -1
- package/dist/credentials/credentials.service.d.ts +2 -2
- package/dist/credentials/credentials.service.ee.js +2 -2
- package/dist/credentials/credentials.service.ee.js.map +1 -1
- package/dist/credentials/credentials.service.js +13 -16
- package/dist/credentials/credentials.service.js.map +1 -1
- package/dist/credentials/dynamic-credentials-proxy.js +1 -1
- package/dist/credentials/dynamic-credentials-proxy.js.map +1 -1
- package/dist/credentials-helper.d.ts +1 -0
- package/dist/credentials-helper.js +12 -4
- package/dist/credentials-helper.js.map +1 -1
- package/dist/credentials-overwrites.js +2 -2
- package/dist/credentials-overwrites.js.map +1 -1
- package/dist/evaluation.ee/test-runner/evaluation-metrics.ee.d.ts +5 -0
- package/dist/evaluation.ee/test-runner/evaluation-metrics.ee.js +22 -12
- package/dist/evaluation.ee/test-runner/evaluation-metrics.ee.js.map +1 -1
- package/dist/evaluation.ee/test-runner/test-runner.service.ee.d.ts +4 -2
- package/dist/evaluation.ee/test-runner/test-runner.service.ee.js +152 -89
- package/dist/evaluation.ee/test-runner/test-runner.service.ee.js.map +1 -1
- package/dist/evaluation.ee/test-runs.controller.ee.d.ts +8 -2
- package/dist/evaluation.ee/test-runs.controller.ee.js +31 -5
- package/dist/evaluation.ee/test-runs.controller.ee.js.map +1 -1
- package/dist/eventbus/event-message-classes/index.d.ts +3 -2
- package/dist/eventbus/event-message-classes/index.js +11 -1
- package/dist/eventbus/event-message-classes/index.js.map +1 -1
- package/dist/eventbus/message-event-bus/message-event-bus.d.ts +5 -2
- package/dist/eventbus/message-event-bus/message-event-bus.js +101 -73
- package/dist/eventbus/message-event-bus/message-event-bus.js.map +1 -1
- package/dist/eventbus/message-event-bus-writer/message-event-bus-log-writer.d.ts +3 -0
- package/dist/eventbus/message-event-bus-writer/message-event-bus-log-writer.js +3 -1
- package/dist/eventbus/message-event-bus-writer/message-event-bus-log-writer.js.map +1 -1
- package/dist/eventbus/message-event-bus-writer/resolve-event-log-path.d.ts +12 -0
- package/dist/eventbus/message-event-bus-writer/resolve-event-log-path.js +34 -0
- package/dist/eventbus/message-event-bus-writer/resolve-event-log-path.js.map +1 -0
- package/dist/execution-lifecycle/execute-error-workflow.js +1 -1
- package/dist/execution-lifecycle/execute-error-workflow.js.map +1 -1
- package/dist/executions/execution-recovery.service.d.ts +1 -1
- package/dist/executions/execution-recovery.service.js +11 -6
- package/dist/executions/execution-recovery.service.js.map +1 -1
- package/dist/executions/execution.service.d.ts +7 -2
- package/dist/executions/execution.service.js +18 -1
- package/dist/executions/execution.service.js.map +1 -1
- package/dist/executions/executions.controller.d.ts +1 -3
- package/dist/executions/executions.controller.js +3 -17
- package/dist/executions/executions.controller.js.map +1 -1
- package/dist/instance-settings-loader/instance-settings-loader.service.d.ts +3 -1
- package/dist/instance-settings-loader/instance-settings-loader.service.js +6 -2
- package/dist/instance-settings-loader/instance-settings-loader.service.js.map +1 -1
- package/dist/instance-settings-loader/loaders/mcp-settings.loader.d.ts +10 -0
- package/dist/instance-settings-loader/loaders/mcp-settings.loader.js +42 -0
- package/dist/instance-settings-loader/loaders/mcp-settings.loader.js.map +1 -0
- package/dist/instance-settings-loader/loaders/sso.instance-settings-loader.js +9 -4
- package/dist/instance-settings-loader/loaders/sso.instance-settings-loader.js.map +1 -1
- package/dist/mfa/mfa.service.d.ts +2 -2
- package/dist/mfa/mfa.service.js +11 -10
- package/dist/mfa/mfa.service.js.map +1 -1
- package/dist/modules/chat-hub/chat-hub-extractor.js +1 -1
- package/dist/modules/chat-hub/chat-hub-extractor.js.map +1 -1
- package/dist/modules/chat-hub/chat-hub-workflow.service.d.ts +1 -1
- package/dist/modules/chat-hub/chat-hub-workflow.service.js +4 -4
- package/dist/modules/chat-hub/chat-hub-workflow.service.js.map +1 -1
- package/dist/modules/community-packages/community-node-types.service.js +3 -1
- package/dist/modules/community-packages/community-node-types.service.js.map +1 -1
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/n8n-credential-resolver.js +2 -2
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/n8n-credential-resolver.js.map +1 -1
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/oauth-credential-resolver.js +2 -2
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/oauth-credential-resolver.js.map +1 -1
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/slack-credential-resolver.js +2 -2
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/slack-credential-resolver.js.map +1 -1
- package/dist/modules/dynamic-credentials.ee/dynamic-credentials.controller.js +2 -2
- package/dist/modules/dynamic-credentials.ee/dynamic-credentials.controller.js.map +1 -1
- package/dist/modules/dynamic-credentials.ee/services/credential-check-proxy.service.js +1 -1
- 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.js +1 -1
- package/dist/modules/dynamic-credentials.ee/services/credential-resolver-workflow.service.js.map +1 -1
- package/dist/modules/dynamic-credentials.ee/services/credential-resolver.service.js +14 -14
- package/dist/modules/dynamic-credentials.ee/services/credential-resolver.service.js.map +1 -1
- package/dist/modules/dynamic-credentials.ee/services/dynamic-credential-storage.service.js +1 -1
- package/dist/modules/dynamic-credentials.ee/services/dynamic-credential-storage.service.js.map +1 -1
- package/dist/modules/dynamic-credentials.ee/services/dynamic-credential.service.js +4 -4
- package/dist/modules/dynamic-credentials.ee/services/dynamic-credential.service.js.map +1 -1
- package/dist/modules/encryption-key-manager/encryption-bootstrap.service.d.ts +6 -1
- package/dist/modules/encryption-key-manager/encryption-bootstrap.service.js +14 -2
- package/dist/modules/encryption-key-manager/encryption-bootstrap.service.js.map +1 -1
- package/dist/modules/encryption-key-manager/encryption-key.controller.js +1 -0
- package/dist/modules/encryption-key-manager/encryption-key.controller.js.map +1 -1
- package/dist/modules/encryption-key-manager/key-manager.service.d.ts +2 -1
- package/dist/modules/encryption-key-manager/key-manager.service.js +24 -5
- package/dist/modules/encryption-key-manager/key-manager.service.js.map +1 -1
- package/dist/modules/external-secrets.ee/constants.d.ts +1 -0
- package/dist/modules/external-secrets.ee/constants.js +2 -1
- package/dist/modules/external-secrets.ee/constants.js.map +1 -1
- package/dist/modules/external-secrets.ee/external-secrets-manager.ee.js +4 -4
- package/dist/modules/external-secrets.ee/external-secrets-manager.ee.js.map +1 -1
- package/dist/modules/external-secrets.ee/secrets-cache.service.d.ts +1 -0
- package/dist/modules/external-secrets.ee/secrets-cache.service.js +18 -1
- package/dist/modules/external-secrets.ee/secrets-cache.service.js.map +1 -1
- package/dist/modules/external-secrets.ee/secrets-providers-connections.controller.ee.js +3 -3
- package/dist/modules/external-secrets.ee/secrets-providers-connections.controller.ee.js.map +1 -1
- package/dist/modules/external-secrets.ee/secrets-providers-connections.service.ee.d.ts +1 -1
- package/dist/modules/external-secrets.ee/secrets-providers-connections.service.ee.js +15 -13
- package/dist/modules/external-secrets.ee/secrets-providers-connections.service.ee.js.map +1 -1
- package/dist/modules/external-secrets.ee/secrets-providers-project.controller.ee.js +3 -3
- package/dist/modules/external-secrets.ee/secrets-providers-project.controller.ee.js.map +1 -1
- package/dist/modules/external-secrets.ee/settings-store.service.js +6 -6
- package/dist/modules/external-secrets.ee/settings-store.service.js.map +1 -1
- package/dist/modules/insights/insights-collection.service.js +7 -1
- package/dist/modules/insights/insights-collection.service.js.map +1 -1
- package/dist/modules/insights/insights-pruning.service.d.ts +2 -4
- package/dist/modules/insights/insights-pruning.service.js +13 -10
- package/dist/modules/insights/insights-pruning.service.js.map +1 -1
- package/dist/modules/insights/insights.config.js +2 -1
- package/dist/modules/insights/insights.config.js.map +1 -1
- package/dist/modules/insights/insights.constants.d.ts +2 -0
- package/dist/modules/insights/insights.constants.js +3 -1
- package/dist/modules/insights/insights.constants.js.map +1 -1
- package/dist/modules/insights/insights.service.js +1 -3
- package/dist/modules/insights/insights.service.js.map +1 -1
- package/dist/modules/instance-ai/compaction.service.d.ts +7 -2
- package/dist/modules/instance-ai/compaction.service.js +17 -17
- package/dist/modules/instance-ai/compaction.service.js.map +1 -1
- package/dist/modules/instance-ai/instance-ai-settings.service.js +4 -4
- package/dist/modules/instance-ai/instance-ai-settings.service.js.map +1 -1
- package/dist/modules/instance-ai/instance-ai.adapter.service.d.ts +38 -1
- package/dist/modules/instance-ai/instance-ai.adapter.service.js +179 -60
- package/dist/modules/instance-ai/instance-ai.adapter.service.js.map +1 -1
- package/dist/modules/instance-ai/instance-ai.controller.d.ts +2 -2
- package/dist/modules/instance-ai/instance-ai.controller.js +7 -17
- package/dist/modules/instance-ai/instance-ai.controller.js.map +1 -1
- package/dist/modules/instance-ai/instance-ai.service.d.ts +15 -4
- package/dist/modules/instance-ai/instance-ai.service.js +489 -76
- package/dist/modules/instance-ai/instance-ai.service.js.map +1 -1
- package/dist/modules/instance-ai/storage/typeorm-memory-storage.js +11 -1
- package/dist/modules/instance-ai/storage/typeorm-memory-storage.js.map +1 -1
- package/dist/modules/instance-ai/web-research/fetch-and-extract.d.ts +3 -1
- package/dist/modules/instance-ai/web-research/fetch-and-extract.js +13 -11
- package/dist/modules/instance-ai/web-research/fetch-and-extract.js.map +1 -1
- package/dist/modules/instance-ai/web-research/index.d.ts +0 -1
- package/dist/modules/instance-ai/web-research/index.js +1 -3
- package/dist/modules/instance-ai/web-research/index.js.map +1 -1
- package/dist/modules/instance-registry/checks/check.service.d.ts +43 -0
- package/dist/modules/instance-registry/checks/check.service.js +248 -0
- package/dist/modules/instance-registry/checks/check.service.js.map +1 -0
- package/dist/modules/instance-registry/checks/hostid-clash.check.d.ts +8 -0
- package/dist/modules/instance-registry/checks/hostid-clash.check.js +68 -0
- package/dist/modules/instance-registry/checks/hostid-clash.check.js.map +1 -0
- package/dist/modules/instance-registry/checks/index.d.ts +4 -0
- package/dist/modules/instance-registry/checks/index.js +7 -0
- package/dist/modules/instance-registry/checks/index.js.map +1 -0
- package/dist/modules/instance-registry/checks/lifecycle.check.d.ts +8 -0
- package/dist/modules/instance-registry/checks/lifecycle.check.js +52 -0
- package/dist/modules/instance-registry/checks/lifecycle.check.js.map +1 -0
- package/dist/modules/instance-registry/checks/split-brain.check.d.ts +8 -0
- package/dist/modules/instance-registry/checks/split-brain.check.js +67 -0
- package/dist/modules/instance-registry/checks/split-brain.check.js.map +1 -0
- package/dist/modules/instance-registry/checks/version-mismatch.check.d.ts +8 -0
- package/dist/modules/instance-registry/checks/version-mismatch.check.js +55 -0
- package/dist/modules/instance-registry/checks/version-mismatch.check.js.map +1 -0
- package/dist/modules/instance-registry/instance-registry.controller.d.ts +3 -1
- package/dist/modules/instance-registry/instance-registry.controller.js +41 -5
- package/dist/modules/instance-registry/instance-registry.controller.js.map +1 -1
- package/dist/modules/instance-registry/instance-registry.module.js +3 -9
- package/dist/modules/instance-registry/instance-registry.module.js.map +1 -1
- package/dist/modules/ldap.ee/helpers.ee.js +1 -1
- package/dist/modules/ldap.ee/helpers.ee.js.map +1 -1
- package/dist/modules/ldap.ee/ldap.service.ee.js +2 -2
- package/dist/modules/ldap.ee/ldap.service.ee.js.map +1 -1
- package/dist/modules/mcp/dto/update-workflows-availability.dto.d.ts +15 -0
- package/dist/modules/mcp/dto/update-workflows-availability.dto.js +14 -0
- package/dist/modules/mcp/dto/update-workflows-availability.dto.js.map +1 -0
- package/dist/modules/mcp/mcp-oauth-service.d.ts +6 -0
- package/dist/modules/mcp/mcp-oauth-service.js +15 -3
- package/dist/modules/mcp/mcp-oauth-service.js.map +1 -1
- package/dist/modules/mcp/mcp-oauth-token.service.d.ts +1 -0
- package/dist/modules/mcp/mcp-oauth-token.service.js +3 -0
- package/dist/modules/mcp/mcp-oauth-token.service.js.map +1 -1
- package/dist/modules/mcp/mcp.controller.d.ts +2 -0
- package/dist/modules/mcp/mcp.controller.js +49 -11
- package/dist/modules/mcp/mcp.controller.js.map +1 -1
- package/dist/modules/mcp/mcp.errors.d.ts +6 -0
- package/dist/modules/mcp/mcp.errors.js +12 -1
- package/dist/modules/mcp/mcp.errors.js.map +1 -1
- package/dist/modules/mcp/mcp.module.d.ts +1 -0
- package/dist/modules/mcp/mcp.module.js +3 -1
- package/dist/modules/mcp/mcp.module.js.map +1 -1
- package/dist/modules/mcp/mcp.oauth-clients.controller.d.ts +2 -1
- package/dist/modules/mcp/mcp.oauth-clients.controller.js +10 -0
- package/dist/modules/mcp/mcp.oauth-clients.controller.js.map +1 -1
- package/dist/modules/mcp/mcp.oauth.controller.js +20 -1
- package/dist/modules/mcp/mcp.oauth.controller.js.map +1 -1
- package/dist/modules/mcp/mcp.service.js +3 -0
- package/dist/modules/mcp/mcp.service.js.map +1 -1
- package/dist/modules/mcp/mcp.settings.controller.d.ts +11 -12
- package/dist/modules/mcp/mcp.settings.controller.js +19 -50
- package/dist/modules/mcp/mcp.settings.controller.js.map +1 -1
- package/dist/modules/mcp/mcp.settings.service.d.ts +30 -2
- package/dist/modules/mcp/mcp.settings.service.js +165 -2
- package/dist/modules/mcp/mcp.settings.service.js.map +1 -1
- package/dist/modules/mcp/tools/search-executions.tool.d.ts +16 -0
- package/dist/modules/mcp/tools/search-executions.tool.js +140 -0
- package/dist/modules/mcp/tools/search-executions.tool.js.map +1 -0
- package/dist/modules/mcp/tools/workflow-builder/get-workflow-node-types.tool.d.ts +2 -2
- package/dist/modules/oauth-jwe/oauth-jwe-decrypt.service.d.ts +7 -0
- package/dist/modules/oauth-jwe/oauth-jwe-decrypt.service.js +48 -0
- package/dist/modules/oauth-jwe/oauth-jwe-decrypt.service.js.map +1 -0
- package/dist/modules/oauth-jwe/oauth-jwe-key.service.d.ts +31 -0
- package/dist/modules/oauth-jwe/oauth-jwe-key.service.js +174 -0
- package/dist/modules/oauth-jwe/oauth-jwe-key.service.js.map +1 -0
- package/dist/modules/oauth-jwe/oauth-jwe.config.d.ts +3 -0
- package/dist/modules/oauth-jwe/oauth-jwe.config.js +27 -0
- package/dist/modules/oauth-jwe/oauth-jwe.config.js.map +1 -0
- package/dist/modules/oauth-jwe/oauth-jwe.constants.d.ts +9 -0
- package/dist/modules/oauth-jwe/oauth-jwe.constants.js +15 -0
- package/dist/modules/oauth-jwe/oauth-jwe.constants.js.map +1 -0
- package/dist/modules/oauth-jwe/oauth-jwe.controller.d.ts +10 -0
- package/dist/modules/oauth-jwe/oauth-jwe.controller.js +60 -0
- package/dist/modules/oauth-jwe/oauth-jwe.controller.js.map +1 -0
- package/dist/modules/oauth-jwe/oauth-jwe.module.d.ts +8 -0
- package/dist/modules/oauth-jwe/oauth-jwe.module.js +70 -0
- package/dist/modules/oauth-jwe/oauth-jwe.module.js.map +1 -0
- package/dist/modules/oauth-jwe/oauth-jwe.schemas.d.ts +131 -0
- package/dist/modules/oauth-jwe/oauth-jwe.schemas.js +34 -0
- package/dist/modules/oauth-jwe/oauth-jwe.schemas.js.map +1 -0
- package/dist/modules/oauth-jwe/oauth-jwe.utils.d.ts +4 -0
- package/dist/modules/oauth-jwe/oauth-jwe.utils.js +27 -0
- package/dist/modules/oauth-jwe/oauth-jwe.utils.js.map +1 -0
- package/dist/modules/source-control.ee/source-control-export.service.ee.js +1 -1
- package/dist/modules/source-control.ee/source-control-export.service.ee.js.map +1 -1
- package/dist/modules/source-control.ee/source-control-import.service.ee.js +6 -6
- package/dist/modules/source-control.ee/source-control-import.service.ee.js.map +1 -1
- package/dist/modules/source-control.ee/source-control-preferences.service.ee.js +6 -6
- package/dist/modules/source-control.ee/source-control-preferences.service.ee.js.map +1 -1
- package/dist/modules/sso-oidc/oidc.service.ee.js +2 -2
- package/dist/modules/sso-oidc/oidc.service.ee.js.map +1 -1
- package/dist/modules/sso-saml/saml.service.ee.js +6 -6
- package/dist/modules/sso-saml/saml.service.ee.js.map +1 -1
- package/dist/oauth/oauth-jwe-service.proxy.d.ts +9 -0
- package/dist/oauth/oauth-jwe-service.proxy.js +27 -0
- package/dist/oauth/oauth-jwe-service.proxy.js.map +1 -0
- package/dist/oauth/oauth.service.d.ts +2 -2
- package/dist/oauth/oauth.service.js +13 -12
- package/dist/oauth/oauth.service.js.map +1 -1
- package/dist/posthog/index.d.ts +2 -0
- package/dist/posthog/index.js +16 -0
- package/dist/posthog/index.js.map +1 -1
- package/dist/public-api/v1/handlers/credentials/credentials.service.js +2 -2
- package/dist/public-api/v1/handlers/credentials/credentials.service.js.map +1 -1
- package/dist/services/dynamic-node-parameters.service.d.ts +1 -0
- package/dist/services/dynamic-node-parameters.service.js +29 -12
- package/dist/services/dynamic-node-parameters.service.js.map +1 -1
- package/dist/services/export.service.js +2 -2
- package/dist/services/export.service.js.map +1 -1
- package/dist/services/frontend.service.js +18 -0
- package/dist/services/frontend.service.js.map +1 -1
- package/dist/services/import.service.d.ts +5 -1
- package/dist/services/import.service.js +62 -5
- package/dist/services/import.service.js.map +1 -1
- package/dist/services/redis-client.service.d.ts +6 -5
- package/dist/services/redis-client.service.js +19 -12
- package/dist/services/redis-client.service.js.map +1 -1
- package/dist/services/user.service.js +0 -9
- package/dist/services/user.service.js.map +1 -1
- package/dist/task-runners/task-broker/auth/task-broker-auth.service.d.ts +4 -4
- package/dist/task-runners/task-broker/auth/task-broker-auth.service.js +9 -8
- package/dist/task-runners/task-broker/auth/task-broker-auth.service.js.map +1 -1
- package/dist/task-runners/task-broker/task-broker-server.js +1 -1
- package/dist/task-runners/task-broker/task-broker-server.js.map +1 -1
- package/dist/webhooks/test-webhooks.js +16 -2
- package/dist/webhooks/test-webhooks.js.map +1 -1
- package/dist/workflow-execute-additional-data.js +4 -2
- package/dist/workflow-execute-additional-data.js.map +1 -1
- package/dist/workflows/workflow-finder.service.d.ts +2 -0
- package/dist/workflows/workflow-finder.service.js +12 -1
- package/dist/workflows/workflow-finder.service.js.map +1 -1
- package/dist/workflows/workflows.controller.d.ts +7 -2
- package/dist/workflows/workflows.controller.js +43 -10
- package/dist/workflows/workflows.controller.js.map +1 -1
- package/package.json +30 -28
- package/dist/modules/instance-ai/web-research/ssrf-guard.d.ts +0 -1
- package/dist/modules/instance-ai/web-research/ssrf-guard.js +0 -85
- package/dist/modules/instance-ai/web-research/ssrf-guard.js.map +0 -1
- package/dist/modules/mcp/dto/update-workflow-availability.dto.d.ts +0 -9
- package/dist/modules/mcp/dto/update-workflow-availability.dto.js +0 -11
- package/dist/modules/mcp/dto/update-workflow-availability.dto.js.map +0 -1
|
@@ -0,0 +1,174 @@
|
|
|
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.OAuthJweKeyService = void 0;
|
|
13
|
+
const backend_common_1 = require("@n8n/backend-common");
|
|
14
|
+
const db_1 = require("@n8n/db");
|
|
15
|
+
const di_1 = require("@n8n/di");
|
|
16
|
+
const typeorm_1 = require("@n8n/typeorm");
|
|
17
|
+
const utils_1 = require("@n8n/utils");
|
|
18
|
+
const jose_1 = require("jose");
|
|
19
|
+
const n8n_core_1 = require("n8n-core");
|
|
20
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
21
|
+
const cache_service_1 = require("../../services/cache/cache.service");
|
|
22
|
+
const oauth_jwe_constants_1 = require("./oauth-jwe.constants");
|
|
23
|
+
let OAuthJweKeyService = class OAuthJweKeyService {
|
|
24
|
+
constructor(deploymentKeyRepository, cipher, cacheService, logger) {
|
|
25
|
+
this.deploymentKeyRepository = deploymentKeyRepository;
|
|
26
|
+
this.cipher = cipher;
|
|
27
|
+
this.cacheService = cacheService;
|
|
28
|
+
this.logger = logger;
|
|
29
|
+
this.logger = this.logger.scoped('oauth-jwe');
|
|
30
|
+
}
|
|
31
|
+
async initialize() {
|
|
32
|
+
await this.loadData();
|
|
33
|
+
}
|
|
34
|
+
async getKeyPair(algorithm = oauth_jwe_constants_1.JWE_KEY_ALGORITHMS[0]) {
|
|
35
|
+
const entry = await this.findEntry(algorithm);
|
|
36
|
+
return await this.deriveKeyPair(entry);
|
|
37
|
+
}
|
|
38
|
+
async getPublicJwk(algorithm = oauth_jwe_constants_1.JWE_KEY_ALGORITHMS[0]) {
|
|
39
|
+
const { publicJwk } = await this.getKeyPair(algorithm);
|
|
40
|
+
return publicJwk;
|
|
41
|
+
}
|
|
42
|
+
async getPublicJwks() {
|
|
43
|
+
const data = await this.loadData();
|
|
44
|
+
return await Promise.all(data.map(async (entry) => (await this.deriveKeyPair(entry)).publicJwk));
|
|
45
|
+
}
|
|
46
|
+
async findEntry(algorithm) {
|
|
47
|
+
const data = await this.loadData();
|
|
48
|
+
const entry = data.find((e) => e.algorithm === algorithm);
|
|
49
|
+
if (!entry) {
|
|
50
|
+
throw new n8n_workflow_1.UnexpectedError(`No active OAuth JWE key found for algorithm "${algorithm}"`);
|
|
51
|
+
}
|
|
52
|
+
return entry;
|
|
53
|
+
}
|
|
54
|
+
async loadData() {
|
|
55
|
+
const data = await this.cacheService.get(oauth_jwe_constants_1.JWE_KEY_CACHE_KEY, {
|
|
56
|
+
refreshFn: async () => await this.loadOrGenerate(),
|
|
57
|
+
});
|
|
58
|
+
if (!data || data.length === 0) {
|
|
59
|
+
throw new n8n_workflow_1.UnexpectedError('OAuth JWE key pair unavailable');
|
|
60
|
+
}
|
|
61
|
+
return data;
|
|
62
|
+
}
|
|
63
|
+
async deriveKeyPair(entry) {
|
|
64
|
+
const decryptedPrivate = this.cipher.decryptWithInstanceKey(entry.encryptedPrivateJwk);
|
|
65
|
+
const privateJwk = (0, n8n_workflow_1.jsonParse)(decryptedPrivate, {
|
|
66
|
+
errorMessage: 'Failed to parse OAuth JWE private key',
|
|
67
|
+
});
|
|
68
|
+
const publicJwk = toPublicJwk(privateJwk, entry.algorithm);
|
|
69
|
+
const [publicKey, privateKey] = await Promise.all([
|
|
70
|
+
(0, jose_1.importJWK)(publicJwk, entry.algorithm),
|
|
71
|
+
(0, jose_1.importJWK)(privateJwk, entry.algorithm),
|
|
72
|
+
]);
|
|
73
|
+
return {
|
|
74
|
+
algorithm: entry.algorithm,
|
|
75
|
+
publicKey: publicKey,
|
|
76
|
+
privateKey: privateKey,
|
|
77
|
+
publicJwk,
|
|
78
|
+
kid: entry.kid,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
async loadOrGenerate() {
|
|
82
|
+
const entries = [];
|
|
83
|
+
for (const algorithm of oauth_jwe_constants_1.JWE_KEY_ALGORITHMS) {
|
|
84
|
+
let entry = await this.readActiveEntry(algorithm);
|
|
85
|
+
if (!entry) {
|
|
86
|
+
await this.generateAndPersist(algorithm);
|
|
87
|
+
entry = await this.readActiveEntry(algorithm);
|
|
88
|
+
}
|
|
89
|
+
if (!entry) {
|
|
90
|
+
throw new n8n_workflow_1.UnexpectedError(`OAuth JWE key for algorithm "${algorithm}" not found after generation`);
|
|
91
|
+
}
|
|
92
|
+
entries.push(entry);
|
|
93
|
+
}
|
|
94
|
+
return entries;
|
|
95
|
+
}
|
|
96
|
+
async readActiveEntry(algorithm) {
|
|
97
|
+
const privateRow = await this.deploymentKeyRepository.findOne({
|
|
98
|
+
where: {
|
|
99
|
+
type: oauth_jwe_constants_1.JWE_PRIVATE_KEY_TYPE,
|
|
100
|
+
algorithm,
|
|
101
|
+
status: 'active',
|
|
102
|
+
},
|
|
103
|
+
});
|
|
104
|
+
if (!privateRow)
|
|
105
|
+
return null;
|
|
106
|
+
const decryptedPrivate = this.cipher.decryptWithInstanceKey(privateRow.value);
|
|
107
|
+
const privateJwk = (0, n8n_workflow_1.jsonParse)(decryptedPrivate, {
|
|
108
|
+
errorMessage: 'Failed to parse OAuth JWE private key',
|
|
109
|
+
});
|
|
110
|
+
if (!privateJwk.kid) {
|
|
111
|
+
throw new n8n_workflow_1.UnexpectedError(`OAuth JWE private key for "${algorithm}" is missing a kid`);
|
|
112
|
+
}
|
|
113
|
+
if (privateJwk.kid !== privateRow.id) {
|
|
114
|
+
throw new n8n_workflow_1.UnexpectedError(`OAuth JWE private key for "${algorithm}" has a kid that does not match its row id`);
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
algorithm,
|
|
118
|
+
encryptedPrivateJwk: privateRow.value,
|
|
119
|
+
kid: privateRow.id,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
async generateAndPersist(algorithm) {
|
|
123
|
+
const { privateKey } = await (0, jose_1.generateKeyPair)(algorithm, { extractable: true });
|
|
124
|
+
const id = (0, utils_1.generateNanoId)();
|
|
125
|
+
const privateJwk = {
|
|
126
|
+
...(await (0, jose_1.exportJWK)(privateKey)),
|
|
127
|
+
kid: id,
|
|
128
|
+
alg: algorithm,
|
|
129
|
+
use: oauth_jwe_constants_1.JWE_KEY_USE,
|
|
130
|
+
};
|
|
131
|
+
const encryptedPrivate = this.cipher.encryptWithInstanceKey(JSON.stringify(privateJwk));
|
|
132
|
+
try {
|
|
133
|
+
await this.deploymentKeyRepository.insert({
|
|
134
|
+
id,
|
|
135
|
+
type: oauth_jwe_constants_1.JWE_PRIVATE_KEY_TYPE,
|
|
136
|
+
value: encryptedPrivate,
|
|
137
|
+
algorithm,
|
|
138
|
+
status: 'active',
|
|
139
|
+
});
|
|
140
|
+
this.logger.info('Generated new instance OAuth JWE key pair', { algorithm, kid: id });
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
if (!isUniqueConstraintViolation(error))
|
|
144
|
+
throw error;
|
|
145
|
+
this.logger.debug('OAuth JWE key insert raced with another main; re-reading winner', error instanceof Error ? { algorithm, message: error.message } : { algorithm });
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
exports.OAuthJweKeyService = OAuthJweKeyService;
|
|
150
|
+
exports.OAuthJweKeyService = OAuthJweKeyService = __decorate([
|
|
151
|
+
(0, di_1.Service)(),
|
|
152
|
+
__metadata("design:paramtypes", [db_1.DeploymentKeyRepository,
|
|
153
|
+
n8n_core_1.Cipher,
|
|
154
|
+
cache_service_1.CacheService,
|
|
155
|
+
backend_common_1.Logger])
|
|
156
|
+
], OAuthJweKeyService);
|
|
157
|
+
const PUBLIC_JWK_FIELDS = {
|
|
158
|
+
'RSA-OAEP-256': ['kty', 'kid', 'alg', 'use', 'n', 'e'],
|
|
159
|
+
};
|
|
160
|
+
function toPublicJwk(privateJwk, algorithm) {
|
|
161
|
+
const allowed = PUBLIC_JWK_FIELDS[algorithm];
|
|
162
|
+
const entries = allowed
|
|
163
|
+
.filter((field) => privateJwk[field] !== undefined)
|
|
164
|
+
.map((field) => [field, privateJwk[field]]);
|
|
165
|
+
return Object.fromEntries(entries);
|
|
166
|
+
}
|
|
167
|
+
function isUniqueConstraintViolation(error) {
|
|
168
|
+
if (!(error instanceof typeorm_1.QueryFailedError))
|
|
169
|
+
return false;
|
|
170
|
+
const driverError = error.driverError;
|
|
171
|
+
const code = driverError?.code;
|
|
172
|
+
return code === '23505' || code === 'SQLITE_CONSTRAINT_UNIQUE';
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=oauth-jwe-key.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-jwe-key.service.js","sourceRoot":"","sources":["../../../src/modules/oauth-jwe/oauth-jwe-key.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
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.OAuthJweConfig = void 0;
|
|
13
|
+
const config_1 = require("@n8n/config");
|
|
14
|
+
let OAuthJweConfig = class OAuthJweConfig {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.rateLimitJwksPerMinute = 60;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
exports.OAuthJweConfig = OAuthJweConfig;
|
|
20
|
+
__decorate([
|
|
21
|
+
(0, config_1.Env)('N8N_OAUTH_JWE_JWKS_PER_MINUTE'),
|
|
22
|
+
__metadata("design:type", Number)
|
|
23
|
+
], OAuthJweConfig.prototype, "rateLimitJwksPerMinute", void 0);
|
|
24
|
+
exports.OAuthJweConfig = OAuthJweConfig = __decorate([
|
|
25
|
+
config_1.Config
|
|
26
|
+
], OAuthJweConfig);
|
|
27
|
+
//# sourceMappingURL=oauth-jwe.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-jwe.config.js","sourceRoot":"","sources":["../../../src/modules/oauth-jwe/oauth-jwe.config.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAA0C;AAGnC,IAAM,cAAc,GAApB,MAAM,cAAc;IAApB;QAGN,2BAAsB,GAAW,EAAE,CAAC;IACrC,CAAC;CAAA,CAAA;AAJY,wCAAc;AAG1B;IADC,IAAA,YAAG,EAAC,+BAA+B,CAAC;;8DACD;yBAHxB,cAAc;IAD1B,eAAM;GACM,cAAc,CAI1B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const JWE_PRIVATE_KEY_TYPE = "jwe.private-key";
|
|
2
|
+
export declare const JWE_RSA_ALGORITHMS: readonly ["RSA-OAEP-256"];
|
|
3
|
+
export type JweRsaAlgorithm = (typeof JWE_RSA_ALGORITHMS)[number];
|
|
4
|
+
export declare const JWE_EC_ALGORITHMS: readonly ["ECDH-ES", "ECDH-ES+A128KW", "ECDH-ES+A192KW", "ECDH-ES+A256KW"];
|
|
5
|
+
export type JweEcAlgorithm = (typeof JWE_EC_ALGORITHMS)[number];
|
|
6
|
+
export declare const JWE_KEY_ALGORITHMS: readonly ["RSA-OAEP-256"];
|
|
7
|
+
export type JweKeyAlgorithm = (typeof JWE_KEY_ALGORITHMS)[number];
|
|
8
|
+
export declare const JWE_KEY_USE = "enc";
|
|
9
|
+
export declare const JWE_KEY_CACHE_KEY = "jwe:key-pair";
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JWE_KEY_CACHE_KEY = exports.JWE_KEY_USE = exports.JWE_KEY_ALGORITHMS = exports.JWE_EC_ALGORITHMS = exports.JWE_RSA_ALGORITHMS = exports.JWE_PRIVATE_KEY_TYPE = void 0;
|
|
4
|
+
exports.JWE_PRIVATE_KEY_TYPE = 'jwe.private-key';
|
|
5
|
+
exports.JWE_RSA_ALGORITHMS = ['RSA-OAEP-256'];
|
|
6
|
+
exports.JWE_EC_ALGORITHMS = [
|
|
7
|
+
'ECDH-ES',
|
|
8
|
+
'ECDH-ES+A128KW',
|
|
9
|
+
'ECDH-ES+A192KW',
|
|
10
|
+
'ECDH-ES+A256KW',
|
|
11
|
+
];
|
|
12
|
+
exports.JWE_KEY_ALGORITHMS = ['RSA-OAEP-256'];
|
|
13
|
+
exports.JWE_KEY_USE = 'enc';
|
|
14
|
+
exports.JWE_KEY_CACHE_KEY = 'jwe:key-pair';
|
|
15
|
+
//# sourceMappingURL=oauth-jwe.constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-jwe.constants.js","sourceRoot":"","sources":["../../../src/modules/oauth-jwe/oauth-jwe.constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,oBAAoB,GAAG,iBAAiB,CAAC;AAMzC,QAAA,kBAAkB,GAAG,CAAC,cAAc,CAAU,CAAC;AAQ/C,QAAA,iBAAiB,GAAG;IAChC,SAAS;IACT,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;CACP,CAAC;AAUE,QAAA,kBAAkB,GAAG,CAAC,cAAc,CAAU,CAAC;AAG/C,QAAA,WAAW,GAAG,KAAK,CAAC;AACpB,QAAA,iBAAiB,GAAG,cAAc,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Logger } from '@n8n/backend-common';
|
|
2
|
+
import type { Response } from 'express';
|
|
3
|
+
import { AuthlessRequest } from '../../requests';
|
|
4
|
+
import { OAuthJweKeyService } from './oauth-jwe-key.service';
|
|
5
|
+
export declare class OAuthJweController {
|
|
6
|
+
private readonly jweKeyService;
|
|
7
|
+
private readonly logger;
|
|
8
|
+
constructor(jweKeyService: OAuthJweKeyService, logger: Logger);
|
|
9
|
+
getKeys(_req: AuthlessRequest, res: Response): Promise<void>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
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.OAuthJweController = void 0;
|
|
13
|
+
const backend_common_1 = require("@n8n/backend-common");
|
|
14
|
+
const constants_1 = require("@n8n/constants");
|
|
15
|
+
const decorators_1 = require("@n8n/decorators");
|
|
16
|
+
const di_1 = require("@n8n/di");
|
|
17
|
+
const oauth_jwe_key_service_1 = require("./oauth-jwe-key.service");
|
|
18
|
+
const oauth_jwe_config_1 = require("./oauth-jwe.config");
|
|
19
|
+
const oauth_jwe_schemas_1 = require("./oauth-jwe.schemas");
|
|
20
|
+
const configService = di_1.Container.get(oauth_jwe_config_1.OAuthJweConfig);
|
|
21
|
+
let OAuthJweController = class OAuthJweController {
|
|
22
|
+
constructor(jweKeyService, logger) {
|
|
23
|
+
this.jweKeyService = jweKeyService;
|
|
24
|
+
this.logger = logger;
|
|
25
|
+
}
|
|
26
|
+
async getKeys(_req, res) {
|
|
27
|
+
const jwks = await this.jweKeyService.getPublicJwks();
|
|
28
|
+
const keys = jwks
|
|
29
|
+
.map((key) => oauth_jwe_schemas_1.PublicJweJwkSchema.safeParse(key))
|
|
30
|
+
.filter((result) => {
|
|
31
|
+
if (!result.success) {
|
|
32
|
+
this.logger.warn('Failed to parse public JWK', { error: result.error });
|
|
33
|
+
}
|
|
34
|
+
return result.success;
|
|
35
|
+
})
|
|
36
|
+
.map((result) => result.data);
|
|
37
|
+
const response = { keys };
|
|
38
|
+
res.setHeader('Cache-Control', 'public, max-age=3600, must-revalidate');
|
|
39
|
+
res.json(response);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
exports.OAuthJweController = OAuthJweController;
|
|
43
|
+
__decorate([
|
|
44
|
+
(0, decorators_1.Get)('/jwks.json', {
|
|
45
|
+
skipAuth: true,
|
|
46
|
+
ipRateLimit: {
|
|
47
|
+
limit: configService.rateLimitJwksPerMinute,
|
|
48
|
+
windowMs: 1 * constants_1.Time.minutes.toMilliseconds,
|
|
49
|
+
},
|
|
50
|
+
}),
|
|
51
|
+
__metadata("design:type", Function),
|
|
52
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
53
|
+
__metadata("design:returntype", Promise)
|
|
54
|
+
], OAuthJweController.prototype, "getKeys", null);
|
|
55
|
+
exports.OAuthJweController = OAuthJweController = __decorate([
|
|
56
|
+
(0, decorators_1.RestController)('/.well-known'),
|
|
57
|
+
__metadata("design:paramtypes", [oauth_jwe_key_service_1.OAuthJweKeyService,
|
|
58
|
+
backend_common_1.Logger])
|
|
59
|
+
], OAuthJweController);
|
|
60
|
+
//# sourceMappingURL=oauth-jwe.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-jwe.controller.js","sourceRoot":"","sources":["../../../src/modules/oauth-jwe/oauth-jwe.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wDAA6C;AAC7C,8CAAsC;AACtC,gDAAsD;AACtD,gCAAoC;AAKpC,mEAA6D;AAC7D,yDAAoD;AACpD,2DAA4E;AAE5E,MAAM,aAAa,GAAG,cAAS,CAAC,GAAG,CAAC,iCAAc,CAAC,CAAC;AAG7C,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAC9B,YACkB,aAAiC,EACjC,MAAc;QADd,kBAAa,GAAb,aAAa,CAAoB;QACjC,WAAM,GAAN,MAAM,CAAQ;IAC7B,CAAC;IASE,AAAN,KAAK,CAAC,OAAO,CAAC,IAAqB,EAAE,GAAa;QACjD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;QAEtD,MAAM,IAAI,GAAG,IAAI;aACf,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,sCAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;aAC/C,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;YAClB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACzE,CAAC;YACD,OAAO,MAAM,CAAC,OAAO,CAAC;QACvB,CAAC,CAAC;aACD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE/B,MAAM,QAAQ,GAAiB,EAAE,IAAI,EAAE,CAAC;QAExC,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,uCAAuC,CAAC,CAAC;QACxE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpB,CAAC;CACD,CAAA;AA/BY,gDAAkB;AAaxB;IAPL,IAAA,gBAAG,EAAC,YAAY,EAAE;QAClB,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE;YACZ,KAAK,EAAE,aAAa,CAAC,sBAAsB;YAC3C,QAAQ,EAAE,CAAC,GAAG,gBAAI,CAAC,OAAO,CAAC,cAAc;SACzC;KACD,CAAC;;;;iDAkBD;6BA9BW,kBAAkB;IAD9B,IAAA,2BAAc,EAAC,cAAc,CAAC;qCAGG,0CAAkB;QACzB,uBAAM;GAHpB,kBAAkB,CA+B9B"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ModuleInterface } from '@n8n/decorators';
|
|
2
|
+
import { OAuthJweServiceProxy } from '../../oauth/oauth-jwe-service.proxy';
|
|
3
|
+
export declare class OAuthJweModule implements ModuleInterface {
|
|
4
|
+
init(): Promise<void>;
|
|
5
|
+
context(): Promise<{
|
|
6
|
+
oauthJweProxyProvider: OAuthJweServiceProxy;
|
|
7
|
+
}>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
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;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.OAuthJweModule = void 0;
|
|
43
|
+
const decorators_1 = require("@n8n/decorators");
|
|
44
|
+
const di_1 = require("@n8n/di");
|
|
45
|
+
const n8n_core_1 = require("n8n-core");
|
|
46
|
+
const oauth_jwe_service_proxy_1 = require("../../oauth/oauth-jwe-service.proxy");
|
|
47
|
+
function isFeatureFlagEnabled() {
|
|
48
|
+
return process.env.N8N_ENV_FEAT_OAUTH2_JWE === 'true';
|
|
49
|
+
}
|
|
50
|
+
let OAuthJweModule = class OAuthJweModule {
|
|
51
|
+
async init() {
|
|
52
|
+
if (!isFeatureFlagEnabled())
|
|
53
|
+
return;
|
|
54
|
+
const { OAuthJweDecryptService } = await Promise.resolve().then(() => __importStar(require('./oauth-jwe-decrypt.service')));
|
|
55
|
+
di_1.Container.get(oauth_jwe_service_proxy_1.OAuthJweServiceProxy).setHandler(di_1.Container.get(OAuthJweDecryptService));
|
|
56
|
+
if (di_1.Container.get(n8n_core_1.InstanceSettings).instanceType === 'main') {
|
|
57
|
+
const { OAuthJweKeyService } = await Promise.resolve().then(() => __importStar(require('./oauth-jwe-key.service')));
|
|
58
|
+
await di_1.Container.get(OAuthJweKeyService).initialize();
|
|
59
|
+
await Promise.resolve().then(() => __importStar(require('./oauth-jwe.controller')));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async context() {
|
|
63
|
+
return { oauthJweProxyProvider: di_1.Container.get(oauth_jwe_service_proxy_1.OAuthJweServiceProxy) };
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
exports.OAuthJweModule = OAuthJweModule;
|
|
67
|
+
exports.OAuthJweModule = OAuthJweModule = __decorate([
|
|
68
|
+
(0, decorators_1.BackendModule)({ name: 'oauth-jwe' })
|
|
69
|
+
], OAuthJweModule);
|
|
70
|
+
//# sourceMappingURL=oauth-jwe.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-jwe.module.js","sourceRoot":"","sources":["../../../src/modules/oauth-jwe/oauth-jwe.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,gDAAgD;AAChD,gCAAoC;AACpC,uCAA4C;AAE5C,6EAAuE;AAEvE,SAAS,oBAAoB;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,MAAM,CAAC;AACvD,CAAC;AAGM,IAAM,cAAc,GAApB,MAAM,cAAc;IAC1B,KAAK,CAAC,IAAI;QACT,IAAI,CAAC,oBAAoB,EAAE;YAAE,OAAO;QAEpC,MAAM,EAAE,sBAAsB,EAAE,GAAG,wDAAa,6BAA6B,GAAC,CAAC;QAC/E,cAAS,CAAC,GAAG,CAAC,8CAAoB,CAAC,CAAC,UAAU,CAAC,cAAS,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAMtF,IAAI,cAAS,CAAC,GAAG,CAAC,2BAAgB,CAAC,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;YAC7D,MAAM,EAAE,kBAAkB,EAAE,GAAG,wDAAa,yBAAyB,GAAC,CAAC;YACvE,MAAM,cAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,UAAU,EAAE,CAAC;YACrD,wDAAa,wBAAwB,GAAC,CAAC;QACxC,CAAC;IACF,CAAC;IAED,KAAK,CAAC,OAAO;QACZ,OAAO,EAAE,qBAAqB,EAAE,cAAS,CAAC,GAAG,CAAC,8CAAoB,CAAC,EAAE,CAAC;IACvE,CAAC;CACD,CAAA;AArBY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,0BAAa,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;GACxB,cAAc,CAqB1B"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const PublicJweJwkSchema: z.ZodDiscriminatedUnion<"kty", [z.ZodObject<{
|
|
3
|
+
kty: z.ZodLiteral<"RSA">;
|
|
4
|
+
kid: z.ZodString;
|
|
5
|
+
use: z.ZodLiteral<"enc">;
|
|
6
|
+
alg: z.ZodEnum<["RSA-OAEP-256"]>;
|
|
7
|
+
n: z.ZodString;
|
|
8
|
+
e: z.ZodString;
|
|
9
|
+
}, "strict", z.ZodTypeAny, {
|
|
10
|
+
kid: string;
|
|
11
|
+
use: "enc";
|
|
12
|
+
e: string;
|
|
13
|
+
n: string;
|
|
14
|
+
kty: "RSA";
|
|
15
|
+
alg: "RSA-OAEP-256";
|
|
16
|
+
}, {
|
|
17
|
+
kid: string;
|
|
18
|
+
use: "enc";
|
|
19
|
+
e: string;
|
|
20
|
+
n: string;
|
|
21
|
+
kty: "RSA";
|
|
22
|
+
alg: "RSA-OAEP-256";
|
|
23
|
+
}>, z.ZodObject<{
|
|
24
|
+
kty: z.ZodLiteral<"EC">;
|
|
25
|
+
kid: z.ZodString;
|
|
26
|
+
use: z.ZodLiteral<"enc">;
|
|
27
|
+
alg: z.ZodEnum<["ECDH-ES", "ECDH-ES+A128KW", "ECDH-ES+A192KW", "ECDH-ES+A256KW"]>;
|
|
28
|
+
crv: z.ZodEnum<["P-256", "P-384", "P-521"]>;
|
|
29
|
+
x: z.ZodString;
|
|
30
|
+
y: z.ZodString;
|
|
31
|
+
}, "strict", z.ZodTypeAny, {
|
|
32
|
+
y: string;
|
|
33
|
+
kid: string;
|
|
34
|
+
use: "enc";
|
|
35
|
+
crv: "P-256" | "P-384" | "P-521";
|
|
36
|
+
x: string;
|
|
37
|
+
kty: "EC";
|
|
38
|
+
alg: "ECDH-ES" | "ECDH-ES+A128KW" | "ECDH-ES+A192KW" | "ECDH-ES+A256KW";
|
|
39
|
+
}, {
|
|
40
|
+
y: string;
|
|
41
|
+
kid: string;
|
|
42
|
+
use: "enc";
|
|
43
|
+
crv: "P-256" | "P-384" | "P-521";
|
|
44
|
+
x: string;
|
|
45
|
+
kty: "EC";
|
|
46
|
+
alg: "ECDH-ES" | "ECDH-ES+A128KW" | "ECDH-ES+A192KW" | "ECDH-ES+A256KW";
|
|
47
|
+
}>]>;
|
|
48
|
+
export type PublicJweJwk = z.infer<typeof PublicJweJwkSchema>;
|
|
49
|
+
export declare const JwksResponseSchema: z.ZodObject<{
|
|
50
|
+
keys: z.ZodArray<z.ZodDiscriminatedUnion<"kty", [z.ZodObject<{
|
|
51
|
+
kty: z.ZodLiteral<"RSA">;
|
|
52
|
+
kid: z.ZodString;
|
|
53
|
+
use: z.ZodLiteral<"enc">;
|
|
54
|
+
alg: z.ZodEnum<["RSA-OAEP-256"]>;
|
|
55
|
+
n: z.ZodString;
|
|
56
|
+
e: z.ZodString;
|
|
57
|
+
}, "strict", z.ZodTypeAny, {
|
|
58
|
+
kid: string;
|
|
59
|
+
use: "enc";
|
|
60
|
+
e: string;
|
|
61
|
+
n: string;
|
|
62
|
+
kty: "RSA";
|
|
63
|
+
alg: "RSA-OAEP-256";
|
|
64
|
+
}, {
|
|
65
|
+
kid: string;
|
|
66
|
+
use: "enc";
|
|
67
|
+
e: string;
|
|
68
|
+
n: string;
|
|
69
|
+
kty: "RSA";
|
|
70
|
+
alg: "RSA-OAEP-256";
|
|
71
|
+
}>, z.ZodObject<{
|
|
72
|
+
kty: z.ZodLiteral<"EC">;
|
|
73
|
+
kid: z.ZodString;
|
|
74
|
+
use: z.ZodLiteral<"enc">;
|
|
75
|
+
alg: z.ZodEnum<["ECDH-ES", "ECDH-ES+A128KW", "ECDH-ES+A192KW", "ECDH-ES+A256KW"]>;
|
|
76
|
+
crv: z.ZodEnum<["P-256", "P-384", "P-521"]>;
|
|
77
|
+
x: z.ZodString;
|
|
78
|
+
y: z.ZodString;
|
|
79
|
+
}, "strict", z.ZodTypeAny, {
|
|
80
|
+
y: string;
|
|
81
|
+
kid: string;
|
|
82
|
+
use: "enc";
|
|
83
|
+
crv: "P-256" | "P-384" | "P-521";
|
|
84
|
+
x: string;
|
|
85
|
+
kty: "EC";
|
|
86
|
+
alg: "ECDH-ES" | "ECDH-ES+A128KW" | "ECDH-ES+A192KW" | "ECDH-ES+A256KW";
|
|
87
|
+
}, {
|
|
88
|
+
y: string;
|
|
89
|
+
kid: string;
|
|
90
|
+
use: "enc";
|
|
91
|
+
crv: "P-256" | "P-384" | "P-521";
|
|
92
|
+
x: string;
|
|
93
|
+
kty: "EC";
|
|
94
|
+
alg: "ECDH-ES" | "ECDH-ES+A128KW" | "ECDH-ES+A192KW" | "ECDH-ES+A256KW";
|
|
95
|
+
}>]>, "many">;
|
|
96
|
+
}, "strip", z.ZodTypeAny, {
|
|
97
|
+
keys: ({
|
|
98
|
+
kid: string;
|
|
99
|
+
use: "enc";
|
|
100
|
+
e: string;
|
|
101
|
+
n: string;
|
|
102
|
+
kty: "RSA";
|
|
103
|
+
alg: "RSA-OAEP-256";
|
|
104
|
+
} | {
|
|
105
|
+
y: string;
|
|
106
|
+
kid: string;
|
|
107
|
+
use: "enc";
|
|
108
|
+
crv: "P-256" | "P-384" | "P-521";
|
|
109
|
+
x: string;
|
|
110
|
+
kty: "EC";
|
|
111
|
+
alg: "ECDH-ES" | "ECDH-ES+A128KW" | "ECDH-ES+A192KW" | "ECDH-ES+A256KW";
|
|
112
|
+
})[];
|
|
113
|
+
}, {
|
|
114
|
+
keys: ({
|
|
115
|
+
kid: string;
|
|
116
|
+
use: "enc";
|
|
117
|
+
e: string;
|
|
118
|
+
n: string;
|
|
119
|
+
kty: "RSA";
|
|
120
|
+
alg: "RSA-OAEP-256";
|
|
121
|
+
} | {
|
|
122
|
+
y: string;
|
|
123
|
+
kid: string;
|
|
124
|
+
use: "enc";
|
|
125
|
+
crv: "P-256" | "P-384" | "P-521";
|
|
126
|
+
x: string;
|
|
127
|
+
kty: "EC";
|
|
128
|
+
alg: "ECDH-ES" | "ECDH-ES+A128KW" | "ECDH-ES+A192KW" | "ECDH-ES+A256KW";
|
|
129
|
+
})[];
|
|
130
|
+
}>;
|
|
131
|
+
export type JwksResponse = z.infer<typeof JwksResponseSchema>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JwksResponseSchema = exports.PublicJweJwkSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const oauth_jwe_constants_1 = require("./oauth-jwe.constants");
|
|
6
|
+
const RsaPublicJwkSchema = zod_1.z
|
|
7
|
+
.object({
|
|
8
|
+
kty: zod_1.z.literal('RSA'),
|
|
9
|
+
kid: zod_1.z.string().min(1),
|
|
10
|
+
use: zod_1.z.literal(oauth_jwe_constants_1.JWE_KEY_USE),
|
|
11
|
+
alg: zod_1.z.enum(oauth_jwe_constants_1.JWE_RSA_ALGORITHMS),
|
|
12
|
+
n: zod_1.z.string().min(1),
|
|
13
|
+
e: zod_1.z.string().min(1),
|
|
14
|
+
})
|
|
15
|
+
.strict();
|
|
16
|
+
const EcPublicJwkSchema = zod_1.z
|
|
17
|
+
.object({
|
|
18
|
+
kty: zod_1.z.literal('EC'),
|
|
19
|
+
kid: zod_1.z.string().min(1),
|
|
20
|
+
use: zod_1.z.literal(oauth_jwe_constants_1.JWE_KEY_USE),
|
|
21
|
+
alg: zod_1.z.enum(oauth_jwe_constants_1.JWE_EC_ALGORITHMS),
|
|
22
|
+
crv: zod_1.z.enum(['P-256', 'P-384', 'P-521']),
|
|
23
|
+
x: zod_1.z.string().min(1),
|
|
24
|
+
y: zod_1.z.string().min(1),
|
|
25
|
+
})
|
|
26
|
+
.strict();
|
|
27
|
+
exports.PublicJweJwkSchema = zod_1.z.discriminatedUnion('kty', [
|
|
28
|
+
RsaPublicJwkSchema,
|
|
29
|
+
EcPublicJwkSchema,
|
|
30
|
+
]);
|
|
31
|
+
exports.JwksResponseSchema = zod_1.z.object({
|
|
32
|
+
keys: zod_1.z.array(exports.PublicJweJwkSchema),
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=oauth-jwe.schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-jwe.schemas.js","sourceRoot":"","sources":["../../../src/modules/oauth-jwe/oauth-jwe.schemas.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAExB,+DAA2F;AAO3F,MAAM,kBAAkB,GAAG,OAAC;KAC1B,MAAM,CAAC;IACP,GAAG,EAAE,OAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IACrB,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtB,GAAG,EAAE,OAAC,CAAC,OAAO,CAAC,iCAAW,CAAC;IAC3B,GAAG,EAAE,OAAC,CAAC,IAAI,CAAC,wCAAkB,CAAC;IAC/B,CAAC,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACpB,CAAC,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACpB,CAAC;KACD,MAAM,EAAE,CAAC;AAMX,MAAM,iBAAiB,GAAG,OAAC;KACzB,MAAM,CAAC;IACP,GAAG,EAAE,OAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IACpB,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtB,GAAG,EAAE,OAAC,CAAC,OAAO,CAAC,iCAAW,CAAC;IAC3B,GAAG,EAAE,OAAC,CAAC,IAAI,CAAC,uCAAiB,CAAC;IAC9B,GAAG,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACpB,CAAC,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACpB,CAAC;KACD,MAAM,EAAE,CAAC;AAOE,QAAA,kBAAkB,GAAG,OAAC,CAAC,kBAAkB,CAAC,KAAK,EAAE;IAC7D,kBAAkB;IAClB,iBAAiB;CACjB,CAAC,CAAC;AAIU,QAAA,kBAAkB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,OAAC,CAAC,KAAK,CAAC,0BAAkB,CAAC;CACjC,CAAC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CryptoKey } from 'jose';
|
|
2
|
+
export declare function isJweToken(token: unknown): token is string;
|
|
3
|
+
export declare function decryptJweToken(token: string, privateKey: CryptoKey): Promise<string>;
|
|
4
|
+
export declare function decryptJweTokenData(data: Record<string, unknown>, privateKey: CryptoKey): Promise<Record<string, unknown>>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isJweToken = isJweToken;
|
|
4
|
+
exports.decryptJweToken = decryptJweToken;
|
|
5
|
+
exports.decryptJweTokenData = decryptJweTokenData;
|
|
6
|
+
const jose_1 = require("jose");
|
|
7
|
+
const JWE_SEGMENT_COUNT = 5;
|
|
8
|
+
function isJweToken(token) {
|
|
9
|
+
if (typeof token !== 'string' || token.length === 0)
|
|
10
|
+
return false;
|
|
11
|
+
return token.split('.').length === JWE_SEGMENT_COUNT;
|
|
12
|
+
}
|
|
13
|
+
async function decryptJweToken(token, privateKey) {
|
|
14
|
+
const { plaintext } = await (0, jose_1.compactDecrypt)(token, privateKey);
|
|
15
|
+
return new TextDecoder().decode(plaintext);
|
|
16
|
+
}
|
|
17
|
+
async function decryptJweTokenData(data, privateKey) {
|
|
18
|
+
const result = { ...data };
|
|
19
|
+
for (const field of ['access_token', 'id_token']) {
|
|
20
|
+
const value = result[field];
|
|
21
|
+
if (isJweToken(value)) {
|
|
22
|
+
result[field] = await decryptJweToken(value, privateKey);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=oauth-jwe.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-jwe.utils.js","sourceRoot":"","sources":["../../../src/modules/oauth-jwe/oauth-jwe.utils.ts"],"names":[],"mappings":";;AAWA,gCAGC;AAOD,0CAGC;AAOD,kDAcC;AA5CD,+BAAsC;AAEtC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAQ5B,SAAgB,UAAU,CAAC,KAAc;IACxC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAClE,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,iBAAiB,CAAC;AACtD,CAAC;AAOM,KAAK,UAAU,eAAe,CAAC,KAAa,EAAE,UAAqB;IACzE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,IAAA,qBAAc,EAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC9D,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAC5C,CAAC;AAOM,KAAK,UAAU,mBAAmB,CACxC,IAA6B,EAC7B,UAAqB;IAErB,MAAM,MAAM,GAA4B,EAAE,GAAG,IAAI,EAAE,CAAC;IAEpD,KAAK,MAAM,KAAK,IAAI,CAAC,cAAc,EAAE,UAAU,CAAU,EAAE,CAAC;QAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC1D,CAAC;IACF,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC"}
|
|
@@ -422,7 +422,7 @@ let SourceControlExportService = class SourceControlExportService {
|
|
|
422
422
|
teamName: sharing.project.name,
|
|
423
423
|
};
|
|
424
424
|
}
|
|
425
|
-
const sanitizedData = (0, source_control_helper_ee_1.sanitizeCredentialData)(credentials.getData());
|
|
425
|
+
const sanitizedData = (0, source_control_helper_ee_1.sanitizeCredentialData)(await credentials.getData());
|
|
426
426
|
const stub = {
|
|
427
427
|
id,
|
|
428
428
|
name,
|