n8n 2.30.0 → 2.30.1
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 +11 -8
- 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 +11 -4
- package/dist/modules/agents/agent-runtime-reconstruction.service.js +72 -12
- package/dist/modules/agents/agent-runtime-reconstruction.service.js.map +1 -1
- package/dist/modules/agents/agent-task.service.d.ts +2 -1
- 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 +13 -3
- 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/identity-resolution.service.d.ts +3 -1
- package/dist/modules/token-exchange/services/identity-resolution.service.js +19 -12
- package/dist/modules/token-exchange/services/identity-resolution.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/services/role.service.d.ts +1 -0
- package/dist/services/role.service.js +4 -0
- package/dist/services/role.service.js.map +1 -1
- package/dist/webhooks/webhook-helpers.js +12 -7
- package/dist/webhooks/webhook-helpers.js.map +1 -1
- package/dist/webhooks/webhook-server.d.ts +1 -0
- package/dist/webhooks/webhook-server.js +4 -0
- package/dist/webhooks/webhook-server.js.map +1 -1
- package/package.json +30 -30
|
@@ -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":";;;;;;;;;;;;;;;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,
|
|
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
|
}
|
|
@@ -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
|
|
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":";;;;;;;;;;;;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;
|
|
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
|
-
|
|
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.
|
|
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
|
}
|