add biome to federation, fix biome linting/formatting error, remove eslint

This commit is contained in:
einhornimmond 2025-04-26 11:09:35 +02:00
parent 4ff7979bdc
commit b63dbc1599
45 changed files with 189 additions and 397 deletions

View File

@ -1,3 +0,0 @@
node_modules
**/*.min.js
build

View File

@ -1,206 +0,0 @@
// eslint-disable-next-line import/no-commonjs, import/unambiguous
module.exports = {
root: true,
env: {
node: true,
},
parser: '@typescript-eslint/parser',
plugins: ['prettier', '@typescript-eslint', 'import', 'n', 'promise'],
extends: [
'standard',
'eslint:recommended',
'plugin:prettier/recommended',
// 'plugin:import/recommended',
// 'plugin:import/typescript',
// 'plugin:security/recommended',
// 'plugin:@eslint-community/eslint-comments/recommended',
],
settings: {
'import/parsers': {
'@typescript-eslint/parser': ['.ts', '.tsx'],
},
'import/resolver': {
typescript: {
project: ['./tsconfig.json'],
},
node: true,
},
},
rules: {
'no-console': 'error',
camelcase: 'error',
'no-debugger': 'error',
'prettier/prettier': [
'error',
{
htmlWhitespaceSensitivity: 'ignore',
},
],
// import
// 'import/export': 'error',
// 'import/no-deprecated': 'error',
// 'import/no-empty-named-blocks': 'error',
// 'import/no-extraneous-dependencies': 'error',
// 'import/no-mutable-exports': 'error',
// 'import/no-unused-modules': 'error',
// 'import/no-named-as-default': 'error',
// 'import/no-named-as-default-member': 'error',
// 'import/no-amd': 'error',
// 'import/no-commonjs': 'error',
// 'import/no-import-module-exports': 'error',
// 'import/no-nodejs-modules': 'off',
// 'import/unambiguous': 'error',
// 'import/default': 'error',
// 'import/named': 'error',
// 'import/namespace': 'error',
// 'import/no-absolute-path': 'error',
// 'import/no-cycle': 'error',
// 'import/no-dynamic-require': 'error',
// 'import/no-internal-modules': 'off',
// 'import/no-relative-packages': 'error',
// 'import/no-relative-parent-imports': ['error', { ignore: ['@/*'] }],
// 'import/no-self-import': 'error',
// 'import/no-unresolved': 'error',
// 'import/no-useless-path-segments': 'error',
// 'import/no-webpack-loader-syntax': 'error',
// 'import/consistent-type-specifier-style': 'error',
// 'import/exports-last': 'off',
// 'import/extensions': 'error',
// 'import/first': 'error',
// 'import/group-exports': 'off',
// 'import/newline-after-import': 'error',
// 'import/no-anonymous-default-export': 'error',
// 'import/no-default-export': 'error',
// 'import/no-duplicates': 'error',
// 'import/no-named-default': 'error',
// 'import/no-namespace': 'error',
// 'import/no-unassigned-import': 'error',
// 'import/order': [
// 'error',
// {
// groups: ['builtin', 'external', 'internal', 'parent', 'sibling', 'index', 'object', 'type'],
// 'newlines-between': 'always',
// pathGroups: [
// {
// pattern: '@?*/**',
// group: 'external',
// position: 'after',
// },
// {
// pattern: '@/**',
// group: 'external',
// position: 'after',
// },
// ],
// alphabetize: {
// order: 'asc' /* sort in ascending order. Options: ['ignore', 'asc', 'desc'] */,
// caseInsensitive: true /* ignore case. Options: [true, false] */,
// },
// distinctGroup: true,
// },
// ],
// 'import/prefer-default-export': 'off',
// n
// 'n/handle-callback-err': 'error',
// 'n/no-callback-literal': 'error',
// 'n/no-exports-assign': 'error',
// 'n/no-extraneous-import': 'error',
// 'n/no-extraneous-require': 'error',
// 'n/no-hide-core-modules': 'error',
// 'n/no-missing-import': 'off', // not compatible with typescript
// 'n/no-missing-require': 'error',
// 'n/no-new-require': 'error',
// 'n/no-path-concat': 'error',
// 'n/no-process-exit': 'error',
// 'n/no-unpublished-bin': 'error',
// 'n/no-unpublished-import': 'off', // TODO need to exclude seeds
// 'n/no-unpublished-require': 'error',
// 'n/no-unsupported-features': ['error', { ignores: ['modules'] }],
// 'n/no-unsupported-features/es-builtins': 'error',
// 'n/no-unsupported-features/es-syntax': 'error',
// 'n/no-unsupported-features/node-builtins': 'error',
// 'n/process-exit-as-throw': 'error',
// 'n/shebang': 'error',
// 'n/callback-return': 'error',
// 'n/exports-style': 'error',
// 'n/file-extension-in-import': 'off',
// 'n/global-require': 'error',
// 'n/no-mixed-requires': 'error',
// 'n/no-process-env': 'error',
// 'n/no-restricted-import': 'error',
// 'n/no-restricted-require': 'error',
// 'n/no-sync': 'error',
// 'n/prefer-global/buffer': 'error',
// 'n/prefer-global/console': 'error',
// 'n/prefer-global/process': 'error',
// 'n/prefer-global/text-decoder': 'error',
// 'n/prefer-global/text-encoder': 'error',
// 'n/prefer-global/url': 'error',
// 'n/prefer-global/url-search-params': 'error',
// 'n/prefer-promises/dns': 'error',
// 'n/prefer-promises/fs': 'error',
// promise
// 'promise/catch-or-return': 'error',
// 'promise/no-return-wrap': 'error',
// 'promise/param-names': 'error',
// 'promise/always-return': 'error',
// 'promise/no-native': 'off',
// 'promise/no-nesting': 'warn',
// 'promise/no-promise-in-callback': 'warn',
// 'promise/no-callback-in-promise': 'warn',
// 'promise/avoid-new': 'warn',
// 'promise/no-new-statics': 'error',
// 'promise/no-return-in-finally': 'warn',
// 'promise/valid-params': 'warn',
// 'promise/prefer-await-to-callbacks': 'error',
// 'promise/no-multiple-resolved': 'error',
// eslint comments
// '@eslint-community/eslint-comments/disable-enable-pair': ['error', { allowWholeFile: true }],
// '@eslint-community/eslint-comments/no-restricted-disable': 'error',
// '@eslint-community/eslint-comments/no-use': 'off',
// '@eslint-community/eslint-comments/require-description': 'off',
},
overrides: [
// only for ts files
{
files: ['*.ts', '*.tsx'],
extends: [
'plugin:@typescript-eslint/recommended',
// 'plugin:@typescript-eslint/recommended-requiring-type-checking',
// 'plugin:@typescript-eslint/strict',
// 'plugin:type-graphql/recommended',
],
rules: {
// allow explicitly defined dangling promises
// '@typescript-eslint/no-floating-promises': ['error', { ignoreVoid: true }],
'no-void': ['error', { allowAsStatement: true }],
// ignore prefer-regexp-exec rule to allow string.match(regex)
'@typescript-eslint/prefer-regexp-exec': 'off',
// this should not run on ts files: https://github.com/import-js/eslint-plugin-import/issues/2215#issuecomment-911245486
'import/unambiguous': 'off',
// this is not compatible with typeorm, due to joined tables can be null, but are not defined as nullable
'@typescript-eslint/no-unnecessary-condition': 'off',
},
parserOptions: {
tsconfigRootDir: __dirname,
project: ['./tsconfig.json'],
// this is to properly reference the referenced project database without requirement of compiling it
// eslint-disable-next-line camelcase
EXPERIMENTAL_useSourceOfProjectReferenceRedirect: true,
},
},
{
files: ['*.test.ts'],
plugins: ['jest'],
rules: {
'jest/no-disabled-tests': 'error',
'jest/no-focused-tests': 'error',
'jest/no-identical-title': 'error',
'jest/prefer-to-have-length': 'error',
'jest/valid-expect': 'error',
'@typescript-eslint/unbound-method': 'off',
// 'jest/unbound-method': 'error',
},
},
],
}

