n8n 1.119.1 → 1.120.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/auth/auth.service.js +1 -0
- package/dist/auth/auth.service.js.map +1 -1
- package/dist/build.tsbuildinfo +1 -1
- package/dist/controller.registry.d.ts +1 -0
- package/dist/controller.registry.js +37 -12
- package/dist/controller.registry.js.map +1 -1
- package/dist/controllers/auth.controller.js +3 -1
- package/dist/controllers/auth.controller.js.map +1 -1
- package/dist/events/maps/relay.event-map.d.ts +1 -1
- package/dist/middlewares/list-query/dtos/workflow.filter.dto.d.ts +1 -1
- package/dist/middlewares/list-query/dtos/workflow.filter.dto.js +1 -1
- package/dist/middlewares/list-query/dtos/workflow.filter.dto.js.map +1 -1
- package/dist/middlewares/list-query/dtos/workflow.select.dto.js +1 -0
- package/dist/middlewares/list-query/dtos/workflow.select.dto.js.map +1 -1
- package/dist/modules/breaking-changes/breaking-changes.controller.d.ts +7 -3
- package/dist/modules/breaking-changes/breaking-changes.controller.js +39 -6
- package/dist/modules/breaking-changes/breaking-changes.controller.js.map +1 -1
- package/dist/modules/breaking-changes/breaking-changes.service.d.ts +9 -6
- package/dist/modules/breaking-changes/breaking-changes.service.js +67 -38
- package/dist/modules/breaking-changes/breaking-changes.service.js.map +1 -1
- package/dist/modules/breaking-changes/rules/v2/file-access.rule.d.ts +5 -4
- package/dist/modules/breaking-changes/rules/v2/file-access.rule.js +4 -3
- package/dist/modules/breaking-changes/rules/v2/file-access.rule.js.map +1 -1
- package/dist/modules/breaking-changes/rules/v2/process-env-access.rule.d.ts +5 -4
- package/dist/modules/breaking-changes/rules/v2/process-env-access.rule.js +11 -13
- package/dist/modules/breaking-changes/rules/v2/process-env-access.rule.js.map +1 -1
- package/dist/modules/breaking-changes/rules/v2/removed-nodes.rule.d.ts +5 -4
- package/dist/modules/breaking-changes/rules/v2/removed-nodes.rule.js +4 -3
- package/dist/modules/breaking-changes/rules/v2/removed-nodes.rule.js.map +1 -1
- package/dist/modules/breaking-changes/types/detection.types.d.ts +9 -10
- package/dist/modules/breaking-changes/types/rule.types.d.ts +9 -48
- package/dist/modules/breaking-changes/types/rule.types.js +1 -14
- package/dist/modules/breaking-changes/types/rule.types.js.map +1 -1
- package/dist/modules/insights/database/repositories/insights-by-period-query.helper.d.ts +9 -2
- package/dist/modules/insights/database/repositories/insights-by-period-query.helper.js +28 -64
- package/dist/modules/insights/database/repositories/insights-by-period-query.helper.js.map +1 -1
- package/dist/modules/insights/insights.controller.js +1 -1
- package/dist/modules/mcp/database/entities/oauth-access-token.entity.d.ts +9 -0
- package/dist/modules/mcp/database/entities/oauth-access-token.entity.js +44 -0
- package/dist/modules/mcp/database/entities/oauth-access-token.entity.js.map +1 -0
- package/dist/modules/mcp/database/entities/oauth-authorization-code.entity.d.ts +15 -0
- package/dist/modules/mcp/database/entities/oauth-authorization-code.entity.js +69 -0
- package/dist/modules/mcp/database/entities/oauth-authorization-code.entity.js.map +1 -0
- package/dist/modules/mcp/database/entities/oauth-client.entity.d.ts +18 -0
- package/dist/modules/mcp/database/entities/oauth-client.entity.js +65 -0
- package/dist/modules/mcp/database/entities/oauth-client.entity.js.map +1 -0
- package/dist/modules/mcp/database/entities/oauth-refresh-token.entity.d.ts +10 -0
- package/dist/modules/mcp/database/entities/oauth-refresh-token.entity.js +49 -0
- package/dist/modules/mcp/database/entities/oauth-refresh-token.entity.js.map +1 -0
- package/dist/modules/mcp/database/entities/oauth-user-consent.entity.d.ts +10 -0
- package/dist/modules/mcp/database/entities/oauth-user-consent.entity.js +49 -0
- package/dist/modules/mcp/database/entities/oauth-user-consent.entity.js.map +1 -0
- package/dist/modules/mcp/database/repositories/oauth-access-token.repository.d.ts +5 -0
- package/dist/modules/mcp/database/repositories/oauth-access-token.repository.js +26 -0
- package/dist/modules/mcp/database/repositories/oauth-access-token.repository.js.map +1 -0
- package/dist/modules/mcp/database/repositories/oauth-authorization-code.repository.d.ts +5 -0
- package/dist/modules/mcp/database/repositories/oauth-authorization-code.repository.js +26 -0
- package/dist/modules/mcp/database/repositories/oauth-authorization-code.repository.js.map +1 -0
- package/dist/modules/mcp/database/repositories/oauth-client.repository.d.ts +5 -0
- package/dist/modules/mcp/database/repositories/oauth-client.repository.js +26 -0
- package/dist/modules/mcp/database/repositories/oauth-client.repository.js.map +1 -0
- package/dist/modules/mcp/database/repositories/oauth-refresh-token.repository.d.ts +5 -0
- package/dist/modules/mcp/database/repositories/oauth-refresh-token.repository.js +26 -0
- package/dist/modules/mcp/database/repositories/oauth-refresh-token.repository.js.map +1 -0
- package/dist/modules/mcp/database/repositories/oauth-user-consent.repository.d.ts +6 -0
- package/dist/modules/mcp/database/repositories/oauth-user-consent.repository.js +33 -0
- package/dist/modules/mcp/database/repositories/oauth-user-consent.repository.js.map +1 -0
- package/dist/modules/mcp/dto/approve-consent-request.dto.d.ts +8 -0
- package/dist/modules/mcp/dto/approve-consent-request.dto.js +11 -0
- package/dist/modules/mcp/dto/approve-consent-request.dto.js.map +1 -0
- package/dist/modules/mcp/mcp-api-key.service.d.ts +6 -9
- package/dist/modules/mcp/mcp-api-key.service.js +32 -61
- package/dist/modules/mcp/mcp-api-key.service.js.map +1 -1
- package/dist/modules/mcp/mcp-oauth-authorization-code.service.d.ts +11 -0
- package/dist/modules/mcp/mcp-oauth-authorization-code.service.js +76 -0
- package/dist/modules/mcp/mcp-oauth-authorization-code.service.js.map +1 -0
- package/dist/modules/mcp/mcp-oauth-consent.service.d.ts +20 -0
- package/dist/modules/mcp/mcp-oauth-consent.service.js +87 -0
- package/dist/modules/mcp/mcp-oauth-consent.service.js.map +1 -0
- package/dist/modules/mcp/mcp-oauth-service.d.ts +31 -0
- package/dist/modules/mcp/mcp-oauth-service.js +164 -0
- package/dist/modules/mcp/mcp-oauth-service.js.map +1 -0
- package/dist/modules/mcp/mcp-oauth-token.service.d.ts +28 -0
- package/dist/modules/mcp/mcp-oauth-token.service.js +182 -0
- package/dist/modules/mcp/mcp-oauth-token.service.js.map +1 -0
- package/dist/modules/mcp/mcp-oauth.helpers.d.ts +4 -0
- package/dist/modules/mcp/mcp-oauth.helpers.js +24 -0
- package/dist/modules/mcp/mcp-oauth.helpers.js.map +1 -0
- package/dist/modules/mcp/mcp-server-middleware.service.d.ts +18 -0
- package/dist/modules/mcp/mcp-server-middleware.service.js +95 -0
- package/dist/modules/mcp/mcp-server-middleware.service.js.map +1 -0
- package/dist/modules/mcp/mcp.auth.consent.controller.d.ts +17 -0
- package/dist/modules/mcp/mcp.auth.consent.controller.js +120 -0
- package/dist/modules/mcp/mcp.auth.consent.controller.js.map +1 -0
- package/dist/modules/mcp/mcp.controller.d.ts +4 -2
- package/dist/modules/mcp/mcp.controller.js +25 -3
- package/dist/modules/mcp/mcp.controller.js.map +1 -1
- package/dist/modules/mcp/mcp.module.d.ts +1 -0
- package/dist/modules/mcp/mcp.module.js +11 -0
- package/dist/modules/mcp/mcp.module.js.map +1 -1
- package/dist/modules/mcp/mcp.oauth-clients.controller.d.ts +12 -0
- package/dist/modules/mcp/mcp.oauth-clients.controller.js +93 -0
- package/dist/modules/mcp/mcp.oauth-clients.controller.js.map +1 -0
- package/dist/modules/mcp/mcp.oauth.controller.d.ts +13 -0
- package/dist/modules/mcp/mcp.oauth.controller.js +124 -0
- package/dist/modules/mcp/mcp.oauth.controller.js.map +1 -0
- package/dist/modules/mcp/mcp.types.d.ts +1 -2
- package/dist/modules/mcp/oauth-session.service.d.ts +16 -0
- package/dist/modules/mcp/oauth-session.service.js +48 -0
- package/dist/modules/mcp/oauth-session.service.js.map +1 -0
- package/dist/modules/mcp/tools/search-workflows.tool.d.ts +2 -3
- package/dist/modules/mcp/tools/search-workflows.tool.js +11 -10
- package/dist/modules/mcp/tools/search-workflows.tool.js.map +1 -1
- package/dist/modules/provisioning.ee/provisioning.service.ee.d.ts +4 -2
- package/dist/modules/provisioning.ee/provisioning.service.ee.js +20 -1
- package/dist/modules/provisioning.ee/provisioning.service.ee.js.map +1 -1
- package/dist/public-api/v1/handlers/users/users.service.ee.d.ts +6 -2
- package/dist/public-api/v1/handlers/users/users.service.ee.js +10 -3
- package/dist/public-api/v1/handlers/users/users.service.ee.js.map +1 -1
- package/dist/public-api/v1/openapi.yml +1 -1
- package/dist/services/import.service.js +0 -5
- package/dist/services/import.service.js.map +1 -1
- package/dist/services/jwt.service.d.ts +1 -1
- package/dist/services/jwt.service.js.map +1 -1
- package/dist/sso.ee/oidc/oidc.service.ee.js +6 -4
- package/dist/sso.ee/oidc/oidc.service.ee.js.map +1 -1
- package/dist/sso.ee/saml/routes/saml.controller.ee.d.ts +2 -10
- package/dist/sso.ee/saml/routes/saml.controller.ee.js +2 -9
- package/dist/sso.ee/saml/routes/saml.controller.ee.js.map +1 -1
- package/dist/sso.ee/saml/saml-helpers.d.ts +4 -1
- package/dist/sso.ee/saml/saml-helpers.js +10 -3
- package/dist/sso.ee/saml/saml-helpers.js.map +1 -1
- package/dist/sso.ee/saml/saml.service.ee.d.ts +4 -1
- package/dist/sso.ee/saml/saml.service.ee.js +20 -12
- package/dist/sso.ee/saml/saml.service.ee.js.map +1 -1
- package/dist/sso.ee/saml/types.d.ts +2 -2
- package/dist/telemetry/index.js +17 -3
- package/dist/telemetry/index.js.map +1 -1
- package/dist/utils/validate-database-type.d.ts +3 -1
- package/dist/utils/validate-database-type.js +26 -4
- package/dist/utils/validate-database-type.js.map +1 -1
- package/dist/workflows/workflow-finder.service.d.ts +1 -0
- package/dist/workflows/workflow.request.d.ts +1 -0
- package/dist/workflows/workflow.service.d.ts +2 -1
- package/dist/workflows/workflow.service.js +1 -0
- package/dist/workflows/workflow.service.js.map +1 -1
- package/dist/workflows/workflows.controller.d.ts +4 -0
- package/package.json +26 -26
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.OAuthClient = void 0;
|
|
13
|
+
const db_1 = require("@n8n/db");
|
|
14
|
+
const typeorm_1 = require("@n8n/typeorm");
|
|
15
|
+
let OAuthClient = class OAuthClient extends db_1.WithTimestamps {
|
|
16
|
+
};
|
|
17
|
+
exports.OAuthClient = OAuthClient;
|
|
18
|
+
__decorate([
|
|
19
|
+
(0, typeorm_1.Column)({ type: 'varchar', primary: true }),
|
|
20
|
+
__metadata("design:type", String)
|
|
21
|
+
], OAuthClient.prototype, "id", void 0);
|
|
22
|
+
__decorate([
|
|
23
|
+
(0, typeorm_1.Column)({ type: String }),
|
|
24
|
+
__metadata("design:type", String)
|
|
25
|
+
], OAuthClient.prototype, "name", void 0);
|
|
26
|
+
__decorate([
|
|
27
|
+
(0, db_1.JsonColumn)(),
|
|
28
|
+
__metadata("design:type", Array)
|
|
29
|
+
], OAuthClient.prototype, "redirectUris", void 0);
|
|
30
|
+
__decorate([
|
|
31
|
+
(0, db_1.JsonColumn)(),
|
|
32
|
+
__metadata("design:type", Array)
|
|
33
|
+
], OAuthClient.prototype, "grantTypes", void 0);
|
|
34
|
+
__decorate([
|
|
35
|
+
(0, typeorm_1.Column)({ type: String, default: 'none' }),
|
|
36
|
+
__metadata("design:type", String)
|
|
37
|
+
], OAuthClient.prototype, "tokenEndpointAuthMethod", void 0);
|
|
38
|
+
__decorate([
|
|
39
|
+
(0, typeorm_1.OneToMany)('AuthorizationCode', 'client'),
|
|
40
|
+
__metadata("design:type", Array)
|
|
41
|
+
], OAuthClient.prototype, "authorizationCodes", void 0);
|
|
42
|
+
__decorate([
|
|
43
|
+
(0, typeorm_1.OneToMany)('AccessToken', 'client'),
|
|
44
|
+
__metadata("design:type", Array)
|
|
45
|
+
], OAuthClient.prototype, "accessTokens", void 0);
|
|
46
|
+
__decorate([
|
|
47
|
+
(0, typeorm_1.OneToMany)('RefreshToken', 'client'),
|
|
48
|
+
__metadata("design:type", Array)
|
|
49
|
+
], OAuthClient.prototype, "refreshTokens", void 0);
|
|
50
|
+
__decorate([
|
|
51
|
+
(0, typeorm_1.OneToMany)('UserConsent', 'client'),
|
|
52
|
+
__metadata("design:type", Array)
|
|
53
|
+
], OAuthClient.prototype, "userConsents", void 0);
|
|
54
|
+
__decorate([
|
|
55
|
+
(0, typeorm_1.Column)({ type: String, nullable: true }),
|
|
56
|
+
__metadata("design:type", Object)
|
|
57
|
+
], OAuthClient.prototype, "clientSecret", void 0);
|
|
58
|
+
__decorate([
|
|
59
|
+
(0, typeorm_1.Column)({ type: 'int', nullable: true }),
|
|
60
|
+
__metadata("design:type", Object)
|
|
61
|
+
], OAuthClient.prototype, "clientSecretExpiresAt", void 0);
|
|
62
|
+
exports.OAuthClient = OAuthClient = __decorate([
|
|
63
|
+
(0, typeorm_1.Entity)('oauth_clients')
|
|
64
|
+
], OAuthClient);
|
|
65
|
+
//# sourceMappingURL=oauth-client.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-client.entity.js","sourceRoot":"","sources":["../../../../../src/modules/mcp/database/entities/oauth-client.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gCAAqD;AACrD,0CAAyD;AAQlD,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,mBAAc;CAiC9C,CAAA;AAjCY,kCAAW;AAEvB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;uCAChC;AAGX;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;yCACZ;AAGb;IADC,IAAA,eAAU,GAAE;;iDACU;AAGvB;IADC,IAAA,eAAU,GAAE;;+CACQ;AAGrB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;;4DACV;AAGhC;IADC,IAAA,mBAAS,EAAC,mBAAmB,EAAE,QAAQ,CAAC;;uDACD;AAGxC;IADC,IAAA,mBAAS,EAAC,aAAa,EAAE,QAAQ,CAAC;;iDACP;AAG5B;IADC,IAAA,mBAAS,EAAC,cAAc,EAAE,QAAQ,CAAC;;kDACN;AAG9B;IADC,IAAA,mBAAS,EAAC,aAAa,EAAE,QAAQ,CAAC;;iDACP;AAG5B;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;iDACb;AAG5B;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;0DACH;sBAhCzB,WAAW;IADvB,IAAA,gBAAM,EAAC,eAAe,CAAC;GACX,WAAW,CAiCvB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { User, WithTimestamps } from '@n8n/db';
|
|
2
|
+
import { OAuthClient } from './oauth-client.entity';
|
|
3
|
+
export declare class RefreshToken extends WithTimestamps {
|
|
4
|
+
token: string;
|
|
5
|
+
client: OAuthClient;
|
|
6
|
+
clientId: string;
|
|
7
|
+
user: User;
|
|
8
|
+
userId: string;
|
|
9
|
+
expiresAt: number;
|
|
10
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.RefreshToken = void 0;
|
|
13
|
+
const db_1 = require("@n8n/db");
|
|
14
|
+
const typeorm_1 = require("@n8n/typeorm");
|
|
15
|
+
const oauth_client_entity_1 = require("./oauth-client.entity");
|
|
16
|
+
let RefreshToken = class RefreshToken extends db_1.WithTimestamps {
|
|
17
|
+
};
|
|
18
|
+
exports.RefreshToken = RefreshToken;
|
|
19
|
+
__decorate([
|
|
20
|
+
(0, typeorm_1.Column)({ type: 'varchar', primary: true }),
|
|
21
|
+
__metadata("design:type", String)
|
|
22
|
+
], RefreshToken.prototype, "token", void 0);
|
|
23
|
+
__decorate([
|
|
24
|
+
(0, typeorm_1.ManyToOne)(() => oauth_client_entity_1.OAuthClient, (client) => client.refreshTokens, { onDelete: 'CASCADE' }),
|
|
25
|
+
__metadata("design:type", oauth_client_entity_1.OAuthClient)
|
|
26
|
+
], RefreshToken.prototype, "client", void 0);
|
|
27
|
+
__decorate([
|
|
28
|
+
(0, typeorm_1.Index)(),
|
|
29
|
+
(0, typeorm_1.Column)({ type: String }),
|
|
30
|
+
__metadata("design:type", String)
|
|
31
|
+
], RefreshToken.prototype, "clientId", void 0);
|
|
32
|
+
__decorate([
|
|
33
|
+
(0, typeorm_1.ManyToOne)(() => db_1.User, { onDelete: 'CASCADE' }),
|
|
34
|
+
__metadata("design:type", db_1.User)
|
|
35
|
+
], RefreshToken.prototype, "user", void 0);
|
|
36
|
+
__decorate([
|
|
37
|
+
(0, typeorm_1.Index)(),
|
|
38
|
+
(0, typeorm_1.Column)({ type: String }),
|
|
39
|
+
__metadata("design:type", String)
|
|
40
|
+
], RefreshToken.prototype, "userId", void 0);
|
|
41
|
+
__decorate([
|
|
42
|
+
(0, typeorm_1.Index)(),
|
|
43
|
+
(0, typeorm_1.Column)({ type: 'int' }),
|
|
44
|
+
__metadata("design:type", Number)
|
|
45
|
+
], RefreshToken.prototype, "expiresAt", void 0);
|
|
46
|
+
exports.RefreshToken = RefreshToken = __decorate([
|
|
47
|
+
(0, typeorm_1.Entity)('oauth_refresh_tokens')
|
|
48
|
+
], RefreshToken);
|
|
49
|
+
//# sourceMappingURL=oauth-refresh-token.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-refresh-token.entity.js","sourceRoot":"","sources":["../../../../../src/modules/mcp/database/entities/oauth-refresh-token.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gCAA+C;AAC/C,0CAAgE;AAEhE,+DAAoD;AAG7C,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,mBAAc;CAyB/C,CAAA;AAzBY,oCAAY;AAExB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;2CAC7B;AAOd;IALC,IAAA,mBAAS,EACT,GAAG,EAAE,CAAC,iCAAW,EACjB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,EAChC,EAAE,QAAQ,EAAE,SAAS,EAAE,CACvB;8BACO,iCAAW;4CAAC;AAIpB;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;8CACR;AAGjB;IADC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,SAAI,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;8BACzC,SAAI;0CAAC;AAIX;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;4CACV;AAIf;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;;+CACN;uBAxBN,YAAY;IADxB,IAAA,gBAAM,EAAC,sBAAsB,CAAC;GAClB,YAAY,CAyBxB"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.UserConsent = void 0;
|
|
13
|
+
const db_1 = require("@n8n/db");
|
|
14
|
+
const typeorm_1 = require("@n8n/typeorm");
|
|
15
|
+
const oauth_client_entity_1 = require("./oauth-client.entity");
|
|
16
|
+
let UserConsent = class UserConsent {
|
|
17
|
+
};
|
|
18
|
+
exports.UserConsent = UserConsent;
|
|
19
|
+
__decorate([
|
|
20
|
+
(0, typeorm_1.PrimaryGeneratedColumn)(),
|
|
21
|
+
__metadata("design:type", Number)
|
|
22
|
+
], UserConsent.prototype, "id", void 0);
|
|
23
|
+
__decorate([
|
|
24
|
+
(0, typeorm_1.ManyToOne)(() => db_1.User, { onDelete: 'CASCADE' }),
|
|
25
|
+
__metadata("design:type", db_1.User)
|
|
26
|
+
], UserConsent.prototype, "user", void 0);
|
|
27
|
+
__decorate([
|
|
28
|
+
(0, typeorm_1.Index)(),
|
|
29
|
+
(0, typeorm_1.Column)({ type: String }),
|
|
30
|
+
__metadata("design:type", String)
|
|
31
|
+
], UserConsent.prototype, "userId", void 0);
|
|
32
|
+
__decorate([
|
|
33
|
+
(0, typeorm_1.ManyToOne)(() => oauth_client_entity_1.OAuthClient, (client) => client.userConsents, { onDelete: 'CASCADE' }),
|
|
34
|
+
__metadata("design:type", oauth_client_entity_1.OAuthClient)
|
|
35
|
+
], UserConsent.prototype, "client", void 0);
|
|
36
|
+
__decorate([
|
|
37
|
+
(0, typeorm_1.Index)(),
|
|
38
|
+
(0, typeorm_1.Column)({ type: String }),
|
|
39
|
+
__metadata("design:type", String)
|
|
40
|
+
], UserConsent.prototype, "clientId", void 0);
|
|
41
|
+
__decorate([
|
|
42
|
+
(0, typeorm_1.Column)({ type: 'bigint' }),
|
|
43
|
+
__metadata("design:type", Number)
|
|
44
|
+
], UserConsent.prototype, "grantedAt", void 0);
|
|
45
|
+
exports.UserConsent = UserConsent = __decorate([
|
|
46
|
+
(0, typeorm_1.Entity)('oauth_user_consents'),
|
|
47
|
+
(0, typeorm_1.Unique)(['userId', 'clientId'])
|
|
48
|
+
], UserConsent);
|
|
49
|
+
//# sourceMappingURL=oauth-user-consent.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-user-consent.entity.js","sourceRoot":"","sources":["../../../../../src/modules/mcp/database/entities/oauth-user-consent.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gCAA+B;AAC/B,0CAAgG;AAEhG,+DAAoD;AAI7C,IAAM,WAAW,GAAjB,MAAM,WAAW;CAwBvB,CAAA;AAxBY,kCAAW;AAEvB;IADC,IAAA,gCAAsB,GAAE;;uCACd;AAGX;IADC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,SAAI,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;8BACzC,SAAI;yCAAC;AAIX;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;2CACV;AAOf;IALC,IAAA,mBAAS,EACT,GAAG,EAAE,CAAC,iCAAW,EACjB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,EAC/B,EAAE,QAAQ,EAAE,SAAS,EAAE,CACvB;8BACO,iCAAW;2CAAC;AAIpB;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;6CACR;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;;8CACT;sBAvBN,WAAW;IAFvB,IAAA,gBAAM,EAAC,qBAAqB,CAAC;IAC7B,IAAA,gBAAM,EAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;GAClB,WAAW,CAwBvB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.AccessTokenRepository = void 0;
|
|
13
|
+
const di_1 = require("@n8n/di");
|
|
14
|
+
const typeorm_1 = require("@n8n/typeorm");
|
|
15
|
+
const oauth_access_token_entity_1 = require("../entities/oauth-access-token.entity");
|
|
16
|
+
let AccessTokenRepository = class AccessTokenRepository extends typeorm_1.Repository {
|
|
17
|
+
constructor(dataSource) {
|
|
18
|
+
super(oauth_access_token_entity_1.AccessToken, dataSource.manager);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
exports.AccessTokenRepository = AccessTokenRepository;
|
|
22
|
+
exports.AccessTokenRepository = AccessTokenRepository = __decorate([
|
|
23
|
+
(0, di_1.Service)(),
|
|
24
|
+
__metadata("design:paramtypes", [typeorm_1.DataSource])
|
|
25
|
+
], AccessTokenRepository);
|
|
26
|
+
//# sourceMappingURL=oauth-access-token.repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-access-token.repository.js","sourceRoot":"","sources":["../../../../../src/modules/mcp/database/repositories/oauth-access-token.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gCAAkC;AAClC,0CAAsD;AAEtD,qFAAoE;AAG7D,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,oBAAuB;IACjE,YAAY,UAAsB;QACjC,KAAK,CAAC,uCAAW,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;CACD,CAAA;AAJY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,YAAO,GAAE;qCAEe,oBAAU;GADtB,qBAAqB,CAIjC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.AuthorizationCodeRepository = void 0;
|
|
13
|
+
const di_1 = require("@n8n/di");
|
|
14
|
+
const typeorm_1 = require("@n8n/typeorm");
|
|
15
|
+
const oauth_authorization_code_entity_1 = require("../entities/oauth-authorization-code.entity");
|
|
16
|
+
let AuthorizationCodeRepository = class AuthorizationCodeRepository extends typeorm_1.Repository {
|
|
17
|
+
constructor(dataSource) {
|
|
18
|
+
super(oauth_authorization_code_entity_1.AuthorizationCode, dataSource.manager);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
exports.AuthorizationCodeRepository = AuthorizationCodeRepository;
|
|
22
|
+
exports.AuthorizationCodeRepository = AuthorizationCodeRepository = __decorate([
|
|
23
|
+
(0, di_1.Service)(),
|
|
24
|
+
__metadata("design:paramtypes", [typeorm_1.DataSource])
|
|
25
|
+
], AuthorizationCodeRepository);
|
|
26
|
+
//# sourceMappingURL=oauth-authorization-code.repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-authorization-code.repository.js","sourceRoot":"","sources":["../../../../../src/modules/mcp/database/repositories/oauth-authorization-code.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gCAAkC;AAClC,0CAAsD;AAEtD,iGAAgF;AAGzE,IAAM,2BAA2B,GAAjC,MAAM,2BAA4B,SAAQ,oBAA6B;IAC7E,YAAY,UAAsB;QACjC,KAAK,CAAC,mDAAiB,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;CACD,CAAA;AAJY,kEAA2B;sCAA3B,2BAA2B;IADvC,IAAA,YAAO,GAAE;qCAEe,oBAAU;GADtB,2BAA2B,CAIvC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.OAuthClientRepository = void 0;
|
|
13
|
+
const di_1 = require("@n8n/di");
|
|
14
|
+
const typeorm_1 = require("@n8n/typeorm");
|
|
15
|
+
const oauth_client_entity_1 = require("../entities/oauth-client.entity");
|
|
16
|
+
let OAuthClientRepository = class OAuthClientRepository extends typeorm_1.Repository {
|
|
17
|
+
constructor(dataSource) {
|
|
18
|
+
super(oauth_client_entity_1.OAuthClient, dataSource.manager);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
exports.OAuthClientRepository = OAuthClientRepository;
|
|
22
|
+
exports.OAuthClientRepository = OAuthClientRepository = __decorate([
|
|
23
|
+
(0, di_1.Service)(),
|
|
24
|
+
__metadata("design:paramtypes", [typeorm_1.DataSource])
|
|
25
|
+
], OAuthClientRepository);
|
|
26
|
+
//# sourceMappingURL=oauth-client.repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-client.repository.js","sourceRoot":"","sources":["../../../../../src/modules/mcp/database/repositories/oauth-client.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gCAAkC;AAClC,0CAAsD;AAEtD,yEAA8D;AAGvD,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,oBAAuB;IACjE,YAAY,UAAsB;QACjC,KAAK,CAAC,iCAAW,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;CACD,CAAA;AAJY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,YAAO,GAAE;qCAEe,oBAAU;GADtB,qBAAqB,CAIjC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.RefreshTokenRepository = void 0;
|
|
13
|
+
const di_1 = require("@n8n/di");
|
|
14
|
+
const typeorm_1 = require("@n8n/typeorm");
|
|
15
|
+
const oauth_refresh_token_entity_1 = require("../entities/oauth-refresh-token.entity");
|
|
16
|
+
let RefreshTokenRepository = class RefreshTokenRepository extends typeorm_1.Repository {
|
|
17
|
+
constructor(dataSource) {
|
|
18
|
+
super(oauth_refresh_token_entity_1.RefreshToken, dataSource.manager);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
exports.RefreshTokenRepository = RefreshTokenRepository;
|
|
22
|
+
exports.RefreshTokenRepository = RefreshTokenRepository = __decorate([
|
|
23
|
+
(0, di_1.Service)(),
|
|
24
|
+
__metadata("design:paramtypes", [typeorm_1.DataSource])
|
|
25
|
+
], RefreshTokenRepository);
|
|
26
|
+
//# sourceMappingURL=oauth-refresh-token.repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-refresh-token.repository.js","sourceRoot":"","sources":["../../../../../src/modules/mcp/database/repositories/oauth-refresh-token.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gCAAkC;AAClC,0CAAsD;AAEtD,uFAAsE;AAG/D,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,oBAAwB;IACnE,YAAY,UAAsB;QACjC,KAAK,CAAC,yCAAY,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;CACD,CAAA;AAJY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,YAAO,GAAE;qCAEe,oBAAU;GADtB,sBAAsB,CAIlC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { DataSource, Repository } from '@n8n/typeorm';
|
|
2
|
+
import { UserConsent } from '../entities/oauth-user-consent.entity';
|
|
3
|
+
export declare class UserConsentRepository extends Repository<UserConsent> {
|
|
4
|
+
constructor(dataSource: DataSource);
|
|
5
|
+
findByUserWithClient(userId: string): Promise<UserConsent[]>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.UserConsentRepository = void 0;
|
|
13
|
+
const di_1 = require("@n8n/di");
|
|
14
|
+
const typeorm_1 = require("@n8n/typeorm");
|
|
15
|
+
const oauth_user_consent_entity_1 = require("../entities/oauth-user-consent.entity");
|
|
16
|
+
let UserConsentRepository = class UserConsentRepository extends typeorm_1.Repository {
|
|
17
|
+
constructor(dataSource) {
|
|
18
|
+
super(oauth_user_consent_entity_1.UserConsent, dataSource.manager);
|
|
19
|
+
}
|
|
20
|
+
async findByUserWithClient(userId) {
|
|
21
|
+
return await this.find({
|
|
22
|
+
where: { userId },
|
|
23
|
+
relations: ['client'],
|
|
24
|
+
order: { grantedAt: 'DESC' },
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
exports.UserConsentRepository = UserConsentRepository;
|
|
29
|
+
exports.UserConsentRepository = UserConsentRepository = __decorate([
|
|
30
|
+
(0, di_1.Service)(),
|
|
31
|
+
__metadata("design:paramtypes", [typeorm_1.DataSource])
|
|
32
|
+
], UserConsentRepository);
|
|
33
|
+
//# sourceMappingURL=oauth-user-consent.repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-user-consent.repository.js","sourceRoot":"","sources":["../../../../../src/modules/mcp/database/repositories/oauth-user-consent.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gCAAkC;AAClC,0CAAsD;AAEtD,qFAAoE;AAG7D,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,oBAAuB;IACjE,YAAY,UAAsB;QACjC,KAAK,CAAC,uCAAW,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAKD,KAAK,CAAC,oBAAoB,CAAC,MAAc;QACxC,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC;YACtB,KAAK,EAAE,EAAE,MAAM,EAAE;YACjB,SAAS,EAAE,CAAC,QAAQ,CAAC;YACrB,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;SAC5B,CAAC,CAAC;IACJ,CAAC;CACD,CAAA;AAfY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,YAAO,GAAE;qCAEe,oBAAU;GADtB,qBAAqB,CAejC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApproveConsentRequestDto = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const zod_class_1 = require("zod-class");
|
|
6
|
+
class ApproveConsentRequestDto extends zod_class_1.Z.class({
|
|
7
|
+
approved: zod_1.z.boolean(),
|
|
8
|
+
}) {
|
|
9
|
+
}
|
|
10
|
+
exports.ApproveConsentRequestDto = ApproveConsentRequestDto;
|
|
11
|
+
//# sourceMappingURL=approve-consent-request.dto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approve-consent-request.dto.js","sourceRoot":"","sources":["../../../../src/modules/mcp/dto/approve-consent-request.dto.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AACxB,yCAA8B;AAE9B,MAAa,wBAAyB,SAAQ,aAAC,CAAC,KAAK,CAAC;IACrD,QAAQ,EAAE,OAAC,CAAC,OAAO,EAAE;CACrB,CAAC;CAAG;AAFL,4DAEK"}
|
|
@@ -1,25 +1,22 @@
|
|
|
1
1
|
import { ApiKey, ApiKeyRepository, User, UserRepository } from '@n8n/db';
|
|
2
2
|
import { EntityManager } from '@n8n/typeorm';
|
|
3
|
-
import { NextFunction, Response, Request } from 'express';
|
|
4
3
|
import { JwtService } from '../../services/jwt.service';
|
|
5
|
-
import {
|
|
4
|
+
import { AccessTokenRepository } from './database/repositories/oauth-access-token.repository';
|
|
6
5
|
export declare class McpServerApiKeyService {
|
|
7
6
|
private readonly apiKeyRepository;
|
|
8
7
|
private readonly jwtService;
|
|
9
8
|
private readonly userRepository;
|
|
10
|
-
private readonly
|
|
11
|
-
constructor(apiKeyRepository: ApiKeyRepository, jwtService: JwtService, userRepository: UserRepository,
|
|
9
|
+
private readonly accessTokenRepository;
|
|
10
|
+
constructor(apiKeyRepository: ApiKeyRepository, jwtService: JwtService, userRepository: UserRepository, accessTokenRepository: AccessTokenRepository);
|
|
12
11
|
createMcpServerApiKey(user: User, trx?: EntityManager): Promise<ApiKey>;
|
|
13
12
|
findServerApiKeyForUser(user: User, { redact }?: {
|
|
14
13
|
redact?: boolean | undefined;
|
|
15
14
|
}): Promise<ApiKey | null>;
|
|
16
|
-
|
|
15
|
+
getUserForApiKey(apiKey: string): Promise<User | null>;
|
|
16
|
+
verifyApiKey(apiKey: string): Promise<User | null>;
|
|
17
|
+
getUserForAccessToken(token: string): Promise<User | null>;
|
|
17
18
|
deleteAllMcpApiKeysForUser(user: User, trx?: EntityManager): Promise<void>;
|
|
18
19
|
private redactApiKey;
|
|
19
|
-
private extractAPIKeyFromHeader;
|
|
20
|
-
getAuthMiddleware(): (req: Request, res: Response, next: NextFunction) => Promise<void>;
|
|
21
|
-
private responseWithUnauthorized;
|
|
22
|
-
private trackUnauthorizedEvent;
|
|
23
20
|
getOrCreateApiKey(user: User): Promise<ApiKey>;
|
|
24
21
|
rotateMcpServerApiKey(user: User): Promise<ApiKey>;
|
|
25
22
|
}
|
|
@@ -13,11 +13,8 @@ exports.McpServerApiKeyService = void 0;
|
|
|
13
13
|
const db_1 = require("@n8n/db");
|
|
14
14
|
const di_1 = require("@n8n/di");
|
|
15
15
|
const crypto_1 = require("crypto");
|
|
16
|
-
const mcp_constants_1 = require("./mcp.constants");
|
|
17
|
-
const mcp_utils_1 = require("./mcp.utils");
|
|
18
|
-
const auth_error_1 = require("../../errors/response-errors/auth.error");
|
|
19
16
|
const jwt_service_1 = require("../../services/jwt.service");
|
|
20
|
-
const
|
|
17
|
+
const oauth_access_token_repository_1 = require("./database/repositories/oauth-access-token.repository");
|
|
21
18
|
const API_KEY_AUDIENCE = 'mcp-server-api';
|
|
22
19
|
const API_KEY_ISSUER = 'n8n';
|
|
23
20
|
const REDACT_API_KEY_REVEAL_COUNT = 4;
|
|
@@ -25,11 +22,11 @@ const REDACT_API_KEY_MAX_LENGTH = 10;
|
|
|
25
22
|
const API_KEY_LABEL = 'MCP Server API Key';
|
|
26
23
|
const REDACT_API_KEY_MIN_HIDDEN_CHARS = 6;
|
|
27
24
|
let McpServerApiKeyService = class McpServerApiKeyService {
|
|
28
|
-
constructor(apiKeyRepository, jwtService, userRepository,
|
|
25
|
+
constructor(apiKeyRepository, jwtService, userRepository, accessTokenRepository) {
|
|
29
26
|
this.apiKeyRepository = apiKeyRepository;
|
|
30
27
|
this.jwtService = jwtService;
|
|
31
28
|
this.userRepository = userRepository;
|
|
32
|
-
this.
|
|
29
|
+
this.accessTokenRepository = accessTokenRepository;
|
|
33
30
|
}
|
|
34
31
|
async createMcpServerApiKey(user, trx) {
|
|
35
32
|
const manager = trx ?? this.apiKeyRepository.manager;
|
|
@@ -72,6 +69,34 @@ let McpServerApiKeyService = class McpServerApiKeyService {
|
|
|
72
69
|
relations: ['role'],
|
|
73
70
|
});
|
|
74
71
|
}
|
|
72
|
+
async verifyApiKey(apiKey) {
|
|
73
|
+
try {
|
|
74
|
+
this.jwtService.verify(apiKey, {
|
|
75
|
+
issuer: API_KEY_ISSUER,
|
|
76
|
+
audience: API_KEY_AUDIENCE,
|
|
77
|
+
});
|
|
78
|
+
return await this.getUserForApiKey(apiKey);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async getUserForAccessToken(token) {
|
|
85
|
+
const accessToken = await this.accessTokenRepository.findOne({
|
|
86
|
+
where: {
|
|
87
|
+
token,
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
if (!accessToken) {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
return await this.userRepository.findOne({
|
|
94
|
+
where: {
|
|
95
|
+
id: accessToken.userId,
|
|
96
|
+
},
|
|
97
|
+
relations: ['role'],
|
|
98
|
+
});
|
|
99
|
+
}
|
|
75
100
|
async deleteAllMcpApiKeysForUser(user, trx) {
|
|
76
101
|
const manager = trx ?? this.apiKeyRepository.manager;
|
|
77
102
|
await manager.delete(db_1.ApiKey, {
|
|
@@ -87,60 +112,6 @@ let McpServerApiKeyService = class McpServerApiKeyService {
|
|
|
87
112
|
const redactedPart = '*'.repeat(Math.max(0, REDACT_API_KEY_MAX_LENGTH - REDACT_API_KEY_REVEAL_COUNT));
|
|
88
113
|
return redactedPart + visiblePart;
|
|
89
114
|
}
|
|
90
|
-
extractAPIKeyFromHeader(headerValue) {
|
|
91
|
-
if (!headerValue.startsWith('Bearer')) {
|
|
92
|
-
throw new auth_error_1.AuthError('Invalid authorization header format');
|
|
93
|
-
}
|
|
94
|
-
const apiKeyMatch = headerValue.match(/^Bearer\s+(.+)$/i);
|
|
95
|
-
if (apiKeyMatch) {
|
|
96
|
-
return apiKeyMatch[1];
|
|
97
|
-
}
|
|
98
|
-
throw new auth_error_1.AuthError('Invalid authorization header format');
|
|
99
|
-
}
|
|
100
|
-
getAuthMiddleware() {
|
|
101
|
-
return async (req, res, next) => {
|
|
102
|
-
const authorizationHeader = req.header('authorization');
|
|
103
|
-
if (!authorizationHeader) {
|
|
104
|
-
this.responseWithUnauthorized(res, req);
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
const apiKey = this.extractAPIKeyFromHeader(authorizationHeader);
|
|
108
|
-
if (!apiKey) {
|
|
109
|
-
this.responseWithUnauthorized(res, req);
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
const user = await this.getUserForApiKey(apiKey);
|
|
113
|
-
if (!user) {
|
|
114
|
-
this.responseWithUnauthorized(res, req);
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
try {
|
|
118
|
-
this.jwtService.verify(apiKey, {
|
|
119
|
-
issuer: API_KEY_ISSUER,
|
|
120
|
-
audience: API_KEY_AUDIENCE,
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
catch (e) {
|
|
124
|
-
this.responseWithUnauthorized(res, req);
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
req.user = user;
|
|
128
|
-
next();
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
responseWithUnauthorized(res, req) {
|
|
132
|
-
this.trackUnauthorizedEvent(req);
|
|
133
|
-
res.status(401).send({ message: mcp_constants_1.UNAUTHORIZED_ERROR_MESSAGE });
|
|
134
|
-
}
|
|
135
|
-
trackUnauthorizedEvent(req) {
|
|
136
|
-
const clientInfo = (0, mcp_utils_1.getClientInfo)(req);
|
|
137
|
-
this.telemetry.track(mcp_constants_1.USER_CONNECTED_TO_MCP_EVENT, {
|
|
138
|
-
mcp_connection_status: 'error',
|
|
139
|
-
error: mcp_constants_1.UNAUTHORIZED_ERROR_MESSAGE,
|
|
140
|
-
client_name: clientInfo?.name,
|
|
141
|
-
client_version: clientInfo?.version,
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
115
|
async getOrCreateApiKey(user) {
|
|
145
116
|
const apiKey = await this.apiKeyRepository.findOne({
|
|
146
117
|
where: {
|
|
@@ -167,6 +138,6 @@ exports.McpServerApiKeyService = McpServerApiKeyService = __decorate([
|
|
|
167
138
|
__metadata("design:paramtypes", [db_1.ApiKeyRepository,
|
|
168
139
|
jwt_service_1.JwtService,
|
|
169
140
|
db_1.UserRepository,
|
|
170
|
-
|
|
141
|
+
oauth_access_token_repository_1.AccessTokenRepository])
|
|
171
142
|
], McpServerApiKeyService);
|
|
172
143
|
//# sourceMappingURL=mcp-api-key.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-api-key.service.js","sourceRoot":"","sources":["../../../src/modules/mcp/mcp-api-key.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"mcp-api-key.service.js","sourceRoot":"","sources":["../../../src/modules/mcp/mcp-api-key.service.ts"],"names":[],"mappings":"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"}
|