n8n 1.119.1 → 1.120.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.
Files changed (148) hide show
  1. package/dist/auth/auth.service.js +1 -0
  2. package/dist/auth/auth.service.js.map +1 -1
  3. package/dist/build.tsbuildinfo +1 -1
  4. package/dist/controller.registry.d.ts +1 -0
  5. package/dist/controller.registry.js +37 -12
  6. package/dist/controller.registry.js.map +1 -1
  7. package/dist/controllers/auth.controller.js +3 -1
  8. package/dist/controllers/auth.controller.js.map +1 -1
  9. package/dist/events/maps/relay.event-map.d.ts +1 -1
  10. package/dist/middlewares/list-query/dtos/workflow.filter.dto.d.ts +1 -1
  11. package/dist/middlewares/list-query/dtos/workflow.filter.dto.js +1 -1
  12. package/dist/middlewares/list-query/dtos/workflow.filter.dto.js.map +1 -1
  13. package/dist/middlewares/list-query/dtos/workflow.select.dto.js +1 -0
  14. package/dist/middlewares/list-query/dtos/workflow.select.dto.js.map +1 -1
  15. package/dist/modules/breaking-changes/breaking-changes.controller.d.ts +7 -3
  16. package/dist/modules/breaking-changes/breaking-changes.controller.js +39 -6
  17. package/dist/modules/breaking-changes/breaking-changes.controller.js.map +1 -1
  18. package/dist/modules/breaking-changes/breaking-changes.service.d.ts +9 -6
  19. package/dist/modules/breaking-changes/breaking-changes.service.js +67 -38
  20. package/dist/modules/breaking-changes/breaking-changes.service.js.map +1 -1
  21. package/dist/modules/breaking-changes/rules/v2/file-access.rule.d.ts +5 -4
  22. package/dist/modules/breaking-changes/rules/v2/file-access.rule.js +4 -3
  23. package/dist/modules/breaking-changes/rules/v2/file-access.rule.js.map +1 -1
  24. package/dist/modules/breaking-changes/rules/v2/process-env-access.rule.d.ts +5 -4
  25. package/dist/modules/breaking-changes/rules/v2/process-env-access.rule.js +11 -13
  26. package/dist/modules/breaking-changes/rules/v2/process-env-access.rule.js.map +1 -1
  27. package/dist/modules/breaking-changes/rules/v2/removed-nodes.rule.d.ts +5 -4
  28. package/dist/modules/breaking-changes/rules/v2/removed-nodes.rule.js +4 -3
  29. package/dist/modules/breaking-changes/rules/v2/removed-nodes.rule.js.map +1 -1
  30. package/dist/modules/breaking-changes/types/detection.types.d.ts +9 -10
  31. package/dist/modules/breaking-changes/types/rule.types.d.ts +9 -48
  32. package/dist/modules/breaking-changes/types/rule.types.js +1 -14
  33. package/dist/modules/breaking-changes/types/rule.types.js.map +1 -1
  34. package/dist/modules/insights/database/repositories/insights-by-period-query.helper.d.ts +9 -2
  35. package/dist/modules/insights/database/repositories/insights-by-period-query.helper.js +28 -64
  36. package/dist/modules/insights/database/repositories/insights-by-period-query.helper.js.map +1 -1
  37. package/dist/modules/insights/insights.controller.js +1 -1
  38. package/dist/modules/mcp/database/entities/oauth-access-token.entity.d.ts +9 -0
  39. package/dist/modules/mcp/database/entities/oauth-access-token.entity.js +44 -0
  40. package/dist/modules/mcp/database/entities/oauth-access-token.entity.js.map +1 -0
  41. package/dist/modules/mcp/database/entities/oauth-authorization-code.entity.d.ts +15 -0
  42. package/dist/modules/mcp/database/entities/oauth-authorization-code.entity.js +69 -0
  43. package/dist/modules/mcp/database/entities/oauth-authorization-code.entity.js.map +1 -0
  44. package/dist/modules/mcp/database/entities/oauth-client.entity.d.ts +18 -0
  45. package/dist/modules/mcp/database/entities/oauth-client.entity.js +65 -0
  46. package/dist/modules/mcp/database/entities/oauth-client.entity.js.map +1 -0
  47. package/dist/modules/mcp/database/entities/oauth-refresh-token.entity.d.ts +10 -0
  48. package/dist/modules/mcp/database/entities/oauth-refresh-token.entity.js +49 -0
  49. package/dist/modules/mcp/database/entities/oauth-refresh-token.entity.js.map +1 -0
  50. package/dist/modules/mcp/database/entities/oauth-user-consent.entity.d.ts +10 -0
  51. package/dist/modules/mcp/database/entities/oauth-user-consent.entity.js +49 -0
  52. package/dist/modules/mcp/database/entities/oauth-user-consent.entity.js.map +1 -0
  53. package/dist/modules/mcp/database/repositories/oauth-access-token.repository.d.ts +5 -0
  54. package/dist/modules/mcp/database/repositories/oauth-access-token.repository.js +26 -0
  55. package/dist/modules/mcp/database/repositories/oauth-access-token.repository.js.map +1 -0
  56. package/dist/modules/mcp/database/repositories/oauth-authorization-code.repository.d.ts +5 -0
  57. package/dist/modules/mcp/database/repositories/oauth-authorization-code.repository.js +26 -0
  58. package/dist/modules/mcp/database/repositories/oauth-authorization-code.repository.js.map +1 -0
  59. package/dist/modules/mcp/database/repositories/oauth-client.repository.d.ts +5 -0
  60. package/dist/modules/mcp/database/repositories/oauth-client.repository.js +26 -0
  61. package/dist/modules/mcp/database/repositories/oauth-client.repository.js.map +1 -0
  62. package/dist/modules/mcp/database/repositories/oauth-refresh-token.repository.d.ts +5 -0
  63. package/dist/modules/mcp/database/repositories/oauth-refresh-token.repository.js +26 -0
  64. package/dist/modules/mcp/database/repositories/oauth-refresh-token.repository.js.map +1 -0
  65. package/dist/modules/mcp/database/repositories/oauth-user-consent.repository.d.ts +6 -0
  66. package/dist/modules/mcp/database/repositories/oauth-user-consent.repository.js +33 -0
  67. package/dist/modules/mcp/database/repositories/oauth-user-consent.repository.js.map +1 -0
  68. package/dist/modules/mcp/dto/approve-consent-request.dto.d.ts +8 -0
  69. package/dist/modules/mcp/dto/approve-consent-request.dto.js +11 -0
  70. package/dist/modules/mcp/dto/approve-consent-request.dto.js.map +1 -0
  71. package/dist/modules/mcp/mcp-api-key.service.d.ts +6 -9
  72. package/dist/modules/mcp/mcp-api-key.service.js +32 -61
  73. package/dist/modules/mcp/mcp-api-key.service.js.map +1 -1
  74. package/dist/modules/mcp/mcp-oauth-authorization-code.service.d.ts +11 -0
  75. package/dist/modules/mcp/mcp-oauth-authorization-code.service.js +76 -0
  76. package/dist/modules/mcp/mcp-oauth-authorization-code.service.js.map +1 -0
  77. package/dist/modules/mcp/mcp-oauth-consent.service.d.ts +20 -0
  78. package/dist/modules/mcp/mcp-oauth-consent.service.js +87 -0
  79. package/dist/modules/mcp/mcp-oauth-consent.service.js.map +1 -0
  80. package/dist/modules/mcp/mcp-oauth-service.d.ts +31 -0
  81. package/dist/modules/mcp/mcp-oauth-service.js +164 -0
  82. package/dist/modules/mcp/mcp-oauth-service.js.map +1 -0
  83. package/dist/modules/mcp/mcp-oauth-token.service.d.ts +28 -0
  84. package/dist/modules/mcp/mcp-oauth-token.service.js +182 -0
  85. package/dist/modules/mcp/mcp-oauth-token.service.js.map +1 -0
  86. package/dist/modules/mcp/mcp-oauth.helpers.d.ts +4 -0
  87. package/dist/modules/mcp/mcp-oauth.helpers.js +24 -0
  88. package/dist/modules/mcp/mcp-oauth.helpers.js.map +1 -0
  89. package/dist/modules/mcp/mcp-server-middleware.service.d.ts +18 -0
  90. package/dist/modules/mcp/mcp-server-middleware.service.js +94 -0
  91. package/dist/modules/mcp/mcp-server-middleware.service.js.map +1 -0
  92. package/dist/modules/mcp/mcp.auth.consent.controller.d.ts +17 -0
  93. package/dist/modules/mcp/mcp.auth.consent.controller.js +120 -0
  94. package/dist/modules/mcp/mcp.auth.consent.controller.js.map +1 -0
  95. package/dist/modules/mcp/mcp.controller.d.ts +2 -1
  96. package/dist/modules/mcp/mcp.controller.js +11 -3
  97. package/dist/modules/mcp/mcp.controller.js.map +1 -1
  98. package/dist/modules/mcp/mcp.module.d.ts +1 -0
  99. package/dist/modules/mcp/mcp.module.js +11 -0
  100. package/dist/modules/mcp/mcp.module.js.map +1 -1
  101. package/dist/modules/mcp/mcp.oauth-clients.controller.d.ts +12 -0
  102. package/dist/modules/mcp/mcp.oauth-clients.controller.js +93 -0
  103. package/dist/modules/mcp/mcp.oauth-clients.controller.js.map +1 -0
  104. package/dist/modules/mcp/mcp.oauth.controller.d.ts +13 -0
  105. package/dist/modules/mcp/mcp.oauth.controller.js +124 -0
  106. package/dist/modules/mcp/mcp.oauth.controller.js.map +1 -0
  107. package/dist/modules/mcp/mcp.types.d.ts +1 -2
  108. package/dist/modules/mcp/oauth-session.service.d.ts +16 -0
  109. package/dist/modules/mcp/oauth-session.service.js +48 -0
  110. package/dist/modules/mcp/oauth-session.service.js.map +1 -0
  111. package/dist/modules/mcp/tools/search-workflows.tool.d.ts +2 -3
  112. package/dist/modules/mcp/tools/search-workflows.tool.js +11 -10
  113. package/dist/modules/mcp/tools/search-workflows.tool.js.map +1 -1
  114. package/dist/modules/provisioning.ee/provisioning.service.ee.d.ts +4 -2
  115. package/dist/modules/provisioning.ee/provisioning.service.ee.js +20 -1
  116. package/dist/modules/provisioning.ee/provisioning.service.ee.js.map +1 -1
  117. package/dist/public-api/v1/handlers/users/users.service.ee.d.ts +6 -2
  118. package/dist/public-api/v1/handlers/users/users.service.ee.js +10 -3
  119. package/dist/public-api/v1/handlers/users/users.service.ee.js.map +1 -1
  120. package/dist/public-api/v1/openapi.yml +1 -1
  121. package/dist/services/import.service.js +0 -5
  122. package/dist/services/import.service.js.map +1 -1
  123. package/dist/services/jwt.service.d.ts +1 -1
  124. package/dist/services/jwt.service.js.map +1 -1
  125. package/dist/sso.ee/oidc/oidc.service.ee.js +6 -4
  126. package/dist/sso.ee/oidc/oidc.service.ee.js.map +1 -1
  127. package/dist/sso.ee/saml/routes/saml.controller.ee.d.ts +2 -10
  128. package/dist/sso.ee/saml/routes/saml.controller.ee.js +2 -9
  129. package/dist/sso.ee/saml/routes/saml.controller.ee.js.map +1 -1
  130. package/dist/sso.ee/saml/saml-helpers.d.ts +4 -1
  131. package/dist/sso.ee/saml/saml-helpers.js +10 -3
  132. package/dist/sso.ee/saml/saml-helpers.js.map +1 -1
  133. package/dist/sso.ee/saml/saml.service.ee.d.ts +4 -1
  134. package/dist/sso.ee/saml/saml.service.ee.js +20 -12
  135. package/dist/sso.ee/saml/saml.service.ee.js.map +1 -1
  136. package/dist/sso.ee/saml/types.d.ts +2 -2
  137. package/dist/telemetry/index.js +17 -3
  138. package/dist/telemetry/index.js.map +1 -1
  139. package/dist/utils/validate-database-type.d.ts +3 -1
  140. package/dist/utils/validate-database-type.js +26 -4
  141. package/dist/utils/validate-database-type.js.map +1 -1
  142. package/dist/workflows/workflow-finder.service.d.ts +1 -0
  143. package/dist/workflows/workflow.request.d.ts +1 -0
  144. package/dist/workflows/workflow.service.d.ts +2 -1
  145. package/dist/workflows/workflow.service.js +1 -0
  146. package/dist/workflows/workflow.service.js.map +1 -1
  147. package/dist/workflows/workflows.controller.d.ts +4 -0
  148. package/package.json +27 -27
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.McpOAuthHelpers = void 0;
4
+ class McpOAuthHelpers {
5
+ static buildSuccessRedirectUrl(redirectUri, code, state) {
6
+ const targetUrl = new URL(redirectUri);
7
+ targetUrl.searchParams.set('code', code);
8
+ if (state) {
9
+ targetUrl.searchParams.set('state', state);
10
+ }
11
+ return targetUrl.toString();
12
+ }
13
+ static buildErrorRedirectUrl(redirectUri, error, errorDescription, state) {
14
+ const targetUrl = new URL(redirectUri);
15
+ targetUrl.searchParams.set('error', error);
16
+ targetUrl.searchParams.set('error_description', errorDescription);
17
+ if (state) {
18
+ targetUrl.searchParams.set('state', state);
19
+ }
20
+ return targetUrl.toString();
21
+ }
22
+ }
23
+ exports.McpOAuthHelpers = McpOAuthHelpers;
24
+ //# sourceMappingURL=mcp-oauth.helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-oauth.helpers.js","sourceRoot":"","sources":["../../../src/modules/mcp/mcp-oauth.helpers.ts"],"names":[],"mappings":";;;AAGA,MAAa,eAAe;IAK3B,MAAM,CAAC,uBAAuB,CAAC,WAAmB,EAAE,IAAY,EAAE,KAAoB;QACrF,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;QACvC,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,KAAK,EAAE,CAAC;YACX,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,SAAS,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;IAMD,MAAM,CAAC,qBAAqB,CAC3B,WAAmB,EACnB,KAAa,EACb,gBAAwB,EACxB,KAAoB;QAEpB,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;QACvC,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC3C,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;QAClE,IAAI,KAAK,EAAE,CAAC;YACX,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,SAAS,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;CACD;AAhCD,0CAgCC"}
@@ -0,0 +1,18 @@
1
+ import { User } from '@n8n/db';
2
+ import { NextFunction, Response, Request } from 'express';
3
+ import { JwtService } from '../../services/jwt.service';
4
+ import { Telemetry } from '../../telemetry';
5
+ import { McpServerApiKeyService } from './mcp-api-key.service';
6
+ import { McpOAuthTokenService } from './mcp-oauth-token.service';
7
+ export declare class McpServerMiddlewareService {
8
+ private readonly mcpServerApiKeyService;
9
+ private readonly mcpAuthTokenService;
10
+ private readonly jwtService;
11
+ private readonly telemetry;
12
+ constructor(mcpServerApiKeyService: McpServerApiKeyService, mcpAuthTokenService: McpOAuthTokenService, jwtService: JwtService, telemetry: Telemetry);
13
+ getUserForToken(token: string): Promise<User | null>;
14
+ getAuthMiddleware(): (req: Request, res: Response, next: NextFunction) => Promise<void>;
15
+ private extractBearerToken;
16
+ private responseWithUnauthorized;
17
+ private trackUnauthorizedEvent;
18
+ }
@@ -0,0 +1,94 @@
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.McpServerMiddlewareService = void 0;
13
+ const di_1 = require("@n8n/di");
14
+ const auth_error_1 = require("../../errors/response-errors/auth.error");
15
+ const jwt_service_1 = require("../../services/jwt.service");
16
+ const telemetry_1 = require("../../telemetry");
17
+ const mcp_api_key_service_1 = require("./mcp-api-key.service");
18
+ const mcp_oauth_token_service_1 = require("./mcp-oauth-token.service");
19
+ const mcp_constants_1 = require("./mcp.constants");
20
+ const mcp_utils_1 = require("./mcp.utils");
21
+ let McpServerMiddlewareService = class McpServerMiddlewareService {
22
+ constructor(mcpServerApiKeyService, mcpAuthTokenService, jwtService, telemetry) {
23
+ this.mcpServerApiKeyService = mcpServerApiKeyService;
24
+ this.mcpAuthTokenService = mcpAuthTokenService;
25
+ this.jwtService = jwtService;
26
+ this.telemetry = telemetry;
27
+ }
28
+ async getUserForToken(token) {
29
+ let decoded;
30
+ try {
31
+ decoded = this.jwtService.decode(token);
32
+ }
33
+ catch (error) {
34
+ return null;
35
+ }
36
+ if (decoded?.meta?.isOAuth === true) {
37
+ return await this.mcpAuthTokenService.verifyOAuthAccessToken(token);
38
+ }
39
+ return await this.mcpServerApiKeyService.verifyApiKey(token);
40
+ }
41
+ getAuthMiddleware() {
42
+ return async (req, res, next) => {
43
+ const authorizationHeader = req.header('authorization');
44
+ if (!authorizationHeader) {
45
+ this.responseWithUnauthorized(res, req);
46
+ return;
47
+ }
48
+ const token = this.extractBearerToken(authorizationHeader);
49
+ if (!token) {
50
+ this.responseWithUnauthorized(res, req);
51
+ return;
52
+ }
53
+ const user = await this.getUserForToken(token);
54
+ if (!user) {
55
+ this.responseWithUnauthorized(res, req);
56
+ return;
57
+ }
58
+ req.user = user;
59
+ next();
60
+ };
61
+ }
62
+ extractBearerToken(headerValue) {
63
+ if (!headerValue.startsWith('Bearer')) {
64
+ throw new auth_error_1.AuthError('Invalid authorization header format');
65
+ }
66
+ const tokenMatch = headerValue.match(/^Bearer\s+(.+)$/i);
67
+ if (tokenMatch) {
68
+ return tokenMatch[1];
69
+ }
70
+ throw new auth_error_1.AuthError('Invalid authorization header format');
71
+ }
72
+ responseWithUnauthorized(res, req) {
73
+ this.trackUnauthorizedEvent(req);
74
+ res.status(401).send({ message: mcp_constants_1.UNAUTHORIZED_ERROR_MESSAGE });
75
+ }
76
+ trackUnauthorizedEvent(req) {
77
+ const clientInfo = (0, mcp_utils_1.getClientInfo)(req);
78
+ this.telemetry.track(mcp_constants_1.USER_CONNECTED_TO_MCP_EVENT, {
79
+ mcp_connection_status: 'error',
80
+ error: mcp_constants_1.UNAUTHORIZED_ERROR_MESSAGE,
81
+ client_name: clientInfo?.name,
82
+ client_version: clientInfo?.version,
83
+ });
84
+ }
85
+ };
86
+ exports.McpServerMiddlewareService = McpServerMiddlewareService;
87
+ exports.McpServerMiddlewareService = McpServerMiddlewareService = __decorate([
88
+ (0, di_1.Service)(),
89
+ __metadata("design:paramtypes", [mcp_api_key_service_1.McpServerApiKeyService,
90
+ mcp_oauth_token_service_1.McpOAuthTokenService,
91
+ jwt_service_1.JwtService,
92
+ telemetry_1.Telemetry])
93
+ ], McpServerMiddlewareService);
94
+ //# sourceMappingURL=mcp-server-middleware.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server-middleware.service.js","sourceRoot":"","sources":["../../../src/modules/mcp/mcp-server-middleware.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { Logger } from '@n8n/backend-common';
2
+ import type { AuthenticatedRequest } from '@n8n/db';
3
+ import type { Response } from 'express';
4
+ import { ApproveConsentRequestDto } from './dto/approve-consent-request.dto';
5
+ import { McpOAuthConsentService } from './mcp-oauth-consent.service';
6
+ import { OAuthSessionService } from './oauth-session.service';
7
+ export declare class McpConsentController {
8
+ private readonly logger;
9
+ private readonly consentService;
10
+ private readonly oauthSessionService;
11
+ constructor(logger: Logger, consentService: McpOAuthConsentService, oauthSessionService: OAuthSessionService);
12
+ getConsentDetails(req: AuthenticatedRequest, res: Response): Promise<void>;
13
+ approveConsent(req: AuthenticatedRequest, res: Response, payload: ApproveConsentRequestDto): Promise<void>;
14
+ private sendErrorResponse;
15
+ private sendInvalidSessionError;
16
+ private getAndValidateSessionToken;
17
+ }
@@ -0,0 +1,120 @@
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
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.McpConsentController = void 0;
16
+ const backend_common_1 = require("@n8n/backend-common");
17
+ const decorators_1 = require("@n8n/decorators");
18
+ const approve_consent_request_dto_1 = require("./dto/approve-consent-request.dto");
19
+ const mcp_oauth_consent_service_1 = require("./mcp-oauth-consent.service");
20
+ const oauth_session_service_1 = require("./oauth-session.service");
21
+ let McpConsentController = class McpConsentController {
22
+ constructor(logger, consentService, oauthSessionService) {
23
+ this.logger = logger;
24
+ this.consentService = consentService;
25
+ this.oauthSessionService = oauthSessionService;
26
+ }
27
+ async getConsentDetails(req, res) {
28
+ try {
29
+ const sessionToken = this.getAndValidateSessionToken(req, res);
30
+ if (!sessionToken)
31
+ return;
32
+ const consentDetails = await this.consentService.getConsentDetails(sessionToken);
33
+ if (!consentDetails) {
34
+ this.sendInvalidSessionError(res, true);
35
+ return;
36
+ }
37
+ res.json({
38
+ data: {
39
+ clientName: consentDetails.clientName,
40
+ clientId: consentDetails.clientId,
41
+ },
42
+ });
43
+ }
44
+ catch (error) {
45
+ this.logger.error('Failed to get consent details', { error });
46
+ this.oauthSessionService.clearSession(res);
47
+ this.sendErrorResponse(res, 500, 'Failed to load authorization details');
48
+ }
49
+ }
50
+ async approveConsent(req, res, payload) {
51
+ try {
52
+ const sessionToken = this.getAndValidateSessionToken(req, res);
53
+ if (!sessionToken)
54
+ return;
55
+ const result = await this.consentService.handleConsentDecision(sessionToken, req.user.id, payload.approved);
56
+ this.oauthSessionService.clearSession(res);
57
+ res.json({
58
+ data: {
59
+ status: 'success',
60
+ redirectUrl: result.redirectUrl,
61
+ },
62
+ });
63
+ }
64
+ catch (error) {
65
+ this.logger.error('Failed to process consent', { error });
66
+ this.oauthSessionService.clearSession(res);
67
+ const message = error instanceof Error ? error.message : 'Failed to process authorization';
68
+ this.sendErrorResponse(res, 500, message);
69
+ }
70
+ }
71
+ sendErrorResponse(res, statusCode, message) {
72
+ res.status(statusCode).json({
73
+ status: 'error',
74
+ message,
75
+ });
76
+ }
77
+ sendInvalidSessionError(res, clearCookie = false) {
78
+ if (clearCookie) {
79
+ this.oauthSessionService.clearSession(res);
80
+ }
81
+ this.sendErrorResponse(res, 400, 'Invalid or expired authorization session');
82
+ }
83
+ getAndValidateSessionToken(req, res) {
84
+ const sessionToken = this.oauthSessionService.getSessionToken(req.cookies);
85
+ if (!sessionToken) {
86
+ this.sendInvalidSessionError(res);
87
+ return null;
88
+ }
89
+ try {
90
+ this.oauthSessionService.verifySession(sessionToken);
91
+ return sessionToken;
92
+ }
93
+ catch (error) {
94
+ this.logger.debug('Invalid session token', { error });
95
+ this.sendInvalidSessionError(res, true);
96
+ return null;
97
+ }
98
+ }
99
+ };
100
+ exports.McpConsentController = McpConsentController;
101
+ __decorate([
102
+ (0, decorators_1.Get)('/details', { usesTemplates: true }),
103
+ __metadata("design:type", Function),
104
+ __metadata("design:paramtypes", [Object, Object]),
105
+ __metadata("design:returntype", Promise)
106
+ ], McpConsentController.prototype, "getConsentDetails", null);
107
+ __decorate([
108
+ (0, decorators_1.Post)('/approve', { usesTemplates: true }),
109
+ __param(2, decorators_1.Body),
110
+ __metadata("design:type", Function),
111
+ __metadata("design:paramtypes", [Object, Object, approve_consent_request_dto_1.ApproveConsentRequestDto]),
112
+ __metadata("design:returntype", Promise)
113
+ ], McpConsentController.prototype, "approveConsent", null);
114
+ exports.McpConsentController = McpConsentController = __decorate([
115
+ (0, decorators_1.RestController)('/consent'),
116
+ __metadata("design:paramtypes", [backend_common_1.Logger,
117
+ mcp_oauth_consent_service_1.McpOAuthConsentService,
118
+ oauth_session_service_1.OAuthSessionService])
119
+ ], McpConsentController);
120
+ //# sourceMappingURL=mcp.auth.consent.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.auth.consent.controller.js","sourceRoot":"","sources":["../../../src/modules/mcp/mcp.auth.consent.controller.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import { AuthenticatedRequest } from '@n8n/db';
2
2
  import type { Response } from 'express';