View File

@ -1,9 +0,0 @@
module.exports = {
semi: false,
printWidth: 100,
singleQuote: true,
trailingComma: "all",
tabWidth: 2,
bracketSpacing: true,
endOfLine: "auto",
};

View File

@ -37,6 +37,7 @@
"uuid": "8.3.2" "uuid": "8.3.2"
}, },
"devDependencies": { "devDependencies": {
"@biomejs/biome": "1.9.4",
"@types/express": "4.17.12", "@types/express": "4.17.12",
"@types/jest": "27.0.2", "@types/jest": "27.0.2",
"@types/joi": "^17.2.3", "@types/joi": "^17.2.3",
@ -44,20 +45,7 @@
"@types/node": "^16.10.3", "@types/node": "^16.10.3",
"@types/sodium-native": "^2.3.5", "@types/sodium-native": "^2.3.5",
"@types/uuid": "^8.3.4", "@types/uuid": "^8.3.4",
"@typescript-eslint/eslint-plugin": "^5.57.1",
"@typescript-eslint/parser": "^5.57.1",
"apollo-server-testing": "2.25.2", "apollo-server-testing": "2.25.2",
"eslint": "^8.37.0",
"eslint-config-prettier": "^8.8.0",
"eslint-config-standard": "^17.0.0",
"eslint-import-resolver-typescript": "^3.5.4",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-jest": "^27.2.1",
"eslint-plugin-n": "^15.7.0",
"eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-promise": "^6.1.1",
"eslint-plugin-security": "^1.7.1",
"eslint-plugin-type-graphql": "^1.0.0",
"gradido-config": "../config", "gradido-config": "../config",
"graphql-tag": "^2.12.6", "graphql-tag": "^2.12.6",
"jest": "^27.2.4", "jest": "^27.2.4",

View File

@ -1,11 +1,11 @@
import { federationLogger as logger } from '@/server/logger'
import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity' import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity'
import { GraphQLClient } from 'graphql-request' import { GraphQLClient } from 'graphql-request'
import { federationLogger as logger } from '@/server/logger'
import { OpenConnectionCallbackArgs } from '@/graphql/api/1_0/model/OpenConnectionCallbackArgs'
import { openConnectionCallback } from './query/openConnectionCallback'
import { AuthenticationArgs } from '@/graphql/api/1_0/model/AuthenticationArgs' import { AuthenticationArgs } from '@/graphql/api/1_0/model/AuthenticationArgs'
import { OpenConnectionCallbackArgs } from '@/graphql/api/1_0/model/OpenConnectionCallbackArgs'
import { authenticate } from './query/authenticate' import { authenticate } from './query/authenticate'
import { openConnectionCallback } from './query/openConnectionCallback'
export class AuthenticationClient { export class AuthenticationClient {
dbCom: DbFederatedCommunity dbCom: DbFederatedCommunity
@ -29,9 +29,8 @@ export class AuthenticationClient {
async openConnectionCallback(args: OpenConnectionCallbackArgs): Promise<boolean> { async openConnectionCallback(args: OpenConnectionCallbackArgs): Promise<boolean> {
logger.debug('Authentication: openConnectionCallback with endpoint', this.endpoint, args) logger.debug('Authentication: openConnectionCallback with endpoint', this.endpoint, args)
try { try {
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-explicit-any
const { data } = await this.client.rawRequest<any>(openConnectionCallback, { args }) const { data } = await this.client.rawRequest<any>(openConnectionCallback, { args })
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
if (data && data.openConnectionCallback) { if (data && data.openConnectionCallback) {
logger.warn( logger.warn(
'Authentication: openConnectionCallback without response data from endpoint', 'Authentication: openConnectionCallback without response data from endpoint',
@ -53,10 +52,9 @@ export class AuthenticationClient {
async authenticate(args: AuthenticationArgs): Promise<string | null> { async authenticate(args: AuthenticationArgs): Promise<string | null> {
logger.debug('Authentication: authenticate with endpoint=', this.endpoint) logger.debug('Authentication: authenticate with endpoint=', this.endpoint)
try { try {
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-explicit-any
const { data } = await this.client.rawRequest<any>(authenticate, { args }) const { data } = await this.client.rawRequest<any>(authenticate, { args })
logger.debug('Authentication: after authenticate: data:', data) logger.debug('Authentication: after authenticate: data:', data)
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
const authUuid: string = data?.authenticate const authUuid: string = data?.authenticate
if (authUuid) { if (authUuid) {
logger.debug('Authentication: received authenticated uuid', authUuid) logger.debug('Authentication: received authenticated uuid', authUuid)

View File

@ -1,5 +1,3 @@
// eslint-disable-next-line camelcase
import { AuthenticationClient as V1_0_AuthenticationClient } from '../1_0/AuthenticationClient' import { AuthenticationClient as V1_0_AuthenticationClient } from '../1_0/AuthenticationClient'
// eslint-disable-next-line camelcase
export class AuthenticationClient extends V1_0_AuthenticationClient {} export class AuthenticationClient extends V1_0_AuthenticationClient {}

View File

@ -1,20 +1,18 @@
import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity' import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity'
// eslint-disable-next-line camelcase
import { AuthenticationClient as V1_0_AuthenticationClient } from './1_0/AuthenticationClient' import { AuthenticationClient as V1_0_AuthenticationClient } from './1_0/AuthenticationClient'
// eslint-disable-next-line camelcase
import { AuthenticationClient as V1_1_AuthenticationClient } from './1_1/AuthenticationClient' import { AuthenticationClient as V1_1_AuthenticationClient } from './1_1/AuthenticationClient'
import { ApiVersionType } from './enum/ApiVersionType' import { ApiVersionType } from './enum/ApiVersionType'
// eslint-disable-next-line camelcase
type AuthenticationClient = V1_0_AuthenticationClient | V1_1_AuthenticationClient type AuthenticationClient = V1_0_AuthenticationClient | V1_1_AuthenticationClient
interface AuthenticationClientInstance { interface AuthenticationClientInstance {
id: number id: number
// eslint-disable-next-line no-use-before-define
client: AuthenticationClient client: AuthenticationClient
} }
// eslint-disable-next-line @typescript-eslint/no-extraneous-class
export class AuthenticationClientFactory { export class AuthenticationClientFactory {
private static instanceArray: AuthenticationClientInstance[] = [] private static instanceArray: AuthenticationClientInstance[] = []
@ -22,7 +20,7 @@ export class AuthenticationClientFactory {
* The Singleton's constructor should always be private to prevent direct * The Singleton's constructor should always be private to prevent direct
* construction calls with the `new` operator. * construction calls with the `new` operator.
*/ */
// eslint-disable-next-line no-useless-constructor, @typescript-eslint/no-empty-function
private constructor() {} private constructor() {}
private static createAuthenticationClient = (dbCom: DbFederatedCommunity) => { private static createAuthenticationClient = (dbCom: DbFederatedCommunity) => {

View File

@ -1,6 +1,6 @@
import { latestDbVersion } from '@dbTools/config/detectLastDBVersion'
// ATTENTION: DO NOT PUT ANY SECRETS IN HERE (or the .env) // ATTENTION: DO NOT PUT ANY SECRETS IN HERE (or the .env)
import { Decimal } from 'decimal.js-light' import { Decimal } from 'decimal.js-light'
import { latestDbVersion } from '@dbTools/config/detectLastDBVersion'
import dotenv from 'dotenv' import dotenv from 'dotenv'
import { validate } from '@config/index' import { validate } from '@config/index'
@ -63,5 +63,3 @@ export const CONFIG = {
} }
validate(schema, CONFIG) validate(schema, CONFIG)
export default CONFIG

View File

@ -6,7 +6,6 @@ export class GetPublicCommunityInfoResultLoggingView extends AbstractLoggingView
super() super()
} }
// eslint-disable-next-line @typescript-eslint/no-explicit-any
public toJSON(): any { public toJSON(): any {
return { return {
name: this.self.name, name: this.self.name,

View File

@ -1,12 +1,11 @@
import { AbstractLoggingView } from '@logging/AbstractLogging.view'
import { SendCoinsArgs } from '@/graphql/api/1_0/model/SendCoinsArgs' import { SendCoinsArgs } from '@/graphql/api/1_0/model/SendCoinsArgs'
import { AbstractLoggingView } from '@logging/AbstractLogging.view'
export class SendCoinsArgsLoggingView extends AbstractLoggingView { export class SendCoinsArgsLoggingView extends AbstractLoggingView {
public constructor(private self: SendCoinsArgs) { public constructor(private self: SendCoinsArgs) {
super() super()
} }
// eslint-disable-next-line @typescript-eslint/no-explicit-any
public toJSON(): any { public toJSON(): any {
return { return {
recipientCommunityUuid: this.self.recipientCommunityUuid, recipientCommunityUuid: this.self.recipientCommunityUuid,

View File

@ -1,5 +1,5 @@
import { Decimal } from 'decimal.js-light' import { Decimal } from 'decimal.js-light'
import { ObjectType, Field, Int } from 'type-graphql' import { Field, Int, ObjectType } from 'type-graphql'
interface DecayInterface { interface DecayInterface {
balance: Decimal balance: Decimal

View File

@ -1,10 +1,8 @@
// eslint-disable-next-line @typescript-eslint/no-unused-vars
import { Community as DbCommunity } from '@entity/Community' import { Community as DbCommunity } from '@entity/Community'
// eslint-disable-next-line @typescript-eslint/no-unused-vars
import { Field, ObjectType } from 'type-graphql' import { Field, ObjectType } from 'type-graphql'
@ObjectType() @ObjectType()
// eslint-disable-next-line @typescript-eslint/no-unused-vars
export class GetPublicCommunityInfoResult { export class GetPublicCommunityInfoResult {
constructor(dbCom: DbCommunity) { constructor(dbCom: DbCommunity) {
this.publicKey = dbCom.publicKey.toString('hex') this.publicKey = dbCom.publicKey.toString('hex')

View File

@ -1,8 +1,6 @@
// eslint-disable-next-line @typescript-eslint/no-unused-vars
import { Field, ObjectType } from 'type-graphql' import { Field, ObjectType } from 'type-graphql'
@ObjectType() @ObjectType()
// eslint-disable-next-line @typescript-eslint/no-unused-vars
export class GetPublicKeyResult { export class GetPublicKeyResult {
constructor(pubKey: string) { constructor(pubKey: string) {
this.publicKey = pubKey this.publicKey = pubKey

View File

@ -1,16 +1,15 @@
// eslint-disable-next-line @typescript-eslint/no-unused-vars import { CONFIG } from '@/config'
import { Arg, Mutation, Resolver } from 'type-graphql' import { LogError } from '@/server/LogError'
import { federationLogger as logger } from '@/server/logger' import { federationLogger as logger } from '@/server/logger'
import { Community as DbCommunity } from '@entity/Community' import { Community as DbCommunity } from '@entity/Community'
import { FederatedCommunity as DbFedCommunity } from '@entity/FederatedCommunity' import { FederatedCommunity as DbFedCommunity } from '@entity/FederatedCommunity'
import { CommunityLoggingView } from '@logging/CommunityLogging.view' import { CommunityLoggingView } from '@logging/CommunityLogging.view'
import { FederatedCommunityLoggingView } from '@logging/FederatedCommunityLogging.view' import { FederatedCommunityLoggingView } from '@logging/FederatedCommunityLogging.view'
import { LogError } from '@/server/LogError' import { Arg, Mutation, Resolver } from 'type-graphql'
import { OpenConnectionArgs } from '../model/OpenConnectionArgs'
import { startAuthentication, startOpenConnectionCallback } from '../util/authenticateCommunity'
import { OpenConnectionCallbackArgs } from '../model/OpenConnectionCallbackArgs'
import { CONFIG } from '@/config'
import { AuthenticationArgs } from '../model/AuthenticationArgs' import { AuthenticationArgs } from '../model/AuthenticationArgs'
import { OpenConnectionArgs } from '../model/OpenConnectionArgs'
import { OpenConnectionCallbackArgs } from '../model/OpenConnectionCallbackArgs'
import { startAuthentication, startOpenConnectionCallback } from '../util/authenticateCommunity'
@Resolver() @Resolver()
export class AuthenticationResolver { export class AuthenticationResolver {
@ -30,7 +29,7 @@ export class AuthenticationResolver {
throw new LogError(`unknown requesting community with publicKey`, pubKeyBuf.toString('hex')) throw new LogError(`unknown requesting community with publicKey`, pubKeyBuf.toString('hex'))
} }
logger.debug(`Authentication: found requestedCom:`, new CommunityLoggingView(comA)) logger.debug(`Authentication: found requestedCom:`, new CommunityLoggingView(comA))
// no await to respond immediatly and invoke callback-request asynchron // biome-ignore lint/complexity/noVoid: no await to respond immediately and invoke callback-request asynchronously
void startOpenConnectionCallback(args, comA, CONFIG.FEDERATION_API) void startOpenConnectionCallback(args, comA, CONFIG.FEDERATION_API)
return true return true
} }
@ -53,7 +52,7 @@ export class AuthenticationResolver {
`Authentication: found fedComB and start authentication:`, `Authentication: found fedComB and start authentication:`,
new FederatedCommunityLoggingView(fedComB), new FederatedCommunityLoggingView(fedComB),
) )
// no await to respond immediatly and invoke authenticate-request asynchron // biome-ignore lint/complexity/noVoid: no await to respond immediately and invoke authenticate-request asynchronously
void startAuthentication(args.oneTimeCode, fedComB) void startAuthentication(args.oneTimeCode, fedComB)
return true return true
} }

View File

@ -1,10 +1,9 @@
/* eslint-disable @typescript-eslint/no-explicit-any */ import { CONFIG } from '@/config'
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { createServer } from '@/server/createServer'
import { createTestClient } from 'apollo-server-testing'
import createServer from '@/server/createServer'
import { Community as DbCommunity } from '@entity/Community'
import CONFIG from '@/config'
import { Connection } from '@dbTools/typeorm' import { Connection } from '@dbTools/typeorm'
import { Community as DbCommunity } from '@entity/Community'
import { createTestClient } from 'apollo-server-testing'
let query: any let query: any

View File

@ -1,9 +1,8 @@
// eslint-disable-next-line @typescript-eslint/no-unused-vars
import { Query, Resolver } from 'type-graphql'
import { federationLogger as logger } from '@/server/logger' import { federationLogger as logger } from '@/server/logger'
import { Community as DbCommunity } from '@entity/Community' import { Community as DbCommunity } from '@entity/Community'
import { GetPublicCommunityInfoResult } from '../model/GetPublicCommunityInfoResult' import { Query, Resolver } from 'type-graphql'
import { GetPublicCommunityInfoResultLoggingView } from '../logger/GetPublicCommunityInfoResultLogging.view' import { GetPublicCommunityInfoResultLoggingView } from '../logger/GetPublicCommunityInfoResultLogging.view'
import { GetPublicCommunityInfoResult } from '../model/GetPublicCommunityInfoResult'
@Resolver() @Resolver()
export class PublicCommunityInfoResolver { export class PublicCommunityInfoResolver {

View File

@ -1,9 +1,7 @@
/* eslint-disable @typescript-eslint/no-explicit-any */ import { CONFIG } from '@/config'
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { createServer } from '@/server/createServer'
import { createTestClient } from 'apollo-server-testing'
import createServer from '@/server/createServer'
import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity' import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity'
import CONFIG from '@/config' import { createTestClient } from 'apollo-server-testing'
let query: any let query: any

View File

@ -1,7 +1,6 @@
// eslint-disable-next-line @typescript-eslint/no-unused-vars
import { Query, Resolver } from 'type-graphql'
import { federationLogger as logger } from '@/server/logger' import { federationLogger as logger } from '@/server/logger'
import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity' import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity'
import { Query, Resolver } from 'type-graphql'
import { GetPublicKeyResult } from '../model/GetPublicKeyResult' import { GetPublicKeyResult } from '../model/GetPublicKeyResult'
@Resolver() @Resolver()

View File

@ -1,16 +1,14 @@
/* eslint-disable @typescript-eslint/no-explicit-any */ import { CONFIG } from '@/config'
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { fullName } from '@/graphql/util/fullName'
import { ApolloServerTestClient } from 'apollo-server-testing' import { Connection } from '@dbTools/typeorm'
import { Community as DbCommunity } from '@entity/Community' import { Community as DbCommunity } from '@entity/Community'
import CONFIG from '@/config'
import { User as DbUser } from '@entity/User' import { User as DbUser } from '@entity/User'
import { UserContact as DbUserContact } from '@entity/UserContact' import { UserContact as DbUserContact } from '@entity/UserContact'
import { fullName } from '@/graphql/util/fullName'
import { GraphQLError } from 'graphql'
import { cleanDB, testEnvironment } from '@test/helpers' import { cleanDB, testEnvironment } from '@test/helpers'
import { logger } from '@test/testSetup' import { logger } from '@test/testSetup'
import { Connection } from '@dbTools/typeorm' import { ApolloServerTestClient } from 'apollo-server-testing'
import Decimal from 'decimal.js-light' import Decimal from 'decimal.js-light'
import { GraphQLError } from 'graphql'
import { SendCoinsArgs } from '../model/SendCoinsArgs' import { SendCoinsArgs } from '../model/SendCoinsArgs'
let mutate: ApolloServerTestClient['mutate'] // , con: Connection let mutate: ApolloServerTestClient['mutate'] // , con: Connection

View File

@ -1,22 +1,22 @@
import { Arg, Mutation, Resolver } from 'type-graphql' import { findUserByIdentifier } from '@/graphql/util/findUserByIdentifier'
import { fullName } from '@/graphql/util/fullName'
import { LogError } from '@/server/LogError'
import { federationLogger as logger } from '@/server/logger' import { federationLogger as logger } from '@/server/logger'
import { PendingTransactionLoggingView } from '@logging/PendingTransactionLogging.view'
import { Community as DbCommunity } from '@entity/Community' import { Community as DbCommunity } from '@entity/Community'
import { PendingTransaction as DbPendingTransaction } from '@entity/PendingTransaction' import { PendingTransaction as DbPendingTransaction } from '@entity/PendingTransaction'
import { SendCoinsArgs } from '../model/SendCoinsArgs' import { PendingTransactionLoggingView } from '@logging/PendingTransactionLogging.view'
import { LogError } from '@/server/LogError' import Decimal from 'decimal.js-light'
import { Arg, Mutation, Resolver } from 'type-graphql'
import { PendingTransactionState } from '../enum/PendingTransactionState' import { PendingTransactionState } from '../enum/PendingTransactionState'
import { TransactionTypeId } from '../enum/TransactionTypeId' import { TransactionTypeId } from '../enum/TransactionTypeId'
import { SendCoinsArgsLoggingView } from '../logger/SendCoinsArgsLogging.view'
import { SendCoinsArgs } from '../model/SendCoinsArgs'
import { SendCoinsResult } from '../model/SendCoinsResult'
import { calculateRecipientBalance } from '../util/calculateRecipientBalance' import { calculateRecipientBalance } from '../util/calculateRecipientBalance'
import { fullName } from '@/graphql/util/fullName'
import { settlePendingReceiveTransaction } from '../util/settlePendingReceiveTransaction'
// import { checkTradingLevel } from '@/graphql/util/checkTradingLevel' // import { checkTradingLevel } from '@/graphql/util/checkTradingLevel'
import { revertSettledReceiveTransaction } from '../util/revertSettledReceiveTransaction' import { revertSettledReceiveTransaction } from '../util/revertSettledReceiveTransaction'
import { findUserByIdentifier } from '@/graphql/util/findUserByIdentifier' import { settlePendingReceiveTransaction } from '../util/settlePendingReceiveTransaction'
import { SendCoinsResult } from '../model/SendCoinsResult'
import Decimal from 'decimal.js-light'
import { storeForeignUser } from '../util/storeForeignUser' import { storeForeignUser } from '../util/storeForeignUser'
import { SendCoinsArgsLoggingView } from '../logger/SendCoinsArgsLogging.view'
@Resolver() @Resolver()
export class SendCoinsResolver { export class SendCoinsResolver {

View File

@ -1,16 +1,16 @@
import { OpenConnectionArgs } from '../model/OpenConnectionArgs' import { federationLogger as logger } from '@/server/logger'
import { Community as DbCommunity } from '@entity/Community' import { Community as DbCommunity } from '@entity/Community'
import { FederatedCommunity as DbFedCommunity } from '@entity/FederatedCommunity' import { FederatedCommunity as DbFedCommunity } from '@entity/FederatedCommunity'
import { federationLogger as logger } from '@/server/logger' import { OpenConnectionArgs } from '../model/OpenConnectionArgs'
import { OpenConnectionCallbackArgs } from '../model/OpenConnectionCallbackArgs' import { OpenConnectionCallbackArgs } from '../model/OpenConnectionCallbackArgs'
// eslint-disable-next-line camelcase
import { randombytes_random } from 'sodium-native'
import { AuthenticationClientFactory } from '@/client/AuthenticationClientFactory' import { AuthenticationClientFactory } from '@/client/AuthenticationClientFactory'
// eslint-disable-next-line camelcase import { randombytes_random } from 'sodium-native'
import { AuthenticationClient as V1_0_AuthenticationClient } from '@/client/1_0/AuthenticationClient' import { AuthenticationClient as V1_0_AuthenticationClient } from '@/client/1_0/AuthenticationClient'
import { AuthenticationArgs } from '../model/AuthenticationArgs'
import { CommunityLoggingView } from '@logging/CommunityLogging.view' import { CommunityLoggingView } from '@logging/CommunityLogging.view'
import { FederatedCommunityLoggingView } from '@logging/FederatedCommunityLogging.view' import { FederatedCommunityLoggingView } from '@logging/FederatedCommunityLogging.view'
import { AuthenticationArgs } from '../model/AuthenticationArgs'
export async function startOpenConnectionCallback( export async function startOpenConnectionCallback(
args: OpenConnectionArgs, args: OpenConnectionArgs,
@ -41,7 +41,7 @@ export async function startOpenConnectionCallback(
) )
const client = AuthenticationClientFactory.getInstance(fedComA) const client = AuthenticationClientFactory.getInstance(fedComA)
// eslint-disable-next-line camelcase
if (client instanceof V1_0_AuthenticationClient) { if (client instanceof V1_0_AuthenticationClient) {
const callbackArgs = new OpenConnectionCallbackArgs() const callbackArgs = new OpenConnectionCallbackArgs()
callbackArgs.oneTimeCode = oneTimeCode.toString() callbackArgs.oneTimeCode = oneTimeCode.toString()
@ -74,7 +74,7 @@ export async function startAuthentication(
// TODO encrypt homeCom.uuid with homeCom.privateKey and sign it with callbackFedCom.publicKey // TODO encrypt homeCom.uuid with homeCom.privateKey and sign it with callbackFedCom.publicKey
const client = AuthenticationClientFactory.getInstance(fedComB) const client = AuthenticationClientFactory.getInstance(fedComB)
// eslint-disable-next-line camelcase
if (client instanceof V1_0_AuthenticationClient) { if (client instanceof V1_0_AuthenticationClient) {
const authenticationArgs = new AuthenticationArgs() const authenticationArgs = new AuthenticationArgs()
authenticationArgs.oneTimeCode = oneTimeCode authenticationArgs.oneTimeCode = oneTimeCode

View File

@ -9,7 +9,9 @@ export async function calculateRecipientBalance(
time: Date, time: Date,
): Promise<{ balance: Decimal; decay: Decay; lastTransactionId: number } | null> { ): Promise<{ balance: Decimal; decay: Decay; lastTransactionId: number } | null> {
const lastTransaction = await getLastTransaction(userId) const lastTransaction = await getLastTransaction(userId)
if (!lastTransaction) return null if (!lastTransaction) {
return null
}
const decay = calculateDecay(lastTransaction.balance, lastTransaction.balanceDate, time) const decay = calculateDecay(lastTransaction.balance, lastTransaction.balanceDate, time)

View File

@ -1,7 +1,3 @@
/* eslint-disable @typescript-eslint/restrict-template-expressions */
/* eslint-disable new-cap */
/* eslint-disable @typescript-eslint/no-non-null-assertion */
import { getConnection } from '@dbTools/typeorm' import { getConnection } from '@dbTools/typeorm'
import { Community as DbCommunity } from '@entity/Community' import { Community as DbCommunity } from '@entity/Community'
import { PendingTransaction as DbPendingTransaction } from '@entity/PendingTransaction' import { PendingTransaction as DbPendingTransaction } from '@entity/PendingTransaction'
@ -13,12 +9,12 @@ import { PendingTransactionState } from '../enum/PendingTransactionState'
import { LogError } from '@/server/LogError' import { LogError } from '@/server/LogError'
import { federationLogger as logger } from '@/server/logger' import { federationLogger as logger } from '@/server/logger'
import { getLastTransaction } from '@/graphql/util/getLastTransaction'
import { TRANSACTIONS_LOCK } from '@/graphql/util/TRANSACTIONS_LOCK' import { TRANSACTIONS_LOCK } from '@/graphql/util/TRANSACTIONS_LOCK'
import { getLastTransaction } from '@/graphql/util/getLastTransaction'
import { CommunityLoggingView } from '@logging/CommunityLogging.view' import { CommunityLoggingView } from '@logging/CommunityLogging.view'
import { UserLoggingView } from '@logging/UserLogging.view'
import { PendingTransactionLoggingView } from '@logging/PendingTransactionLogging.view' import { PendingTransactionLoggingView } from '@logging/PendingTransactionLogging.view'
import { TransactionLoggingView } from '@logging/TransactionLogging.view' import { TransactionLoggingView } from '@logging/TransactionLogging.view'
import { UserLoggingView } from '@logging/UserLogging.view'
export async function revertSettledReceiveTransaction( export async function revertSettledReceiveTransaction(
homeCom: DbCommunity, homeCom: DbCommunity,

View File

@ -1,7 +1,3 @@
/* eslint-disable @typescript-eslint/restrict-template-expressions */
/* eslint-disable new-cap */
/* eslint-disable @typescript-eslint/no-non-null-assertion */
import { getConnection } from '@dbTools/typeorm' import { getConnection } from '@dbTools/typeorm'
import { Community as DbCommunity } from '@entity/Community' import { Community as DbCommunity } from '@entity/Community'
import { PendingTransaction as DbPendingTransaction } from '@entity/PendingTransaction' import { PendingTransaction as DbPendingTransaction } from '@entity/PendingTransaction'
@ -13,14 +9,14 @@ import { PendingTransactionState } from '../enum/PendingTransactionState'
import { LogError } from '@/server/LogError' import { LogError } from '@/server/LogError'
import { federationLogger as logger } from '@/server/logger' import { federationLogger as logger } from '@/server/logger'
import { getLastTransaction } from '@/graphql/util/getLastTransaction'
import { TRANSACTIONS_LOCK } from '@/graphql/util/TRANSACTIONS_LOCK' import { TRANSACTIONS_LOCK } from '@/graphql/util/TRANSACTIONS_LOCK'
import { calculateRecipientBalance } from './calculateRecipientBalance' import { getLastTransaction } from '@/graphql/util/getLastTransaction'
import Decimal from 'decimal.js-light'
import { CommunityLoggingView } from '@logging/CommunityLogging.view' import { CommunityLoggingView } from '@logging/CommunityLogging.view'
import { UserLoggingView } from '@logging/UserLogging.view'
import { PendingTransactionLoggingView } from '@logging/PendingTransactionLogging.view' import { PendingTransactionLoggingView } from '@logging/PendingTransactionLogging.view'
import { TransactionLoggingView } from '@logging/TransactionLogging.view' import { TransactionLoggingView } from '@logging/TransactionLogging.view'
import { UserLoggingView } from '@logging/UserLogging.view'
import Decimal from 'decimal.js-light'
import { calculateRecipientBalance } from './calculateRecipientBalance'
export async function settlePendingReceiveTransaction( export async function settlePendingReceiveTransaction(
homeCom: DbCommunity, homeCom: DbCommunity,

View File

@ -1,9 +1,9 @@
import { User as DbUser } from '@entity/User' import { User as DbUser } from '@entity/User'
import { federationLogger as logger } from '@/server/logger' import { federationLogger as logger } from '@/server/logger'
import { SendCoinsArgs } from '../model/SendCoinsArgs'
import { UserLoggingView } from '@logging/UserLogging.view' import { UserLoggingView } from '@logging/UserLogging.view'
import { SendCoinsArgsLoggingView } from '../logger/SendCoinsArgsLogging.view' import { SendCoinsArgsLoggingView } from '../logger/SendCoinsArgsLogging.view'
import { SendCoinsArgs } from '../model/SendCoinsArgs'
export async function storeForeignUser(args: SendCoinsArgs): Promise<boolean> { export async function storeForeignUser(args: SendCoinsArgs): Promise<boolean> {
if (args.senderCommunityUuid !== null && args.senderUserUuid !== null) { if (args.senderCommunityUuid !== null && args.senderUserUuid !== null) {

View File

@ -1,9 +1,7 @@
/* eslint-disable @typescript-eslint/no-explicit-any */ import { CONFIG } from '@/config'
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { createServer } from '@/server/createServer'
import { createTestClient } from 'apollo-server-testing'
import createServer from '@/server/createServer'
import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity' import { FederatedCommunity as DbFederatedCommunity } from '@entity/FederatedCommunity'
import CONFIG from '@/config' import { createTestClient } from 'apollo-server-testing'
let query: any let query: any

View File

@ -1,8 +1,6 @@
// eslint-disable-next-line @typescript-eslint/no-unused-vars
import { Resolver } from 'type-graphql' import { Resolver } from 'type-graphql'
// eslint-disable-next-line camelcase
import { PublicKeyResolver as PublicKeyResolver_1_0 } from '../../1_0/resolver/PublicKeyResolver' import { PublicKeyResolver as PublicKeyResolver_1_0 } from '../../1_0/resolver/PublicKeyResolver'
@Resolver() @Resolver()
// eslint-disable-next-line camelcase, @typescript-eslint/no-unused-vars
export class PublicKeyResolver extends PublicKeyResolver_1_0 {} export class PublicKeyResolver extends PublicKeyResolver_1_0 {}

View File

@ -1,7 +1,7 @@
import path from 'path' import path from 'node:path'
// config
import CONFIG from '../../config'
import { federationLogger as logger } from '@/server/logger' import { federationLogger as logger } from '@/server/logger'
// config
import { CONFIG } from '../../config'
export const getApiResolvers = (): string => { export const getApiResolvers = (): string => {
logger.info(`getApiResolvers...${CONFIG.FEDERATION_API}`) logger.info(`getApiResolvers...${CONFIG.FEDERATION_API}`)

View File

@ -1,4 +1,3 @@
/* eslint-disable @typescript-eslint/no-unsafe-argument */
import { Decimal } from 'decimal.js-light' import { Decimal } from 'decimal.js-light'
import { GraphQLScalarType, Kind } from 'graphql' import { GraphQLScalarType, Kind } from 'graphql'

View File

@ -1,12 +1,12 @@
import { GraphQLSchema } from 'graphql' import { GraphQLSchema } from 'graphql'
import { buildSchema } from 'type-graphql' import { buildSchema } from 'type-graphql'
// import isAuthorized from './directive/isAuthorized'
import { DecimalScalar } from './scalar/Decimal'
import { Decimal } from 'decimal.js-light' import { Decimal } from 'decimal.js-light'
import { getApiResolvers } from './api/schema' import { getApiResolvers } from './api/schema'
// import isAuthorized from './directive/isAuthorized'
import { DecimalScalar } from './scalar/Decimal'
const schema = async (): Promise<GraphQLSchema> => { export const schema = async (): Promise<GraphQLSchema> => {
return await buildSchema({ return await buildSchema({
resolvers: [getApiResolvers()], resolvers: [getApiResolvers()],
// authChecker: isAuthorized, // authChecker: isAuthorized,
@ -23,5 +23,3 @@ const schema = async (): Promise<GraphQLSchema> => {
*/ */
}) })
} }
export default schema

View File

@ -1,7 +1,7 @@
import CONFIG from '@/config' import { CONFIG } from '@/config'
import { federationLogger as logger } from '@/server/logger'
import { Community as DbCommunity } from '@entity/Community' import { Community as DbCommunity } from '@entity/Community'
import { Decimal } from 'decimal.js-light' import { Decimal } from 'decimal.js-light'
import { federationLogger as logger } from '@/server/logger'
export async function checkTradingLevel(homeCom: DbCommunity, amount: Decimal): Promise<boolean> { export async function checkTradingLevel(homeCom: DbCommunity, amount: Decimal): Promise<boolean> {
const tradingLevel = CONFIG.FEDERATION_TRADING_LEVEL const tradingLevel = CONFIG.FEDERATION_TRADING_LEVEL

View File

@ -1,6 +1,6 @@
import { Decimal } from 'decimal.js-light' import { Decimal } from 'decimal.js-light'
import { decayFormula, calculateDecay } from './decay' import { calculateDecay, decayFormula } from './decay'
describe('utils/decay', () => { describe('utils/decay', () => {
describe('decayFormula', () => { describe('decayFormula', () => {
@ -16,7 +16,7 @@ describe('utils/decay', () => {
expect(decayFormula(amount, seconds).toString()).toBe('1.000000021964959992727444') expect(decayFormula(amount, seconds).toString()).toBe('1.000000021964959992727444')
}) })
// we get pretty close, but not exact here, skipping // we get pretty close, but not exact here, skipping
// eslint-disable-next-line jest/no-disabled-tests
it.skip('has correct forward calculation', () => { it.skip('has correct forward calculation', () => {
const amount = new Decimal(1.0).div( const amount = new Decimal(1.0).div(
new Decimal('0.99999997803504048973201202316767079413460520837376'), new Decimal('0.99999997803504048973201202316767079413460520837376'),

View File

@ -1,7 +1,7 @@
import { Decimal } from 'decimal.js-light' import { Decimal } from 'decimal.js-light'
import { CONFIG } from '@/config'
import { LogError } from '@/server/LogError' import { LogError } from '@/server/LogError'
import CONFIG from '@/config'
import { Decay } from '../api/1_0/model/Decay' import { Decay } from '../api/1_0/model/Decay'
// TODO: externalize all those definitions and functions into an external decay library // TODO: externalize all those definitions and functions into an external decay library

View File

@ -24,11 +24,18 @@ const RESERVED_ALIAS = [
] ]
export const validateAlias = async (alias: string): Promise<boolean> => { export const validateAlias = async (alias: string): Promise<boolean> => {
if (alias.length < 3) throw new LogError('Given alias is too short', alias) if (alias.length < 3) {
if (alias.length > 20) throw new LogError('Given alias is too long', alias) throw new LogError('Given alias is too short', alias)
if (!alias.match(VALID_ALIAS_REGEX)) throw new LogError('Invalid characters in alias', alias) }
if (RESERVED_ALIAS.includes(alias.toLowerCase())) if (alias.length > 20) {
throw new LogError('Given alias is too long', alias)
}
if (!alias.match(VALID_ALIAS_REGEX)) {
throw new LogError('Invalid characters in alias', alias)
}
if (RESERVED_ALIAS.includes(alias.toLowerCase())) {
throw new LogError('Alias is not allowed', alias) throw new LogError('Alias is not allowed', alias)
}
const aliasInUse = await DbUser.find({ const aliasInUse = await DbUser.find({
where: { alias: Raw((a) => `LOWER(${a}) = "${alias.toLowerCase()}"`) }, where: { alias: Raw((a) => `LOWER(${a}) = "${alias.toLowerCase()}"`) },
}) })

View File

@ -1,22 +1,20 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import { createServer } from './server/createServer' import { createServer } from './server/createServer'
// config // config
import { CONFIG } from './config' import { CONFIG } from './config'
async function main() { async function main() {
// eslint-disable-next-line no-console // biome-ignore lint/suspicious/noConsole: no logger needed fot startup infos
console.log(`FEDERATION_PORT=${CONFIG.FEDERATION_PORT}`) console.log(`FEDERATION_PORT=${CONFIG.FEDERATION_PORT}`)
// eslint-disable-next-line no-console // biome-ignore lint/suspicious/noConsole: no logger needed fot startup infos
console.log(`FEDERATION_API=${CONFIG.FEDERATION_API}`) console.log(`FEDERATION_API=${CONFIG.FEDERATION_API}`)
const { app } = await createServer() const { app } = await createServer()
app.listen(CONFIG.FEDERATION_PORT, () => { app.listen(CONFIG.FEDERATION_PORT, () => {
// eslint-disable-next-line no-console // biome-ignore lint/suspicious/noConsole: no logger needed fot startup infos
console.log(`Server is running at http://localhost:${CONFIG.FEDERATION_PORT}`) console.log(`Server is running at http://localhost:${CONFIG.FEDERATION_PORT}`)
if (CONFIG.GRAPHIQL) { if (CONFIG.GRAPHIQL) {
// eslint-disable-next-line no-console // biome-ignore lint/suspicious/noConsole: no logger needed fot startup infos
console.log( console.log(
`GraphIQL available at ${CONFIG.FEDERATION_COMMUNITY_URL}/api/${CONFIG.FEDERATION_API}`, `GraphIQL available at ${CONFIG.FEDERATION_COMMUNITY_URL}/api/${CONFIG.FEDERATION_API}`,
) )
@ -25,7 +23,7 @@ async function main() {
} }
main().catch((e) => { main().catch((e) => {
// eslint-disable-next-line no-console // biome-ignore lint/suspicious/noConsole: no logger present
console.error(e) console.error(e)
process.exit(1) process.exit(1)
}) })

View File

@ -1,8 +1,6 @@
/* eslint-disable @typescript-eslint/no-unsafe-argument */
import { federationLogger as logger } from './logger' import { federationLogger as logger } from './logger'
export class LogError extends Error { export class LogError extends Error {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
constructor(msg: string, ...details: any[]) { constructor(msg: string, ...details: any[]) {
super(msg) super(msg)
logger.error(msg, ...details) logger.error(msg, ...details)

View File

@ -5,4 +5,5 @@ const corsOptions = {
exposedHeaders: ['token'], exposedHeaders: ['token'],
} }
// biome-ignore lint/style/noDefaultExport: <explanation>
export default cors(corsOptions) export default cors(corsOptions)

View File

@ -3,29 +3,29 @@ import 'reflect-metadata'
import { ApolloServer } from 'apollo-server-express' import { ApolloServer } from 'apollo-server-express'
import express, { Express } from 'express' import express, { Express } from 'express'
// database
import connection from '@/typeorm/connection'
import { checkDBVersion } from '@/typeorm/DBVersion' import { checkDBVersion } from '@/typeorm/DBVersion'
// database
import { connection } from '@/typeorm/connection'
// server // server
import cors from './cors' import cors from './cors'
// import serverContext from './context' // import serverContext from './context'
import plugins from './plugins' import { plugins } from './plugins'
// config // config
import { CONFIG } from '@/config' import { CONFIG } from '@/config'
// graphql // graphql
import schema from '@/graphql/schema' import { schema } from '@/graphql/schema'
// webhooks // webhooks
// import { elopageWebhook } from '@/webhook/elopage' // import { elopageWebhook } from '@/webhook/elopage'
import { Connection } from '@dbTools/typeorm' import { Connection } from '@dbTools/typeorm'
import { apolloLogger } from './logger'
import { Logger } from 'log4js'
import helmet from 'helmet'
import { slowDown } from 'express-slow-down' import { slowDown } from 'express-slow-down'
import helmet from 'helmet'
import { Logger } from 'log4js'
import { apolloLogger } from './logger'
// i18n // i18n
// import { i18n } from './localization' // import { i18n } from './localization'
@ -36,7 +36,6 @@ import { slowDown } from 'express-slow-down'
type ServerDef = { apollo: ApolloServer; app: Express; con: Connection } type ServerDef = { apollo: ApolloServer; app: Express; con: Connection }
export const createServer = async ( export const createServer = async (
// eslint-disable-next-line @typescript-eslint/no-explicit-any
// context: any = serverContext, // context: any = serverContext,
logger: Logger = apolloLogger, logger: Logger = apolloLogger,
// localization: i18n.I18n = i18n, // localization: i18n.I18n = i18n,
@ -112,5 +111,3 @@ export const createServer = async (
return { apollo, app, con } return { apollo, app, con }
} }
export default createServer

View File

@ -1,5 +1,5 @@
import { CONFIG } from '@/config'
import log4js from 'log4js' import log4js from 'log4js'
import CONFIG from '@/config'
import { readFileSync } from 'fs' import { readFileSync } from 'fs'

View File

@ -1,6 +1,3 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import clonedeep from 'lodash.clonedeep' import clonedeep from 'lodash.clonedeep'
const setHeadersPlugin = { const setHeadersPlugin = {
@ -23,8 +20,12 @@ const setHeadersPlugin = {
const filterVariables = (variables: any) => { const filterVariables = (variables: any) => {
const vars = clonedeep(variables) const vars = clonedeep(variables)
if (vars && vars.password) vars.password = '***' if (vars && vars.password) {
if (vars && vars.passwordNew) vars.passwordNew = '***' vars.password = '***'
}
if (vars && vars.passwordNew) {
vars.passwordNew = '***'
}
return vars return vars
} }
@ -39,15 +40,18 @@ ${mutation || query}variables: ${JSON.stringify(filterVariables(variables), null
return { return {
willSendResponse(requestContext: any) { willSendResponse(requestContext: any) {
if (operationName !== 'IntrospectionQuery') { if (operationName !== 'IntrospectionQuery') {
if (requestContext.context.user) logger.info(`User ID: ${requestContext.context.user.id}`) if (requestContext.context.user) {
logger.info(`User ID: ${requestContext.context.user.id}`)
}
if (requestContext.response.data) { if (requestContext.response.data) {
logger.info('Response Success!') logger.info('Response Success!')
logger.trace(`Response-Data: logger.trace(`Response-Data:
${JSON.stringify(requestContext.response.data, null, 2)}`) ${JSON.stringify(requestContext.response.data, null, 2)}`)
} }
if (requestContext.response.errors) if (requestContext.response.errors) {
logger.error(`Response-Errors: logger.error(`Response-Errors:
${JSON.stringify(requestContext.response.errors, null, 2)}`) ${JSON.stringify(requestContext.response.errors, null, 2)}`)
}
} }
return requestContext return requestContext
}, },
@ -55,7 +59,5 @@ ${JSON.stringify(requestContext.response.errors, null, 2)}`)
}, },
} }
const plugins = export const plugins =
process.env.NODE_ENV === 'development' ? [setHeadersPlugin] : [setHeadersPlugin, logPlugin] process.env.NODE_ENV === 'development' ? [setHeadersPlugin] : [setHeadersPlugin, logPlugin]
export default plugins

View File

@ -1,5 +1,5 @@
import { Migration } from '@entity/Migration'
import { federationLogger as logger } from '@/server/logger' import { federationLogger as logger } from '@/server/logger'
import { Migration } from '@entity/Migration'
const getDBVersion = async (): Promise<string | null> => { const getDBVersion = async (): Promise<string | null> => {
try { try {

View File

@ -1,7 +1,7 @@
// TODO This is super weird - since the entities are defined in another project they have their own globals. // TODO This is super weird - since the entities are defined in another project they have their own globals.
// We cannot use our connection here, but must use the external typeorm installation // We cannot use our connection here, but must use the external typeorm installation
import { Connection, createConnection, FileLogger } from '@dbTools/typeorm' import { CONFIG } from '@/config'
import CONFIG from '@/config' import { Connection, FileLogger, createConnection } from '@dbTools/typeorm'
import { entities } from '@entity/index' import { entities } from '@entity/index'
const connection = async (): Promise<Connection | null> => { const connection = async (): Promise<Connection | null> => {
@ -25,10 +25,10 @@ const connection = async (): Promise<Connection | null> => {
}, },
}) })
} catch (error) { } catch (error) {
// eslint-disable-next-line no-console // biome-ignore lint/suspicious/noConsole: no logger present
console.log(error) console.log(error)
return null return null
} }
} }
export default connection export { connection }

View File

@ -1,8 +1,8 @@
/* eslint-disable @typescript-eslint/no-unsafe-call */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/restrict-template-expressions */
/* eslint-disable @typescript-eslint/no-empty-interface */
/* eslint-disable @typescript-eslint/no-unsafe-argument */
import { Decimal } from 'decimal.js-light' import { Decimal } from 'decimal.js-light'
@ -28,7 +28,7 @@ interface CustomMatchers<R = unknown> {
} }
declare global { declare global {
// eslint-disable-next-line @typescript-eslint/no-namespace
namespace jest { namespace jest {
interface Expect extends CustomMatchers {} interface Expect extends CustomMatchers {}
interface Matchers<R> extends CustomMatchers<R> {} interface Matchers<R> extends CustomMatchers<R> {}

View File

@ -1,9 +1,9 @@
/* eslint-disable @typescript-eslint/unbound-method */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/no-unsafe-call */
/* eslint-disable @typescript-eslint/no-unsafe-return */
import { entities } from '@entity/index' import { entities } from '@entity/index'
import { createTestClient } from 'apollo-server-testing' import { createTestClient } from 'apollo-server-testing'

View File

@ -335,6 +335,60 @@
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
"@biomejs/biome@1.9.4":
version "1.9.4"
resolved "https://registry.yarnpkg.com/@biomejs/biome/-/biome-1.9.4.tgz#89766281cbc3a0aae865a7ff13d6aaffea2842bf"
integrity sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==
optionalDependencies:
"@biomejs/cli-darwin-arm64" "1.9.4"
"@biomejs/cli-darwin-x64" "1.9.4"
"@biomejs/cli-linux-arm64" "1.9.4"
"@biomejs/cli-linux-arm64-musl" "1.9.4"
"@biomejs/cli-linux-x64" "1.9.4"
"@biomejs/cli-linux-x64-musl" "1.9.4"
"@biomejs/cli-win32-arm64" "1.9.4"
"@biomejs/cli-win32-x64" "1.9.4"
"@biomejs/cli-darwin-arm64@1.9.4":
version "1.9.4"
resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.9.4.tgz#dfa376d23a54a2d8f17133c92f23c1bf2e62509f"
integrity sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==
"@biomejs/cli-darwin-x64@1.9.4":
version "1.9.4"
resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.9.4.tgz#eafc2ce3849d385fc02238aad1ca4a73395a64d9"
integrity sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==
"@biomejs/cli-linux-arm64-musl@1.9.4":
version "1.9.4"
resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.9.4.tgz#d780c3e01758fc90f3268357e3f19163d1f84fca"
integrity sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==
"@biomejs/cli-linux-arm64@1.9.4":
version "1.9.4"
resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.9.4.tgz#8ed1dd0e89419a4b66a47f95aefb8c46ae6041c9"
integrity sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==
"@biomejs/cli-linux-x64-musl@1.9.4":
version "1.9.4"
resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.9.4.tgz#f36982b966bd671a36671e1de4417963d7db15fb"
integrity sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==
"@biomejs/cli-linux-x64@1.9.4":
version "1.9.4"
resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64/-/cli-linux-x64-1.9.4.tgz#a0a7f56680c76b8034ddc149dbf398bdd3a462e8"
integrity sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==
"@biomejs/cli-win32-arm64@1.9.4":
version "1.9.4"
resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.9.4.tgz#e2ef4e0084e76b7e26f0fc887c5ef1265ea56200"
integrity sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==
"@biomejs/cli-win32-x64@1.9.4":
version "1.9.4"
resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz#4c7afa90e3970213599b4095e62f87e5972b2340"
integrity sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==
"@cspotcode/source-map-support@^0.8.0": "@cspotcode/source-map-support@^0.8.0":
version "0.8.1" version "0.8.1"
resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1"