UNPKG

n8n

Version:

n8n Workflow Automation Tool

83 lines 4.38 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 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; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.AgentMcpAccessService = void 0; const di_1 = require("@n8n/di"); const bad_request_error_1 = require("../../errors/response-errors/bad-request.error"); const project_scope_service_1 = require("../../permissions.ee/project-scope.service"); const agent_repository_1 = require("./repositories/agent.repository"); const BULK_CHUNK_SIZE = 500; let AgentMcpAccessService = class AgentMcpAccessService { constructor(agentRepository, projectScopeService) { this.agentRepository = agentRepository; this.projectScopeService = projectScopeService; } async getAgents(user, options) { const projectIds = await this.projectScopeService.getProjectIds(user, ['agent:update']); return await this.agentRepository.findByProjectIdsPaginated(projectIds, { ...options, filter: { ...options.filter, availableInMCP: options.filter?.availableInMCP ?? false, }, }, { withProject: true }); } async bulkSetAvailableInMCP(user, dto) { const targets = [dto.agentIds, dto.projectId, dto.allAgents].filter((target) => target !== undefined); if (targets.length !== 1) { throw new bad_request_error_1.BadRequestError('Provide exactly one of "agentIds", "projectId", or "allAgents".'); } const projectIds = await this.projectScopeService.getProjectIds(user, ['agent:update']); const allowedProjectIds = projectIds === null ? null : new Set(projectIds); if (dto.projectId && allowedProjectIds !== null && !allowedProjectIds.has(dto.projectId)) { return { updatedCount: 0 }; } const candidates = await this.resolveCandidates(dto, projectIds); const accessible = allowedProjectIds === null ? candidates : candidates.filter((agent) => allowedProjectIds.has(agent.projectId)); const toUpdate = accessible.filter((agent) => agent.availableInMCP !== dto.availableInMCP); const agentIds = toUpdate.map((agent) => agent.id); for (let start = 0; start < agentIds.length; start += BULK_CHUNK_SIZE) { await this.agentRepository.setAvailableInMCP(agentIds.slice(start, start + BULK_CHUNK_SIZE), dto.availableInMCP); } return { updatedCount: toUpdate.length, ...(dto.agentIds ? { updatedIds: agentIds, unchangedIds: accessible .filter((agent) => agent.availableInMCP === dto.availableInMCP) .map((agent) => agent.id), } : {}), }; } async resolveCandidates(dto, projectIds) { if (dto.agentIds) { return await this.agentRepository.findMcpAvailabilityCandidates({ ids: [...new Set(dto.agentIds)], }); } if (dto.projectId) { return await this.agentRepository.findMcpAvailabilityCandidates({ projectIds: [dto.projectId], }); } return await this.agentRepository.findMcpAvailabilityCandidates(projectIds === null ? { all: true } : { projectIds }); } }; exports.AgentMcpAccessService = AgentMcpAccessService; exports.AgentMcpAccessService = AgentMcpAccessService = __decorate([ (0, di_1.Service)(), __metadata("design:paramtypes", [agent_repository_1.AgentRepository, project_scope_service_1.ProjectScopeService]) ], AgentMcpAccessService); //# sourceMappingURL=agent-mcp-access.service.js.map