chore(server): remove unused REST→GraphQL HTTP bridge (#20897)
## Summary Removes the unused `RestApiService` HTTP bridge that posted to `/graphql` and `/metadata` from inside the server.
This commit is contained in:
@@ -19,14 +19,12 @@ import { RestApiUpdateManyHandler } from 'src/engine/api/rest/core/handlers/rest
|
||||
import { RestApiUpdateOneHandler } from 'src/engine/api/rest/core/handlers/rest-api-update-one.handler';
|
||||
import { restToCommonArgsHandlers } from 'src/engine/api/rest/core/rest-to-common-args-handlers/rest-to-common-args-handlers';
|
||||
import { RestApiCoreService } from 'src/engine/api/rest/core/services/rest-api-core.service';
|
||||
import { RestApiService } from 'src/engine/api/rest/rest-api.service';
|
||||
import { ActorModule } from 'src/engine/core-modules/actor/actor.module';
|
||||
import { ApiKeyModule } from 'src/engine/core-modules/api-key/api-key.module';
|
||||
import { AuthModule } from 'src/engine/core-modules/auth/auth.module';
|
||||
import { WorkspaceDomainsModule } from 'src/engine/core-modules/domain/workspace-domains/workspace-domains.module';
|
||||
import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module';
|
||||
import { RecordTransformerModule } from 'src/engine/core-modules/record-transformer/record-transformer.module';
|
||||
import { SecureHttpClientModule } from 'src/engine/core-modules/secure-http-client/secure-http-client.module';
|
||||
import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module';
|
||||
import { UserRoleModule } from 'src/engine/metadata-modules/user-role/user-role.module';
|
||||
import { TwentyORMModule } from 'src/engine/twenty-orm/twenty-orm.module';
|
||||
@@ -66,11 +64,9 @@ const restApiCoreResolvers = [
|
||||
CoreCommonApiModule,
|
||||
WorkspaceDomainsModule,
|
||||
WorkspaceCacheModule,
|
||||
SecureHttpClientModule,
|
||||
],
|
||||
controllers: [RestApiCoreController],
|
||||
providers: [
|
||||
RestApiService,
|
||||
RestApiCoreService,
|
||||
...restApiCoreResolvers,
|
||||
...restToCommonArgsHandlers,
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
import { type ObjectRecordOrderBy } from 'src/engine/api/graphql/workspace-query-builder/interfaces/object-record.interface';
|
||||
|
||||
export type QueryVariables = {
|
||||
id?: string;
|
||||
ids?: string[];
|
||||
data?: object | null;
|
||||
filter?: object;
|
||||
orderBy?: ObjectRecordOrderBy;
|
||||
last?: number;
|
||||
first?: number;
|
||||
startingAfter?: string;
|
||||
endingBefore?: string;
|
||||
input?: object;
|
||||
};
|
||||
@@ -1,6 +0,0 @@
|
||||
import { type QueryVariables } from 'src/engine/api/rest/core/types/query-variables.type';
|
||||
|
||||
export type Query = {
|
||||
query: string;
|
||||
variables: QueryVariables;
|
||||
};
|
||||
@@ -1,36 +0,0 @@
|
||||
import { BadRequestException } from '@nestjs/common';
|
||||
|
||||
import { type BaseGraphQLError } from 'src/engine/core-modules/graphql/utils/graphql-errors.util';
|
||||
|
||||
const formatMessage = (error: BaseGraphQLError) => {
|
||||
let formattedMessage = error.extensions
|
||||
? error.extensions.response?.error ||
|
||||
error.extensions.response ||
|
||||
error.message
|
||||
: error.error || error.message;
|
||||
|
||||
formattedMessage = formattedMessage
|
||||
.replace(/"/g, "'")
|
||||
.replace("Variable '$data' got i", 'I')
|
||||
.replace("Variable '$input' got i", 'I');
|
||||
|
||||
const regex = /Field '[^']+' is not defined by type .*/;
|
||||
|
||||
const match = formattedMessage.match(regex);
|
||||
|
||||
if (match) {
|
||||
formattedMessage = match[0];
|
||||
}
|
||||
|
||||
return formattedMessage;
|
||||
};
|
||||
|
||||
export class RestApiException extends BadRequestException {
|
||||
constructor(errors: BaseGraphQLError[]) {
|
||||
super({
|
||||
statusCode: 400,
|
||||
messages: errors.map((error) => formatMessage(error)),
|
||||
error: 'Bad Request',
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -1,58 +0,0 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
|
||||
import { type AxiosResponse } from 'axios';
|
||||
|
||||
import { type Query } from 'src/engine/api/rest/core/types/query.type';
|
||||
import { RestApiException } from 'src/engine/api/rest/errors/RestApiException';
|
||||
import { type RequestContext } from 'src/engine/api/rest/types/RequestContext';
|
||||
import { SecureHttpClientService } from 'src/engine/core-modules/secure-http-client/secure-http-client.service';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
export enum GraphqlApiType {
|
||||
CORE = 'core',
|
||||
METADATA = 'metadata',
|
||||
}
|
||||
|
||||
@Injectable()
|
||||
export class RestApiService {
|
||||
constructor(
|
||||
private readonly secureHttpClientService: SecureHttpClientService,
|
||||
) {}
|
||||
|
||||
async call(
|
||||
graphqlApiType: GraphqlApiType,
|
||||
requestContext: RequestContext,
|
||||
data: Query,
|
||||
) {
|
||||
let response: AxiosResponse;
|
||||
const url = `${requestContext.baseUrl}/${
|
||||
graphqlApiType === GraphqlApiType.CORE
|
||||
? 'graphql'
|
||||
: GraphqlApiType.METADATA
|
||||
}`;
|
||||
|
||||
// Internal request to the server's own GraphQL endpoint
|
||||
const httpClient = this.secureHttpClientService.getInternalHttpClient();
|
||||
|
||||
try {
|
||||
response = await httpClient.post(url, data, {
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
Authorization: requestContext.headers.authorization,
|
||||
},
|
||||
});
|
||||
} catch (err) {
|
||||
if (isDefined(err.response?.data?.errors)) {
|
||||
throw new RestApiException(err.response.data.errors);
|
||||
}
|
||||
|
||||
throw err;
|
||||
}
|
||||
|
||||
if (isDefined(response.data.errors) && response.data.errors.length > 0) {
|
||||
throw new RestApiException(response.data.errors);
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user