From 54173857ce61860620b881328032548d0794fab1 Mon Sep 17 00:00:00 2001 From: Claus-Peter Huebner Date: Tue, 16 May 2023 01:14:00 +0200 Subject: [PATCH] adapt client refactorings, v1_1 not matching --- .../client/1_0/FederationClientImpl.ts | 91 ------------------ .../client/1_1/FederationClientImpl.ts | 94 ------------------- backend/src/federation/client/Client_1_1.ts | 44 ++++++++- .../src/federation/client/FederationClient.ts | 15 --- .../query/getPublicCommunityInfo.ts | 12 +++ 5 files changed, 55 insertions(+), 201 deletions(-) delete mode 100644 backend/src/federation/client/1_0/FederationClientImpl.ts delete mode 100644 backend/src/federation/client/1_1/FederationClientImpl.ts delete mode 100644 backend/src/federation/client/FederationClient.ts create mode 100644 backend/src/federation/query/getPublicCommunityInfo.ts diff --git a/backend/src/federation/client/1_0/FederationClientImpl.ts b/backend/src/federation/client/1_0/FederationClientImpl.ts deleted file mode 100644 index 8dfbd17af..000000000 --- a/backend/src/federation/client/1_0/FederationClientImpl.ts +++ /dev/null @@ -1,91 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unsafe-member-access */ -/* eslint-disable @typescript-eslint/no-unsafe-return */ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ -import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity' -import { GraphQLError } from 'graphql/error/GraphQLError' -import { gql } from 'graphql-request' - -import { GraphQLGetClient } from '@/federation/client/GraphQLGetClient' -import { backendLogger as logger } from '@/server/logger' - -// eslint-disable-next-line import/no-relative-parent-imports -import { FederationClient, PublicCommunityInfo } from '../FederationClient' - -export class FederationClientImpl implements FederationClient { - public async requestGetPublicKey(dbCom: DbFederatedCommunity): Promise { - let endpoint = dbCom.endPoint.endsWith('/') ? dbCom.endPoint : dbCom.endPoint + '/' - endpoint = `${endpoint}${dbCom.apiVersion}/` - logger.info(`requestGetPublicKey with endpoint='${endpoint}'...`) - - const graphQLClient = GraphQLGetClient.getInstance(endpoint) - logger.debug(`graphQLClient=${JSON.stringify(graphQLClient)}`) - const query = gql` - query { - getPublicKey { - publicKey - } - } - ` - const variables = {} - - try { - const { data, errors, extensions, headers, status } = await graphQLClient.rawRequest( - query, - variables, - ) - logger.debug(`Response-Data:`, data, errors, extensions, headers, status) - if (data) { - logger.debug(`Response-PublicKey:`, data.getPublicKey.publicKey) - logger.info(`requestGetPublicKey processed successfully`) - return data.getPublicKey.publicKey - } - logger.warn(`requestGetPublicKey processed without response data`) - } catch (err) { - if (err instanceof GraphQLError) { - logger.error(`RawRequest-Error on {} with message {}`, endpoint, err.message) - } - throw new Error(`Request-Error in requestGetPublicKey.`) - } - } - - public async requestGetPublicCommunityInfo( - dbCom: DbFederatedCommunity, - ): Promise { - let endpoint = dbCom.endPoint.endsWith('/') ? dbCom.endPoint : dbCom.endPoint + '/' - endpoint = `${endpoint}${dbCom.apiVersion}/` - logger.info(`requestGetPublicCommunityInfo with endpoint='${endpoint}'...`) - - const graphQLClient = GraphQLGetClient.getInstance(endpoint) - logger.debug(`graphQLClient=${JSON.stringify(graphQLClient)}`) - const query = gql` - query { - getPublicCommunityInfo { - name - description - createdAt - publicKey - } - } - ` - const variables = {} - - try { - const { data, errors, extensions, headers, status } = await graphQLClient.rawRequest( - query, - variables, - ) - logger.debug(`Response-Data:`, data, errors, extensions, headers, status) - if (data) { - logger.debug(`Response-PublicCommunityInfo:`, data.getPublicCommunityInfo) - logger.info(`requestGetPublicCommunityInfo processed successfully`) - return data.getPublicCommunityInfo - } - logger.warn(`requestGetPublicInfo processed without response data`) - } catch (err) { - if (err instanceof GraphQLError) { - logger.error(`RawRequest-Error on {} with message {}`, endpoint, err.message) - } - throw new Error(`Request-Error in requestGetPublicCommunityInfo.`) - } - } -} diff --git a/backend/src/federation/client/1_1/FederationClientImpl.ts b/backend/src/federation/client/1_1/FederationClientImpl.ts deleted file mode 100644 index affc9a984..000000000 --- a/backend/src/federation/client/1_1/FederationClientImpl.ts +++ /dev/null @@ -1,94 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unsafe-return */ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ -/* eslint-disable @typescript-eslint/no-unsafe-member-access */ -import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity' -import { GraphQLError } from 'graphql/error/GraphQLError' -import { gql } from 'graphql-request' - -import { GraphQLGetClient } from '@/federation/client/GraphQLGetClient' -import { backendLogger as logger } from '@/server/logger' - -// eslint-disable-next-line import/no-relative-parent-imports -import { FederationClient, PublicCommunityInfo } from '../FederationClient' - -export class FederationClientImpl implements FederationClient { - async requestGetPublicKey(dbCom: DbFederatedCommunity): Promise { - let endpoint = dbCom.endPoint.endsWith('/') ? dbCom.endPoint : dbCom.endPoint + '/' - endpoint = `${endpoint}${dbCom.apiVersion}/` - logger.info(`requestGetPublicKey with endpoint='${endpoint}'...`) - - const graphQLClient = GraphQLGetClient.getInstance(endpoint) - logger.debug(`graphQLClient=${JSON.stringify(graphQLClient)}`) - const query = gql` - query { - getPublicKey { - publicKey - } - } - ` - const variables = {} - - try { - const { data, errors, extensions, headers, status } = await graphQLClient.rawRequest( - query, - variables, - ) - logger.debug(`Response-Data:`, data, errors, extensions, headers, status) - if (data) { - logger.debug(`Response-PublicKey:`, data.getPublicKey.publicKey) - logger.info(`requestGetPublicKey processed successfully`) - return data.getPublicKey.publicKey - } - logger.warn(`requestGetPublicKey processed without response data`) - } catch (err) { - if (err instanceof GraphQLError) { - logger.error(`RawRequest-Error on {} with message {}`, endpoint, err.message) - } - throw new Error(`Request-Error in requestGetPublicKey.`) - } - } - - async requestGetPublicCommunityInfo( - dbCom: DbFederatedCommunity, - ): Promise { - let endpoint = dbCom.endPoint.endsWith('/') ? dbCom.endPoint : dbCom.endPoint + '/' - endpoint = `${endpoint}${dbCom.apiVersion}/` - logger.info(`requestGetPublicCommunityInfo with endpoint='${endpoint}'...`) - - const graphQLClient = GraphQLGetClient.getInstance(endpoint) - logger.debug(`graphQLClient=${JSON.stringify(graphQLClient)}`) - const query = gql` - query { - getPublicCommunityInfo { - name - description - createdAt - publicKey - } - } - ` - const variables = {} - - try { - const { data, errors, extensions, headers, status } = await graphQLClient.rawRequest( - query, - variables, - ) - logger.debug(`Response-Data:`, data, errors, extensions, headers, status) - if (data) { - logger.debug( - `Response-PublicCommunityInfo:`, - data.getPublicCommunityInfo.publicCommunityInfo, - ) - logger.info(`requestGetPublicInfo processed successfully`) - return data.getPublicCommunityInfo.publicCommunityInfo - } - logger.warn(`requestGetPublicInfo processed without response data`) - } catch (err) { - if (err instanceof GraphQLError) { - logger.error(`RawRequest-Error on {} with message {}`, endpoint, err.message) - } - throw new Error(`Request-Error in requestGetPublicCommunityInfo.`) - } - } -} diff --git a/backend/src/federation/client/Client_1_1.ts b/backend/src/federation/client/Client_1_1.ts index 8525acc5d..7ef17694e 100644 --- a/backend/src/federation/client/Client_1_1.ts +++ b/backend/src/federation/client/Client_1_1.ts @@ -1,5 +1,47 @@ +import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity' + +import { getPublicCommunityInfo } from '@/federation/query/getPublicCommunityInfo' +import { backendLogger as logger } from '@/server/logger' + // eslint-disable-next-line camelcase import { Client_1_0 } from './Client_1_0' +export interface PublicCommunityInfo { + name: string + description: string + createdAt: Date + publicKey: string +} + // eslint-disable-next-line camelcase -export class Client_1_1 extends Client_1_0 {} +export class Client_1_1 extends Client_1_0 { + constructor(dbCom: DbFederatedCommunity) { + super(dbCom) + } + + getPublicCommunityInfo = async (): Promise => { + logger.info(`getPublicCommunityInfo with endpoint='${this.endpoint}'...`) + try { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const { data } = await this.client.rawRequest(getPublicCommunityInfo, {}) + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + if (!data?.getPublicCommunityInfo?.name) { + logger.warn( + 'Federation: getPublicCommunityInfo without response data from endpoint', + this.endpoint, + ) + return + } + logger.info( + 'Federation: getPublicCommunityInfo successful from endpoint', + this.endpoint, + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + data.getPublicCommunityInfo, + ) + // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access + return data.getPublicCommunityInfo + } catch (err) { + logger.warn('Federation: getPublicCommunityInfo failed for endpoint', this.endpoint) + } + } +} diff --git a/backend/src/federation/client/FederationClient.ts b/backend/src/federation/client/FederationClient.ts deleted file mode 100644 index 2af13e002..000000000 --- a/backend/src/federation/client/FederationClient.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity' - -export type PublicCommunityInfo = { - name: string - description: string - createdAt: Date - publicKey: string -} - -export interface FederationClient { - requestGetPublicKey(dbCom: DbFederatedCommunity): Promise - requestGetPublicCommunityInfo( - dbCom: DbFederatedCommunity, - ): Promise -} diff --git a/backend/src/federation/query/getPublicCommunityInfo.ts b/backend/src/federation/query/getPublicCommunityInfo.ts new file mode 100644 index 000000000..4dead00bd --- /dev/null +++ b/backend/src/federation/query/getPublicCommunityInfo.ts @@ -0,0 +1,12 @@ +import { gql } from 'graphql-request' + +export const getPublicCommunityInfo = gql` + query { + getPublicCommunityInfo { + name + description + createdAt + publicKey + } + } +`