diff --git a/server/src/core/api-rest/api-rest-query-builder/api-rest-query-builder.factory.ts b/server/src/core/api-rest/api-rest-query-builder/api-rest-query-builder.factory.ts index 0a95b1e6e..67ea47972 100644 --- a/server/src/core/api-rest/api-rest-query-builder/api-rest-query-builder.factory.ts +++ b/server/src/core/api-rest/api-rest-query-builder/api-rest-query-builder.factory.ts @@ -1,4 +1,8 @@ -import { BadRequestException, Injectable } from '@nestjs/common'; +import { + BadRequestException, + Injectable, + UnauthorizedException, +} from '@nestjs/common'; import { Request } from 'express'; @@ -40,7 +44,15 @@ export class ApiRestQueryBuilderFactory { objectMetadataItems: ObjectMetadataEntity[]; objectMetadataItem: ObjectMetadataEntity; }> { - const workspaceId = await this.tokenService.verifyApiKeyToken(request); + let workspaceId; + + try { + workspaceId = await this.tokenService.verifyApiKeyToken(request); + } catch (err) { + throw new UnauthorizedException( + `Invalid API key. Double check your API key or generate a new one here ${this.environmentService.getFrontBaseUrl()}/settings/developers/api-keys`, + ); + } const objectMetadataItems = await this.objectMetadataService.findManyWithinWorkspace(workspaceId); diff --git a/server/src/core/api-rest/api-rest.controller.ts b/server/src/core/api-rest/api-rest.controller.ts index 12f2efedb..e6371e35e 100644 --- a/server/src/core/api-rest/api-rest.controller.ts +++ b/server/src/core/api-rest/api-rest.controller.ts @@ -7,7 +7,9 @@ import { ApiRestResponse } from 'src/core/api-rest/types/api-rest-response.type' const handleResult = (res: Response, result: ApiRestResponse) => { if (result.data.error) { - res.status(result.data.status || 400).send({ error: result.data.error }); + res + .status(result.data.status || 400) + .send({ error: `${result.data.error}` }); } else { res.send(result.data); } diff --git a/server/src/core/api-rest/api-rest.service.ts b/server/src/core/api-rest/api-rest.service.ts index 25a9be5d4..c1767b05f 100644 --- a/server/src/core/api-rest/api-rest.service.ts +++ b/server/src/core/api-rest/api-rest.service.ts @@ -25,11 +25,20 @@ export class ApiRestService { this.environmentService.getServerUrl() || `${request.protocol}://${request.get('host')}`; - return await axios.post(`${baseUrl}/graphql`, data, { - headers: { - Authorization: request.headers.authorization, - }, - }); + try { + return await axios.post(`${baseUrl}/graphql`, data, { + headers: { + Authorization: request.headers.authorization, + }, + }); + } catch (err) { + return { + data: { + error: `AxiosError: please double check your query and your API key (to generate a new one, see here: ${this.environmentService.getFrontBaseUrl()}/settings/developers/api-keys)`, + status: 400, + }, + }; + } } async get(request: Request): Promise { @@ -38,7 +47,7 @@ export class ApiRestService { return await this.callGraphql(request, data); } catch (err) { - return { data: { error: `${err}`, status: err.response.status } }; + return { data: { error: err, status: err.status } }; } } @@ -48,7 +57,7 @@ export class ApiRestService { return await this.callGraphql(request, data); } catch (err) { - return { data: { error: `${err}` } }; + return { data: { error: err, status: err.status } }; } } @@ -58,7 +67,7 @@ export class ApiRestService { return await this.callGraphql(request, data); } catch (err) { - return { data: { error: `${err}` } }; + return { data: { error: err, status: err.status } }; } } @@ -68,7 +77,7 @@ export class ApiRestService { return await this.callGraphql(request, data); } catch (err) { - return { data: { error: `${err}` } }; + return { data: { error: err, status: err.status } }; } } } diff --git a/server/src/core/api-rest/types/api-rest-response.type.ts b/server/src/core/api-rest/types/api-rest-response.type.ts index 231264126..5f4407b00 100644 --- a/server/src/core/api-rest/types/api-rest-response.type.ts +++ b/server/src/core/api-rest/types/api-rest-response.type.ts @@ -1 +1,5 @@ -export type ApiRestResponse = { data: { error?: string; status?: number } }; +import { HttpException } from '@nestjs/common'; + +export type ApiRestResponse = { + data: { error?: HttpException | string; status?: number }; +}; diff --git a/server/src/integrations/environment/environment.validation.ts b/server/src/integrations/environment/environment.validation.ts index 9f07586bc..c82ce4d56 100644 --- a/server/src/integrations/environment/environment.validation.ts +++ b/server/src/integrations/environment/environment.validation.ts @@ -60,7 +60,7 @@ export class EnvironmentVariables { @IsUrl({ require_tld: false }) FRONT_BASE_URL: string; - // Frontend URL + // Server URL @IsUrl({ require_tld: false }) @IsOptional() SERVER_URL: string;