3
3
  import { ErrorReporter } from 'n8n-core';
4
+ import { Telemetry } from '../../telemetry';
4
5
  import { McpService } from './mcp.service';
5
6
  import { McpSettingsService } from './mcp.settings.service';
6
- import { Telemetry } from '../../telemetry';
7
7
  export type FlushableResponse = Response & {
8
8
  flush: () => void;
9
9
  };
@@ -13,6 +13,7 @@ export declare class McpController {
13
13
  private readonly mcpSettingsService;
14
14
  private readonly telemetry;
15
15
  constructor(errorReporter: ErrorReporter, mcpService: McpService, mcpSettingsService: McpSettingsService, telemetry: Telemetry);
16
+ private setCorsHeaders;
16
17
  build(req: AuthenticatedRequest, res: FlushableResponse): Promise<void>;
17
18
  private trackConnectionEvent;
18
19
  }
@@ -14,14 +14,14 @@ const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/server/streamable
14
14
  const decorators_1 = require("@n8n/decorators");
15
15
  const di_1 = require("@n8n/di");
16
16
  const n8n_core_1 = require("n8n-core");
17
- const mcp_api_key_service_1 = require("./mcp-api-key.service");
17
+ const telemetry_1 = require("../../telemetry");
18
+ const mcp_server_middleware_service_1 = require("./mcp-server-middleware.service");
18
19
  const mcp_constants_1 = require("./mcp.constants");
