From 5e4c4b274ca9b235132482e0b79a66a66e8d997a Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Thu, 18 May 2023 11:45:18 +0200 Subject: [PATCH 01/12] removed all test resolvers --- .../api/1_0/resolver/TestResolver.test.ts | 41 ----------------- .../graphql/api/1_0/resolver/TestResolver.ts | 14 ------ .../api/1_1/resolver/TestResolver.test.ts | 44 ------------------- .../graphql/api/1_1/resolver/TestResolver.ts | 14 ------ .../api/2_0/resolver/TestResolver.test.ts | 44 ------------------- .../graphql/api/2_0/resolver/TestResolver.ts | 14 ------ .../src/graphql/api/GetTestApiResult.ts | 13 ------ 7 files changed, 184 deletions(-) delete mode 100644 federation/src/graphql/api/1_0/resolver/TestResolver.test.ts delete mode 100644 federation/src/graphql/api/1_0/resolver/TestResolver.ts delete mode 100644 federation/src/graphql/api/1_1/resolver/TestResolver.test.ts delete mode 100644 federation/src/graphql/api/1_1/resolver/TestResolver.ts delete mode 100644 federation/src/graphql/api/2_0/resolver/TestResolver.test.ts delete mode 100644 federation/src/graphql/api/2_0/resolver/TestResolver.ts delete mode 100644 federation/src/graphql/api/GetTestApiResult.ts diff --git a/federation/src/graphql/api/1_0/resolver/TestResolver.test.ts b/federation/src/graphql/api/1_0/resolver/TestResolver.test.ts deleted file mode 100644 index e236ee5d8..000000000 --- a/federation/src/graphql/api/1_0/resolver/TestResolver.test.ts +++ /dev/null @@ -1,41 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ -import { createTestClient } from 'apollo-server-testing' -import createServer from '@/server/createServer' - -let query: any - -// to do: We need a setup for the tests that closes the connection -let con: any - -beforeAll(async () => { - const server = await createServer() - con = server.con - query = createTestClient(server.apollo).query -}) - -afterAll(async () => { - await con.close() -}) - -describe('TestResolver', () => { - const getTestQuery = ` - query { - test { - api - } - } - ` - - describe('getTestApi', () => { - it('returns 1_0', async () => { - await expect(query({ query: getTestQuery })).resolves.toMatchObject({ - data: { - test: { - api: '1_0', - }, - }, - }) - }) - }) -}) diff --git a/federation/src/graphql/api/1_0/resolver/TestResolver.ts b/federation/src/graphql/api/1_0/resolver/TestResolver.ts deleted file mode 100644 index 9fb2fc797..000000000 --- a/federation/src/graphql/api/1_0/resolver/TestResolver.ts +++ /dev/null @@ -1,14 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-unused-vars -import { Query, Resolver } from 'type-graphql' -import { federationLogger as logger } from '@/server/logger' -import { GetTestApiResult } from '../../GetTestApiResult' - -@Resolver() -// eslint-disable-next-line @typescript-eslint/no-unused-vars -export class TestResolver { - @Query(() => GetTestApiResult) - async test(): Promise { - logger.info(`test api 1_0`) - return new GetTestApiResult('1_0') - } -} diff --git a/federation/src/graphql/api/1_1/resolver/TestResolver.test.ts b/federation/src/graphql/api/1_1/resolver/TestResolver.test.ts deleted file mode 100644 index ad08345a7..000000000 --- a/federation/src/graphql/api/1_1/resolver/TestResolver.test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ -import { createTestClient } from 'apollo-server-testing' -import createServer from '@/server/createServer' -import CONFIG from '@/config' - -CONFIG.FEDERATION_API = '1_1' - -let query: any - -// to do: We need a setup for the tests that closes the connection -let con: any - -beforeAll(async () => { - const server = await createServer() - con = server.con - query = createTestClient(server.apollo).query -}) - -afterAll(async () => { - await con.close() -}) - -describe('TestResolver', () => { - const getTestQuery = ` - query { - test { - api - } - } - ` - - describe('getTestApi', () => { - it('returns 1_1', async () => { - await expect(query({ query: getTestQuery })).resolves.toMatchObject({ - data: { - test: { - api: '1_1', - }, - }, - }) - }) - }) -}) diff --git a/federation/src/graphql/api/1_1/resolver/TestResolver.ts b/federation/src/graphql/api/1_1/resolver/TestResolver.ts deleted file mode 100644 index 74e02b74a..000000000 --- a/federation/src/graphql/api/1_1/resolver/TestResolver.ts +++ /dev/null @@ -1,14 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-unused-vars -import { Query, Resolver } from 'type-graphql' -import { federationLogger as logger } from '@/server/logger' -import { GetTestApiResult } from '../../GetTestApiResult' - -@Resolver() -// eslint-disable-next-line @typescript-eslint/no-unused-vars -export class TestResolver { - @Query(() => GetTestApiResult) - async test(): Promise { - logger.info(`test api 1_1`) - return new GetTestApiResult('1_1') - } -} diff --git a/federation/src/graphql/api/2_0/resolver/TestResolver.test.ts b/federation/src/graphql/api/2_0/resolver/TestResolver.test.ts deleted file mode 100644 index 02fd8c358..000000000 --- a/federation/src/graphql/api/2_0/resolver/TestResolver.test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ -import { createTestClient } from 'apollo-server-testing' -import createServer from '@/server/createServer' -import CONFIG from '@/config' - -CONFIG.FEDERATION_API = '2_0' - -let query: any - -// to do: We need a setup for the tests that closes the connection -let con: any - -beforeAll(async () => { - const server = await createServer() - con = server.con - query = createTestClient(server.apollo).query -}) - -afterAll(async () => { - await con.close() -}) - -describe('TestResolver', () => { - const getTestQuery = ` - query { - test { - api - } - } - ` - - describe('getTestApi', () => { - it('returns 2_0', async () => { - await expect(query({ query: getTestQuery })).resolves.toMatchObject({ - data: { - test: { - api: '2_0', - }, - }, - }) - }) - }) -}) diff --git a/federation/src/graphql/api/2_0/resolver/TestResolver.ts b/federation/src/graphql/api/2_0/resolver/TestResolver.ts deleted file mode 100644 index 4202bbbfe..000000000 --- a/federation/src/graphql/api/2_0/resolver/TestResolver.ts +++ /dev/null @@ -1,14 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-unused-vars -import { Query, Resolver } from 'type-graphql' -import { federationLogger as logger } from '@/server/logger' -import { GetTestApiResult } from '../../GetTestApiResult' - -@Resolver() -// eslint-disable-next-line @typescript-eslint/no-unused-vars -export class TestResolver { - @Query(() => GetTestApiResult) - async test(): Promise { - logger.info(`test api 2_0`) - return new GetTestApiResult('2_0') - } -} diff --git a/federation/src/graphql/api/GetTestApiResult.ts b/federation/src/graphql/api/GetTestApiResult.ts deleted file mode 100644 index 942ff7b6c..000000000 --- a/federation/src/graphql/api/GetTestApiResult.ts +++ /dev/null @@ -1,13 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-unused-vars -import { Field, ObjectType } from 'type-graphql' - -@ObjectType() -// eslint-disable-next-line @typescript-eslint/no-unused-vars -export class GetTestApiResult { - constructor(apiVersion: string) { - this.api = apiVersion - } - - @Field(() => String) - api: string -} From 15ca48a3321f53b9a5fecab93ac7e5da05af7221 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Thu, 18 May 2023 11:45:51 +0200 Subject: [PATCH 02/12] implement PublicKeyResolver for 1.1 using inheritance --- .../src/graphql/api/1_1/resolver/PublicKeyResolver.ts | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 federation/src/graphql/api/1_1/resolver/PublicKeyResolver.ts diff --git a/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.ts b/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.ts new file mode 100644 index 000000000..b285cbba8 --- /dev/null +++ b/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.ts @@ -0,0 +1,7 @@ +import { Resolver } from 'type-graphql' +// eslint-disable-next-line camelcase +import { PublicKeyResolver as PublicKeyResolver_1_0 } from '../../1_0/resolver/PublicKeyResolver' + +@Resolver() +// eslint-disable-next-line camelcase, @typescript-eslint/no-unused-vars +export class PublicKeyResolver extends PublicKeyResolver_1_0 {} From 403c0f1f646cd4df8cd2d9cc359ead67f545a1ae Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Thu, 18 May 2023 11:48:01 +0200 Subject: [PATCH 03/12] removed Decimal Scalar to meet coverage requirement, no decimal is used yet --- .../src/graphql/scalar/{Decimal.ts => Decimal.ts.unused} | 0 federation/src/graphql/schema.ts | 6 +++--- 2 files changed, 3 insertions(+), 3 deletions(-) rename federation/src/graphql/scalar/{Decimal.ts => Decimal.ts.unused} (100%) diff --git a/federation/src/graphql/scalar/Decimal.ts b/federation/src/graphql/scalar/Decimal.ts.unused similarity index 100% rename from federation/src/graphql/scalar/Decimal.ts rename to federation/src/graphql/scalar/Decimal.ts.unused diff --git a/federation/src/graphql/schema.ts b/federation/src/graphql/schema.ts index 92977882b..015ea124f 100644 --- a/federation/src/graphql/schema.ts +++ b/federation/src/graphql/schema.ts @@ -2,15 +2,15 @@ import { GraphQLSchema } from 'graphql' import { buildSchema } from 'type-graphql' // import isAuthorized from './directive/isAuthorized' -import DecimalScalar from './scalar/Decimal' -import Decimal from 'decimal.js-light' +// import DecimalScalar from './scalar/Decimal' +// import Decimal from 'decimal.js-light' import { getApiResolvers } from './api/schema' const schema = async (): Promise => { return await buildSchema({ resolvers: [getApiResolvers()], // authChecker: isAuthorized, - scalarsMap: [{ type: Decimal, scalar: DecimalScalar }], + // scalarsMap: [{ type: Decimal, scalar: DecimalScalar }], }) } From 74b9c86e6650dc59c00c6df29d301956b9dff5d5 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Thu, 18 May 2023 11:54:36 +0200 Subject: [PATCH 04/12] remove reference to api 2.0 from bare_metal .env.dist --- deployment/bare_metal/.env.dist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployment/bare_metal/.env.dist b/deployment/bare_metal/.env.dist index f20a8c2d1..f81c62eca 100644 --- a/deployment/bare_metal/.env.dist +++ b/deployment/bare_metal/.env.dist @@ -68,7 +68,7 @@ FEDERATION_COMMUNITY_API_PORT=5000 FEDERATION_CONFIG_VERSION=v1.2023-01-09 # comma separated list of api-versions, which cause starting several federation modules -FEDERATION_COMMUNITY_APIS=1_0,1_1,2_0 +FEDERATION_COMMUNITY_APIS=1_0,1_1 # database DATABASE_CONFIG_VERSION=v1.2022-03-18 From cf941518ed88283a16e012bc34599bdc4e7f8e4b Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Thu, 18 May 2023 11:56:50 +0200 Subject: [PATCH 05/12] lint fixes --- federation/src/graphql/api/1_1/resolver/PublicKeyResolver.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.ts b/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.ts index b285cbba8..e03b36075 100644 --- a/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.ts +++ b/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line @typescript-eslint/no-unused-vars import { Resolver } from 'type-graphql' // eslint-disable-next-line camelcase import { PublicKeyResolver as PublicKeyResolver_1_0 } from '../../1_0/resolver/PublicKeyResolver' From 97513c1b2564951cf9f9e5a34f992a2dc6e34e07 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Thu, 18 May 2023 12:24:12 +0200 Subject: [PATCH 06/12] enforce FEDERATION_API 1.0 on getpublicKey Resolver --- .../src/graphql/api/1_0/resolver/PublicKeyResolver.test.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/federation/src/graphql/api/1_0/resolver/PublicKeyResolver.test.ts b/federation/src/graphql/api/1_0/resolver/PublicKeyResolver.test.ts index 18d2a7599..83c024c9f 100644 --- a/federation/src/graphql/api/1_0/resolver/PublicKeyResolver.test.ts +++ b/federation/src/graphql/api/1_0/resolver/PublicKeyResolver.test.ts @@ -3,12 +3,15 @@ import { createTestClient } from 'apollo-server-testing' import createServer from '@/server/createServer' import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity' +import CONFIG from '@/config' let query: any // to do: We need a setup for the tests that closes the connection let con: any +CONFIG.FEDERATION_API = '1_0' + beforeAll(async () => { const server = await createServer() con = server.con From 33375c347ff69b2f8d7fe0a7d8ffce1fe19040ac Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Thu, 18 May 2023 12:24:49 +0200 Subject: [PATCH 07/12] also test getPublicKey for 1.1 --- .../1_1/resolver/PublicKeyResolver.test.ts | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 federation/src/graphql/api/1_1/resolver/PublicKeyResolver.test.ts diff --git a/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.test.ts b/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.test.ts new file mode 100644 index 000000000..d41b53263 --- /dev/null +++ b/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.test.ts @@ -0,0 +1,56 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +import { createTestClient } from 'apollo-server-testing' +import createServer from '@/server/createServer' +import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity' +import CONFIG from '@/config' + +let query: any + +// to do: We need a setup for the tests that closes the connection +let con: any + +CONFIG.FEDERATION_API = '1_1' + +beforeAll(async () => { + const server = await createServer() + con = server.con + query = createTestClient(server.apollo).query + DbFederatedCommunity.clear() +}) + +afterAll(async () => { + await con.close() +}) + +describe('PublicKeyResolver', () => { + const getPublicKeyQuery = ` + query { + getPublicKey + { + publicKey + } + } + ` + + describe('getPublicKey', () => { + beforeEach(async () => { + const homeCom = new DbFederatedCommunity() + homeCom.foreign = false + homeCom.apiVersion = '1_0' + homeCom.endPoint = 'endpoint-url' + homeCom.publicKey = Buffer.from('homeCommunity-publicKey') + await DbFederatedCommunity.insert(homeCom) + }) + + it('returns homeCommunity-publicKey', async () => { + await expect(query({ query: getPublicKeyQuery })).resolves.toMatchObject({ + data: { + getPublicKey: { + publicKey: expect.stringMatching('homeCommunity-publicKey'), + }, + }, + }) + }) + }) +}) From 75d7ad4a3c7d4d24f9f3c30684d28dee80b8d8bb Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 6 Jun 2023 12:50:19 +0200 Subject: [PATCH 08/12] types for random-bigint --- backend/@types/random-bigint/index.d.ts | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 backend/@types/random-bigint/index.d.ts diff --git a/backend/@types/random-bigint/index.d.ts b/backend/@types/random-bigint/index.d.ts new file mode 100644 index 000000000..e76cf8e1f --- /dev/null +++ b/backend/@types/random-bigint/index.d.ts @@ -0,0 +1,5 @@ +/* eslint-disable @typescript-eslint/ban-types */ +declare module 'random-bigint' { + export function random(bits: number, cb?: (err: Error, num: BigInt) => void): BigInt + export = random +} From c2a32088491d7d10f0123df7fd31cecf53911b62 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 6 Jun 2023 12:50:33 +0200 Subject: [PATCH 09/12] import random-biginto properly --- backend/src/graphql/resolver/UserResolver.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index cbfd9b5c5..59a6e3cbc 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -70,13 +70,13 @@ import { communityDbUser } from '@/util/communityUser' import { hasElopageBuys } from '@/util/hasElopageBuys' import { getTimeDurationObject, printTimeDuration } from '@/util/time' +import { random } from 'random-bigint' + import { FULL_CREATION_AVAILABLE } from './const/const' import { getUserCreations } from './util/creations' import { findUserByIdentifier } from './util/findUserByIdentifier' import { validateAlias } from './util/validateAlias' -// eslint-disable-next-line @typescript-eslint/no-var-requires, import/no-commonjs -const random = require('random-bigint') // eslint-disable-next-line @typescript-eslint/no-var-requires, import/no-commonjs const sodium = require('sodium-native') From 68f77e4d1fb05528f7764f6cbda263e8a5b4630b Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 6 Jun 2023 12:50:53 +0200 Subject: [PATCH 10/12] ignore random-bigint inport-relative rule --- backend/.eslintrc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/.eslintrc.js b/backend/.eslintrc.js index 78ac9e41e..0007fd125 100644 --- a/backend/.eslintrc.js +++ b/backend/.eslintrc.js @@ -58,7 +58,7 @@ module.exports = { 'import/no-dynamic-require': 'error', 'import/no-internal-modules': 'off', 'import/no-relative-packages': 'error', - 'import/no-relative-parent-imports': ['error', { ignore: ['@/*'] }], + 'import/no-relative-parent-imports': ['error', { ignore: ['@/*', 'random-bigint'] }], 'import/no-self-import': 'error', 'import/no-unresolved': 'error', 'import/no-useless-path-segments': 'error', From 18a4829ea67419b6e5eb1801698fc5f53045ae72 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 6 Jun 2023 13:02:21 +0200 Subject: [PATCH 11/12] try with default export --- backend/@types/random-bigint/index.d.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/@types/random-bigint/index.d.ts b/backend/@types/random-bigint/index.d.ts index e76cf8e1f..afaa832d9 100644 --- a/backend/@types/random-bigint/index.d.ts +++ b/backend/@types/random-bigint/index.d.ts @@ -1,5 +1,6 @@ /* eslint-disable @typescript-eslint/ban-types */ declare module 'random-bigint' { export function random(bits: number, cb?: (err: Error, num: BigInt) => void): BigInt - export = random + // eslint-disable-next-line import/no-default-export + export default random } From 8545b2b9c55bd35dbf91ff0566e76e9825ff7ede Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 6 Jun 2023 13:06:24 +0200 Subject: [PATCH 12/12] fix import properly --- backend/@types/random-bigint/index.d.ts | 5 ++--- backend/src/graphql/resolver/UserResolver.ts | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/backend/@types/random-bigint/index.d.ts b/backend/@types/random-bigint/index.d.ts index afaa832d9..0f685e722 100644 --- a/backend/@types/random-bigint/index.d.ts +++ b/backend/@types/random-bigint/index.d.ts @@ -1,6 +1,5 @@ /* eslint-disable @typescript-eslint/ban-types */ declare module 'random-bigint' { - export function random(bits: number, cb?: (err: Error, num: BigInt) => void): BigInt - // eslint-disable-next-line import/no-default-export - export default random + function random(bits: number, cb?: (err: Error, num: BigInt) => void): BigInt + export = random } diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index 59a6e3cbc..9934c93de 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -70,7 +70,7 @@ import { communityDbUser } from '@/util/communityUser' import { hasElopageBuys } from '@/util/hasElopageBuys' import { getTimeDurationObject, printTimeDuration } from '@/util/time' -import { random } from 'random-bigint' +import random from 'random-bigint' import { FULL_CREATION_AVAILABLE } from './const/const' import { getUserCreations } from './util/creations'