n8n 2.30.0 → 2.30.2

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 (93) hide show
  1. package/dist/build.tsbuildinfo +1 -1
  2. package/dist/controllers/dynamic-node-parameters.controller.js +1 -1
  3. package/dist/controllers/dynamic-node-parameters.controller.js.map +1 -1
  4. package/dist/controllers/instance-ai-examples.controller.d.ts +31 -0
  5. package/dist/controllers/instance-ai-examples.controller.js +104 -0
  6. package/dist/controllers/instance-ai-examples.controller.js.map +1 -0
  7. package/dist/instance-ai-examples.data.json +277957 -0
  8. package/dist/modules/agents/agent-chat.controller.js +2 -2
  9. package/dist/modules/agents/agent-chat.controller.js.map +1 -1
  10. package/dist/modules/agents/agent-execution-orchestrator.service.d.ts +4 -3
  11. package/dist/modules/agents/agent-execution-orchestrator.service.js +11 -8
  12. package/dist/modules/agents/agent-execution-orchestrator.service.js.map +1 -1
  13. package/dist/modules/agents/agent-publish.service.d.ts +3 -1
  14. package/dist/modules/agents/agent-publish.service.js +6 -2
  15. package/dist/modules/agents/agent-publish.service.js.map +1 -1
  16. package/dist/modules/agents/agent-runtime-cache.service.d.ts +2 -0
  17. package/dist/modules/agents/agent-runtime-cache.service.js +5 -3
  18. package/dist/modules/agents/agent-runtime-cache.service.js.map +1 -1
  19. package/dist/modules/agents/agent-runtime-reconstruction.service.d.ts +11 -4
  20. package/dist/modules/agents/agent-runtime-reconstruction.service.js +72 -12
  21. package/dist/modules/agents/agent-runtime-reconstruction.service.js.map +1 -1
  22. package/dist/modules/agents/agent-task.service.d.ts +2 -1
  23. package/dist/modules/agents/agent-task.service.js +4 -4
  24. package/dist/modules/agents/agent-task.service.js.map +1 -1
  25. package/dist/modules/agents/agent-tasks.controller.js +1 -1
  26. package/dist/modules/agents/agent-tasks.controller.js.map +1 -1
  27. package/dist/modules/agents/agents.module.d.ts +1 -1
  28. package/dist/modules/agents/agents.service.d.ts +3 -1
  29. package/dist/modules/agents/agents.service.js +6 -2
  30. package/dist/modules/agents/agents.service.js.map +1 -1
  31. package/dist/modules/agents/sub-agents/sub-agent-cleanup.service.d.ts +10 -0
  32. package/dist/modules/agents/sub-agents/sub-agent-cleanup.service.js +57 -0
  33. package/dist/modules/agents/sub-agents/sub-agent-cleanup.service.js.map +1 -0
  34. package/dist/modules/agents/sub-agents/sub-agent-foreground-runner.d.ts +2 -0
  35. package/dist/modules/agents/sub-agents/sub-agent-foreground-runner.js +1 -0
  36. package/dist/modules/agents/sub-agents/sub-agent-foreground-runner.js.map +1 -1
  37. package/dist/modules/agents/sub-agents/sub-agent-source-resolver.js +6 -7
  38. package/dist/modules/agents/sub-agents/sub-agent-source-resolver.js.map +1 -1
  39. package/dist/modules/instance-ai/extract-resolved-node-parameters.js +8 -1
  40. package/dist/modules/instance-ai/extract-resolved-node-parameters.js.map +1 -1
  41. package/dist/modules/instance-ai/instance-ai.adapter.service.js +7 -1
  42. package/dist/modules/instance-ai/instance-ai.adapter.service.js.map +1 -1
  43. package/dist/modules/mcp/mcp-protected-resource.d.ts +2 -0
  44. package/dist/modules/mcp/mcp-protected-resource.js +3 -0
  45. package/dist/modules/mcp/mcp-protected-resource.js.map +1 -1
  46. package/dist/modules/oauth-server/oauth-consent.controller.js +13 -3
  47. package/dist/modules/oauth-server/oauth-consent.controller.js.map +1 -1
  48. package/dist/modules/oauth-server/oauth-consent.service.d.ts +6 -2
  49. package/dist/modules/oauth-server/oauth-consent.service.js +26 -6
  50. package/dist/modules/oauth-server/oauth-consent.service.js.map +1 -1
  51. package/dist/modules/oauth-server/oauth-token.service.d.ts +4 -1
  52. package/dist/modules/oauth-server/oauth-token.service.js +28 -4
  53. package/dist/modules/oauth-server/oauth-token.service.js.map +1 -1
  54. package/dist/modules/oauth-server/protected-resource-resolvers/workflow-mcp-test-trigger-resource.resolver.d.ts +6 -1
  55. package/dist/modules/oauth-server/protected-resource-resolvers/workflow-mcp-test-trigger-resource.resolver.js +13 -3
  56. package/dist/modules/oauth-server/protected-resource-resolvers/workflow-mcp-test-trigger-resource.resolver.js.map +1 -1
  57. package/dist/modules/oauth-server/protected-resource-resolvers/workflow-mcp-trigger-resource.resolver.d.ts +6 -2
  58. package/dist/modules/oauth-server/protected-resource-resolvers/workflow-mcp-trigger-resource.resolver.js +12 -2
  59. package/dist/modules/oauth-server/protected-resource-resolvers/workflow-mcp-trigger-resource.resolver.js.map +1 -1
  60. package/dist/modules/provisioning.ee/provisioning.service.ee.js +12 -4
  61. package/dist/modules/provisioning.ee/provisioning.service.ee.js.map +1 -1
  62. package/dist/modules/redaction/executions/execution-redaction.service.js +1 -1
  63. package/dist/modules/redaction/executions/execution-redaction.service.js.map +1 -1
  64. package/dist/modules/token-exchange/services/identity-resolution.service.d.ts +3 -1
  65. package/dist/modules/token-exchange/services/identity-resolution.service.js +19 -12
  66. package/dist/modules/token-exchange/services/identity-resolution.service.js.map +1 -1
  67. package/dist/modules/token-exchange/services/scoped-jwt.strategy.js +1 -1
  68. package/dist/modules/token-exchange/services/scoped-jwt.strategy.js.map +1 -1
  69. package/dist/node-execution/ephemeral-node-executor.d.ts +1 -0
  70. package/dist/node-execution/ephemeral-node-executor.js +14 -1
  71. package/dist/node-execution/ephemeral-node-executor.js.map +1 -1
  72. package/dist/node-execution/index.d.ts +1 -1
  73. package/dist/node-execution/index.js +2 -1
  74. package/dist/node-execution/index.js.map +1 -1
  75. package/dist/server.d.ts +1 -0
  76. package/dist/server.js +1 -0
  77. package/dist/server.js.map +1 -1
  78. package/dist/services/dynamic-node-parameters.service.d.ts +1 -0
  79. package/dist/services/dynamic-node-parameters.service.js +11 -0
  80. package/dist/services/dynamic-node-parameters.service.js.map +1 -1
  81. package/dist/services/oauth-token-verifier-proxy.service.d.ts +1 -1
  82. package/dist/services/oauth-token-verifier-proxy.service.js.map +1 -1
  83. package/dist/services/protected-resource.registry.d.ts +2 -0
  84. package/dist/services/protected-resource.registry.js.map +1 -1
  85. package/dist/services/role.service.d.ts +1 -0
  86. package/dist/services/role.service.js +4 -0
  87. package/dist/services/role.service.js.map +1 -1
  88. package/dist/webhooks/webhook-helpers.js +12 -7
  89. package/dist/webhooks/webhook-helpers.js.map +1 -1
  90. package/dist/webhooks/webhook-server.d.ts +1 -0
  91. package/dist/webhooks/webhook-server.js +4 -0
  92. package/dist/webhooks/webhook-server.js.map +1 -1
  93. package/package.json +31 -31