19
20
  const mcp_service_1 = require("./mcp.service");
20
21
  const mcp_settings_service_1 = require("./mcp.settings.service");
21
22
  const mcp_typeguards_1 = require("./mcp.typeguards");
22
23
  const mcp_utils_1 = require("./mcp.utils");
23
- const telemetry_1 = require("../../telemetry");
24
- const getAuthMiddleware = () => di_1.Container.get(mcp_api_key_service_1.McpServerApiKeyService).getAuthMiddleware();
24
+ const getAuthMiddleware = () => di_1.Container.get(mcp_server_middleware_service_1.McpServerMiddlewareService).getAuthMiddleware();
25
25
  let McpController = class McpController {
26
26
  constructor(errorReporter, mcpService, mcpSettingsService, telemetry) {
27
27
  this.errorReporter = errorReporter;
@@ -29,7 +29,15 @@ let McpController = class McpController {
29
29
  this.mcpSettingsService = mcpSettingsService;
30
30
  this.telemetry = telemetry;
31
31
  }
32
+ setCorsHeaders(res) {
33
+ res.header('Access-Control-Allow-Origin', '*');
34
+ res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
35
+ res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, X-Requested-With');
36
+ res.header('Access-Control-Allow-Credentials', 'true');
37
+ res.header('Access-Control-Max-Age', '86400');
38
+ }
32
39
  async build(req, res) {
40
+ this.setCorsHeaders(res);
33
41
  const body = req.body;
34
42
  const isInitializationRequest = (0, mcp_typeguards_1.isJSONRPCRequest)(body) ? body.method === 'initialize' : false;
35
43
  const clientInfo = (0, mcp_utils_1.getClientInfo)(req);
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.controller.js","sourceRoot":"","sources":["../../../src/modules/mcp/mcp.controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp.controller.js","sourceRoot":"","sources":["../../../src/modules/mcp/mcp.controller.ts"],"names":[],"mappings":"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"}
@@ -4,5 +4,6 @@ export declare class McpModule implements ModuleInterface {
4
4
  settings(): Promise<{
5
5
  mcpAccessEnabled: boolean;
6
6
  }>;
7
+ entities(): Promise<never>;
7
8
  shutdown(): Promise<void>;
8
9
  }
@@ -49,6 +49,9 @@ let McpModule = class McpModule {
49
49
  async init() {
50
50
  await Promise.resolve().then(() => __importStar(require('./mcp.controller')));
51
51
  await Promise.resolve().then(() => __importStar(require('./mcp.settings.controller')));
52
+ await Promise.resolve().then(() => __importStar(require('./mcp.oauth.controller')));
53
+ await Promise.resolve().then(() => __importStar(require('./mcp.auth.consent.controller')));
54
+ await Promise.resolve().then(() => __importStar(require('./mcp.oauth-clients.controller')));
52
55
  const { McpEventRelay } = await Promise.resolve().then(() => __importStar(require('./mcp.event-relay')));
53
56
  di_1.Container.get(McpEventRelay).init();
54
57
  }
@@ -57,6 +60,14 @@ let McpModule = class McpModule {
57
60
  const mcpAccessEnabled = await di_1.Container.get(McpSettingsService).getEnabled();
58
61
  return { mcpAccessEnabled };
59
62
  }
63
+ async entities() {
64
+ const { OAuthClient } = await Promise.resolve().then(() => __importStar(require('./database/entities/oauth-client.entity')));
65
+ const { AuthorizationCode } = await Promise.resolve().then(() => __importStar(require('./database/entities/oauth-authorization-code.entity')));
66
+ const { AccessToken } = await Promise.resolve().then(() => __importStar(require('./database/entities/oauth-access-token.entity')));
67
+ const { RefreshToken } = await Promise.resolve().then(() => __importStar(require('./database/entities/oauth-refresh-token.entity')));
68
+ const { UserConsent } = await Promise.resolve().then(() => __importStar(require('./database/entities/oauth-user-consent.entity')));
69
+ return [OAuthClient, AuthorizationCode, AccessToken, RefreshToken, UserConsent];
70
+ }
60
71
  async shutdown() { }
61
72
  };
62
73
  exports.McpModule = McpModule;
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.module.js","sourceRoot":"","sources":["../../../src/modules/mcp/mcp.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,gDAA4D;AAC5D,gCAAoC;AAQ7B,IAAM,SAAS,GAAf,MAAM,SAAS;IACrB,KAAK,CAAC,IAAI;QACT,wDAAa,kBAAkB,GAAC,CAAC;QACjC,wDAAa,2BAA2B,GAAC,CAAC;QAG1C,MAAM,EAAE,aAAa,EAAE,GAAG,wDAAa,mBAAmB,GAAC,CAAC;QAC5D,cAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC;IACrC,CAAC;IAOD,KAAK,CAAC,QAAQ;QACb,MAAM,EAAE,kBAAkB,EAAE,GAAG,wDAAa,wBAAwB,GAAC,CAAC;QACtE,MAAM,gBAAgB,GAAG,MAAM,cAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,UAAU,EAAE,CAAC;QAC9E,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC7B,CAAC;IAGK,AAAN,KAAK,CAAC,QAAQ,KAAI,CAAC;CACnB,CAAA;AAvBY,8BAAS;AAsBf;IADL,IAAA,uBAAU,GAAE;;;;yCACM;oBAtBP,SAAS;IADrB,IAAA,0BAAa,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;GAClB,SAAS,CAuBrB"}
1
+ {"version":3,"file":"mcp.module.js","sourceRoot":"","sources":["../../../src/modules/mcp/mcp.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,gDAA4D;AAC5D,gCAAoC;AAQ7B,IAAM,SAAS,GAAf,MAAM,SAAS;IACrB,KAAK,CAAC,IAAI;QACT,wDAAa,kBAAkB,GAAC,CAAC;QACjC,wDAAa,2BAA2B,GAAC,CAAC;QAC1C,wDAAa,wBAAwB,GAAC,CAAC;QACvC,wDAAa,+BAA+B,GAAC,CAAC;QAC9C,wDAAa,gCAAgC,GAAC,CAAC;QAG/C,MAAM,EAAE,aAAa,EAAE,GAAG,wDAAa,mBAAmB,GAAC,CAAC;QAC5D,cAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC;IACrC,CAAC;IAOD,KAAK,CAAC,QAAQ;QACb,MAAM,EAAE,kBAAkB,EAAE,GAAG,wDAAa,wBAAwB,GAAC,CAAC;QACtE,MAAM,gBAAgB,GAAG,MAAM,cAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,UAAU,EAAE,CAAC;QAC9E,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,QAAQ;QACb,MAAM,EAAE,WAAW,EAAE,GAAG,wDAAa,yCAAyC,GAAC,CAAC;QAChF,MAAM,EAAE,iBAAiB,EAAE,GAAG,wDAC7B,qDAAqD,GACrD,CAAC;QACF,MAAM,EAAE,WAAW,EAAE,GAAG,wDAAa,+CAA+C,GAAC,CAAC;QACtF,MAAM,EAAE,YAAY,EAAE,GAAG,wDAAa,gDAAgD,GAAC,CAAC;QACxF,MAAM,EAAE,WAAW,EAAE,GAAG,wDAAa,+CAA+C,GAAC,CAAC;QAEtF,OAAO,CAAC,WAAW,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,CAAU,CAAC;IAC1F,CAAC;IAGK,AAAN,KAAK,CAAC,QAAQ,KAAI,CAAC;CACnB,CAAA;AAtCY,8BAAS;AAqCf;IADL,IAAA,uBAAU,GAAE;;;;yCACM;oBArCP,SAAS;IADrB,IAAA,0BAAa,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;GAClB,SAAS,CAsCrB"}
@@ -0,0 +1,12 @@
1
+ import { DeleteOAuthClientResponseDto, ListOAuthClientsResponseDto } from '@n8n/api-types';
2
+ import { Logger } from '@n8n/backend-common';
3
+ import { AuthenticatedRequest } from '@n8n/db';
4
+ import type { Response } from 'express';
5
+ import { McpOAuthService } from './mcp-oauth-service';
6
+ export declare class McpOAuthClientsController {
7
+ private readonly mcpOAuthService;
8
+ private readonly logger;
9
+ constructor(mcpOAuthService: McpOAuthService, logger: Logger);
10
+ getAllClients(req: AuthenticatedRequest, _res: Response): Promise<ListOAuthClientsResponseDto>;
11
+ deleteClient(req: AuthenticatedRequest, _res: Response, clientId: string): Promise<DeleteOAuthClientResponseDto>;
12
+ }
@@ -0,0 +1,93 @@
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
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.McpOAuthClientsController = void 0;
16
+ const backend_common_1 = require("@n8n/backend-common");
17
+ const decorators_1 = require("@n8n/decorators");
18
+ const not_found_error_1 = require("../../errors/response-errors/not-found.error");
19
+ const mcp_oauth_service_1 = require("./mcp-oauth-service");
20
+ let McpOAuthClientsController = class McpOAuthClientsController {
21
+ constructor(mcpOAuthService, logger) {
22
+ this.mcpOAuthService = mcpOAuthService;
23
+ this.logger = logger;
24
+ }
25
+ async getAllClients(req, _res) {
26
+ this.logger.debug('Fetching all OAuth clients for user', { userId: req.user.id });
27
+ const clients = await this.mcpOAuthService.getAllClients(req.user.id);
28
+ this.logger.debug(`Found ${clients.length} OAuth clients`);
29
+ const clientDtos = clients.map((client) => ({
30
+ id: client.id,
31
+ name: client.name,
32
+ redirectUris: client.redirectUris,
33
+ grantTypes: client.grantTypes,
34
+ tokenEndpointAuthMethod: client.tokenEndpointAuthMethod,
35
+ createdAt: client.createdAt.toISOString(),
36
+ updatedAt: client.updatedAt.toISOString(),
37
+ }));
38
+ return {
39
+ data: clientDtos,
40
+ count: clients.length,
41
+ };
42
+ }
43
+ async deleteClient(req, _res, clientId) {
44
+ this.logger.info('Deleting OAuth client', {
45
+ clientId,
46
+ userId: req.user.id,
47
+ userEmail: req.user.email,
48
+ });
49
+ try {
50
+ await this.mcpOAuthService.deleteClient(clientId);
51
+ this.logger.info('OAuth client deleted successfully', {
52
+ clientId,
53
+ userId: req.user.id,
54
+ });
55
+ return {
56
+ success: true,
57
+ message: `OAuth client ${clientId} has been deleted successfully`,
58
+ };
59
+ }
60
+ catch (error) {
61
+ if (error instanceof Error && error.message.includes('not found')) {
62
+ this.logger.warn('Attempted to delete non-existent OAuth client', {
63
+ clientId,
64
+ userId: req.user.id,
65
+ });
66
+ throw new not_found_error_1.NotFoundError(`OAuth client with ID ${clientId} not found`);
67
+ }
68
+ throw error;
69
+ }
70
+ }
71
+ };
72
+ exports.McpOAuthClientsController = McpOAuthClientsController;
73
+ __decorate([
74
+ (0, decorators_1.GlobalScope)('mcp:oauth'),
75
+ (0, decorators_1.Get)('/'),
76
+ __metadata("design:type", Function),
77
+ __metadata("design:paramtypes", [Object, Object]),
78
+ __metadata("design:returntype", Promise)
79
+ ], McpOAuthClientsController.prototype, "getAllClients", null);
80
+ __decorate([
81
+ (0, decorators_1.GlobalScope)('mcp:oauth'),
82
+ (0, decorators_1.Delete)('/:clientId'),
83
+ __param(2, (0, decorators_1.Param)('clientId')),
84
+ __metadata("design:type", Function),
85
+ __metadata("design:paramtypes", [Object, Object, String]),
86
+ __metadata("design:returntype", Promise)
87
+ ], McpOAuthClientsController.prototype, "deleteClient", null);
88
+ exports.McpOAuthClientsController = McpOAuthClientsController = __decorate([
89
+ (0, decorators_1.RestController)('/mcp/oauth-clients'),
90
+ __metadata("design:paramtypes", [mcp_oauth_service_1.McpOAuthService,
91
+ backend_common_1.Logger])
92
+ ], McpOAuthClientsController);
93
+ //# sourceMappingURL=mcp.oauth-clients.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.oauth-clients.controller.js","sourceRoot":"","sources":["../../../src/modules/mcp/mcp.oauth-clients.controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { StaticRouterMetadata } from '@n8n/decorators';
2
+ import type { Response, Request } from 'express';
3
+ import { UrlService } from '../../services/url.service';
4
+ export declare class McpOAuthController {
5
+ private readonly urlService;
6
+ constructor(urlService: UrlService);
7
+ private setCorsHeaders;
8
+ static routers: StaticRouterMetadata[];
9
+ metadataOptions(_req: Request, res: Response): void;
10
+ metadata(_req: Request, res: Response): void;
11
+ protectedResourceMetadataOptions(_req: Request, res: Response): void;
12
+ protectedResourceMetadata(_req: Request, res: Response): void;
13
+ }