Fix APIKey typing (#16541)

Following this https://github.com/twentyhq/twenty/pull/16540
Those were not failing (yet) but were wrongly typed and error prone

---------

Co-authored-by: Guillim <guillim@users.noreply.github.com>
This commit is contained in:
Weiko
2025-12-15 17:05:28 +01:00
committed by GitHub
parent fc74a06f53
commit 039a3d99a8
13 changed files with 50 additions and 33 deletions
@@ -8,6 +8,7 @@ import { MCP_SERVER_METADATA } from 'src/engine/api/mcp/constants/mcp.const';
import { type JsonRpc } from 'src/engine/api/mcp/dtos/json-rpc';
import { McpProtocolService } from 'src/engine/api/mcp/services/mcp-protocol.service';
import { McpToolExecutorService } from 'src/engine/api/mcp/services/mcp-tool-executor.service';
import { type ApiKeyEntity } from 'src/engine/core-modules/api-key/api-key.entity';
import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service';
import { ToolProviderService } from 'src/engine/core-modules/tool-provider/services/tool-provider.service';
@@ -27,7 +28,10 @@ describe('McpProtocolService', () => {
const mockUserWorkspaceId = 'user-workspace-1';
const mockRoleId = 'role-1';
const mockAdminRoleId = 'admin-role-1';
const mockApiKey = 'api-key-1';
const mockApiKey = {
id: 'api-key-1',
workspaceId: mockWorkspace.id,
} as ApiKeyEntity;
beforeEach(async () => {
const mockFeatureFlagService = {
@@ -191,6 +195,7 @@ describe('McpProtocolService', () => {
const result = await service.handleMCPCoreQuery(mockRequest, {
workspace: mockWorkspace,
userWorkspaceId: mockUserWorkspaceId,
apiKey: undefined,
});
expect(result).toMatchObject({
@@ -252,6 +257,7 @@ describe('McpProtocolService', () => {
const result = await service.handleMCPCoreQuery(mockRequest, {
workspace: mockWorkspace,
userWorkspaceId: mockUserWorkspaceId,
apiKey: undefined,
});
expect(result).toEqual(mockToolCallResponse);
@@ -356,6 +362,7 @@ describe('McpProtocolService', () => {
const result = await service.handleMCPCoreQuery(mockRequest, {
workspace: mockWorkspace,
userWorkspaceId: mockUserWorkspaceId,
apiKey: undefined,
});
expect(result).toMatchObject(mockToolsListingResponse);
@@ -373,6 +380,7 @@ describe('McpProtocolService', () => {
const result = await service.handleMCPCoreQuery(mockRequest, {
workspace: mockWorkspace,
userWorkspaceId: mockUserWorkspaceId,
apiKey: undefined,
});
expect(result).toEqual({
@@ -408,6 +416,7 @@ describe('McpProtocolService', () => {
const result = await service.handleMCPCoreQuery(mockRequest, {
workspace: mockWorkspace,
userWorkspaceId: mockUserWorkspaceId,
apiKey: undefined,
});
expect(result).toEqual({
@@ -1,11 +1,13 @@
import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { isDefined } from 'twenty-shared/utils';
import { Repository } from 'typeorm';
import { type JsonRpc } from 'src/engine/api/mcp/dtos/json-rpc';
import { McpToolExecutorService } from 'src/engine/api/mcp/services/mcp-tool-executor.service';
import { wrapJsonRpcResponse } from 'src/engine/api/mcp/utils/wrap-jsonrpc-response.util';
import { ApiKeyEntity } from 'src/engine/core-modules/api-key/api-key.entity';
import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service';
import { ToolCategory } from 'src/engine/core-modules/tool-provider/enums/tool-category.enum';
@@ -59,21 +61,21 @@ export class McpProtocolService {
async getRoleId(
workspaceId: string,
userWorkspaceId?: string,
apiKey?: string,
apiKey?: ApiKeyEntity,
) {
if (apiKey) {
const roles = await this.roleRepository.find({
if (isDefined(apiKey)) {
const [role] = await this.roleRepository.find({
where: {
workspaceId,
standardId: ADMIN_ROLE.standardId,
},
});
if (roles.length === 0) {
if (!isDefined(role)) {
throw new HttpException('Admin role not found', HttpStatus.FORBIDDEN);
}
return roles[0].id;
return role.id;
}
if (!userWorkspaceId) {
@@ -104,7 +106,7 @@ export class McpProtocolService {
}: {
workspace: WorkspaceEntity;
userWorkspaceId?: string;
apiKey?: string;
apiKey: ApiKeyEntity | undefined;
},
): Promise<Record<string, unknown>> {
try {