@@ -18,6 +18,7 @@ const decorators_1 = require("@n8n/decorators");
18
18
  const approve_consent_request_dto_1 = require("./dto/approve-consent-request.dto");
19
19
  const oauth_consent_service_1 = require("./oauth-consent.service");
20
20
  const oauth_session_service_1 = require("./oauth-session.service");
21
+ const forbidden_error_1 = require("../../errors/response-errors/forbidden.error");
21
22
  let OAuthConsentController = class OAuthConsentController {
22
23
  constructor(logger, consentService, oauthSessionService) {
23
24
  this.logger = logger;
@@ -29,14 +30,19 @@ let OAuthConsentController = class OAuthConsentController {
29
30
  const sessionToken = this.getAndValidateSessionToken(req, res);
30
31
  if (!sessionToken)
31
32
  return;
32
- const consentDetails = await this.consentService.getConsentDetails(sessionToken);
33
+ const consentDetails = await this.consentService.getConsentDetails(sessionToken, req.user);
33
34
  if (!consentDetails) {
34
35
  this.sendInvalidSessionError(res, true);
35
36
  return;
36
37
  }
37
38
  if (!consentDetails.ok) {
38
39
  this.oauthSessionService.clearSession(res);
39
- this.sendErrorResponse(res, 422, 'Authorization target is no longer available');
40
+ if (consentDetails.reason === 'forbidden') {
41
+ this.sendErrorResponse(res, 403, 'You do not have sufficient permissions to authorize this request');
42
+ }
43
+ else {
44
+ this.sendErrorResponse(res, 422, 'Authorization target is no longer available');
45
+ }
40
46
  return;
41
47
  }
42
48
  res.json({
@@ -59,7 +65,7 @@ let OAuthConsentController = class OAuthConsentController {
59
65
  const sessionToken = this.getAndValidateSessionToken(req, res);
60
66
  if (!sessionToken)
61
67
  return;
62
- const result = await this.consentService.handleConsentDecision(sessionToken, req.user.id, payload.approved);
68
+ const result = await this.consentService.handleConsentDecision(sessionToken, req.user, payload.approved);
63
69
  this.oauthSessionService.clearSession(res);
64
70
  res.json({
65
71
  data: {
@@ -71,6 +77,10 @@ let OAuthConsentController = class OAuthConsentController {
71
77
  catch (error) {
72
78
  this.logger.error('Failed to process consent', { error });
73
79
  this.oauthSessionService.clearSession(res);
80
+ if (error instanceof forbidden_error_1.ForbiddenError) {
81
+ this.sendErrorResponse(res, 403, 'You do not have sufficient permissions to authorize this request');
82
+ return;
83
+ }
74
84
  const message = error instanceof Error ? error.message : 'Failed to process authorization';
75
85
  this.sendErrorResponse(res, 500, message);
76
86
  }
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-consent.controller.js","sourceRoot":"","sources":["../../../src/modules/oauth-server/oauth-consent.controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oauth-consent.controller.js","sourceRoot":"","sources":["../../../src/modules/oauth-server/oauth-consent.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,wDAA6C;AAE7C,gDAAkE;AAGlE,mFAA6E;AAC7E,mEAA8D;AAC9D,mEAA8D;AAC9D,8EAA0E;AAGnE,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IAClC,YACkB,MAAc,EACd,cAAmC,EACnC,mBAAwC;QAFxC,WAAM,GAAN,MAAM,CAAQ;QACd,mBAAc,GAAd,cAAc,CAAqB;QACnC,wBAAmB,GAAnB,mBAAmB,CAAqB;IACvD,CAAC;IAGE,AAAN,KAAK,CAAC,iBAAiB,CAAC,GAAyB,EAAE,GAAa;QAC/D,IAAI,CAAC;YACJ,MAAM,YAAY,GAAG,IAAI,CAAC,0BAA0B,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC/D,IAAI,CAAC,YAAY;gBAAE,OAAO;YAE1B,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YAE3F,IAAI,CAAC,cAAc,EAAE,CAAC;gBACrB,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACxC,OAAO;YACR,CAAC;YAED,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC;gBACxB,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;gBAC3C,IAAI,cAAc,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;oBAC3C,IAAI,CAAC,iBAAiB,CACrB,GAAG,EACH,GAAG,EACH,kEAAkE,CAClE,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACP,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,6CAA6C,CAAC,CAAC;gBACjF,CAAC;gBACD,OAAO;YACR,CAAC;YAED,GAAG,CAAC,IAAI,CAAC;gBACR,IAAI,EAAE;oBACL,UAAU,EAAE,cAAc,CAAC,UAAU;oBACrC,QAAQ,EAAE,cAAc,CAAC,QAAQ;oBACjC,WAAW,EAAE,cAAc,CAAC,WAAW;oBACvC,YAAY,EAAE,cAAc,CAAC,YAAY;iBACzC;aACD,CAAC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9D,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YAC3C,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,sCAAsC,CAAC,CAAC;QAC1E,CAAC;IACF,CAAC;IAGK,AAAN,KAAK,CAAC,cAAc,CACnB,GAAyB,EACzB,GAAa,EACP,OAAiC;QAEvC,IAAI,CAAC;YACJ,MAAM,YAAY,GAAG,IAAI,CAAC,0BAA0B,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC/D,IAAI,CAAC,YAAY;gBAAE,OAAO;YAE1B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAC7D,YAAY,EACZ,GAAG,CAAC,IAAI,EACR,OAAO,CAAC,QAAQ,CAChB,CAAC;YAEF,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YAE3C,GAAG,CAAC,IAAI,CAAC;gBACR,IAAI,EAAE;oBACL,MAAM,EAAE,SAAS;oBACjB,WAAW,EAAE,MAAM,CAAC,WAAW;iBAC/B;aACD,CAAC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1D,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YAC3C,IAAI,KAAK,YAAY,gCAAc,EAAE,CAAC;gBACrC,IAAI,CAAC,iBAAiB,CACrB,GAAG,EACH,GAAG,EACH,kEAAkE,CAClE,CAAC;gBACF,OAAO;YACR,CAAC;YACD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,iCAAiC,CAAC;YAC3F,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC;IACF,CAAC;IAEO,iBAAiB,CAAC,GAAa,EAAE,UAAkB,EAAE,OAAe;QAC3E,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;YAC3B,MAAM,EAAE,OAAO;YACf,OAAO;SACP,CAAC,CAAC;IACJ,CAAC;IAEO,uBAAuB,CAAC,GAAa,EAAE,WAAW,GAAG,KAAK;QACjE,IAAI,WAAW,EAAE,CAAC;YACjB,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,0CAA0C,CAAC,CAAC;IAC9E,CAAC;IAEO,0BAA0B,CAAC,GAAyB,EAAE,GAAa;QAC1E,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3E,IAAI,CAAC,YAAY,EAAE,CAAC;YACnB,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC;YAClC,OAAO,IAAI,CAAC;QACb,CAAC;QAED,IAAI,CAAC;YACJ,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;YACrD,OAAO,YAAY,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACtD,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACxC,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;CACD,CAAA;AAvHY,wDAAsB;AAQ5B;IADL,IAAA,gBAAG,EAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;;;;+DAwCxC;AAGK;IADL,IAAA,iBAAI,EAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAIxC,WAAA,iBAAI,CAAA;;qDAAU,sDAAwB;;4DAkCvC;iCAvFW,sBAAsB;IADlC,IAAA,2BAAc,EAAC,UAAU,CAAC;qCAGA,uBAAM;QACE,2CAAmB;QACd,2CAAmB;GAJ9C,sBAAsB,CAuHlC"}
@@ -1,4 +1,5 @@
1
1
  import { Logger } from '@n8n/backend-common';
2
+ import type { User } from '@n8n/db';
2
3
  import { OAuthClientRepository } from './database/repositories/oauth-client.repository';
3
4
  import { UserConsentRepository } from './database/repositories/oauth-user-consent.repository';
4
5
  import { OAuthAuthorizationCodeService } from './oauth-authorization-code.service';
@@ -14,6 +15,9 @@ type ConsentDetailsResult = {
14
15
  } | {
15
16
  ok: false;
16
17
  reason: 'resource_unavailable';
18
+ } | {
19
+ ok: false;
20
+ reason: 'forbidden';
17
21
  };
18
22
  export declare class OAuthConsentService {
19
23
  private readonly logger;
@@ -24,8 +28,8 @@ export declare class OAuthConsentService {
24
28
  private readonly protectedResourceRegistry;
25
29
  private readonly urlService;
26
30
  constructor(logger: Logger, oauthSessionService: OAuthSessionService, oauthClientRepository: OAuthClientRepository, userConsentRepository: UserConsentRepository, authorizationCodeService: OAuthAuthorizationCodeService, protectedResourceRegistry: ProtectedResourceRegistry, urlService: UrlService);
27
- getConsentDetails(sessionToken: string): Promise<ConsentDetailsResult | null>;
28
- handleConsentDecision(sessionToken: string, userId: string, approved: boolean): Promise<{
31
+ getConsentDetails(sessionToken: string, user: User): Promise<ConsentDetailsResult | null>;
32
+ handleConsentDecision(sessionToken: string, user: User, approved: boolean): Promise<{
29
33
  redirectUrl: string;
30
34
  }>;
31
35
  }
@@ -18,6 +18,7 @@ const oauth_user_consent_repository_1 = require("./database/repositories/oauth-u
18
18
  const oauth_authorization_code_service_1 = require("./oauth-authorization-code.service");
19
19
  const oauth_session_service_1 = require("./oauth-session.service");
20
20
  const oauth_helpers_1 = require("./oauth.helpers");
21
+ const forbidden_error_1 = require("../../errors/response-errors/forbidden.error");
21
22
  const protected_resource_registry_1 = require("../../services/protected-resource.registry");
22
23
  const url_service_1 = require("../../services/url.service");
23
24
  let OAuthConsentService = class OAuthConsentService {
@@ -30,7 +31,7 @@ let OAuthConsentService = class OAuthConsentService {
30
31
  this.protectedResourceRegistry = protectedResourceRegistry;
31
32
  this.urlService = urlService;
32
33
  }
33
- async getConsentDetails(sessionToken) {
34
+ async getConsentDetails(sessionToken, user) {
34
35
  try {
35
36
  const sessionPayload = this.oauthSessionService.verifySession(sessionToken);
36
37
  const client = await this.oauthClientRepository.findOne({
@@ -44,6 +45,11 @@ let OAuthConsentService = class OAuthConsentService {
44
45
  if (!resource) {
45
46
  return { ok: false, reason: 'resource_unavailable' };
46
47
  }
48
+ if (!(await resource.authorize(user)))
49
+ return {
50
+ ok: false,
51
+ reason: 'forbidden',
52
+ };
47
53
  return {
48
54
  ok: true,
49
55
  clientName: client.name,
@@ -64,7 +70,7 @@ let OAuthConsentService = class OAuthConsentService {
64
70
  return null;
65
71
  }
66
72
  }
67
- async handleConsentDecision(sessionToken, userId, approved) {
73
+ async handleConsentDecision(sessionToken, user, approved) {
68
74
  let sessionPayload;
69
75
  try {
70
76
  sessionPayload = this.oauthSessionService.verifySession(sessionToken);
@@ -77,20 +83,34 @@ let OAuthConsentService = class OAuthConsentService {
77
83
  const redirectUrl = oauth_helpers_1.OAuthHelpers.buildErrorRedirectUrl(sessionPayload.redirectUri, 'access_denied', 'User denied the authorization request', sessionPayload.state, issuer);
78
84
  this.logger.info('Consent denied', {
79
85
  clientId: sessionPayload.clientId,
80
- userId,
86
+ userId: user.id,
81
87
  });
82
88
  return { redirectUrl };
83
89
  }
90
+ if (sessionPayload.resource) {
91
+ const resource = await this.protectedResourceRegistry.getByResourceUrl(sessionPayload.resource);
92
+ if (!resource) {
93
+ throw new n8n_workflow_1.UserError('Resource is not available for the requested authorization');
94
+ }
95
+ if (!(await resource.authorize(user))) {
96
+ this.logger.warn('User is not authorized for the requested resource', {
97
+ clientId: sessionPayload.clientId,
98
+ userId: user.id,
99
+ resourceUrl: sessionPayload.resource,
100
+ });
101
+ throw new forbidden_error_1.ForbiddenError('User is not authorized for the requested resource');
102
+ }
103
+ }
84
104
  await this.userConsentRepository.upsert({
85
- userId,
105
+ userId: user.id,
86
106
  clientId: sessionPayload.clientId,
87
107
  grantedAt: Date.now(),
88
108
  }, ['userId', 'clientId']);
89
- const code = await this.authorizationCodeService.createAuthorizationCode(sessionPayload.clientId, userId, sessionPayload.redirectUri, sessionPayload.codeChallenge, sessionPayload.state, sessionPayload.resource);
109
+ const code = await this.authorizationCodeService.createAuthorizationCode(sessionPayload.clientId, user.id, sessionPayload.redirectUri, sessionPayload.codeChallenge, sessionPayload.state, sessionPayload.resource);
90
110
  const successRedirectUrl = oauth_helpers_1.OAuthHelpers.buildSuccessRedirectUrl(sessionPayload.redirectUri, code, sessionPayload.state, issuer);
91
111
  this.logger.info('Consent approved', {
92
112
  clientId: sessionPayload.clientId,
93
- userId,
113
+ userId: user.id,
94
114
  });
95
115
  return { redirectUrl: successRedirectUrl };
96
116
  }
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-consent.service.js","sourceRoot":"","sources":["../../../src/modules/oauth-server/oauth-consent.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oauth-consent.service.js","sourceRoot":"","sources":["../../../src/modules/oauth-server/oauth-consent.service.ts"],"names":[],"mappings":"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"}
@@ -4,9 +4,9 @@ import { Logger } from '@n8n/backend-common';
4
4
  import { UserRepository } from '@n8n/db';
5
5
  import { AccessTokenRepository } from './database/repositories/oauth-access-token.repository';
6
6
  import { RefreshTokenRepository } from './database/repositories/oauth-refresh-token.repository';
7
+ import { ProtectedResourceRegistry } from '../../services/protected-resource.registry';
7
8
  import { JwtService } from '../../services/jwt.service';
8
9
  import type { OAuthTokenVerifier, UserWithContext } from '../../services/oauth-token-verifier-proxy.service';
9
- import { ProtectedResourceRegistry } from '../../services/protected-resource.registry';
10
10
  export declare class OAuthTokenService implements OAuthTokenVerifier {
11
11
  private readonly logger;
12
12
  private readonly jwtService;
@@ -25,10 +25,13 @@ export declare class OAuthTokenService implements OAuthTokenVerifier {
25
25
  saveTokenPair(accessToken: string, refreshToken: string, clientId: string, userId: string): Promise<void>;
26
26
  validateAndRotateRefreshToken(refreshToken: string, clientId: string, resource?: string): Promise<OAuthTokens>;
27
27
  verifyAccessToken(token: string, expectedAudience?: string): Promise<AuthInfo>;
28
+ private verifyTokenWithAudiences;
28
29
  verifyOAuthAccessToken(token: string, expectedAudience?: string): Promise<UserWithContext>;
29
30
  revokeAccessToken(token: string, clientId: string): Promise<boolean>;
30
31
  revokeRefreshToken(token: string, clientId: string): Promise<boolean>;
31
32
  private getAllowedAudiences;
33
+ private audiencesForResource;
34
+ private getResourceByAudience;
32
35
  private verifyJwtWithAllowedAudiences;
33
36
  private getStringClaim;
34
37
  }
@@ -23,9 +23,9 @@ const oauth_access_token_entity_1 = require("./database/entities/oauth-access-to
23
23
  const oauth_refresh_token_entity_1 = require("./database/entities/oauth-refresh-token.entity");
24
24
  const oauth_access_token_repository_1 = require("./database/repositories/oauth-access-token.repository");
25
25
  const oauth_refresh_token_repository_1 = require("./database/repositories/oauth-refresh-token.repository");
26
+ const protected_resource_registry_1 = require("../../services/protected-resource.registry");
26
27
  const oauth_errors_1 = require("./oauth.errors");
27
28
  const jwt_service_1 = require("../../services/jwt.service");
28
- const protected_resource_registry_1 = require("../../services/protected-resource.registry");
29
29
  let OAuthTokenService = class OAuthTokenService {
30
30
  constructor(logger, jwtService, userRepository, accessTokenRepository, refreshTokenRepository, resourceRegistry) {
31
31
  this.logger = logger;
@@ -120,9 +120,11 @@ let OAuthTokenService = class OAuthTokenService {
120
120
  });
121
121
  }
122
122
  async verifyAccessToken(token, expectedAudience) {
123
+ return await this.verifyTokenWithAudiences(token, await this.getAllowedAudiences(expectedAudience));
124
+ }
125
+ async verifyTokenWithAudiences(token, allowedAudiences) {
123
126
  let decoded;
124
127
  try {
125
- const allowedAudiences = await this.getAllowedAudiences(expectedAudience);
126
128
  decoded = this.verifyJwtWithAllowedAudiences(token, allowedAudiences);
127
129
  }
128
130
  catch (error) {
@@ -150,7 +152,11 @@ let OAuthTokenService = class OAuthTokenService {
150
152
  }
151
153
  async verifyOAuthAccessToken(token, expectedAudience) {
152
154
  try {
153
- const authInfo = await this.verifyAccessToken(token, expectedAudience);
155
+ const resource = await this.getResourceByAudience(expectedAudience);
156
+ if (expectedAudience && !resource) {
157
+ return { user: null, context: { reason: 'insufficient_scope', auth_type: 'oauth' } };
158
+ }
159
+ const authInfo = await this.verifyTokenWithAudiences(token, this.audiencesForResource(resource, expectedAudience));
154
160
  const userId = authInfo.extra && typeof authInfo.extra === 'object'
155
161
  ? this.getStringClaim(authInfo.extra, 'userId')
156
162
  : null;
@@ -164,6 +170,13 @@ let OAuthTokenService = class OAuthTokenService {
164
170
  if (!user) {
165
171
  return { user: null, context: { reason: 'user_not_found', auth_type: 'oauth' } };
166
172
  }
173
+ if (resource && !(await resource.authorize(user))) {
174
+ this.logger.warn('OAuth token denied: user lacks execute access', {
175
+ userId: user.id,
176
+ expectedAudience,
177
+ });
178
+ return { user: null, context: { reason: 'insufficient_scope', auth_type: 'oauth' } };
179
+ }
167
180
  return { user, authType: 'oauth' };
168
181
  }
169
182
  catch (error) {
@@ -206,12 +219,23 @@ let OAuthTokenService = class OAuthTokenService {
206
219
  return revoked;
207
220
  }
208
221
  async getAllowedAudiences(expectedAudience) {
222
+ const resource = expectedAudience
223
+ ? await this.resourceRegistry.getByResourceUrl(expectedAudience)
224
+ : undefined;
225
+ return this.audiencesForResource(resource, expectedAudience);
226
+ }
227
+ audiencesForResource(resource, expectedAudience) {
209
228
  if (expectedAudience) {
210
- const resource = await this.resourceRegistry.getByResourceUrl(expectedAudience);
211
229
  return resource ? resource.getAudiences() : [expectedAudience];
212
230
  }
213
231
  return this.resourceRegistry.getAllAudiences();
214
232
  }
233
+ async getResourceByAudience(expectedAudience) {
234
+ if (!expectedAudience) {
235
+ return this.resourceRegistry.getDefaultResource();
236
+ }
237
+ return await this.resourceRegistry.getByResourceUrl(expectedAudience);
238
+ }
215
239
  verifyJwtWithAllowedAudiences(token, audiences) {
216
240
  try {
217
241
  return this.jwtService.verify(token, {
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-token.service.js","sourceRoot":"","sources":["../../../src/modules/oauth-server/oauth-token.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oauth-token.service.js","sourceRoot":"","sources":["../../../src/modules/oauth-server/oauth-token.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+EAAoF;AAGpF,wDAA6C;AAC7C,8CAAsC;AACtC,gCAA0D;AAC1D,gCAAkC;AAClC,0CAA+C;AAC/C,iEAA6D;AAC7D,+CAA+C;AAC/C,6CAAsD;AAEtD,6FAA4E;AAC5E,+FAA8E;AAC9E,yGAA8F;AAC9F,2GAAgG;AAEhG,wFAAmF;AACnF,iDAAgF;AAEhF,wDAAoD;AAe7C,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAI7B,YACkB,MAAc,EACd,UAAsB,EACtB,cAA8B,EAC9B,qBAA4C,EAC5C,sBAA8C,EAC9C,gBAA2C;QAL3C,WAAM,GAAN,MAAM,CAAQ;QACd,eAAU,GAAV,UAAU,CAAY;QACtB,mBAAc,GAAd,cAAc,CAAgB;QAC9B,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,2BAAsB,GAAtB,sBAAsB,CAAwB;QAC9C,qBAAgB,GAAhB,gBAAgB,CAA2B;QAT5C,gCAA2B,GAAG,CAAC,GAAG,gBAAI,CAAC,KAAK,CAAC,SAAS,CAAC;QACvD,4BAAuB,GAAG,EAAE,GAAG,gBAAI,CAAC,IAAI,CAAC,cAAc,CAAC;IAStE,CAAC;IAEJ,2BAA2B;QAC1B,OAAO,IAAI,CAAC,2BAA2B,CAAC;IACzC,CAAC;IAED,iBAAiB,CAChB,MAAc,EACd,QAAgB,EAChB,QAAiB;QAIjB,MAAM,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,EAAE,cAAc,EAAE,CAAC;QAC1F,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,MAAM,IAAI,8BAAe,CACxB,0GAA0G,CAC1G,CAAC;QACH,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACxC,GAAG,EAAE,MAAM;YACX,GAAG,EAAE,QAAQ;YACb,SAAS,EAAE,QAAQ;YACnB,GAAG,EAAE,IAAA,wBAAU,GAAE;YACjB,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;YAClC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,2BAA2B;YACrE,IAAI,EAAE;gBACL,OAAO,EAAE,IAAI;aACb;SACD,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,IAAA,yBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAErD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,aAAa,CAClB,WAAmB,EACnB,YAAoB,EACpB,QAAgB,EAChB,MAAc;QAEd,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,kBAAkB,EAAE,EAAE;YACjF,MAAM,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE;gBAClE,KAAK,EAAE,WAAW;gBAClB,QAAQ;gBACR,MAAM;aACN,CAAC,CAAC;YAEH,MAAM,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE;gBACnE,KAAK,EAAE,YAAY;gBACnB,QAAQ;gBACR,MAAM;gBACN,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,uBAAuB;aACpD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,6BAA6B,CAClC,YAAoB,EACpB,QAAgB,EAChB,QAAiB;QAEjB,OAAO,MAAM,IAAA,oBAAe,EAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YAC1F,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAEvB,MAAM,kBAAkB,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,yCAAY,EAAE;gBAC1D,KAAK,EAAE;oBACN,KAAK,EAAE,YAAY;oBACnB,QAAQ;iBACR;aACD,CAAC,CAAC;YAIH,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACzB,MAAM,IAAI,6BAAiB,CAAC,uBAAuB,CAAC,CAAC;YACtD,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,yCAAY,EAAE;gBAC7C,KAAK,EAAE,YAAY;gBACnB,QAAQ;gBACR,SAAS,EAAE,IAAA,yBAAe,EAAC,GAAG,CAAC;aAC/B,CAAC,CAAC;YAEH,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;YACzC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,IAAI,6BAAiB,CAAC,uBAAuB,CAAC,CAAC;YACtD,CAAC;YAED,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAC5E,kBAAkB,CAAC,MAAM,EACzB,QAAQ,EACR,QAAQ,CACR,CAAC;YAEF,MAAM,GAAG,CAAC,MAAM,CAAC,uCAAW,EAAE;gBAC7B,KAAK,EAAE,WAAW;gBAClB,QAAQ;gBACR,MAAM,EAAE,kBAAkB,CAAC,MAAM;aACjC,CAAC,CAAC;YAEH,MAAM,GAAG,CAAC,MAAM,CAAC,yCAAY,EAAE;gBAC9B,KAAK,EAAE,eAAe;gBACtB,QAAQ;gBACR,MAAM,EAAE,kBAAkB,CAAC,MAAM;gBACjC,SAAS,EAAE,GAAG,GAAG,IAAI,CAAC,uBAAuB;aAC7C,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mDAAmD,EAAE;gBACrE,QAAQ;gBACR,MAAM,EAAE,kBAAkB,CAAC,MAAM;aACjC,CAAC,CAAC;YAEH,OAAO;gBACN,YAAY,EAAE,WAAW;gBACzB,UAAU,EAAE,QAAQ;gBACpB,UAAU,EAAE,IAAI,CAAC,2BAA2B;gBAC5C,aAAa,EAAE,eAAe;aAC9B,CAAC;QACH,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,KAAa,EAAE,gBAAyB;QAC/D,OAAO,MAAM,IAAI,CAAC,wBAAwB,CACzC,KAAK,EACL,MAAM,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAChD,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,wBAAwB,CACrC,KAAa,EACb,gBAA0B;QAE1B,IAAI,OAAgB,CAAC;QAErB,IAAI,CAAC;YACJ,OAAO,GAAG,IAAI,CAAC,6BAA6B,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;QACvE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,mCAAoB,EAAE,CAAC;QAClC,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACnD,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1B,MAAM,IAAI,mCAAoB,EAAE,CAAC;QAClC,CAAC;QAED,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;YAClE,KAAK,EAAE,EAAE,KAAK,EAAE;SAChB,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACxB,MAAM,IAAI,uCAAwB,EAAE,CAAC;QACtC,CAAC;QAED,OAAO;YACN,KAAK;YACL,QAAQ;YACR,MAAM,EAAE,EAAE;YACV,KAAK,EAAE;gBACN,MAAM;aACN;SACD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,KAAa,EAAE,gBAAyB;QACpE,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;YAKpE,IAAI,gBAAgB,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,oBAAoB,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC;YACtF,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,wBAAwB,CACnD,KAAK,EACL,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CACrD,CAAC;YAEF,MAAM,MAAM,GACX,QAAQ,CAAC,KAAK,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ;gBACnD,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;gBAC/C,CAAC,CAAC,IAAI,CAAC;YACT,IAAI,CAAC,MAAM,EAAE,CAAC;gBACb,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,0BAA0B,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC;YAC5F,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;gBAC9C,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;gBACrB,SAAS,EAAE,CAAC,MAAM,CAAC;aACnB,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,EAAE,CAAC;gBACX,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC;YAClF,CAAC;YAED,IAAI,QAAQ,IAAI,CAAC,CAAC,MAAM,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBACnD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+CAA+C,EAAE;oBACjE,MAAM,EAAE,IAAI,CAAC,EAAE;oBACf,gBAAgB;iBAChB,CAAC,CAAC;gBACH,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,oBAAoB,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC;YACtF,CAAC;YAED,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,YAAY,GAAG,IAAA,0BAAW,EAAC,KAAK,CAAC,CAAC;YACxC,MAAM,MAAM,GACX,YAAY,YAAY,mCAAoB;gBAC3C,CAAC,CAAC,eAAe;gBACjB,CAAC,CAAC,YAAY,YAAY,uCAAwB;oBACjD,CAAC,CAAC,uBAAuB;oBACzB,CAAC,CAAC,eAAe,CAAC;YACrB,OAAO;gBACN,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE;oBACR,MAAM;oBACN,SAAS,EAAE,OAAO;oBAClB,aAAa,EAAE,YAAY,CAAC,OAAO;iBACnC;aACD,CAAC;QACH,CAAC;IACF,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,KAAa,EAAE,QAAgB;QACtD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;YACtD,KAAK;YACL,QAAQ;SACR,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAE3C,IAAI,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,KAAa,EAAE,QAAgB;QACvD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC;YACvD,KAAK;YACL,QAAQ;SACR,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAE3C,IAAI,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,OAAO,CAAC;IAChB,CAAC;IAWO,KAAK,CAAC,mBAAmB,CAAC,gBAAyB;QAC1D,MAAM,QAAQ,GAAG,gBAAgB;YAChC,CAAC,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,gBAAgB,CAAC;YAChE,CAAC,CAAC,SAAS,CAAC;QACb,OAAO,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAC9D,CAAC;IAOO,oBAAoB,CAC3B,QAAuC,EACvC,gBAAyB;QAEzB,IAAI,gBAAgB,EAAE,CAAC;YACtB,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;QAChE,CAAC;QAKD,OAAO,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC;IAChD,CAAC;IAEO,KAAK,CAAC,qBAAqB,CAClC,gBAAyB;QAEzB,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC;QACnD,CAAC;QACD,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IACvE,CAAC;IAIO,6BAA6B,CAAC,KAAa,EAAE,SAAmB;QACvE,IAAI,CAAC;YACJ,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE;gBACpC,QAAQ,EAAE,SAAkC;aAC5C,CAAC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAEhB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBAClC,IAAI,CAAC;oBACJ,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACpD,CAAC;gBAAC,MAAM,CAAC;oBACR,SAAS;gBACV,CAAC;YACF,CAAC;YAED,MAAM,KAAK,CAAC;QACb,CAAC;IACF,CAAC;IAEO,cAAc,CAAC,OAAgB,EAAE,KAAa;QACrD,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACzD,MAAM,UAAU,GAAI,OAAmC,CAAC,KAAK,CAAC,CAAC;QAC/D,OAAO,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3D,CAAC;CACD,CAAA;AAnVY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,YAAO,GAAE;qCAMiB,uBAAM;QACF,wBAAU;QACN,mBAAc;QACP,qDAAqB;QACpB,uDAAsB;QAC5B,uDAAyB;GAVjD,iBAAiB,CAmV7B"}
@@ -1,14 +1,17 @@
1
1
  import type { ProtectedResourceResolver } from '../../../services/protected-resource.registry';
2
2
  import { UrlService } from '../../../services/url.service';
3
3
  import { TestWebhookRegistrationsService } from '../../../webhooks/test-webhook-registrations.service';
4
+ import { WorkflowFinderService } from '../../../workflows/workflow-finder.service';
4
5
  import { Logger } from '@n8n/backend-common';
5
6
  import { GlobalConfig } from '@n8n/config';
7
+ import { User } from '@n8n/db';
6
8
  export declare class WorkflowMcpTestTriggerResourceResolver implements ProtectedResourceResolver {
7
9
  private readonly config;
8
10
  private readonly registrations;
9
11
  private readonly urlService;
10
12
  private readonly logger;
11
- constructor(config: GlobalConfig, registrations: TestWebhookRegistrationsService, urlService: UrlService, logger: Logger);
13
+ private readonly workflowFinderService;
14
+ constructor(config: GlobalConfig, registrations: TestWebhookRegistrationsService, urlService: UrlService, logger: Logger, workflowFinderService: WorkflowFinderService);
12
15
  readonly id = "workflow-mcp-test-trigger";
13
16
  readonly scopes: string[];
14
17
  resolveByUrl(resourceUrl: string): Promise<{
@@ -17,6 +20,7 @@ export declare class WorkflowMcpTestTriggerResourceResolver implements Protected
17
20
  getAudiences: () => string[];
18
21
  scopes: string[];
19
22
  displayName: string;
23
+ authorize: (user: User) => Promise<boolean>;
20
24
  } | undefined>;
21
25
  resolveByPath(pathname: string): Promise<{
22
26
  id: string;
@@ -24,5 +28,6 @@ export declare class WorkflowMcpTestTriggerResourceResolver implements Protected
24
28
  getAudiences: () => string[];
25
29
  scopes: string[];
26
30
  displayName: string;
31
+ authorize: (user: User) => Promise<boolean>;
27
32
  } | undefined>;
28
33
  }
@@ -13,16 +13,18 @@ exports.WorkflowMcpTestTriggerResourceResolver = void 0;
13
13
  const constants_1 = require("../../../constants");
14
14
  const url_service_1 = require("../../../services/url.service");
15
15
  const test_webhook_registrations_service_1 = require("../../../webhooks/test-webhook-registrations.service");
16
+ const workflow_finder_service_1 = require("../../../workflows/workflow-finder.service");
16
17
  const backend_common_1 = require("@n8n/backend-common");
17
18
  const config_1 = require("@n8n/config");
18
19
  const di_1 = require("@n8n/di");
19
20
  const utils_1 = require("./utils");
20
21
  let WorkflowMcpTestTriggerResourceResolver = class WorkflowMcpTestTriggerResourceResolver {
21
- constructor(config, registrations, urlService, logger) {
22
+ constructor(config, registrations, urlService, logger, workflowFinderService) {
22
23
  this.config = config;
23
24
  this.registrations = registrations;
24
25
  this.urlService = urlService;
25
26
  this.logger = logger;
27
+ this.workflowFinderService = workflowFinderService;
26
28
  this.id = 'workflow-mcp-test-trigger';
27
29
  this.scopes = utils_1.WORKFLOW_MCP_TRIGGER_SCOPES;
28
30
  }
@@ -54,13 +56,20 @@ let WorkflowMcpTestTriggerResourceResolver = class WorkflowMcpTestTriggerResourc
54
56
  if (node.type === constants_1.MCP_TRIGGER_NODE_TYPE &&
55
57
  !node.disabled &&
56
58
  node.parameters.authentication === 'n8nOAuth2') {
57
- const resourceUrl = `${(0, utils_1.trimTrailingSlash)(this.urlService.getTestWebhookBaseUrl())}/${this.config.endpoints.mcpTest}/${path}`;
59
+ const resourceUrl = `${(0, utils_1.trimTrailingSlash)(this.urlService.getWebhookBaseUrl())}/${this.config.endpoints.mcpTest}/${path}`;
60
+ const requireExecute = node.parameters.requireExecuteAccess !== false;
58
61
  return {
59
62
  id: 'workflow-mcp-test:' + workflowEntity.id,
60
63
  getResourceUrl: () => resourceUrl,
61
64
  getAudiences: () => [resourceUrl],
62
65
  scopes: utils_1.WORKFLOW_MCP_TRIGGER_SCOPES,
63
66
  displayName: workflowEntity.name,
67
+ authorize: async (user) => {
68
+ if (requireExecute) {
69
+ return (await this.workflowFinderService.findWorkflowIdsWithScopeForUser([workflowEntity.id], user, ['workflow:execute'])).has(workflowEntity.id);
70
+ }
71
+ return true;
72
+ },
64
73
  };
65
74
  }
66
75
  this.logger.debug(`Node with name ${webhook.node} in test registration for workflow with ID: ${workflowEntity.id} is not an enabled MCP trigger with n8nOAuth2 authentication`);
@@ -73,6 +82,7 @@ exports.WorkflowMcpTestTriggerResourceResolver = WorkflowMcpTestTriggerResourceR
73
82
  __metadata("design:paramtypes", [config_1.GlobalConfig,
74
83
  test_webhook_registrations_service_1.TestWebhookRegistrationsService,
75
84
  url_service_1.UrlService,
76
- backend_common_1.Logger])
85
+ backend_common_1.Logger,
86
+ workflow_finder_service_1.WorkflowFinderService])
77
87
  ], WorkflowMcpTestTriggerResourceResolver);
78
88
  //# sourceMappingURL=workflow-mcp-test-trigger-resource.resolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-mcp-test-trigger-resource.resolver.js","sourceRoot":"","sources":["../../../../src/modules/oauth-server/protected-resource-resolvers/workflow-mcp-test-trigger-resource.resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow-mcp-test-trigger-resource.resolver.js","sourceRoot":"","sources":["../../../../src/modules/oauth-server/protected-resource-resolvers/workflow-mcp-test-trigger-resource.resolver.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,18 @@
1
1
  import type { ProtectedResourceResolver } from '../../../services/protected-resource.registry';
2
2
  import { UrlService } from '../../../services/url.service';
3
3
  import { WebhookService } from '../../../webhooks/webhook.service';
4
+ import { WorkflowFinderService } from '../../../workflows/workflow-finder.service';
4
5
  import { Logger } from '@n8n/backend-common';
5
6
  import { GlobalConfig } from '@n8n/config';
6
- import { WorkflowRepository } from '@n8n/db';
7
+ import { User, WorkflowRepository } from '@n8n/db';
7
8
  export declare class WorkflowMcpTriggerResourceResolver implements ProtectedResourceResolver {
8
9
  private readonly config;
9
10
  private readonly webhookService;
10
11
  private readonly workflowRepository;
11
12
  private readonly urlService;
12
13
  private readonly logger;
13
- constructor(config: GlobalConfig, webhookService: WebhookService, workflowRepository: WorkflowRepository, urlService: UrlService, logger: Logger);
14
+ private readonly workflowFinderService;
15
+ constructor(config: GlobalConfig, webhookService: WebhookService, workflowRepository: WorkflowRepository, urlService: UrlService, logger: Logger, workflowFinderService: WorkflowFinderService);
14
16
  readonly id = "workflow-mcp-trigger";
15
17
  readonly scopes: string[];
16
18
  resolveByUrl(resourceUrl: string): Promise<{
@@ -19,6 +21,7 @@ export declare class WorkflowMcpTriggerResourceResolver implements ProtectedReso
19
21
  getAudiences: () => string[];
20
22
  scopes: string[];
21
23
  displayName: string;
24
+ authorize: (user: User) => Promise<boolean>;
22
25
  } | undefined>;
23
26
  resolveByPath(pathname: string): Promise<{
24
27
  id: string;
@@ -26,5 +29,6 @@ export declare class WorkflowMcpTriggerResourceResolver implements ProtectedReso
26
29
  getAudiences: () => string[];
27
30
  scopes: string[];
28
31
  displayName: string;
32
+ authorize: (user: User) => Promise<boolean>;
29
33
  } | undefined>;
30
34
  }
@@ -13,18 +13,20 @@ exports.WorkflowMcpTriggerResourceResolver = void 0;
13
13
  const constants_1 = require("../../../constants");
14
14
  const url_service_1 = require("../../../services/url.service");
15
15
  const webhook_service_1 = require("../../../webhooks/webhook.service");
16
+ const workflow_finder_service_1 = require("../../../workflows/workflow-finder.service");
16
17
  const backend_common_1 = require("@n8n/backend-common");
17
18
  const config_1 = require("@n8n/config");
18
19
  const db_1 = require("@n8n/db");
19
20
  const di_1 = require("@n8n/di");
20
21
  const utils_1 = require("./utils");
21
22
  let WorkflowMcpTriggerResourceResolver = class WorkflowMcpTriggerResourceResolver {
22
- constructor(config, webhookService, workflowRepository, urlService, logger) {
23
+ constructor(config, webhookService, workflowRepository, urlService, logger, workflowFinderService) {
23
24
  this.config = config;
24
25
  this.webhookService = webhookService;
25
26
  this.workflowRepository = workflowRepository;
26
27
  this.urlService = urlService;
27
28
  this.logger = logger;
29
+ this.workflowFinderService = workflowFinderService;
28
30
  this.id = 'workflow-mcp-trigger';
29
31
  this.scopes = utils_1.WORKFLOW_MCP_TRIGGER_SCOPES;
30
32
  }
@@ -71,12 +73,19 @@ let WorkflowMcpTriggerResourceResolver = class WorkflowMcpTriggerResourceResolve
71
73
  !node.disabled &&
72
74
  node.parameters.authentication === 'n8nOAuth2') {
73
75
  const resourceUrl = `${(0, utils_1.trimTrailingSlash)(this.urlService.getWebhookBaseUrl())}/${this.config.endpoints.mcp}/${path}`;
76
+ const requireExecute = node.parameters.requireExecuteAccess !== false;
74
77
  return {
75
78
  id: 'workflow-mcp:' + workflow.id,
76
79
  getResourceUrl: () => resourceUrl,
77
80
  getAudiences: () => [resourceUrl],
78
81
  scopes: utils_1.WORKFLOW_MCP_TRIGGER_SCOPES,
79
82
  displayName: workflow.name,
83
+ authorize: async (user) => {
84
+ if (requireExecute) {
85
+ return (await this.workflowFinderService.findWorkflowIdsWithScopeForUser([workflow.id], user, ['workflow:execute'])).has(workflow.id);
86
+ }
87
+ return true;
88
+ },
80
89
  };
81
90
  }
82
91
  this.logger.debug(`Node with name ${nodeName} in active version of workflow with ID: ${workflowId} is not an enabled MCP trigger with n8nOAuth2 authentication`);
@@ -90,6 +99,7 @@ exports.WorkflowMcpTriggerResourceResolver = WorkflowMcpTriggerResourceResolver
90
99
  webhook_service_1.WebhookService,
91
100
  db_1.WorkflowRepository,
92
101
  url_service_1.UrlService,
93
- backend_common_1.Logger])
102
+ backend_common_1.Logger,
103
+ workflow_finder_service_1.WorkflowFinderService])
94
104
  ], WorkflowMcpTriggerResourceResolver);
95
105
  //# sourceMappingURL=workflow-mcp-trigger-resource.resolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-mcp-trigger-resource.resolver.js","sourceRoot":"","sources":["../../../../src/modules/oauth-server/protected-resource-resolvers/workflow-mcp-trigger-resource.resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow-mcp-trigger-resource.resolver.js","sourceRoot":"","sources":["../../../../src/modules/oauth-server/protected-resource-resolvers/workflow-mcp-trigger-resource.resolver.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@ const config_1 = require("@n8n/config");
16
16
  const db_1 = require("@n8n/db");
17
17
  const decorators_1 = require("@n8n/decorators");
18
18
  const di_1 = require("@n8n/di");
19
+ const permissions_1 = require("@n8n/permissions");
19
20
  const typeorm_1 = require("@n8n/typeorm");
20
21
  const n8n_core_1 = require("n8n-core");
21
22
  const n8n_workflow_1 = require("n8n-workflow");
@@ -58,7 +59,7 @@ let ProvisioningService = class ProvisioningService {
58
59
  if (!(await this.isInstanceRoleProvisioningEnabled())) {
59
60
  return;
60
61
  }
61
- const globalOwnerRoleSlug = 'global:owner';
62
+ const globalOwnerRoleSlug = permissions_1.GLOBAL_OWNER_ROLE_SLUG;
62
63
  if (typeof roleSlug !== 'string') {
63
64
  this.logger.warn(`skipping instance role provisioning. Invalid role type: expected string, received ${typeof roleSlug}`, {
64
65
  userId: user.id,
@@ -78,6 +79,10 @@ let ProvisioningService = class ProvisioningService {
78
79
  this.logger.warn(`Skipping instance role provisioning. Role ${roleSlug} is not a global role`, { userId: user.id, roleSlug });
79
80
  return;
80
81
  }
82
+ if (dbRole.slug === globalOwnerRoleSlug && user.role.slug !== globalOwnerRoleSlug) {
83
+ this.logger.warn(`Skipping instance role provisioning. Cannot assign owner role: ${globalOwnerRoleSlug} to user: ${user.id}`, { userId: user.id, roleSlug });
84
+ return;
85
+ }
81
86
  if (user.role.slug === globalOwnerRoleSlug && dbRole.slug !== globalOwnerRoleSlug) {
82
87
  const otherOwners = await this.userRepository.count({
83
88
  where: { role: { slug: globalOwnerRoleSlug }, id: (0, typeorm_1.Not)(user.id) },
@@ -388,10 +393,13 @@ let ProvisioningService = class ProvisioningService {
388
393
  this.logger.warn(`Expression mapping: skipping instance role, "${instanceRoleSlug}" is not a global role`, { userId: user.id });
389
394
  return;
390
395
  }
391
- const globalOwnerRoleSlug = 'global:owner';
392
- if (user.role.slug === globalOwnerRoleSlug && dbRole.slug !== globalOwnerRoleSlug) {
396
+ if (dbRole.slug === permissions_1.GLOBAL_OWNER_ROLE_SLUG && user.role.slug !== permissions_1.GLOBAL_OWNER_ROLE_SLUG) {
397
+ this.logger.warn(`Skipping instance role provisioning. Cannot assign owner role: ${permissions_1.GLOBAL_OWNER_ROLE_SLUG} to user: ${user.id}`, { userId: user.id, roleSlug: permissions_1.GLOBAL_OWNER_ROLE_SLUG });
398
+ return;
399
+ }
400
+ if (user.role.slug === permissions_1.GLOBAL_OWNER_ROLE_SLUG && dbRole.slug !== permissions_1.GLOBAL_OWNER_ROLE_SLUG) {
393
401
  const otherOwners = await this.userRepository.count({
394
- where: { role: { slug: globalOwnerRoleSlug }, id: (0, typeorm_1.Not)(user.id) },
402
+ where: { role: { slug: permissions_1.GLOBAL_OWNER_ROLE_SLUG }, id: (0, typeorm_1.Not)(user.id) },
395
403
  });
396
404
  if (otherOwners === 0) {
397
405
  this.logger.warn('Expression mapping: skipping instance role update, cannot demote last owner', { userId: user.id });