n8n 2.29.7 → 2.29.8
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/controllers/dynamic-node-parameters.controller.js +1 -1
- package/dist/controllers/dynamic-node-parameters.controller.js.map +1 -1
- package/dist/modules/agents/agent-chat.controller.js +2 -2
- package/dist/modules/agents/agent-chat.controller.js.map +1 -1
- package/dist/modules/agents/agent-execution-orchestrator.service.d.ts +4 -3
- package/dist/modules/agents/agent-execution-orchestrator.service.js +13 -11
- package/dist/modules/agents/agent-execution-orchestrator.service.js.map +1 -1
- package/dist/modules/agents/agent-publish.service.d.ts +3 -1
- package/dist/modules/agents/agent-publish.service.js +6 -2
- package/dist/modules/agents/agent-publish.service.js.map +1 -1
- package/dist/modules/agents/agent-runtime-cache.service.d.ts +2 -0
- package/dist/modules/agents/agent-runtime-cache.service.js +5 -3
- package/dist/modules/agents/agent-runtime-cache.service.js.map +1 -1
- package/dist/modules/agents/agent-runtime-reconstruction.service.d.ts +9 -5
- package/dist/modules/agents/agent-runtime-reconstruction.service.js +69 -12
- package/dist/modules/agents/agent-runtime-reconstruction.service.js.map +1 -1
- package/dist/modules/agents/agent-task.service.d.ts +2 -2
- package/dist/modules/agents/agent-task.service.js +4 -4
- package/dist/modules/agents/agent-task.service.js.map +1 -1
- package/dist/modules/agents/agent-tasks.controller.js +1 -1
- package/dist/modules/agents/agent-tasks.controller.js.map +1 -1
- package/dist/modules/agents/agents.module.d.ts +1 -1
- package/dist/modules/agents/agents.service.d.ts +3 -1
- package/dist/modules/agents/agents.service.js +6 -2
- package/dist/modules/agents/agents.service.js.map +1 -1
- package/dist/modules/agents/sub-agents/sub-agent-cleanup.service.d.ts +10 -0
- package/dist/modules/agents/sub-agents/sub-agent-cleanup.service.js +57 -0
- package/dist/modules/agents/sub-agents/sub-agent-cleanup.service.js.map +1 -0
- package/dist/modules/agents/sub-agents/sub-agent-foreground-runner.d.ts +2 -0
- package/dist/modules/agents/sub-agents/sub-agent-foreground-runner.js +1 -0
- package/dist/modules/agents/sub-agents/sub-agent-foreground-runner.js.map +1 -1
- package/dist/modules/agents/sub-agents/sub-agent-source-resolver.js +6 -7
- package/dist/modules/agents/sub-agents/sub-agent-source-resolver.js.map +1 -1
- package/dist/modules/mcp/mcp-protected-resource.d.ts +2 -0
- package/dist/modules/mcp/mcp-protected-resource.js +3 -0
- package/dist/modules/mcp/mcp-protected-resource.js.map +1 -1
- package/dist/modules/oauth-server/oauth-consent.controller.js +13 -3
- package/dist/modules/oauth-server/oauth-consent.controller.js.map +1 -1
- package/dist/modules/oauth-server/oauth-consent.service.d.ts +6 -2
- package/dist/modules/oauth-server/oauth-consent.service.js +26 -6
- package/dist/modules/oauth-server/oauth-consent.service.js.map +1 -1
- package/dist/modules/oauth-server/oauth-token.service.d.ts +4 -1
- package/dist/modules/oauth-server/oauth-token.service.js +28 -4
- package/dist/modules/oauth-server/oauth-token.service.js.map +1 -1
- package/dist/modules/oauth-server/protected-resource-resolvers/workflow-mcp-test-trigger-resource.resolver.d.ts +6 -1
- package/dist/modules/oauth-server/protected-resource-resolvers/workflow-mcp-test-trigger-resource.resolver.js +12 -2
- package/dist/modules/oauth-server/protected-resource-resolvers/workflow-mcp-test-trigger-resource.resolver.js.map +1 -1
- package/dist/modules/oauth-server/protected-resource-resolvers/workflow-mcp-trigger-resource.resolver.d.ts +6 -2
- package/dist/modules/oauth-server/protected-resource-resolvers/workflow-mcp-trigger-resource.resolver.js +12 -2
- package/dist/modules/oauth-server/protected-resource-resolvers/workflow-mcp-trigger-resource.resolver.js.map +1 -1
- package/dist/modules/provisioning.ee/provisioning.service.ee.js +12 -4
- package/dist/modules/provisioning.ee/provisioning.service.ee.js.map +1 -1
- package/dist/modules/redaction/executions/execution-redaction.service.js +1 -1
- package/dist/modules/redaction/executions/execution-redaction.service.js.map +1 -1
- package/dist/modules/token-exchange/services/scoped-jwt.strategy.js +1 -1
- package/dist/modules/token-exchange/services/scoped-jwt.strategy.js.map +1 -1
- package/dist/node-execution/ephemeral-node-executor.d.ts +1 -0
- package/dist/node-execution/ephemeral-node-executor.js +14 -1
- package/dist/node-execution/ephemeral-node-executor.js.map +1 -1
- package/dist/node-execution/index.d.ts +1 -1
- package/dist/node-execution/index.js +2 -1
- package/dist/node-execution/index.js.map +1 -1
- package/dist/services/dynamic-node-parameters.service.d.ts +1 -0
- package/dist/services/dynamic-node-parameters.service.js +11 -0
- package/dist/services/dynamic-node-parameters.service.js.map +1 -1
- package/dist/services/oauth-token-verifier-proxy.service.d.ts +1 -1
- package/dist/services/oauth-token-verifier-proxy.service.js.map +1 -1
- package/dist/services/protected-resource.registry.d.ts +2 -0
- package/dist/services/protected-resource.registry.js.map +1 -1
- package/dist/webhooks/webhook-helpers.js +12 -7
- package/dist/webhooks/webhook-helpers.js.map +1 -1
- package/package.json +31 -31
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sub-agent-foreground-runner.js","sourceRoot":"","sources":["../../../../src/modules/agents/sub-agents/sub-agent-foreground-runner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wCASqB;AAErB,wDAA6C;
|
|
1
|
+
{"version":3,"file":"sub-agent-foreground-runner.js","sourceRoot":"","sources":["../../../../src/modules/agents/sub-agents/sub-agent-foreground-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,6 @@ const api_types_1 = require("@n8n/api-types");
|
|
|
14
14
|
const di_1 = require("@n8n/di");
|
|
15
15
|
const n8n_workflow_1 = require("n8n-workflow");
|
|
16
16
|
const not_found_error_1 = require("../../../errors/response-errors/not-found.error");
|
|
17
|
-
const agent_config_composition_1 = require("../json-config/agent-config-composition");
|
|
18
17
|
const agent_history_repository_1 = require("../repositories/agent-history.repository");
|
|
19
18
|
const agent_repository_1 = require("../repositories/agent.repository");
|
|
20
19
|
let SubAgentSourceResolver = class SubAgentSourceResolver {
|
|
@@ -44,17 +43,17 @@ let SubAgentSourceResolver = class SubAgentSourceResolver {
|
|
|
44
43
|
...getAgentRuntimeAssets(version),
|
|
45
44
|
};
|
|
46
45
|
}
|
|
47
|
-
const
|
|
48
|
-
if (!
|
|
49
|
-
throw new n8n_workflow_1.UserError(`
|
|
46
|
+
const publishedVersion = agent.activeVersion;
|
|
47
|
+
if (!agent.activeVersionId || !publishedVersion?.schema) {
|
|
48
|
+
throw new n8n_workflow_1.UserError(`Sub-agent "${source.agentId}" is not published`);
|
|
50
49
|
}
|
|
51
50
|
return {
|
|
52
51
|
source: {
|
|
53
52
|
sourceId: source.agentId,
|
|
54
|
-
versionId: agent.
|
|
55
|
-
config: this.toRunnableConfig(
|
|
53
|
+
versionId: agent.activeVersionId,
|
|
54
|
+
config: this.toRunnableConfig(publishedVersion.schema),
|
|
56
55
|
},
|
|
57
|
-
...getAgentRuntimeAssets(
|
|
56
|
+
...getAgentRuntimeAssets(publishedVersion),
|
|
58
57
|
};
|
|
59
58
|
}
|
|
60
59
|
toRunnableConfig(config) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sub-agent-source-resolver.js","sourceRoot":"","sources":["../../../../src/modules/agents/sub-agents/sub-agent-source-resolver.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,8CAMwB;AACxB,gCAAkC;AAClC,+CAAyC;AAEzC,8EAAyE;AAIzE,
|
|
1
|
+
{"version":3,"file":"sub-agent-source-resolver.js","sourceRoot":"","sources":["../../../../src/modules/agents/sub-agents/sub-agent-source-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { McpSettingsService } from './mcp.settings.service';
|
|
2
2
|
import type { ProtectedResource } from '../../services/protected-resource.registry';
|
|
3
3
|
import { UrlService } from '../../services/url.service';
|
|
4
|
+
import type { User } from '@n8n/db';
|
|
4
5
|
export declare const INSTANCE_MCP_RESOURCE_ID = "instance-mcp";
|
|
5
6
|
export declare const SUPPORTED_SCOPES: string[];
|
|
6
7
|
export declare class McpProtectedResource implements ProtectedResource {
|
|
@@ -13,4 +14,5 @@ export declare class McpProtectedResource implements ProtectedResource {
|
|
|
13
14
|
getResourceUrl(): string;
|
|
14
15
|
getAudiences(): string[];
|
|
15
16
|
getAllowedRedirectUris(): Promise<string[]>;
|
|
17
|
+
authorize(_user: User): Promise<boolean>;
|
|
16
18
|
}
|
|
@@ -35,6 +35,9 @@ let McpProtectedResource = class McpProtectedResource {
|
|
|
35
35
|
async getAllowedRedirectUris() {
|
|
36
36
|
return await this.mcpSettingsService.getAllowedRedirectUris();
|
|
37
37
|
}
|
|
38
|
+
async authorize(_user) {
|
|
39
|
+
return await this.mcpSettingsService.getEnabled();
|
|
40
|
+
}
|
|
38
41
|
};
|
|
39
42
|
exports.McpProtectedResource = McpProtectedResource;
|
|
40
43
|
exports.McpProtectedResource = McpProtectedResource = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-protected-resource.js","sourceRoot":"","sources":["../../../src/modules/mcp/mcp-protected-resource.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gCAAkC;AAElC,iEAA4D;AAE5D,wDAAoD;
|
|
1
|
+
{"version":3,"file":"mcp-protected-resource.js","sourceRoot":"","sources":["../../../src/modules/mcp/mcp-protected-resource.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gCAAkC;AAElC,iEAA4D;AAE5D,wDAAoD;AAGvC,QAAA,wBAAwB,GAAG,cAAc,CAAC;AAS1C,QAAA,gBAAgB,GAAa,EAAE,CAAC;AAE7C,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;AAI7C,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AAYtC,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAYhC,YACkB,UAAsB,EACtB,kBAAsC;QADtC,eAAU,GAAV,UAAU,CAAY;QACtB,uBAAkB,GAAlB,kBAAkB,CAAoB;QAb/C,OAAE,GAAG,gCAAwB,CAAC;QAE9B,WAAM,GAAG,wBAAgB,CAAC;QAO1B,cAAS,GAAG,IAAI,CAAC;IAKvB,CAAC;IAEJ,cAAc;QACb,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACxE,OAAO,GAAG,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACzC,CAAC;IAED,YAAY;QAGX,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,mBAAmB,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,sBAAsB;QAC3B,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAW;QAI1B,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAC;IACnD,CAAC;CACD,CAAA;AAtCY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,YAAO,GAAE;qCAcqB,wBAAU;QACF,yCAAkB;GAd5C,oBAAoB,CAsChC"}
|
|
@@ -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
|
-
|
|
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
|
|
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":";;;;;;;;;;;;;;;AAAA,wDAA6C;AAE7C,gDAAkE;AAGlE,mFAA6E;AAC7E,mEAA8D;AAC9D,mEAA8D;
|
|
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,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,
|
|
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,
|
|
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,
|
|
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":";;;;;;;;;;;;AAAA,wDAA6C;
|
|
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
|
}
|
|
@@ -22,9 +22,9 @@ const oauth_access_token_entity_1 = require("./database/entities/oauth-access-to
|
|
|
22
22
|
const oauth_refresh_token_entity_1 = require("./database/entities/oauth-refresh-token.entity");
|
|
23
23
|
const oauth_access_token_repository_1 = require("./database/repositories/oauth-access-token.repository");
|
|
24
24
|
const oauth_refresh_token_repository_1 = require("./database/repositories/oauth-refresh-token.repository");
|
|
25
|
+
const protected_resource_registry_1 = require("../../services/protected-resource.registry");
|
|
25
26
|
const oauth_errors_1 = require("./oauth.errors");
|
|
26
27
|
const jwt_service_1 = require("../../services/jwt.service");
|
|
27
|
-
const protected_resource_registry_1 = require("../../services/protected-resource.registry");
|
|
28
28
|
let OAuthTokenService = class OAuthTokenService {
|
|
29
29
|
constructor(logger, jwtService, userRepository, accessTokenRepository, refreshTokenRepository, resourceRegistry) {
|
|
30
30
|
this.logger = logger;
|
|
@@ -119,9 +119,11 @@ let OAuthTokenService = class OAuthTokenService {
|
|
|
119
119
|
});
|
|
120
120
|
}
|
|
121
121
|
async verifyAccessToken(token, expectedAudience) {
|
|
122
|
+
return await this.verifyTokenWithAudiences(token, await this.getAllowedAudiences(expectedAudience));
|
|
123
|
+
}
|
|
124
|
+
async verifyTokenWithAudiences(token, allowedAudiences) {
|
|
122
125
|
let decoded;
|
|
123
126
|
try {
|
|
124
|
-
const allowedAudiences = await this.getAllowedAudiences(expectedAudience);
|
|
125
127
|
decoded = this.verifyJwtWithAllowedAudiences(token, allowedAudiences);
|
|
126
128
|
}
|
|
127
129
|
catch (error) {
|
|
@@ -149,7 +151,11 @@ let OAuthTokenService = class OAuthTokenService {
|
|
|
149
151
|
}
|
|
150
152
|
async verifyOAuthAccessToken(token, expectedAudience) {
|
|
151
153
|
try {
|
|
152
|
-
const
|
|
154
|
+
const resource = await this.getResourceByAudience(expectedAudience);
|
|
155
|
+
if (expectedAudience && !resource) {
|
|
156
|
+
return { user: null, context: { reason: 'insufficient_scope', auth_type: 'oauth' } };
|
|
157
|
+
}
|
|
158
|
+
const authInfo = await this.verifyTokenWithAudiences(token, this.audiencesForResource(resource, expectedAudience));
|
|
153
159
|
const userId = authInfo.extra && typeof authInfo.extra === 'object'
|
|
154
160
|
? this.getStringClaim(authInfo.extra, 'userId')
|
|
155
161
|
: null;
|
|
@@ -163,6 +169,13 @@ let OAuthTokenService = class OAuthTokenService {
|
|
|
163
169
|
if (!user) {
|
|
164
170
|
return { user: null, context: { reason: 'user_not_found', auth_type: 'oauth' } };
|
|
165
171
|
}
|
|
172
|
+
if (resource && !(await resource.authorize(user))) {
|
|
173
|
+
this.logger.warn('OAuth token denied: user lacks execute access', {
|
|
174
|
+
userId: user.id,
|
|
175
|
+
expectedAudience,
|
|
176
|
+
});
|
|
177
|
+
return { user: null, context: { reason: 'insufficient_scope', auth_type: 'oauth' } };
|
|
178
|
+
}
|
|
166
179
|
return { user, authType: 'oauth' };
|
|
167
180
|
}
|
|
168
181
|
catch (error) {
|
|
@@ -205,12 +218,23 @@ let OAuthTokenService = class OAuthTokenService {
|
|
|
205
218
|
return revoked;
|
|
206
219
|
}
|
|
207
220
|
async getAllowedAudiences(expectedAudience) {
|
|
221
|
+
const resource = expectedAudience
|
|
222
|
+
? await this.resourceRegistry.getByResourceUrl(expectedAudience)
|
|
223
|
+
: undefined;
|
|
224
|
+
return this.audiencesForResource(resource, expectedAudience);
|
|
225
|
+
}
|
|
226
|
+
audiencesForResource(resource, expectedAudience) {
|
|
208
227
|
if (expectedAudience) {
|
|
209
|
-
const resource = await this.resourceRegistry.getByResourceUrl(expectedAudience);
|
|
210
228
|
return resource ? resource.getAudiences() : [expectedAudience];
|
|
211
229
|
}
|
|
212
230
|
return this.resourceRegistry.getAllAudiences();
|
|
213
231
|
}
|
|
232
|
+
async getResourceByAudience(expectedAudience) {
|
|
233
|
+
if (!expectedAudience) {
|
|
234
|
+
return this.resourceRegistry.getDefaultResource();
|
|
235
|
+
}
|
|
236
|
+
return await this.resourceRegistry.getByResourceUrl(expectedAudience);
|
|
237
|
+
}
|
|
214
238
|
verifyJwtWithAllowedAudiences(token, audiences) {
|
|
215
239
|
try {
|
|
216
240
|
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":";;;;;;;;;;;;AAAA,+EAAoF;AAGpF,wDAA6C;AAC7C,8CAAsC;AACtC,gCAA0D;AAC1D,gCAAkC;AAClC,0CAA+C;AAC/C,+CAA4D;AAC5D,6CAAsD;AAEtD,6FAA4E;AAC5E,+FAA8E;AAC9E,yGAA8F;AAC9F,2GAAgG;
|
|
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,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
|
-
|
|
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
|
}
|
|
@@ -55,12 +57,19 @@ let WorkflowMcpTestTriggerResourceResolver = class WorkflowMcpTestTriggerResourc
|
|
|
55
57
|
!node.disabled &&
|
|
56
58
|
node.parameters.authentication === 'n8nOAuth2') {
|
|
57
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":";;;;;;;;;;;;AAAA,2CAAoD;AAEpD,wDAAoD;AACpD,sGAAgG;AAChG,wDAA6C;AAC7C,wCAA2C;AAC3C,gCAAkC;AAElC,mCAKiB;
|
|
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
|
-
|
|
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
|
}
|