+
@@ -104,7 +104,6 @@
:contributionId="row.item.id"
:contributionState="row.item.state"
@update-state="updateState"
- @update-user-data="updateUserData"
/>
@@ -146,22 +145,9 @@ export default {
required: true,
},
},
- data() {
- return {
- creationUserData: {
- amount: null,
- date: null,
- memo: null,
- moderator: null,
- },
- }
- },
methods: {
myself(item) {
- return (
- `${item.firstName} ${item.lastName}` ===
- `${this.$store.state.moderator.firstName} ${this.$store.state.moderator.lastName}`
- )
+ return item.userId === this.$store.state.moderator.id
},
getStatusIcon(status) {
return iconMap[status] ? iconMap[status] : 'default-icon'
@@ -174,16 +160,6 @@ export default {
if (item.state === 'IN_PROGRESS') return 'table-primary'
if (item.state === 'PENDING') return 'table-primary'
},
- updateCreationData(data) {
- const row = data.row
- this.$emit('update-contributions', data)
- delete data.row
- this.creationUserData = { ...this.creationUserData, ...data }
- row.toggleDetails()
- },
- updateUserData(rowItem, newCreation) {
- rowItem.creation = newCreation
- },
updateState(id) {
this.$emit('update-state', id)
},
diff --git a/admin/src/graphql/adminListContributions.js b/admin/src/graphql/adminListContributions.js
index 9d63bf6a9..97a11c61a 100644
--- a/admin/src/graphql/adminListContributions.js
+++ b/admin/src/graphql/adminListContributions.js
@@ -32,6 +32,8 @@ export const adminListContributions = gql`
deniedBy
deletedAt
deletedBy
+ moderatorId
+ userId
}
}
}
diff --git a/admin/src/graphql/adminOpenCreations.js b/admin/src/graphql/adminOpenCreations.js
new file mode 100644
index 000000000..0e766c0f7
--- /dev/null
+++ b/admin/src/graphql/adminOpenCreations.js
@@ -0,0 +1,11 @@
+import gql from 'graphql-tag'
+
+export const adminOpenCreations = gql`
+ query ($userId: Int!) {
+ adminOpenCreations(userId: $userId) {
+ year
+ month
+ amount
+ }
+ }
+`
diff --git a/admin/src/graphql/adminUpdateContribution.js b/admin/src/graphql/adminUpdateContribution.js
index b7c834109..c52a0cbc4 100644
--- a/admin/src/graphql/adminUpdateContribution.js
+++ b/admin/src/graphql/adminUpdateContribution.js
@@ -1,18 +1,11 @@
import gql from 'graphql-tag'
export const adminUpdateContribution = gql`
- mutation ($id: Int!, $email: String!, $amount: Decimal!, $memo: String!, $creationDate: String!) {
- adminUpdateContribution(
- id: $id
- email: $email
- amount: $amount
- memo: $memo
- creationDate: $creationDate
- ) {
+ mutation ($id: Int!, $amount: Decimal!, $memo: String!, $creationDate: String!) {
+ adminUpdateContribution(id: $id, amount: $amount, memo: $memo, creationDate: $creationDate) {
amount
date
memo
- creation
}
}
`
diff --git a/admin/src/locales/de.json b/admin/src/locales/de.json
index 0d05eaa88..f98dc90f3 100644
--- a/admin/src/locales/de.json
+++ b/admin/src/locales/de.json
@@ -1,6 +1,7 @@
{
"all_emails": "Alle Nutzer",
"back": "zurück",
+ "change_user_role": "Nutzerrolle ändern",
"chat": "Chat",
"contributionLink": {
"amount": "Betrag",
@@ -114,6 +115,11 @@
"open_creations": "Offene Schöpfungen",
"overlay": {
"cancel": "Abbrechen",
+ "changeUserRole": {
+ "question": "Willst du die Rolle von {username} wirklich zu {newRole} ändern?",
+ "title": "Nutzerrolle ändern",
+ "yes": "Ja, Nutzerrolle ändern"
+ },
"confirm": {
"question": "Willst du diesen Gemeinwohl-Beitrag wirklich bestätigen und gutschreiben?",
"text": "Nach dem Speichern ist der Datensatz nicht mehr änderbar. Bitte überprüfe genau, dass alles stimmt.",
@@ -126,11 +132,21 @@
"title": "Gemeinwohl-Beitrag löschen!",
"yes": "Ja, Beitrag löschen!"
},
+ "deleteUser": {
+ "question": "Willst du {username} wirklich löschen?",
+ "title": "Nutzer löschen",
+ "yes": "Ja, Nutzer löschen"
+ },
"deny": {
"question": "Willst du diesen Gemeinwohl-Beitrag wirklich ablehnen?",
"text": "Nach dem Speichern ist der Datensatz nicht mehr änderbar und kann auch nicht mehr gelöscht werden. Bitte überprüfe genau, dass alles stimmt.",
"title": "Gemeinwohl-Beitrag ablehnen!",
"yes": "Ja, Beitrag ablehnen und speichern!"
+ },
+ "undeleteUser": {
+ "question": "Willst du wirklich {username} wiederherstellen?",
+ "title": "Nutzer wiederherstellen",
+ "yes": "Ja, Nutzer wiederherstellen"
}
},
"redeemed": "eingelöst",
diff --git a/admin/src/locales/en.json b/admin/src/locales/en.json
index f36944a63..358c62a15 100644
--- a/admin/src/locales/en.json
+++ b/admin/src/locales/en.json
@@ -1,6 +1,7 @@
{
"all_emails": "All users",
"back": "back",
+ "change_user_role": "Change user role",
"chat": "Chat",
"contributionLink": {
"amount": "Amount",
@@ -114,6 +115,11 @@
"open_creations": "Open creations",
"overlay": {
"cancel": "Cancel",
+ "changeUserRole": {
+ "question": "Do you really want to change {username}'s role to {newRole}?",
+ "title": "Change user role",
+ "yes": "Yes, change user role"
+ },
"confirm": {
"question": "Do you really want to carry out and finally save this pre-stored creation?",
"text": "After saving, the record can no longer be changed. Please check carefully that everything is correct.",
@@ -126,11 +132,21 @@
"title": "Delete creation!",
"yes": "Yes, delete and save creation!"
},
+ "deleteUser": {
+ "question": "Do you really want to delete {username}?",
+ "title": "Delete user",
+ "yes": "Yes, delete user"
+ },
"deny": {
"question": "Do you really want to carry out and finally save this pre-stored creation?",
"text": "After saving, the record can no longer be changed or deleted. Please check carefully that everything is correct.",
"title": "Reject creation!",
"yes": "Yes, reject and save creation!"
+ },
+ "undeleteUser": {
+ "question": "Do you really want to undelete {username}",
+ "title": "Undelete user",
+ "yes": "Yes,undelete user"
}
},
"redeemed": "redeemed",
diff --git a/admin/src/mixins/creationMonths.js b/admin/src/mixins/creationMonths.js
index c26dc5b02..57e0ab17e 100644
--- a/admin/src/mixins/creationMonths.js
+++ b/admin/src/mixins/creationMonths.js
@@ -1,9 +1,11 @@
+import { adminOpenCreations } from '../graphql/adminOpenCreations'
+
export const creationMonths = {
- props: {
- creation: {
- type: Array,
- default: () => [1000, 1000, 1000],
- },
+ data() {
+ return {
+ creation: [1000, 1000, 1000],
+ userId: 0,
+ }
},
computed: {
creationDates() {
@@ -38,4 +40,23 @@ export const creationMonths = {
return this.creationDates.map((date) => this.$d(date, 'monthShort')).join(' | ')
},
},
+ apollo: {
+ OpenCreations: {
+ query() {
+ return adminOpenCreations
+ },
+ variables() {
+ return {
+ userId: this.userId,
+ }
+ },
+ fetchPolicy: 'no-cache',
+ update({ adminOpenCreations }) {
+ this.creation = adminOpenCreations.map((obj) => obj.amount)
+ },
+ error({ message }) {
+ this.toastError(message)
+ },
+ },
+ },
}
diff --git a/admin/src/pages/CreationConfirm.vue b/admin/src/pages/CreationConfirm.vue
index 0b43be840..53ffbd66e 100644
--- a/admin/src/pages/CreationConfirm.vue
+++ b/admin/src/pages/CreationConfirm.vue
@@ -44,7 +44,7 @@
:fields="fields"
@show-overlay="showOverlay"
@update-state="updateStatus"
- @update-contributions="$apollo.queries.AllContributions.refetch()"
+ @update-contributions="$apollo.queries.ListAllContributions.refetch()"
/>
{
amount: 500,
memo: 'Danke für alles',
date: new Date(),
- moderator: 1,
+ moderatorId: 1,
state: 'PENDING',
creation: [500, 500, 500],
messagesCount: 0,
@@ -64,7 +64,7 @@ const defaultData = () => {
amount: 1000000,
memo: 'Gut Ergattert',
date: new Date(),
- moderator: 1,
+ moderatorId: 1,
state: 'PENDING',
creation: [500, 500, 500],
messagesCount: 0,
diff --git a/admin/src/pages/UserSearch.spec.js b/admin/src/pages/UserSearch.spec.js
index 77e8a3559..0d145cb89 100644
--- a/admin/src/pages/UserSearch.spec.js
+++ b/admin/src/pages/UserSearch.spec.js
@@ -25,7 +25,7 @@ const apolloQueryMock = jest.fn().mockResolvedValue({
email: 'benjamin@bluemchen.de',
creation: [1000, 1000, 1000],
emailChecked: true,
- deletedAt: null,
+ deletedAt: new Date(),
},
{
userId: 3,
@@ -243,6 +243,17 @@ describe('UserSearch', () => {
})
})
+ describe('recover user', () => {
+ const userId = 2
+ beforeEach(() => {
+ wrapper.findComponent({ name: 'SearchUserTable' }).vm.$emit('updateDeletedAt', userId, null)
+ })
+
+ it('toasts a success message', () => {
+ expect(toastSuccessSpy).toBeCalledWith('user_recovered')
+ })
+ })
+
describe('apollo returns error', () => {
beforeEach(() => {
apolloQueryMock.mockRejectedValue({
diff --git a/backend/.eslintrc.js b/backend/.eslintrc.js
index 6ce43ef35..99b8baa24 100644
--- a/backend/.eslintrc.js
+++ b/backend/.eslintrc.js
@@ -1,12 +1,27 @@
+// eslint-disable-next-line import/no-commonjs, import/unambiguous
module.exports = {
root: true,
env: {
node: true,
},
parser: '@typescript-eslint/parser',
- plugins: ['prettier', '@typescript-eslint', 'type-graphql', 'jest'],
- extends: ['standard', 'eslint:recommended', 'plugin:prettier/recommended'],
- // add your custom rules here
+ plugins: ['prettier', '@typescript-eslint', 'type-graphql', 'jest', 'import'],
+ extends: [
+ 'standard',
+ 'eslint:recommended',
+ 'plugin:prettier/recommended',
+ 'plugin:import/recommended',
+ 'plugin:import/typescript',
+ ],
+ settings: {
+ 'import/parsers': {
+ '@typescript-eslint/parser': ['.ts', '.tsx'],
+ },
+ 'import/resolver': {
+ typescript: true,
+ node: true,
+ },
+ },
rules: {
'no-console': ['error'],
'no-debugger': 'error',
@@ -22,6 +37,70 @@ module.exports = {
'jest/no-identical-title': 'error',
'jest/prefer-to-have-length': 'error',
'jest/valid-expect': 'error',
+ // 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': 'off',
+ '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': 'off',
+ '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', // TODO
},
overrides: [
// only for ts files
@@ -38,9 +117,11 @@ module.exports = {
'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',
},
parserOptions: {
- tsconfigRootDir: __dirname,
+ tsconfigRootDir: './',
project: ['./tsconfig.json'],
// this is to properly reference the referenced project database without requirement of compiling it
EXPERIMENTAL_useSourceOfProjectReferenceRedirect: true,
diff --git a/backend/jest.config.js b/backend/jest.config.js
index f2e2a556d..25dbe7659 100644
--- a/backend/jest.config.js
+++ b/backend/jest.config.js
@@ -1,4 +1,5 @@
/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
+// eslint-disable-next-line import/no-commonjs, import/unambiguous
module.exports = {
verbose: true,
preset: 'ts-jest',
diff --git a/backend/package.json b/backend/package.json
index 47636486f..4d49eef8a 100644
--- a/backend/package.json
+++ b/backend/package.json
@@ -12,7 +12,7 @@
"clean": "tsc --build --clean",
"start": "cross-env TZ=UTC TS_NODE_BASEURL=./build node -r tsconfig-paths/register build/src/index.js",
"dev": "cross-env TZ=UTC nodemon -w src --ext ts --exec ts-node -r tsconfig-paths/register src/index.ts",
- "lint": "eslint --max-warnings=0 --ext .js,.ts .",
+ "lint": "eslint --max-warnings=0 .",
"test": "cross-env TZ=UTC NODE_ENV=development jest --runInBand --forceExit --detectOpenHandles",
"seed": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/seeds/index.ts",
"klicktipp": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/util/klicktipp.ts",
@@ -29,6 +29,7 @@
"dotenv": "^10.0.0",
"email-templates": "^10.0.1",
"express": "^4.17.1",
+ "gradido-database": "file:../database",
"graphql": "^15.5.1",
"graphql-request": "5.0.0",
"i18n": "^0.15.1",
@@ -61,13 +62,15 @@
"eslint": "^7.29.0",
"eslint-config-prettier": "^8.3.0",
"eslint-config-standard": "^16.0.3",
- "eslint-plugin-import": "^2.23.4",
+ "eslint-import-resolver-typescript": "^3.5.3",
+ "eslint-plugin-import": "^2.27.5",
"eslint-plugin-jest": "^27.2.1",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-prettier": "^3.4.0",
"eslint-plugin-promise": "^5.1.0",
"eslint-plugin-type-graphql": "^1.0.0",
"faker": "^5.5.3",
+ "graphql-tag": "^2.12.6",
"jest": "^27.2.4",
"klicktipp-api": "^1.0.2",
"nodemon": "^2.0.7",
diff --git a/backend/src/apis/HttpRequest.ts b/backend/src/apis/HttpRequest.ts
index eff0c408a..d8de68bb8 100644
--- a/backend/src/apis/HttpRequest.ts
+++ b/backend/src/apis/HttpRequest.ts
@@ -2,8 +2,8 @@
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
import axios from 'axios'
-import { backendLogger as logger } from '@/server/logger'
import LogError from '@/server/LogError'
+import { backendLogger as logger } from '@/server/logger'
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export const apiPost = async (url: string, payload: unknown): Promise => {
diff --git a/backend/src/apis/KlicktippController.ts b/backend/src/apis/KlicktippController.ts
index a291bb945..309cf56ee 100644
--- a/backend/src/apis/KlicktippController.ts
+++ b/backend/src/apis/KlicktippController.ts
@@ -4,9 +4,11 @@
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
-import KlicktippConnector from 'klicktipp-api'
import CONFIG from '@/config'
+// eslint-disable-next-line import/no-relative-parent-imports
+import KlicktippConnector from 'klicktipp-api'
+
const klicktippConnector = new KlicktippConnector()
export const klicktippSignIn = async (
diff --git a/backend/src/auth/JWT.ts b/backend/src/auth/JWT.ts
index 3f9c052f5..93a6a8868 100644
--- a/backend/src/auth/JWT.ts
+++ b/backend/src/auth/JWT.ts
@@ -1,19 +1,21 @@
-import jwt from 'jsonwebtoken'
+import { verify, sign } from 'jsonwebtoken'
+
import CONFIG from '@/config/'
-import { CustomJwtPayload } from './CustomJwtPayload'
import LogError from '@/server/LogError'
+import { CustomJwtPayload } from './CustomJwtPayload'
+
export const decode = (token: string): CustomJwtPayload | null => {
if (!token) throw new LogError('401 Unauthorized')
try {
- return jwt.verify(token, CONFIG.JWT_SECRET)
+ return verify(token, CONFIG.JWT_SECRET)
} catch (err) {
return null
}
}
export const encode = (gradidoID: string): string => {
- const token = jwt.sign({ gradidoID }, CONFIG.JWT_SECRET, {
+ const token = sign({ gradidoID }, CONFIG.JWT_SECRET, {
expiresIn: CONFIG.JWT_EXPIRES_IN,
})
return token
diff --git a/backend/src/config/index.ts b/backend/src/config/index.ts
index 79e513a6c..e6c4e4c24 100644
--- a/backend/src/config/index.ts
+++ b/backend/src/config/index.ts
@@ -1,7 +1,8 @@
// ATTENTION: DO NOT PUT ANY SECRETS IN HERE (or the .env)
+import { Decimal } from 'decimal.js-light'
import dotenv from 'dotenv'
-import Decimal from 'decimal.js-light'
+
dotenv.config()
Decimal.set({
diff --git a/backend/src/emails/sendEmailTranslated.test.ts b/backend/src/emails/sendEmailTranslated.test.ts
index 73edb79f3..85074344a 100644
--- a/backend/src/emails/sendEmailTranslated.test.ts
+++ b/backend/src/emails/sendEmailTranslated.test.ts
@@ -1,8 +1,11 @@
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/unbound-method */
import { createTransport } from 'nodemailer'
+
import { logger, i18n } from '@test/testSetup'
+
import CONFIG from '@/config'
+
import { sendEmailTranslated } from './sendEmailTranslated'
CONFIG.EMAIL = false
diff --git a/backend/src/emails/sendEmailTranslated.ts b/backend/src/emails/sendEmailTranslated.ts
index d8ecd3d38..6d89cc257 100644
--- a/backend/src/emails/sendEmailTranslated.ts
+++ b/backend/src/emails/sendEmailTranslated.ts
@@ -1,11 +1,13 @@
/* eslint-disable @typescript-eslint/restrict-template-expressions */
-import CONFIG from '@/config'
-import { backendLogger as logger } from '@/server/logger'
import path from 'path'
-import { createTransport } from 'nodemailer'
+
import Email from 'email-templates'
import i18n from 'i18n'
+import { createTransport } from 'nodemailer'
+
+import CONFIG from '@/config'
import LogError from '@/server/LogError'
+import { backendLogger as logger } from '@/server/logger'
export const sendEmailTranslated = async (params: {
receiver: {
diff --git a/backend/src/emails/sendEmailVariants.test.ts b/backend/src/emails/sendEmailVariants.test.ts
index 21c10bdad..44d996fa8 100644
--- a/backend/src/emails/sendEmailVariants.test.ts
+++ b/backend/src/emails/sendEmailVariants.test.ts
@@ -3,10 +3,14 @@
/* eslint-disable @typescript-eslint/no-unsafe-return */
/* eslint-disable @typescript-eslint/no-unsafe-call */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
-import Decimal from 'decimal.js-light'
+import { Decimal } from 'decimal.js-light'
+
import { testEnvironment } from '@test/helpers'
import { logger, i18n as localization } from '@test/testSetup'
+
import CONFIG from '@/config'
+
+import { sendEmailTranslated } from './sendEmailTranslated'
import {
sendAddedContributionMessageEmail,
sendAccountActivationEmail,
@@ -18,7 +22,6 @@ import {
sendTransactionLinkRedeemedEmail,
sendTransactionReceivedEmail,
} from './sendEmailVariants'
-import { sendEmailTranslated } from './sendEmailTranslated'
let con: any
let testEnv: any
diff --git a/backend/src/emails/sendEmailVariants.ts b/backend/src/emails/sendEmailVariants.ts
index 4e3881829..b45e7fc67 100644
--- a/backend/src/emails/sendEmailVariants.ts
+++ b/backend/src/emails/sendEmailVariants.ts
@@ -1,6 +1,8 @@
-import Decimal from 'decimal.js-light'
+import { Decimal } from 'decimal.js-light'
+
import CONFIG from '@/config'
import { decimalSeparatorByLanguage } from '@/util/utilities'
+
import { sendEmailTranslated } from './sendEmailTranslated'
export const sendAddedContributionMessageEmail = (data: {
diff --git a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_CONFIRM.ts b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_CONFIRM.ts
index c85a7a12c..5843fbee9 100644
--- a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_CONFIRM.ts
+++ b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_CONFIRM.ts
@@ -1,7 +1,8 @@
-import Decimal from 'decimal.js-light'
-import { User as DbUser } from '@entity/User'
import { Contribution as DbContribution } from '@entity/Contribution'
import { Event as DbEvent } from '@entity/Event'
+import { User as DbUser } from '@entity/User'
+import { Decimal } from 'decimal.js-light'
+
import { Event, EventType } from './Event'
export const EVENT_ADMIN_CONTRIBUTION_CONFIRM = async (
diff --git a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_CREATE.ts b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_CREATE.ts
index a10ff1a35..f4ad049ca 100644
--- a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_CREATE.ts
+++ b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_CREATE.ts
@@ -1,7 +1,8 @@
-import Decimal from 'decimal.js-light'
-import { User as DbUser } from '@entity/User'
import { Contribution as DbContribution } from '@entity/Contribution'
import { Event as DbEvent } from '@entity/Event'
+import { User as DbUser } from '@entity/User'
+import { Decimal } from 'decimal.js-light'
+
import { Event, EventType } from './Event'
export const EVENT_ADMIN_CONTRIBUTION_CREATE = async (
diff --git a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_DELETE.ts b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_DELETE.ts
index d3dd5508e..399604e35 100644
--- a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_DELETE.ts
+++ b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_DELETE.ts
@@ -1,7 +1,8 @@
-import Decimal from 'decimal.js-light'
-import { User as DbUser } from '@entity/User'
import { Contribution as DbContribution } from '@entity/Contribution'
import { Event as DbEvent } from '@entity/Event'
+import { User as DbUser } from '@entity/User'
+import { Decimal } from 'decimal.js-light'
+
import { Event, EventType } from './Event'
export const EVENT_ADMIN_CONTRIBUTION_DELETE = async (
diff --git a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_DENY.ts b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_DENY.ts
index 5f1203766..332d3ab92 100644
--- a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_DENY.ts
+++ b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_DENY.ts
@@ -1,7 +1,8 @@
-import Decimal from 'decimal.js-light'
-import { User as DbUser } from '@entity/User'
import { Contribution as DbContribution } from '@entity/Contribution'
import { Event as DbEvent } from '@entity/Event'
+import { User as DbUser } from '@entity/User'
+import { Decimal } from 'decimal.js-light'
+
import { Event, EventType } from './Event'
export const EVENT_ADMIN_CONTRIBUTION_DENY = async (
diff --git a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_CREATE.ts b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_CREATE.ts
index 2ead791ed..4b06cd3ad 100644
--- a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_CREATE.ts
+++ b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_CREATE.ts
@@ -1,7 +1,8 @@
-import Decimal from 'decimal.js-light'
-import { User as DbUser } from '@entity/User'
import { ContributionLink as DbContributionLink } from '@entity/ContributionLink'
import { Event as DbEvent } from '@entity/Event'
+import { User as DbUser } from '@entity/User'
+import { Decimal } from 'decimal.js-light'
+
import { Event, EventType } from './Event'
export const EVENT_ADMIN_CONTRIBUTION_LINK_CREATE = async (
diff --git a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_DELETE.ts b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_DELETE.ts
index b5816e45d..c4cd99f57 100644
--- a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_DELETE.ts
+++ b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_DELETE.ts
@@ -1,6 +1,7 @@
-import { User as DbUser } from '@entity/User'
import { ContributionLink as DbContributionLink } from '@entity/ContributionLink'
import { Event as DbEvent } from '@entity/Event'
+import { User as DbUser } from '@entity/User'
+
import { Event, EventType } from './Event'
export const EVENT_ADMIN_CONTRIBUTION_LINK_DELETE = async (
diff --git a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_UPDATE.ts b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_UPDATE.ts
index 6824833b8..f8cd2d16f 100644
--- a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_UPDATE.ts
+++ b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_UPDATE.ts
@@ -1,7 +1,8 @@
-import Decimal from 'decimal.js-light'
-import { User as DbUser } from '@entity/User'
import { ContributionLink as DbContributionLink } from '@entity/ContributionLink'
import { Event as DbEvent } from '@entity/Event'
+import { User as DbUser } from '@entity/User'
+import { Decimal } from 'decimal.js-light'
+
import { Event, EventType } from './Event'
export const EVENT_ADMIN_CONTRIBUTION_LINK_UPDATE = async (
diff --git a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_MESSAGE_CREATE.ts b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_MESSAGE_CREATE.ts
index f07d38e98..a2385429d 100644
--- a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_MESSAGE_CREATE.ts
+++ b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_MESSAGE_CREATE.ts
@@ -1,7 +1,8 @@
-import { User as DbUser } from '@entity/User'
import { Contribution as DbContribution } from '@entity/Contribution'
import { ContributionMessage as DbContributionMessage } from '@entity/ContributionMessage'
import { Event as DbEvent } from '@entity/Event'
+import { User as DbUser } from '@entity/User'
+
import { Event, EventType } from './Event'
export const EVENT_ADMIN_CONTRIBUTION_MESSAGE_CREATE = async (
diff --git a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_UPDATE.ts b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_UPDATE.ts
index 60315249a..f2fcb7478 100644
--- a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_UPDATE.ts
+++ b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_UPDATE.ts
@@ -1,7 +1,8 @@
-import Decimal from 'decimal.js-light'
-import { User as DbUser } from '@entity/User'
import { Contribution as DbContribution } from '@entity/Contribution'
import { Event as DbEvent } from '@entity/Event'
+import { User as DbUser } from '@entity/User'
+import { Decimal } from 'decimal.js-light'
+
import { Event, EventType } from './Event'
export const EVENT_ADMIN_CONTRIBUTION_UPDATE = async (
diff --git a/backend/src/event/EVENT_ADMIN_USER_DELETE.ts b/backend/src/event/EVENT_ADMIN_USER_DELETE.ts
index bfd5be740..bfd3e2bcc 100644
--- a/backend/src/event/EVENT_ADMIN_USER_DELETE.ts
+++ b/backend/src/event/EVENT_ADMIN_USER_DELETE.ts
@@ -1,5 +1,6 @@
-import { User as DbUser } from '@entity/User'
import { Event as DbEvent } from '@entity/Event'
+import { User as DbUser } from '@entity/User'
+
import { Event, EventType } from './Event'
export const EVENT_ADMIN_USER_DELETE = async (user: DbUser, moderator: DbUser): Promise =>
diff --git a/backend/src/event/EVENT_ADMIN_USER_ROLE_SET.ts b/backend/src/event/EVENT_ADMIN_USER_ROLE_SET.ts
index 3be825ad4..7902f5318 100644
--- a/backend/src/event/EVENT_ADMIN_USER_ROLE_SET.ts
+++ b/backend/src/event/EVENT_ADMIN_USER_ROLE_SET.ts
@@ -1,5 +1,6 @@
-import { User as DbUser } from '@entity/User'
import { Event as DbEvent } from '@entity/Event'
+import { User as DbUser } from '@entity/User'
+
import { Event, EventType } from './Event'
export const EVENT_ADMIN_USER_ROLE_SET = async (
diff --git a/backend/src/event/EVENT_ADMIN_USER_UNDELETE.ts b/backend/src/event/EVENT_ADMIN_USER_UNDELETE.ts
index eb861dbf1..338a3a31d 100644
--- a/backend/src/event/EVENT_ADMIN_USER_UNDELETE.ts
+++ b/backend/src/event/EVENT_ADMIN_USER_UNDELETE.ts
@@ -1,5 +1,6 @@
-import { User as DbUser } from '@entity/User'
import { Event as DbEvent } from '@entity/Event'
+import { User as DbUser } from '@entity/User'
+
import { Event, EventType } from './Event'
export const EVENT_ADMIN_USER_UNDELETE = async (
diff --git a/backend/src/event/EVENT_CONTRIBUTION_CREATE.ts b/backend/src/event/EVENT_CONTRIBUTION_CREATE.ts
index 50cdbcd18..96e24ec61 100644
--- a/backend/src/event/EVENT_CONTRIBUTION_CREATE.ts
+++ b/backend/src/event/EVENT_CONTRIBUTION_CREATE.ts
@@ -1,7 +1,8 @@
-import Decimal from 'decimal.js-light'
-import { User as DbUser } from '@entity/User'
import { Contribution as DbContribution } from '@entity/Contribution'
import { Event as DbEvent } from '@entity/Event'
+import { User as DbUser } from '@entity/User'
+import { Decimal } from 'decimal.js-light'
+
import { Event, EventType } from './Event'
export const EVENT_CONTRIBUTION_CREATE = async (
diff --git a/backend/src/event/EVENT_CONTRIBUTION_DELETE.ts b/backend/src/event/EVENT_CONTRIBUTION_DELETE.ts
index eab04bf47..acf11bbb0 100644
--- a/backend/src/event/EVENT_CONTRIBUTION_DELETE.ts
+++ b/backend/src/event/EVENT_CONTRIBUTION_DELETE.ts
@@ -1,7 +1,8 @@
-import Decimal from 'decimal.js-light'
-import { User as DbUser } from '@entity/User'
import { Contribution as DbContribution } from '@entity/Contribution'
import { Event as DbEvent } from '@entity/Event'
+import { User as DbUser } from '@entity/User'
+import { Decimal } from 'decimal.js-light'
+
import { Event, EventType } from './Event'
export const EVENT_CONTRIBUTION_DELETE = async (
diff --git a/backend/src/event/EVENT_CONTRIBUTION_LINK_REDEEM.ts b/backend/src/event/EVENT_CONTRIBUTION_LINK_REDEEM.ts
index 395772ac9..1202aa387 100644
--- a/backend/src/event/EVENT_CONTRIBUTION_LINK_REDEEM.ts
+++ b/backend/src/event/EVENT_CONTRIBUTION_LINK_REDEEM.ts
@@ -1,9 +1,10 @@
-import Decimal from 'decimal.js-light'
-import { User as DbUser } from '@entity/User'
-import { Transaction as DbTransaction } from '@entity/Transaction'
import { Contribution as DbContribution } from '@entity/Contribution'
import { ContributionLink as DbContributionLink } from '@entity/ContributionLink'
import { Event as DbEvent } from '@entity/Event'
+import { Transaction as DbTransaction } from '@entity/Transaction'
+import { User as DbUser } from '@entity/User'
+import { Decimal } from 'decimal.js-light'
+
import { Event, EventType } from './Event'
export const EVENT_CONTRIBUTION_LINK_REDEEM = async (
diff --git a/backend/src/event/EVENT_CONTRIBUTION_MESSAGE_CREATE.ts b/backend/src/event/EVENT_CONTRIBUTION_MESSAGE_CREATE.ts
index b06685a6d..bfb7f742e 100644
--- a/backend/src/event/EVENT_CONTRIBUTION_MESSAGE_CREATE.ts
+++ b/backend/src/event/EVENT_CONTRIBUTION_MESSAGE_CREATE.ts
@@ -1,7 +1,8 @@
-import { User as DbUser } from '@entity/User'
import { Contribution as DbContribution } from '@entity/Contribution'
import { ContributionMessage as DbContributionMessage } from '@entity/ContributionMessage'
import { Event as DbEvent } from '@entity/Event'
+import { User as DbUser } from '@entity/User'
+
import { Event, EventType } from './Event'
export const EVENT_CONTRIBUTION_MESSAGE_CREATE = async (
diff --git a/backend/src/event/EVENT_CONTRIBUTION_UPDATE.ts b/backend/src/event/EVENT_CONTRIBUTION_UPDATE.ts
index 82f14edd6..3e3d82b67 100644
--- a/backend/src/event/EVENT_CONTRIBUTION_UPDATE.ts
+++ b/backend/src/event/EVENT_CONTRIBUTION_UPDATE.ts
@@ -1,7 +1,8 @@
-import Decimal from 'decimal.js-light'
-import { User as DbUser } from '@entity/User'
import { Contribution as DbContribution } from '@entity/Contribution'
import { Event as DbEvent } from '@entity/Event'
+import { User as DbUser } from '@entity/User'
+import { Decimal } from 'decimal.js-light'
+
import { Event, EventType } from './Event'
export const EVENT_CONTRIBUTION_UPDATE = async (
diff --git a/backend/src/event/EVENT_EMAIL_ACCOUNT_MULTIREGISTRATION.ts b/backend/src/event/EVENT_EMAIL_ACCOUNT_MULTIREGISTRATION.ts
index c16bbfac3..ae3a65ed2 100644
--- a/backend/src/event/EVENT_EMAIL_ACCOUNT_MULTIREGISTRATION.ts
+++ b/backend/src/event/EVENT_EMAIL_ACCOUNT_MULTIREGISTRATION.ts
@@ -1,5 +1,6 @@
-import { User as DbUser } from '@entity/User'
import { Event as DbEvent } from '@entity/Event'
+import { User as DbUser } from '@entity/User'
+
import { Event, EventType } from './Event'
export const EVENT_EMAIL_ACCOUNT_MULTIREGISTRATION = async (user: DbUser): Promise =>
diff --git a/backend/src/event/EVENT_EMAIL_ADMIN_CONFIRMATION.ts b/backend/src/event/EVENT_EMAIL_ADMIN_CONFIRMATION.ts
index ae10f9fba..6262d42a5 100644
--- a/backend/src/event/EVENT_EMAIL_ADMIN_CONFIRMATION.ts
+++ b/backend/src/event/EVENT_EMAIL_ADMIN_CONFIRMATION.ts
@@ -1,5 +1,6 @@
-import { User as DbUser } from '@entity/User'
import { Event as DbEvent } from '@entity/Event'
+import { User as DbUser } from '@entity/User'
+
import { Event, EventType } from './Event'
export const EVENT_EMAIL_ADMIN_CONFIRMATION = async (
diff --git a/backend/src/event/EVENT_EMAIL_CONFIRMATION.ts b/backend/src/event/EVENT_EMAIL_CONFIRMATION.ts
index 9d64207e0..beb774632 100644
--- a/backend/src/event/EVENT_EMAIL_CONFIRMATION.ts
+++ b/backend/src/event/EVENT_EMAIL_CONFIRMATION.ts
@@ -1,5 +1,6 @@
-import { User as DbUser } from '@entity/User'
import { Event as DbEvent } from '@entity/Event'
+import { User as DbUser } from '@entity/User'
+
import { Event, EventType } from './Event'
export const EVENT_EMAIL_CONFIRMATION = async (user: DbUser): Promise =>
diff --git a/backend/src/event/EVENT_EMAIL_FORGOT_PASSWORD.ts b/backend/src/event/EVENT_EMAIL_FORGOT_PASSWORD.ts
index f7e328369..a7d60e60f 100644
--- a/backend/src/event/EVENT_EMAIL_FORGOT_PASSWORD.ts
+++ b/backend/src/event/EVENT_EMAIL_FORGOT_PASSWORD.ts
@@ -1,5 +1,6 @@
-import { User as DbUser } from '@entity/User'
import { Event as DbEvent } from '@entity/Event'
+import { User as DbUser } from '@entity/User'
+
import { Event, EventType } from './Event'
export const EVENT_EMAIL_FORGOT_PASSWORD = async (user: DbUser): Promise =>
diff --git a/backend/src/event/EVENT_TRANSACTION_LINK_CREATE.ts b/backend/src/event/EVENT_TRANSACTION_LINK_CREATE.ts
index 36fdb3ff0..64bc2f6e5 100644
--- a/backend/src/event/EVENT_TRANSACTION_LINK_CREATE.ts
+++ b/backend/src/event/EVENT_TRANSACTION_LINK_CREATE.ts
@@ -1,7 +1,8 @@
-import Decimal from 'decimal.js-light'
-import { User as DbUser } from '@entity/User'
-import { TransactionLink as DbTransactionLink } from '@entity/TransactionLink'
import { Event as DbEvent } from '@entity/Event'
+import { TransactionLink as DbTransactionLink } from '@entity/TransactionLink'
+import { User as DbUser } from '@entity/User'
+import { Decimal } from 'decimal.js-light'
+
import { Event, EventType } from './Event'
export const EVENT_TRANSACTION_LINK_CREATE = async (
diff --git a/backend/src/event/EVENT_TRANSACTION_LINK_DELETE.ts b/backend/src/event/EVENT_TRANSACTION_LINK_DELETE.ts
index d15c786a8..7a6ee9576 100644
--- a/backend/src/event/EVENT_TRANSACTION_LINK_DELETE.ts
+++ b/backend/src/event/EVENT_TRANSACTION_LINK_DELETE.ts
@@ -1,6 +1,7 @@
-import { User as DbUser } from '@entity/User'
-import { TransactionLink as DbTransactionLink } from '@entity/TransactionLink'
import { Event as DbEvent } from '@entity/Event'
+import { TransactionLink as DbTransactionLink } from '@entity/TransactionLink'
+import { User as DbUser } from '@entity/User'
+
import { Event, EventType } from './Event'
export const EVENT_TRANSACTION_LINK_DELETE = async (
diff --git a/backend/src/event/EVENT_TRANSACTION_LINK_REDEEM.ts b/backend/src/event/EVENT_TRANSACTION_LINK_REDEEM.ts
index 58307a4e1..576811d25 100644
--- a/backend/src/event/EVENT_TRANSACTION_LINK_REDEEM.ts
+++ b/backend/src/event/EVENT_TRANSACTION_LINK_REDEEM.ts
@@ -1,7 +1,8 @@
-import Decimal from 'decimal.js-light'
-import { User as DbUser } from '@entity/User'
-import { TransactionLink as DbTransactionLink } from '@entity/TransactionLink'
import { Event as DbEvent } from '@entity/Event'
+import { TransactionLink as DbTransactionLink } from '@entity/TransactionLink'
+import { User as DbUser } from '@entity/User'
+import { Decimal } from 'decimal.js-light'
+
import { Event, EventType } from './Event'
export const EVENT_TRANSACTION_LINK_REDEEM = async (
diff --git a/backend/src/event/EVENT_TRANSACTION_RECEIVE.ts b/backend/src/event/EVENT_TRANSACTION_RECEIVE.ts
index acb2f5881..22a71bc25 100644
--- a/backend/src/event/EVENT_TRANSACTION_RECEIVE.ts
+++ b/backend/src/event/EVENT_TRANSACTION_RECEIVE.ts
@@ -1,7 +1,8 @@
-import Decimal from 'decimal.js-light'
-import { User as DbUser } from '@entity/User'
-import { Transaction as DbTransaction } from '@entity/Transaction'
import { Event as DbEvent } from '@entity/Event'
+import { Transaction as DbTransaction } from '@entity/Transaction'
+import { User as DbUser } from '@entity/User'
+import { Decimal } from 'decimal.js-light'
+
import { Event, EventType } from './Event'
export const EVENT_TRANSACTION_RECEIVE = async (
diff --git a/backend/src/event/EVENT_TRANSACTION_SEND.ts b/backend/src/event/EVENT_TRANSACTION_SEND.ts
index a342cb0aa..1327d739d 100644
--- a/backend/src/event/EVENT_TRANSACTION_SEND.ts
+++ b/backend/src/event/EVENT_TRANSACTION_SEND.ts
@@ -1,7 +1,8 @@
-import Decimal from 'decimal.js-light'
-import { User as DbUser } from '@entity/User'
-import { Transaction as DbTransaction } from '@entity/Transaction'
import { Event as DbEvent } from '@entity/Event'
+import { Transaction as DbTransaction } from '@entity/Transaction'
+import { User as DbUser } from '@entity/User'
+import { Decimal } from 'decimal.js-light'
+
import { Event, EventType } from './Event'
export const EVENT_TRANSACTION_SEND = async (
diff --git a/backend/src/event/EVENT_USER_ACTIVATE_ACCOUNT.ts b/backend/src/event/EVENT_USER_ACTIVATE_ACCOUNT.ts
index 2e224d550..0213f122f 100644
--- a/backend/src/event/EVENT_USER_ACTIVATE_ACCOUNT.ts
+++ b/backend/src/event/EVENT_USER_ACTIVATE_ACCOUNT.ts
@@ -1,5 +1,6 @@
-import { User as DbUser } from '@entity/User'
import { Event as DbEvent } from '@entity/Event'
+import { User as DbUser } from '@entity/User'
+
import { Event, EventType } from './Event'
export const EVENT_USER_ACTIVATE_ACCOUNT = async (user: DbUser): Promise =>
diff --git a/backend/src/event/EVENT_USER_INFO_UPDATE.ts b/backend/src/event/EVENT_USER_INFO_UPDATE.ts
index 681ecd473..28b3fe237 100644
--- a/backend/src/event/EVENT_USER_INFO_UPDATE.ts
+++ b/backend/src/event/EVENT_USER_INFO_UPDATE.ts
@@ -1,5 +1,6 @@
-import { User as DbUser } from '@entity/User'
import { Event as DbEvent } from '@entity/Event'
+import { User as DbUser } from '@entity/User'
+
import { Event, EventType } from './Event'
export const EVENT_USER_INFO_UPDATE = async (user: DbUser): Promise =>
diff --git a/backend/src/event/EVENT_USER_LOGIN.ts b/backend/src/event/EVENT_USER_LOGIN.ts
index 351ec5a95..64d43b264 100644
--- a/backend/src/event/EVENT_USER_LOGIN.ts
+++ b/backend/src/event/EVENT_USER_LOGIN.ts
@@ -1,5 +1,6 @@
-import { User as DbUser } from '@entity/User'
import { Event as DbEvent } from '@entity/Event'
+import { User as DbUser } from '@entity/User'
+
import { Event, EventType } from './Event'
export const EVENT_USER_LOGIN = async (user: DbUser): Promise =>
diff --git a/backend/src/event/EVENT_USER_LOGOUT.ts b/backend/src/event/EVENT_USER_LOGOUT.ts
index 4f5650fc6..4b00c9839 100644
--- a/backend/src/event/EVENT_USER_LOGOUT.ts
+++ b/backend/src/event/EVENT_USER_LOGOUT.ts
@@ -1,5 +1,6 @@
-import { User as DbUser } from '@entity/User'
import { Event as DbEvent } from '@entity/Event'
+import { User as DbUser } from '@entity/User'
+
import { Event, EventType } from './Event'
export const EVENT_USER_LOGOUT = async (user: DbUser): Promise =>
diff --git a/backend/src/event/EVENT_USER_REGISTER.ts b/backend/src/event/EVENT_USER_REGISTER.ts
index cdb8b22e2..2d31299f1 100644
--- a/backend/src/event/EVENT_USER_REGISTER.ts
+++ b/backend/src/event/EVENT_USER_REGISTER.ts
@@ -1,5 +1,6 @@
-import { User as DbUser } from '@entity/User'
import { Event as DbEvent } from '@entity/Event'
+import { User as DbUser } from '@entity/User'
+
import { Event, EventType } from './Event'
export const EVENT_USER_REGISTER = async (user: DbUser): Promise =>
diff --git a/backend/src/event/Event.ts b/backend/src/event/Event.ts
index dc2db17eb..d3f515d51 100644
--- a/backend/src/event/Event.ts
+++ b/backend/src/event/Event.ts
@@ -1,12 +1,13 @@
+import { Contribution as DbContribution } from '@entity/Contribution'
+import { ContributionLink as DbContributionLink } from '@entity/ContributionLink'
+import { ContributionMessage as DbContributionMessage } from '@entity/ContributionMessage'
import { Event as DbEvent } from '@entity/Event'
-import { User as DbUser } from '@entity/User'
import { Transaction as DbTransaction } from '@entity/Transaction'
import { TransactionLink as DbTransactionLink } from '@entity/TransactionLink'
-import { Contribution as DbContribution } from '@entity/Contribution'
-import { ContributionMessage as DbContributionMessage } from '@entity/ContributionMessage'
-import { ContributionLink as DbContributionLink } from '@entity/ContributionLink'
-import Decimal from 'decimal.js-light'
-import { EventType } from './Event'
+import { User as DbUser } from '@entity/User'
+import { Decimal } from 'decimal.js-light'
+
+import { EventType } from './EventType'
export const Event = (
type: EventType,
@@ -34,7 +35,7 @@ export const Event = (
return event
}
-export { EventType } from './EventType'
+export { EventType }
export { EVENT_ADMIN_CONTRIBUTION_CONFIRM } from './EVENT_ADMIN_CONTRIBUTION_CONFIRM'
export { EVENT_ADMIN_CONTRIBUTION_CREATE } from './EVENT_ADMIN_CONTRIBUTION_CREATE'
diff --git a/backend/src/federation/client/1_0/FederationClient.ts b/backend/src/federation/client/1_0/FederationClient.ts
index 1e676a1a7..c4063e4c5 100644
--- a/backend/src/federation/client/1_0/FederationClient.ts
+++ b/backend/src/federation/client/1_0/FederationClient.ts
@@ -1,11 +1,12 @@
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/no-unsafe-return */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
-import { gql } from 'graphql-request'
-import { backendLogger as logger } from '@/server/logger'
import { Community as DbCommunity } from '@entity/Community'
-import { GraphQLGetClient } from '../GraphQLGetClient'
+import { gql } from 'graphql-request'
+
+import { GraphQLGetClient } from '@/federation/client/GraphQLGetClient'
import LogError from '@/server/LogError'
+import { backendLogger as logger } from '@/server/logger'
export async function requestGetPublicKey(dbCom: DbCommunity): Promise {
let endpoint = dbCom.endPoint.endsWith('/') ? dbCom.endPoint : dbCom.endPoint + '/'
diff --git a/backend/src/federation/client/1_1/FederationClient.ts b/backend/src/federation/client/1_1/FederationClient.ts
index 4b3e8f487..b29960407 100644
--- a/backend/src/federation/client/1_1/FederationClient.ts
+++ b/backend/src/federation/client/1_1/FederationClient.ts
@@ -1,11 +1,12 @@
/* eslint-disable @typescript-eslint/no-unsafe-return */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
-import { gql } from 'graphql-request'
-import { backendLogger as logger } from '@/server/logger'
import { Community as DbCommunity } from '@entity/Community'
-import { GraphQLGetClient } from '../GraphQLGetClient'
+import { gql } from 'graphql-request'
+
+import { GraphQLGetClient } from '@/federation/client/GraphQLGetClient'
import LogError from '@/server/LogError'
+import { backendLogger as logger } from '@/server/logger'
export async function requestGetPublicKey(dbCom: DbCommunity): Promise {
let endpoint = dbCom.endPoint.endsWith('/') ? dbCom.endPoint : dbCom.endPoint + '/'
diff --git a/backend/src/federation/validateCommunities.test.ts b/backend/src/federation/validateCommunities.test.ts
index 599564ea6..d90664b63 100644
--- a/backend/src/federation/validateCommunities.test.ts
+++ b/backend/src/federation/validateCommunities.test.ts
@@ -5,9 +5,11 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
-import { logger } from '@test/testSetup'
import { Community as DbCommunity } from '@entity/Community'
+
import { testEnvironment, cleanDB } from '@test/helpers'
+import { logger } from '@test/testSetup'
+
import { validateCommunities } from './validateCommunities'
let con: any
diff --git a/backend/src/federation/validateCommunities.ts b/backend/src/federation/validateCommunities.ts
index dfd46a3e9..fb6bda673 100644
--- a/backend/src/federation/validateCommunities.ts
+++ b/backend/src/federation/validateCommunities.ts
@@ -1,12 +1,14 @@
-import { Community as DbCommunity } from '@entity/Community'
import { IsNull } from '@dbTools/typeorm'
+import { Community as DbCommunity } from '@entity/Community'
+
+import LogError from '@/server/LogError'
+import { backendLogger as logger } from '@/server/logger'
+
// eslint-disable-next-line camelcase
import { requestGetPublicKey as v1_0_requestGetPublicKey } from './client/1_0/FederationClient'
// eslint-disable-next-line camelcase
import { requestGetPublicKey as v1_1_requestGetPublicKey } from './client/1_1/FederationClient'
-import { backendLogger as logger } from '@/server/logger'
import { ApiVersionType } from './enum/apiVersionType'
-import LogError from '@/server/LogError'
export function startValidateCommunities(timerInterval: number): void {
logger.info(
diff --git a/backend/src/graphql/arg/AdminCreateContributionArgs.ts b/backend/src/graphql/arg/AdminCreateContributionArgs.ts
index b09edea32..65aeb82e5 100644
--- a/backend/src/graphql/arg/AdminCreateContributionArgs.ts
+++ b/backend/src/graphql/arg/AdminCreateContributionArgs.ts
@@ -1,5 +1,5 @@
+import { Decimal } from 'decimal.js-light'
import { ArgsType, Field, InputType } from 'type-graphql'
-import Decimal from 'decimal.js-light'
@InputType()
@ArgsType()
diff --git a/backend/src/graphql/arg/AdminUpdateContributionArgs.ts b/backend/src/graphql/arg/AdminUpdateContributionArgs.ts
index 392365b38..6a8f00dc2 100644
--- a/backend/src/graphql/arg/AdminUpdateContributionArgs.ts
+++ b/backend/src/graphql/arg/AdminUpdateContributionArgs.ts
@@ -1,14 +1,11 @@
+import { Decimal } from 'decimal.js-light'
import { ArgsType, Field, Int } from 'type-graphql'
-import Decimal from 'decimal.js-light'
@ArgsType()
export default class AdminUpdateContributionArgs {
@Field(() => Int)
id: number
- @Field(() => String)
- email: string
-
@Field(() => Decimal)
amount: Decimal
diff --git a/backend/src/graphql/arg/ContributionArgs.ts b/backend/src/graphql/arg/ContributionArgs.ts
index 2fa1c5ced..cc8aea41e 100644
--- a/backend/src/graphql/arg/ContributionArgs.ts
+++ b/backend/src/graphql/arg/ContributionArgs.ts
@@ -1,5 +1,5 @@
+import { Decimal } from 'decimal.js-light'
import { ArgsType, Field, InputType } from 'type-graphql'
-import Decimal from 'decimal.js-light'
@InputType()
@ArgsType()
diff --git a/backend/src/graphql/arg/ContributionLinkArgs.ts b/backend/src/graphql/arg/ContributionLinkArgs.ts
index cf0465501..d28a7808f 100644
--- a/backend/src/graphql/arg/ContributionLinkArgs.ts
+++ b/backend/src/graphql/arg/ContributionLinkArgs.ts
@@ -1,5 +1,5 @@
+import { Decimal } from 'decimal.js-light'
import { ArgsType, Field, Int } from 'type-graphql'
-import Decimal from 'decimal.js-light'
@ArgsType()
export default class ContributionLinkArgs {
diff --git a/backend/src/graphql/arg/Paginated.ts b/backend/src/graphql/arg/Paginated.ts
index 290dba337..e605c49d4 100644
--- a/backend/src/graphql/arg/Paginated.ts
+++ b/backend/src/graphql/arg/Paginated.ts
@@ -1,5 +1,6 @@
/* eslint-disable type-graphql/invalid-nullable-input-type */
import { ArgsType, Field, Int } from 'type-graphql'
+
import { Order } from '@enum/Order'
@ArgsType()
diff --git a/backend/src/graphql/arg/SearchUsersArgs.ts b/backend/src/graphql/arg/SearchUsersArgs.ts
index 39996efca..de7275f63 100644
--- a/backend/src/graphql/arg/SearchUsersArgs.ts
+++ b/backend/src/graphql/arg/SearchUsersArgs.ts
@@ -1,4 +1,5 @@
import { ArgsType, Field, Int } from 'type-graphql'
+
import SearchUsersFilters from '@arg/SearchUsersFilters'
@ArgsType()
diff --git a/backend/src/graphql/arg/TransactionLinkArgs.ts b/backend/src/graphql/arg/TransactionLinkArgs.ts
index 553efcfbe..19720e321 100644
--- a/backend/src/graphql/arg/TransactionLinkArgs.ts
+++ b/backend/src/graphql/arg/TransactionLinkArgs.ts
@@ -1,5 +1,5 @@
+import { Decimal } from 'decimal.js-light'
import { ArgsType, Field } from 'type-graphql'
-import Decimal from 'decimal.js-light'
@ArgsType()
export default class TransactionLinkArgs {
diff --git a/backend/src/graphql/arg/TransactionSendArgs.ts b/backend/src/graphql/arg/TransactionSendArgs.ts
index e75921383..d91cecbcd 100644
--- a/backend/src/graphql/arg/TransactionSendArgs.ts
+++ b/backend/src/graphql/arg/TransactionSendArgs.ts
@@ -1,5 +1,5 @@
+import { Decimal } from 'decimal.js-light'
import { ArgsType, Field } from 'type-graphql'
-import Decimal from 'decimal.js-light'
@ArgsType()
export default class TransactionSendArgs {
diff --git a/backend/src/graphql/directive/isAuthorized.ts b/backend/src/graphql/directive/isAuthorized.ts
index 709f470d4..a018fd230 100644
--- a/backend/src/graphql/directive/isAuthorized.ts
+++ b/backend/src/graphql/directive/isAuthorized.ts
@@ -2,13 +2,13 @@
/* eslint-disable @typescript-eslint/no-unsafe-call */
/* eslint-disable @typescript-eslint/no-explicit-any */
+import { User } from '@entity/User'
import { AuthChecker } from 'type-graphql'
-import { decode, encode } from '@/auth/JWT'
-import { ROLE_UNAUTHORIZED, ROLE_USER, ROLE_ADMIN } from '@/auth/ROLES'
-import { RIGHTS } from '@/auth/RIGHTS'
import { INALIENABLE_RIGHTS } from '@/auth/INALIENABLE_RIGHTS'
-import { User } from '@entity/User'
+import { decode, encode } from '@/auth/JWT'
+import { RIGHTS } from '@/auth/RIGHTS'
+import { ROLE_UNAUTHORIZED, ROLE_USER, ROLE_ADMIN } from '@/auth/ROLES'
import LogError from '@/server/LogError'
const isAuthorized: AuthChecker = async ({ context }, rights) => {
diff --git a/backend/src/graphql/model/AdminUpdateContribution.ts b/backend/src/graphql/model/AdminUpdateContribution.ts
index e824975a4..b7c3df6bd 100644
--- a/backend/src/graphql/model/AdminUpdateContribution.ts
+++ b/backend/src/graphql/model/AdminUpdateContribution.ts
@@ -1,5 +1,5 @@
+import { Decimal } from 'decimal.js-light'
import { ObjectType, Field } from 'type-graphql'
-import Decimal from 'decimal.js-light'
@ObjectType()
export class AdminUpdateContribution {
diff --git a/backend/src/graphql/model/Balance.ts b/backend/src/graphql/model/Balance.ts
index 9b54f6987..162ccc3c0 100644
--- a/backend/src/graphql/model/Balance.ts
+++ b/backend/src/graphql/model/Balance.ts
@@ -1,5 +1,5 @@
+import { Decimal } from 'decimal.js-light'
import { ObjectType, Field, Int, Float } from 'type-graphql'
-import Decimal from 'decimal.js-light'
@ObjectType()
export class Balance {
diff --git a/backend/src/graphql/model/Community.ts b/backend/src/graphql/model/Community.ts
index ec91ad36f..22b2b1fc6 100644
--- a/backend/src/graphql/model/Community.ts
+++ b/backend/src/graphql/model/Community.ts
@@ -1,5 +1,5 @@
-import { ObjectType, Field, Int } from 'type-graphql'
import { Community as DbCommunity } from '@entity/Community'
+import { ObjectType, Field, Int } from 'type-graphql'
@ObjectType()
export class Community {
diff --git a/backend/src/graphql/model/CommunityStatistics.ts b/backend/src/graphql/model/CommunityStatistics.ts
index 4864b630d..775ad183b 100644
--- a/backend/src/graphql/model/CommunityStatistics.ts
+++ b/backend/src/graphql/model/CommunityStatistics.ts
@@ -1,5 +1,5 @@
+import { Decimal } from 'decimal.js-light'
import { ObjectType, Field, Int } from 'type-graphql'
-import Decimal from 'decimal.js-light'
@ObjectType()
export class DynamicStatisticsFields {
diff --git a/backend/src/graphql/model/Contribution.ts b/backend/src/graphql/model/Contribution.ts
index a683534af..b5db21b16 100644
--- a/backend/src/graphql/model/Contribution.ts
+++ b/backend/src/graphql/model/Contribution.ts
@@ -1,7 +1,7 @@
-import { ObjectType, Field, Int } from 'type-graphql'
-import Decimal from 'decimal.js-light'
import { Contribution as dbContribution } from '@entity/Contribution'
import { User } from '@entity/User'
+import { Decimal } from 'decimal.js-light'
+import { ObjectType, Field, Int } from 'type-graphql'
@ObjectType()
export class Contribution {
@@ -21,6 +21,8 @@ export class Contribution {
this.deniedBy = contribution.deniedBy
this.deletedAt = contribution.deletedAt
this.deletedBy = contribution.deletedBy
+ this.moderatorId = contribution.moderatorId
+ this.userId = contribution.userId
}
@Field(() => Int)
@@ -67,6 +69,12 @@ export class Contribution {
@Field(() => String)
state: string
+
+ @Field(() => Int, { nullable: true })
+ moderatorId: number | null
+
+ @Field(() => Int, { nullable: true })
+ userId: number | null
}
@ObjectType()
diff --git a/backend/src/graphql/model/ContributionLink.ts b/backend/src/graphql/model/ContributionLink.ts
index 7a06f8dff..e47ffc6ed 100644
--- a/backend/src/graphql/model/ContributionLink.ts
+++ b/backend/src/graphql/model/ContributionLink.ts
@@ -1,6 +1,7 @@
-import { ObjectType, Field, Int } from 'type-graphql'
-import Decimal from 'decimal.js-light'
import { ContributionLink as dbContributionLink } from '@entity/ContributionLink'
+import { Decimal } from 'decimal.js-light'
+import { ObjectType, Field, Int } from 'type-graphql'
+
import CONFIG from '@/config'
@ObjectType()
diff --git a/backend/src/graphql/model/ContributionLinkList.ts b/backend/src/graphql/model/ContributionLinkList.ts
index d2c347b27..c35f6fae6 100644
--- a/backend/src/graphql/model/ContributionLinkList.ts
+++ b/backend/src/graphql/model/ContributionLinkList.ts
@@ -1,4 +1,5 @@
import { ObjectType, Field, Int } from 'type-graphql'
+
import { ContributionLink } from '@model/ContributionLink'
@ObjectType()
diff --git a/backend/src/graphql/model/ContributionMessage.ts b/backend/src/graphql/model/ContributionMessage.ts
index 6bd6a4715..6f70d5024 100644
--- a/backend/src/graphql/model/ContributionMessage.ts
+++ b/backend/src/graphql/model/ContributionMessage.ts
@@ -1,6 +1,6 @@
-import { Field, Int, ObjectType } from 'type-graphql'
import { ContributionMessage as DbContributionMessage } from '@entity/ContributionMessage'
import { User } from '@entity/User'
+import { Field, Int, ObjectType } from 'type-graphql'
@ObjectType()
export class ContributionMessage {
diff --git a/backend/src/graphql/model/Decay.ts b/backend/src/graphql/model/Decay.ts
index f59a21249..0b710c234 100644
--- a/backend/src/graphql/model/Decay.ts
+++ b/backend/src/graphql/model/Decay.ts
@@ -1,5 +1,5 @@
+import { Decimal } from 'decimal.js-light'
import { ObjectType, Field, Int } from 'type-graphql'
-import Decimal from 'decimal.js-light'
interface DecayInterface {
balance: Decimal
diff --git a/backend/src/graphql/model/GdtEntry.ts b/backend/src/graphql/model/GdtEntry.ts
index bbf1cceef..81dda0ca7 100644
--- a/backend/src/graphql/model/GdtEntry.ts
+++ b/backend/src/graphql/model/GdtEntry.ts
@@ -3,6 +3,7 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import { ObjectType, Field, Float, Int } from 'type-graphql'
+
import { GdtEntryType } from '@enum/GdtEntryType'
@ObjectType()
diff --git a/backend/src/graphql/model/GdtEntryList.ts b/backend/src/graphql/model/GdtEntryList.ts
index 7c4bffb5a..06f77f532 100644
--- a/backend/src/graphql/model/GdtEntryList.ts
+++ b/backend/src/graphql/model/GdtEntryList.ts
@@ -3,9 +3,10 @@
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
-import { GdtEntry } from './GdtEntry'
import { ObjectType, Field, Int, Float } from 'type-graphql'
+import { GdtEntry } from './GdtEntry'
+
@ObjectType()
export class GdtEntryList {
constructor(json: any) {
diff --git a/backend/src/graphql/model/OpenCreation.ts b/backend/src/graphql/model/OpenCreation.ts
index 9ef08fd4a..46ee8117f 100644
--- a/backend/src/graphql/model/OpenCreation.ts
+++ b/backend/src/graphql/model/OpenCreation.ts
@@ -1,5 +1,5 @@
+import { Decimal } from 'decimal.js-light'
import { ObjectType, Field, Int } from 'type-graphql'
-import Decimal from 'decimal.js-light'
@ObjectType()
export class OpenCreation {
diff --git a/backend/src/graphql/model/Transaction.ts b/backend/src/graphql/model/Transaction.ts
index 96b80f9a0..1b857391b 100644
--- a/backend/src/graphql/model/Transaction.ts
+++ b/backend/src/graphql/model/Transaction.ts
@@ -1,8 +1,10 @@
-import { ObjectType, Field, Int } from 'type-graphql'
-import { Decay } from './Decay'
import { Transaction as dbTransaction } from '@entity/Transaction'
-import Decimal from 'decimal.js-light'
+import { Decimal } from 'decimal.js-light'
+import { ObjectType, Field, Int } from 'type-graphql'
+
import { TransactionTypeId } from '@enum/TransactionTypeId'
+
+import { Decay } from './Decay'
import { User } from './User'
@ObjectType()
diff --git a/backend/src/graphql/model/TransactionLink.ts b/backend/src/graphql/model/TransactionLink.ts
index b0a8ab184..7356e97c6 100644
--- a/backend/src/graphql/model/TransactionLink.ts
+++ b/backend/src/graphql/model/TransactionLink.ts
@@ -1,9 +1,11 @@
-import { ObjectType, Field, Int } from 'type-graphql'
-import Decimal from 'decimal.js-light'
import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink'
-import { User } from './User'
+import { Decimal } from 'decimal.js-light'
+import { ObjectType, Field, Int } from 'type-graphql'
+
import CONFIG from '@/config'
+import { User } from './User'
+
@ObjectType()
export class TransactionLink {
constructor(transactionLink: dbTransactionLink, user: User, redeemedBy: User | null = null) {
diff --git a/backend/src/graphql/model/TransactionList.ts b/backend/src/graphql/model/TransactionList.ts
index 888c30dc7..77f9f6481 100644
--- a/backend/src/graphql/model/TransactionList.ts
+++ b/backend/src/graphql/model/TransactionList.ts
@@ -1,6 +1,7 @@
import { ObjectType, Field } from 'type-graphql'
-import { Transaction } from './Transaction'
+
import { Balance } from './Balance'
+import { Transaction } from './Transaction'
@ObjectType()
export class TransactionList {
diff --git a/backend/src/graphql/model/UnconfirmedContribution.ts b/backend/src/graphql/model/UnconfirmedContribution.ts
index 75112ecf5..dece05781 100644
--- a/backend/src/graphql/model/UnconfirmedContribution.ts
+++ b/backend/src/graphql/model/UnconfirmedContribution.ts
@@ -1,7 +1,7 @@
-import { ObjectType, Field, Int } from 'type-graphql'
-import Decimal from 'decimal.js-light'
import { Contribution } from '@entity/Contribution'
import { User } from '@entity/User'
+import { Decimal } from 'decimal.js-light'
+import { ObjectType, Field, Int } from 'type-graphql'
@ObjectType()
export class UnconfirmedContribution {
diff --git a/backend/src/graphql/model/User.ts b/backend/src/graphql/model/User.ts
index aeb764941..c705ba912 100644
--- a/backend/src/graphql/model/User.ts
+++ b/backend/src/graphql/model/User.ts
@@ -1,6 +1,7 @@
-import { ObjectType, Field, Int } from 'type-graphql'
-import { KlickTipp } from './KlickTipp'
import { User as dbUser } from '@entity/User'
+import { ObjectType, Field, Int } from 'type-graphql'
+
+import { KlickTipp } from './KlickTipp'
import { UserContact } from './UserContact'
@ObjectType()
diff --git a/backend/src/graphql/model/UserAdmin.ts b/backend/src/graphql/model/UserAdmin.ts
index e7330471b..3e7210874 100644
--- a/backend/src/graphql/model/UserAdmin.ts
+++ b/backend/src/graphql/model/UserAdmin.ts
@@ -1,6 +1,6 @@
-import { ObjectType, Field, Int } from 'type-graphql'
-import Decimal from 'decimal.js-light'
import { User } from '@entity/User'
+import { Decimal } from 'decimal.js-light'
+import { ObjectType, Field, Int } from 'type-graphql'
@ObjectType()
export class UserAdmin {
diff --git a/backend/src/graphql/model/UserContact.ts b/backend/src/graphql/model/UserContact.ts
index bb31d0745..4a6ed47b6 100644
--- a/backend/src/graphql/model/UserContact.ts
+++ b/backend/src/graphql/model/UserContact.ts
@@ -1,5 +1,5 @@
-import { ObjectType, Field, Int } from 'type-graphql'
import { UserContact as dbUserContact } from '@entity/UserContact'
+import { ObjectType, Field, Int } from 'type-graphql'
@ObjectType()
export class UserContact {
diff --git a/backend/src/graphql/resolver/BalanceResolver.ts b/backend/src/graphql/resolver/BalanceResolver.ts
index 18aed5ae6..deedb9dff 100644
--- a/backend/src/graphql/resolver/BalanceResolver.ts
+++ b/backend/src/graphql/resolver/BalanceResolver.ts
@@ -1,21 +1,19 @@
/* eslint-disable @typescript-eslint/restrict-template-expressions */
-import Decimal from 'decimal.js-light'
-import { Resolver, Query, Ctx, Authorized } from 'type-graphql'
import { getCustomRepository } from '@dbTools/typeorm'
-
import { Transaction as dbTransaction } from '@entity/Transaction'
import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink'
-
-import { TransactionLinkRepository } from '@repository/TransactionLink'
+import { Decimal } from 'decimal.js-light'
+import { Resolver, Query, Ctx, Authorized } from 'type-graphql'
import { Balance } from '@model/Balance'
+import { TransactionLinkRepository } from '@repository/TransactionLink'
-import { backendLogger as logger } from '@/server/logger'
-import { Context, getUser } from '@/server/context'
-import { calculateDecay } from '@/util/decay'
import { RIGHTS } from '@/auth/RIGHTS'
-import { GdtResolver } from './GdtResolver'
+import { Context, getUser } from '@/server/context'
+import { backendLogger as logger } from '@/server/logger'
+import { calculateDecay } from '@/util/decay'
+import { GdtResolver } from './GdtResolver'
import { getLastTransaction } from './util/getLastTransaction'
@Resolver()
diff --git a/backend/src/graphql/resolver/CommunityResolver.test.ts b/backend/src/graphql/resolver/CommunityResolver.test.ts
index 1e8f6a00f..5b4b26cad 100644
--- a/backend/src/graphql/resolver/CommunityResolver.test.ts
+++ b/backend/src/graphql/resolver/CommunityResolver.test.ts
@@ -5,10 +5,12 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
-import { getCommunities } from '@/seeds/graphql/queries'
import { Community as DbCommunity } from '@entity/Community'
+
import { testEnvironment } from '@test/helpers'
+import { getCommunities } from '@/seeds/graphql/queries'
+
let query: any
// to do: We need a setup for the tests that closes the connection
diff --git a/backend/src/graphql/resolver/CommunityResolver.ts b/backend/src/graphql/resolver/CommunityResolver.ts
index 1292fa55f..86e55ad1f 100644
--- a/backend/src/graphql/resolver/CommunityResolver.ts
+++ b/backend/src/graphql/resolver/CommunityResolver.ts
@@ -1,7 +1,7 @@
+import { Community as DbCommunity } from '@entity/Community'
import { Resolver, Query, Authorized } from 'type-graphql'
import { Community } from '@model/Community'
-import { Community as DbCommunity } from '@entity/Community'
import { RIGHTS } from '@/auth/RIGHTS'
diff --git a/backend/src/graphql/resolver/ContributionLinkResolver.test.ts b/backend/src/graphql/resolver/ContributionLinkResolver.test.ts
index 607fafd65..2247318a3 100644
--- a/backend/src/graphql/resolver/ContributionLinkResolver.test.ts
+++ b/backend/src/graphql/resolver/ContributionLinkResolver.test.ts
@@ -4,9 +4,16 @@
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/no-explicit-any */
-import Decimal from 'decimal.js-light'
-import { logger } from '@test/testSetup'
+import { ContributionLink as DbContributionLink } from '@entity/ContributionLink'
+import { Event as DbEvent } from '@entity/Event'
+import { Decimal } from 'decimal.js-light'
import { GraphQLError } from 'graphql'
+
+import { cleanDB, testEnvironment, resetToken } from '@test/helpers'
+import { logger } from '@test/testSetup'
+
+import { EventType } from '@/event/Event'
+import { userFactory } from '@/seeds/factory/user'
import {
login,
createContributionLink,
@@ -14,13 +21,8 @@ import {
updateContributionLink,
} from '@/seeds/graphql/mutations'
import { listContributionLinks } from '@/seeds/graphql/queries'
-import { cleanDB, testEnvironment, resetToken } from '@test/helpers'
import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg'
import { peterLustig } from '@/seeds/users/peter-lustig'
-import { userFactory } from '@/seeds/factory/user'
-import { ContributionLink as DbContributionLink } from '@entity/ContributionLink'
-import { EventType } from '@/event/Event'
-import { Event as DbEvent } from '@entity/Event'
let mutate: any, query: any, con: any
let testEnv: any
diff --git a/backend/src/graphql/resolver/ContributionLinkResolver.ts b/backend/src/graphql/resolver/ContributionLinkResolver.ts
index d2d56e853..af76856c4 100644
--- a/backend/src/graphql/resolver/ContributionLinkResolver.ts
+++ b/backend/src/graphql/resolver/ContributionLinkResolver.ts
@@ -1,6 +1,23 @@
-import Decimal from 'decimal.js-light'
-import { Resolver, Args, Arg, Authorized, Mutation, Query, Int, Ctx } from 'type-graphql'
import { MoreThan, IsNull } from '@dbTools/typeorm'
+import { ContributionLink as DbContributionLink } from '@entity/ContributionLink'
+import { Decimal } from 'decimal.js-light'
+import { Resolver, Args, Arg, Authorized, Mutation, Query, Int, Ctx } from 'type-graphql'
+
+// TODO: this is a strange construct
+import ContributionLinkArgs from '@arg/ContributionLinkArgs'
+import Paginated from '@arg/Paginated'
+import { Order } from '@enum/Order'
+import { ContributionLink } from '@model/ContributionLink'
+import { ContributionLinkList } from '@model/ContributionLinkList'
+
+import { RIGHTS } from '@/auth/RIGHTS'
+import {
+ EVENT_ADMIN_CONTRIBUTION_LINK_CREATE,
+ EVENT_ADMIN_CONTRIBUTION_LINK_DELETE,
+ EVENT_ADMIN_CONTRIBUTION_LINK_UPDATE,
+} from '@/event/Event'
+import { Context, getUser } from '@/server/context'
+import LogError from '@/server/LogError'
import {
CONTRIBUTIONLINK_NAME_MAX_CHARS,
@@ -8,24 +25,8 @@ import {
MEMO_MAX_CHARS,
MEMO_MIN_CHARS,
} from './const/const'
-import { isStartEndDateValid } from './util/creations'
-import { ContributionLinkList } from '@model/ContributionLinkList'
-import { ContributionLink } from '@model/ContributionLink'
-import ContributionLinkArgs from '@arg/ContributionLinkArgs'
-import { RIGHTS } from '@/auth/RIGHTS'
-import { ContributionLink as DbContributionLink } from '@entity/ContributionLink'
-import { Order } from '@enum/Order'
-import Paginated from '@arg/Paginated'
-
-// TODO: this is a strange construct
import { transactionLinkCode as contributionLinkCode } from './TransactionLinkResolver'
-import LogError from '@/server/LogError'
-import { Context, getUser } from '@/server/context'
-import {
- EVENT_ADMIN_CONTRIBUTION_LINK_CREATE,
- EVENT_ADMIN_CONTRIBUTION_LINK_DELETE,
- EVENT_ADMIN_CONTRIBUTION_LINK_UPDATE,
-} from '@/event/Event'
+import { isStartEndDateValid } from './util/creations'
@Resolver()
export class ContributionLinkResolver {
diff --git a/backend/src/graphql/resolver/ContributionMessageResolver.test.ts b/backend/src/graphql/resolver/ContributionMessageResolver.test.ts
index 0801bb131..189cb6e44 100644
--- a/backend/src/graphql/resolver/ContributionMessageResolver.test.ts
+++ b/backend/src/graphql/resolver/ContributionMessageResolver.test.ts
@@ -6,9 +6,15 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
+import { Event as DbEvent } from '@entity/Event'
+import { GraphQLError } from 'graphql'
+
import { cleanDB, resetToken, testEnvironment } from '@test/helpers'
import { logger, i18n as localization } from '@test/testSetup'
-import { GraphQLError } from 'graphql'
+
+import { sendAddedContributionMessageEmail } from '@/emails/sendEmailVariants'
+import { EventType } from '@/event/Event'
+import { userFactory } from '@/seeds/factory/user'
import {
adminCreateContributionMessage,
createContribution,
@@ -16,12 +22,8 @@ import {
login,
} from '@/seeds/graphql/mutations'
import { listContributionMessages } from '@/seeds/graphql/queries'
-import { userFactory } from '@/seeds/factory/user'
import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg'
import { peterLustig } from '@/seeds/users/peter-lustig'
-import { sendAddedContributionMessageEmail } from '@/emails/sendEmailVariants'
-import { EventType } from '@/event/Event'
-import { Event as DbEvent } from '@entity/Event'
jest.mock('@/emails/sendEmailVariants', () => {
const originalModule = jest.requireActual('@/emails/sendEmailVariants')
diff --git a/backend/src/graphql/resolver/ContributionMessageResolver.ts b/backend/src/graphql/resolver/ContributionMessageResolver.ts
index 999ccc2b1..adfb40f89 100644
--- a/backend/src/graphql/resolver/ContributionMessageResolver.ts
+++ b/backend/src/graphql/resolver/ContributionMessageResolver.ts
@@ -1,27 +1,26 @@
/* eslint-disable @typescript-eslint/restrict-template-expressions */
-import { Arg, Args, Authorized, Ctx, Int, Mutation, Query, Resolver } from 'type-graphql'
import { getConnection } from '@dbTools/typeorm'
-
-import { ContributionMessage as DbContributionMessage } from '@entity/ContributionMessage'
import { Contribution as DbContribution } from '@entity/Contribution'
-import { UserContact as DbUserContact } from '@entity/UserContact'
+import { ContributionMessage as DbContributionMessage } from '@entity/ContributionMessage'
import { User as DbUser } from '@entity/User'
+import { UserContact as DbUserContact } from '@entity/UserContact'
+import { Arg, Args, Authorized, Ctx, Int, Mutation, Query, Resolver } from 'type-graphql'
-import { ContributionMessage, ContributionMessageListResult } from '@model/ContributionMessage'
import ContributionMessageArgs from '@arg/ContributionMessageArgs'
-import { ContributionMessageType } from '@enum/MessageType'
-import { ContributionStatus } from '@enum/ContributionStatus'
-import { Order } from '@enum/Order'
import Paginated from '@arg/Paginated'
+import { ContributionStatus } from '@enum/ContributionStatus'
+import { ContributionMessageType } from '@enum/MessageType'
+import { Order } from '@enum/Order'
+import { ContributionMessage, ContributionMessageListResult } from '@model/ContributionMessage'
import { RIGHTS } from '@/auth/RIGHTS'
-import { Context, getUser } from '@/server/context'
import { sendAddedContributionMessageEmail } from '@/emails/sendEmailVariants'
-import LogError from '@/server/LogError'
import {
EVENT_ADMIN_CONTRIBUTION_MESSAGE_CREATE,
EVENT_CONTRIBUTION_MESSAGE_CREATE,
} from '@/event/Event'
+import { Context, getUser } from '@/server/context'
+import LogError from '@/server/LogError'
@Resolver()
export class ContributionMessageResolver {
diff --git a/backend/src/graphql/resolver/ContributionResolver.test.ts b/backend/src/graphql/resolver/ContributionResolver.test.ts
index 898b7b1c3..490f5a4a7 100644
--- a/backend/src/graphql/resolver/ContributionResolver.test.ts
+++ b/backend/src/graphql/resolver/ContributionResolver.test.ts
@@ -6,11 +6,36 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
-import Decimal from 'decimal.js-light'
-import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg'
-import { bobBaumeister } from '@/seeds/users/bob-baumeister'
-import { stephenHawking } from '@/seeds/users/stephen-hawking'
-import { garrickOllivander } from '@/seeds/users/garrick-ollivander'
+import { Contribution } from '@entity/Contribution'
+import { Event as DbEvent } from '@entity/Event'
+import { Transaction as DbTransaction } from '@entity/Transaction'
+import { User } from '@entity/User'
+import { UserInputError } from 'apollo-server-express'
+import { Decimal } from 'decimal.js-light'
+import { GraphQLError } from 'graphql'
+
+import { ContributionStatus } from '@enum/ContributionStatus'
+import { Order } from '@enum/Order'
+import { ContributionListResult } from '@model/Contribution'
+import { UnconfirmedContribution } from '@model/UnconfirmedContribution'
+import {
+ cleanDB,
+ resetToken,
+ testEnvironment,
+ contributionDateFormatter,
+ resetEntity,
+} from '@test/helpers'
+import { logger, i18n as localization } from '@test/testSetup'
+
+import {
+ sendContributionConfirmedEmail,
+ sendContributionDeletedEmail,
+ sendContributionDeniedEmail,
+} from '@/emails/sendEmailVariants'
+import { EventType } from '@/event/Event'
+import { creations } from '@/seeds/creation/index'
+import { creationFactory } from '@/seeds/factory/creation'
+import { userFactory } from '@/seeds/factory/user'
import {
createContribution,
updateContribution,
@@ -29,35 +54,12 @@ import {
listContributions,
adminListContributions,
} from '@/seeds/graphql/queries'
-import {
- sendContributionConfirmedEmail,
- sendContributionDeletedEmail,
- sendContributionDeniedEmail,
-} from '@/emails/sendEmailVariants'
-import {
- cleanDB,
- resetToken,
- testEnvironment,
- contributionDateFormatter,
- resetEntity,
-} from '@test/helpers'
-import { GraphQLError } from 'graphql'
-import { userFactory } from '@/seeds/factory/user'
-import { creationFactory } from '@/seeds/factory/creation'
-import { creations } from '@/seeds/creation/index'
+import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg'
+import { bobBaumeister } from '@/seeds/users/bob-baumeister'
+import { garrickOllivander } from '@/seeds/users/garrick-ollivander'
import { peterLustig } from '@/seeds/users/peter-lustig'
-import { Event as DbEvent } from '@entity/Event'
-import { Contribution } from '@entity/Contribution'
-import { Transaction as DbTransaction } from '@entity/Transaction'
-import { User } from '@entity/User'
-import { EventType } from '@/event/Event'
-import { logger, i18n as localization } from '@test/testSetup'
-import { UserInputError } from 'apollo-server-express'
import { raeuberHotzenplotz } from '@/seeds/users/raeuber-hotzenplotz'
-import { UnconfirmedContribution } from '@model/UnconfirmedContribution'
-import { ContributionListResult } from '@model/Contribution'
-import { ContributionStatus } from '@enum/ContributionStatus'
-import { Order } from '@enum/Order'
+import { stephenHawking } from '@/seeds/users/stephen-hawking'
jest.mock('@/emails/sendEmailVariants')
@@ -435,7 +437,6 @@ describe('ContributionResolver', () => {
mutation: adminUpdateContribution,
variables: {
id: pendingContribution.data.createContribution.id,
- email: 'bibi@bloxberg.de',
amount: 10.0,
memo: 'Test env contribution',
creationDate: new Date().toString(),
@@ -1670,7 +1671,6 @@ describe('ContributionResolver', () => {
mutation: adminUpdateContribution,
variables: {
id: 1,
- email: 'bibi@bloxberg.de',
amount: new Decimal(300),
memo: 'Danke Bibi!',
creationDate: contributionDateFormatter(new Date()),
@@ -1749,7 +1749,6 @@ describe('ContributionResolver', () => {
mutation: adminUpdateContribution,
variables: {
id: 1,
- email: 'bibi@bloxberg.de',
amount: new Decimal(300),
memo: 'Danke Bibi!',
creationDate: contributionDateFormatter(new Date()),
@@ -2043,6 +2042,50 @@ describe('ContributionResolver', () => {
}),
)
})
+
+ describe('user tries to update admin contribution', () => {
+ beforeAll(async () => {
+ await mutate({
+ mutation: login,
+ variables: { email: 'bibi@bloxberg.de', password: 'Aa12345_' },
+ })
+ })
+
+ afterAll(async () => {
+ await mutate({
+ mutation: login,
+ variables: { email: 'peter@lustig.de', password: 'Aa12345_' },
+ })
+ })
+
+ it('logs and throws "Cannot update contribution of moderator" error', async () => {
+ jest.clearAllMocks()
+ const adminContribution = await Contribution.findOne({
+ where: {
+ moderatorId: admin.id,
+ userId: bibi.id,
+ },
+ })
+ await expect(
+ mutate({
+ mutation: updateContribution,
+ variables: {
+ contributionId: (adminContribution && adminContribution.id) || -1,
+ amount: 100.0,
+ memo: 'Test Test Test',
+ creationDate: new Date().toString(),
+ },
+ }),
+ ).resolves.toMatchObject({
+ errors: [new GraphQLError('Cannot update contribution of moderator')],
+ })
+ expect(logger.error).toBeCalledWith(
+ 'Cannot update contribution of moderator',
+ expect.any(Object),
+ bibi.id,
+ )
+ })
+ })
})
describe('second creation surpasses the available amount ', () => {
@@ -2080,58 +2123,6 @@ describe('ContributionResolver', () => {
// stephen@hawking.uk: [1000, 1000, 1000] - deleted
// garrick@ollivander.com: [1000, 1000, 1000] - not activated
- describe('user for creation to update does not exist', () => {
- it('throws an error', async () => {
- jest.clearAllMocks()
- await expect(
- mutate({
- mutation: adminUpdateContribution,
- variables: {
- id: 1,
- email: 'bob@baumeister.de',
- amount: new Decimal(300),
- memo: 'Danke Bibi!',
- creationDate: contributionDateFormatter(new Date()),
- },
- }),
- ).resolves.toEqual(
- expect.objectContaining({
- errors: [new GraphQLError('Could not find User')],
- }),
- )
- })
-
- it('logs the error "Could not find User"', () => {
- expect(logger.error).toBeCalledWith('Could not find User', 'bob@baumeister.de')
- })
- })
-
- describe('user for creation to update is deleted', () => {
- it('throws an error', async () => {
- jest.clearAllMocks()
- await expect(
- mutate({
- mutation: adminUpdateContribution,
- variables: {
- id: 1,
- email: 'stephen@hawking.uk',
- amount: new Decimal(300),
- memo: 'Danke Bibi!',
- creationDate: contributionDateFormatter(new Date()),
- },
- }),
- ).resolves.toEqual(
- expect.objectContaining({
- errors: [new GraphQLError('User was deleted')],
- }),
- )
- })
-
- it('logs the error "User was deleted"', () => {
- expect(logger.error).toBeCalledWith('User was deleted', 'stephen@hawking.uk')
- })
- })
-
describe('creation does not exist', () => {
it('throws an error', async () => {
jest.clearAllMocks()
@@ -2140,7 +2131,6 @@ describe('ContributionResolver', () => {
mutation: adminUpdateContribution,
variables: {
id: -1,
- email: 'bibi@bloxberg.de',
amount: new Decimal(300),
memo: 'Danke Bibi!',
creationDate: contributionDateFormatter(new Date()),
@@ -2158,40 +2148,6 @@ describe('ContributionResolver', () => {
})
})
- describe('user email does not match creation user', () => {
- it('throws an error', async () => {
- jest.clearAllMocks()
- await expect(
- mutate({
- mutation: adminUpdateContribution,
- variables: {
- id: creation ? creation.id : -1,
- email: 'bibi@bloxberg.de',
- amount: new Decimal(300),
- memo: 'Danke Bibi!',
- creationDate: creation
- ? contributionDateFormatter(creation.contributionDate)
- : contributionDateFormatter(new Date()),
- },
- }),
- ).resolves.toEqual(
- expect.objectContaining({
- errors: [
- new GraphQLError(
- 'User of the pending contribution and send user does not correspond',
- ),
- ],
- }),
- )
- })
-
- it('logs the error "User of the pending contribution and send user does not correspond"', () => {
- expect(logger.error).toBeCalledWith(
- 'User of the pending contribution and send user does not correspond',
- )
- })
- })
-
describe('creation update is not valid', () => {
// as this test has not clearly defined that date, it is a false positive
it('throws an error', async () => {
@@ -2201,7 +2157,6 @@ describe('ContributionResolver', () => {
mutation: adminUpdateContribution,
variables: {
id: creation ? creation.id : -1,
- email: 'peter@lustig.de',
amount: new Decimal(1900),
memo: 'Danke Peter!',
creationDate: creation
@@ -2238,7 +2193,6 @@ describe('ContributionResolver', () => {
mutation: adminUpdateContribution,
variables: {
id: creation?.id,
- email: 'peter@lustig.de',
amount: new Decimal(300),
memo: 'Danke Peter!',
creationDate: creation
@@ -2253,7 +2207,6 @@ describe('ContributionResolver', () => {
date: expect.any(String),
memo: 'Danke Peter!',
amount: '300',
- creation: ['1000', '700', '500'],
},
},
}),
@@ -2280,7 +2233,6 @@ describe('ContributionResolver', () => {
mutation: adminUpdateContribution,
variables: {
id: creation?.id,
- email: 'peter@lustig.de',
amount: new Decimal(200),
memo: 'Das war leider zu Viel!',
creationDate: creation
@@ -2295,7 +2247,6 @@ describe('ContributionResolver', () => {
date: expect.any(String),
memo: 'Das war leider zu Viel!',
amount: '200',
- creation: ['1000', '800', '1000'],
},
},
}),
diff --git a/backend/src/graphql/resolver/ContributionResolver.ts b/backend/src/graphql/resolver/ContributionResolver.ts
index 1cc097152..5969eaef2 100644
--- a/backend/src/graphql/resolver/ContributionResolver.ts
+++ b/backend/src/graphql/resolver/ContributionResolver.ts
@@ -1,40 +1,34 @@
/* eslint-disable @typescript-eslint/restrict-template-expressions */
-import Decimal from 'decimal.js-light'
-import { Arg, Args, Authorized, Ctx, Int, Mutation, Query, Resolver } from 'type-graphql'
import { IsNull, getConnection } from '@dbTools/typeorm'
-
import { Contribution as DbContribution } from '@entity/Contribution'
import { ContributionMessage } from '@entity/ContributionMessage'
-import { UserContact } from '@entity/UserContact'
-import { User as DbUser } from '@entity/User'
import { Transaction as DbTransaction } from '@entity/Transaction'
+import { User as DbUser } from '@entity/User'
+import { UserContact } from '@entity/UserContact'
+import { Decimal } from 'decimal.js-light'
+import { Arg, Args, Authorized, Ctx, Int, Mutation, Query, Resolver } from 'type-graphql'
+import AdminCreateContributionArgs from '@arg/AdminCreateContributionArgs'
+import AdminUpdateContributionArgs from '@arg/AdminUpdateContributionArgs'
+import ContributionArgs from '@arg/ContributionArgs'
+import Paginated from '@arg/Paginated'
+import { ContributionStatus } from '@enum/ContributionStatus'
+import { ContributionType } from '@enum/ContributionType'
+import { ContributionMessageType } from '@enum/MessageType'
+import { Order } from '@enum/Order'
+import { TransactionTypeId } from '@enum/TransactionTypeId'
import { AdminUpdateContribution } from '@model/AdminUpdateContribution'
import { Contribution, ContributionListResult } from '@model/Contribution'
import { Decay } from '@model/Decay'
import { OpenCreation } from '@model/OpenCreation'
import { UnconfirmedContribution } from '@model/UnconfirmedContribution'
-import { TransactionTypeId } from '@enum/TransactionTypeId'
-import { Order } from '@enum/Order'
-import { ContributionType } from '@enum/ContributionType'
-import { ContributionStatus } from '@enum/ContributionStatus'
-import { ContributionMessageType } from '@enum/MessageType'
-import ContributionArgs from '@arg/ContributionArgs'
-import Paginated from '@arg/Paginated'
-import AdminCreateContributionArgs from '@arg/AdminCreateContributionArgs'
-import AdminUpdateContributionArgs from '@arg/AdminUpdateContributionArgs'
import { RIGHTS } from '@/auth/RIGHTS'
-import { Context, getUser, getClientTimezoneOffset } from '@/server/context'
-import { backendLogger as logger } from '@/server/logger'
import {
- getUserCreation,
- validateContribution,
- updateCreations,
- isValidDateString,
- getOpenCreations,
-} from './util/creations'
-import { MEMO_MAX_CHARS, MEMO_MIN_CHARS } from './const/const'
+ sendContributionConfirmedEmail,
+ sendContributionDeletedEmail,
+ sendContributionDeniedEmail,
+} from '@/emails/sendEmailVariants'
import {
EVENT_CONTRIBUTION_CREATE,
EVENT_CONTRIBUTION_DELETE,
@@ -45,17 +39,22 @@ import {
EVENT_ADMIN_CONTRIBUTION_CONFIRM,
EVENT_ADMIN_CONTRIBUTION_DENY,
} from '@/event/Event'
-import { calculateDecay } from '@/util/decay'
-import {
- sendContributionConfirmedEmail,
- sendContributionDeletedEmail,
- sendContributionDeniedEmail,
-} from '@/emails/sendEmailVariants'
-import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK'
+import { Context, getUser, getClientTimezoneOffset } from '@/server/context'
import LogError from '@/server/LogError'
+import { backendLogger as logger } from '@/server/logger'
+import { calculateDecay } from '@/util/decay'
+import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK'
-import { getLastTransaction } from './util/getLastTransaction'
+import { MEMO_MAX_CHARS, MEMO_MIN_CHARS } from './const/const'
+import {
+ getUserCreation,
+ validateContribution,
+ updateCreations,
+ isValidDateString,
+ getOpenCreations,
+} from './util/creations'
import { findContributions } from './util/findContributions'
+import { getLastTransaction } from './util/getLastTransaction'
@Resolver()
export class ContributionResolver {
@@ -202,6 +201,9 @@ export class ContributionResolver {
user.id,
)
}
+ if (contributionToUpdate.moderatorId) {
+ throw new LogError('Cannot update contribution of moderator', contributionToUpdate, user.id)
+ }
if (
contributionToUpdate.contributionStatus !== ContributionStatus.IN_PROGRESS &&
contributionToUpdate.contributionStatus !== ContributionStatus.PENDING
@@ -307,41 +309,27 @@ export class ContributionResolver {
@Authorized([RIGHTS.ADMIN_UPDATE_CONTRIBUTION])
@Mutation(() => AdminUpdateContribution)
async adminUpdateContribution(
- @Args() { id, email, amount, memo, creationDate }: AdminUpdateContributionArgs,
+ @Args() { id, amount, memo, creationDate }: AdminUpdateContributionArgs,
@Ctx() context: Context,
): Promise {
const clientTimezoneOffset = getClientTimezoneOffset(context)
- const emailContact = await UserContact.findOne({
- where: { email },
- withDeleted: true,
- relations: ['user'],
- })
- if (!emailContact || !emailContact.user) {
- throw new LogError('Could not find User', email)
- }
- if (emailContact.deletedAt || emailContact.user.deletedAt) {
- throw new LogError('User was deleted', email)
- }
const moderator = getUser(context)
const contributionToUpdate = await DbContribution.findOne({
where: { id, confirmedAt: IsNull(), deniedAt: IsNull() },
})
+
if (!contributionToUpdate) {
throw new LogError('Contribution not found', id)
}
- if (contributionToUpdate.userId !== emailContact.user.id) {
- throw new LogError('User of the pending contribution and send user does not correspond')
- }
-
if (contributionToUpdate.moderatorId === null) {
throw new LogError('An admin is not allowed to update an user contribution')
}
const creationDateObj = new Date(creationDate)
- let creations = await getUserCreation(emailContact.user.id, clientTimezoneOffset)
+ let creations = await getUserCreation(contributionToUpdate.userId, clientTimezoneOffset)
// TODO: remove this restriction
if (contributionToUpdate.contributionDate.getMonth() === creationDateObj.getMonth()) {
@@ -364,9 +352,9 @@ export class ContributionResolver {
result.amount = amount
result.memo = contributionToUpdate.memo
result.date = contributionToUpdate.contributionDate
- result.creation = await getUserCreation(emailContact.user.id, clientTimezoneOffset)
+
await EVENT_ADMIN_CONTRIBUTION_UPDATE(
- emailContact.user,
+ { id: contributionToUpdate.userId } as DbUser,
moderator,
contributionToUpdate,
amount,
diff --git a/backend/src/graphql/resolver/EmailOptinCodes.test.ts b/backend/src/graphql/resolver/EmailOptinCodes.test.ts
index 47fb3963c..cc8d4e534 100644
--- a/backend/src/graphql/resolver/EmailOptinCodes.test.ts
+++ b/backend/src/graphql/resolver/EmailOptinCodes.test.ts
@@ -4,12 +4,14 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
-import { testEnvironment, cleanDB } from '@test/helpers'
import { User as DbUser } from '@entity/User'
+import { GraphQLError } from 'graphql'
+
+import { testEnvironment, cleanDB } from '@test/helpers'
+
+import CONFIG from '@/config'
import { createUser, setPassword, forgotPassword } from '@/seeds/graphql/mutations'
import { queryOptIn } from '@/seeds/graphql/queries'
-import CONFIG from '@/config'
-import { GraphQLError } from 'graphql'
let mutate: any, query: any, con: any
let testEnv: any
diff --git a/backend/src/graphql/resolver/GdtResolver.ts b/backend/src/graphql/resolver/GdtResolver.ts
index e12f92458..53fc23295 100644
--- a/backend/src/graphql/resolver/GdtResolver.ts
+++ b/backend/src/graphql/resolver/GdtResolver.ts
@@ -3,14 +3,14 @@
/* eslint-disable @typescript-eslint/no-unsafe-return */
import { Resolver, Query, Args, Ctx, Authorized, Arg, Int, Float } from 'type-graphql'
-import { GdtEntryList } from '@model/GdtEntryList'
-import { Order } from '@enum/Order'
import Paginated from '@arg/Paginated'
+import { Order } from '@enum/Order'
+import { GdtEntryList } from '@model/GdtEntryList'
-import { Context, getUser } from '@/server/context'
-import CONFIG from '@/config'
import { apiGet, apiPost } from '@/apis/HttpRequest'
import { RIGHTS } from '@/auth/RIGHTS'
+import CONFIG from '@/config'
+import { Context, getUser } from '@/server/context'
import LogError from '@/server/LogError'
@Resolver()
diff --git a/backend/src/graphql/resolver/StatisticsResolver.ts b/backend/src/graphql/resolver/StatisticsResolver.ts
index 38d0000cb..21cf81e97 100644
--- a/backend/src/graphql/resolver/StatisticsResolver.ts
+++ b/backend/src/graphql/resolver/StatisticsResolver.ts
@@ -1,11 +1,10 @@
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/no-unsafe-return */
-import Decimal from 'decimal.js-light'
-import { Resolver, Query, Authorized, FieldResolver } from 'type-graphql'
import { getConnection } from '@dbTools/typeorm'
-
import { Transaction as DbTransaction } from '@entity/Transaction'
import { User as DbUser } from '@entity/User'
+import { Decimal } from 'decimal.js-light'
+import { Resolver, Query, Authorized, FieldResolver } from 'type-graphql'
import { CommunityStatistics, DynamicStatisticsFields } from '@model/CommunityStatistics'
diff --git a/backend/src/graphql/resolver/TransactionLinkResolver.test.ts b/backend/src/graphql/resolver/TransactionLinkResolver.test.ts
index d86f260fe..8fd5c35de 100644
--- a/backend/src/graphql/resolver/TransactionLinkResolver.test.ts
+++ b/backend/src/graphql/resolver/TransactionLinkResolver.test.ts
@@ -6,15 +6,23 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
-import { transactionLinkCode } from './TransactionLinkResolver'
-import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg'
-import { peterLustig } from '@/seeds/users/peter-lustig'
+import { ContributionLink as DbContributionLink } from '@entity/ContributionLink'
+import { Event as DbEvent } from '@entity/Event'
+import { Transaction } from '@entity/Transaction'
+import { User } from '@entity/User'
+import { UserContact } from '@entity/UserContact'
+import { Decimal } from 'decimal.js-light'
+import { GraphQLError } from 'graphql'
+
+import { UnconfirmedContribution } from '@model/UnconfirmedContribution'
import { cleanDB, testEnvironment, resetToken, resetEntity } from '@test/helpers'
-import { creationFactory } from '@/seeds/factory/creation'
+import { logger } from '@test/testSetup'
+
+import { EventType } from '@/event/Event'
import { creations } from '@/seeds/creation/index'
-import { userFactory } from '@/seeds/factory/user'
+import { creationFactory } from '@/seeds/factory/creation'
import { transactionLinkFactory } from '@/seeds/factory/transactionLink'
-import { transactionLinks } from '@/seeds/transactionLink/index'
+import { userFactory } from '@/seeds/factory/user'
import {
login,
createContributionLink,
@@ -22,20 +30,16 @@ import {
createContribution,
updateContribution,
createTransactionLink,
+ deleteTransactionLink,
confirmContribution,
} from '@/seeds/graphql/mutations'
import { listTransactionLinksAdmin } from '@/seeds/graphql/queries'
-import { ContributionLink as DbContributionLink } from '@entity/ContributionLink'
-import { User } from '@entity/User'
-import { Transaction } from '@entity/Transaction'
-import { UnconfirmedContribution } from '@model/UnconfirmedContribution'
-import Decimal from 'decimal.js-light'
-import { GraphQLError } from 'graphql'
+import { transactionLinks } from '@/seeds/transactionLink/index'
+import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg'
+import { peterLustig } from '@/seeds/users/peter-lustig'
import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK'
-import { logger } from '@test/testSetup'
-import { EventType } from '@/event/Event'
-import { Event as DbEvent } from '@entity/Event'
-import { UserContact } from '@entity/UserContact'
+
+import { transactionLinkCode } from './TransactionLinkResolver'
// mock semaphore to allow use fake timers
jest.mock('@/util/TRANSACTIONS_LOCK')
@@ -573,6 +577,7 @@ describe('TransactionLinkResolver', () => {
describe('link exists', () => {
let myCode: string
+ let myId: number
beforeAll(async () => {
await mutate({
@@ -589,7 +594,7 @@ describe('TransactionLinkResolver', () => {
})
const {
data: {
- createTransactionLink: { code },
+ createTransactionLink: { id, code },
},
} = await mutate({
mutation: createTransactionLink,
@@ -599,6 +604,23 @@ describe('TransactionLinkResolver', () => {
},
})
myCode = code
+ myId = id
+ })
+
+ it('stores the TRANSACTION_LINK_CREATE event in the database', async () => {
+ const userConatct = await UserContact.findOneOrFail(
+ { email: 'bibi@bloxberg.de' },
+ { relations: ['user'] },
+ )
+ await expect(DbEvent.find()).resolves.toContainEqual(
+ expect.objectContaining({
+ type: EventType.TRANSACTION_LINK_CREATE,
+ affectedUserId: userConatct.user.id,
+ actingUserId: userConatct.user.id,
+ involvedTransactionLinkId: myId,
+ amount: expect.decimalEqual(200),
+ }),
+ )
})
describe('own link', () => {
@@ -625,6 +647,94 @@ describe('TransactionLinkResolver', () => {
expect.any(Number),
)
})
+ it('delete own link', async () => {
+ await expect(
+ mutate({
+ mutation: deleteTransactionLink,
+ variables: {
+ id: myId,
+ },
+ }),
+ ).resolves.toMatchObject({
+ data: { deleteTransactionLink: true },
+ })
+ })
+
+ it('stores the TRANSACTION_LINK_DELETE event in the database', async () => {
+ const userConatct = await UserContact.findOneOrFail(
+ { email: 'bibi@bloxberg.de' },
+ { relations: ['user'] },
+ )
+ await expect(DbEvent.find()).resolves.toContainEqual(
+ expect.objectContaining({
+ type: EventType.TRANSACTION_LINK_DELETE,
+ affectedUserId: userConatct.user.id,
+ actingUserId: userConatct.user.id,
+ involvedTransactionLinkId: myId,
+ }),
+ )
+ })
+ })
+
+ describe('other link', () => {
+ beforeAll(async () => {
+ await mutate({
+ mutation: login,
+ variables: { email: 'bibi@bloxberg.de', password: 'Aa12345_' },
+ })
+ const {
+ data: {
+ createTransactionLink: { id, code },
+ },
+ } = await mutate({
+ mutation: createTransactionLink,
+ variables: {
+ amount: 200,
+ memo: 'This is a transaction link from bibi',
+ },
+ })
+ myCode = code
+ myId = id
+ await mutate({
+ mutation: login,
+ variables: { email: 'peter@lustig.de', password: 'Aa12345_' },
+ })
+ })
+
+ it('successfully redeems link', async () => {
+ await expect(
+ mutate({
+ mutation: redeemTransactionLink,
+ variables: {
+ code: myCode,
+ },
+ }),
+ ).resolves.toMatchObject({
+ data: { redeemTransactionLink: true },
+ errors: undefined,
+ })
+ })
+
+ it('stores the TRANSACTION_LINK_REDEEM event in the database', async () => {
+ const creator = await UserContact.findOneOrFail(
+ { email: 'bibi@bloxberg.de' },
+ { relations: ['user'] },
+ )
+ const redeemer = await UserContact.findOneOrFail(
+ { email: 'peter@lustig.de' },
+ { relations: ['user'] },
+ )
+ await expect(DbEvent.find()).resolves.toContainEqual(
+ expect.objectContaining({
+ type: EventType.TRANSACTION_LINK_REDEEM,
+ affectedUserId: redeemer.user.id,
+ actingUserId: redeemer.user.id,
+ involvedUserId: creator.user.id,
+ involvedTransactionLinkId: myId,
+ amount: expect.decimalEqual(200),
+ }),
+ )
+ })
})
})
})
diff --git a/backend/src/graphql/resolver/TransactionLinkResolver.ts b/backend/src/graphql/resolver/TransactionLinkResolver.ts
index 774a7317f..a5f8c0ee6 100644
--- a/backend/src/graphql/resolver/TransactionLinkResolver.ts
+++ b/backend/src/graphql/resolver/TransactionLinkResolver.ts
@@ -1,46 +1,45 @@
import { randomBytes } from 'crypto'
-import Decimal from 'decimal.js-light'
import { getConnection } from '@dbTools/typeorm'
-
-import { TransactionLink as DbTransactionLink } from '@entity/TransactionLink'
-import { User as DbUser } from '@entity/User'
-import { Transaction as DbTransaction } from '@entity/Transaction'
import { Contribution as DbContribution } from '@entity/Contribution'
import { ContributionLink as DbContributionLink } from '@entity/ContributionLink'
+import { Transaction as DbTransaction } from '@entity/Transaction'
+import { TransactionLink as DbTransactionLink } from '@entity/TransactionLink'
+import { User as DbUser } from '@entity/User'
+import { Decimal } from 'decimal.js-light'
+import { Resolver, Args, Arg, Authorized, Ctx, Mutation, Query, Int } from 'type-graphql'
-import { User } from '@model/User'
+import Paginated from '@arg/Paginated'
+import TransactionLinkArgs from '@arg/TransactionLinkArgs'
+import TransactionLinkFilters from '@arg/TransactionLinkFilters'
+import { ContributionCycleType } from '@enum/ContributionCycleType'
+import { ContributionStatus } from '@enum/ContributionStatus'
+import { ContributionType } from '@enum/ContributionType'
+import { TransactionTypeId } from '@enum/TransactionTypeId'
import { ContributionLink } from '@model/ContributionLink'
import { Decay } from '@model/Decay'
import { TransactionLink, TransactionLinkResult } from '@model/TransactionLink'
-import { ContributionType } from '@enum/ContributionType'
-import { ContributionStatus } from '@enum/ContributionStatus'
-import { TransactionTypeId } from '@enum/TransactionTypeId'
-import { ContributionCycleType } from '@enum/ContributionCycleType'
-import TransactionLinkArgs from '@arg/TransactionLinkArgs'
-import Paginated from '@arg/Paginated'
-import TransactionLinkFilters from '@arg/TransactionLinkFilters'
-
-import { backendLogger as logger } from '@/server/logger'
-import { Context, getUser, getClientTimezoneOffset } from '@/server/context'
-import { Resolver, Args, Arg, Authorized, Ctx, Mutation, Query, Int } from 'type-graphql'
-import { calculateBalance } from '@/util/validate'
-import { RIGHTS } from '@/auth/RIGHTS'
-import { calculateDecay } from '@/util/decay'
-import { getUserCreation, validateContribution } from './util/creations'
-import { executeTransaction } from './TransactionResolver'
+import { User } from '@model/User'
import QueryLinkResult from '@union/QueryLinkResult'
-import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK'
-import LogError from '@/server/LogError'
-import { getLastTransaction } from './util/getLastTransaction'
-import transactionLinkList from './util/transactionLinkList'
+import { RIGHTS } from '@/auth/RIGHTS'
import {
EVENT_CONTRIBUTION_LINK_REDEEM,
EVENT_TRANSACTION_LINK_CREATE,
EVENT_TRANSACTION_LINK_DELETE,
EVENT_TRANSACTION_LINK_REDEEM,
} from '@/event/Event'
+import { Context, getUser, getClientTimezoneOffset } from '@/server/context'
+import LogError from '@/server/LogError'
+import { backendLogger as logger } from '@/server/logger'
+import { calculateDecay } from '@/util/decay'
+import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK'
+import { calculateBalance } from '@/util/validate'
+
+import { executeTransaction } from './TransactionResolver'
+import { getUserCreation, validateContribution } from './util/creations'
+import { getLastTransaction } from './util/getLastTransaction'
+import transactionLinkList from './util/transactionLinkList'
// TODO: do not export, test it inside the resolver
export const transactionLinkCode = (date: Date): string => {
diff --git a/backend/src/graphql/resolver/TransactionResolver.test.ts b/backend/src/graphql/resolver/TransactionResolver.test.ts
index 225569e6f..a2e2e7e75 100644
--- a/backend/src/graphql/resolver/TransactionResolver.test.ts
+++ b/backend/src/graphql/resolver/TransactionResolver.test.ts
@@ -5,7 +5,15 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
-import Decimal from 'decimal.js-light'
+import { Event as DbEvent } from '@entity/Event'
+import { Transaction } from '@entity/Transaction'
+import { User } from '@entity/User'
+import { Decimal } from 'decimal.js-light'
+import { GraphQLError } from 'graphql'
+
+import { cleanDB, testEnvironment } from '@test/helpers'
+import { logger } from '@test/testSetup'
+
import { EventType } from '@/event/Event'
import { userFactory } from '@/seeds/factory/user'
import {
@@ -18,12 +26,7 @@ import { bobBaumeister } from '@/seeds/users/bob-baumeister'
import { garrickOllivander } from '@/seeds/users/garrick-ollivander'
import { peterLustig } from '@/seeds/users/peter-lustig'
import { stephenHawking } from '@/seeds/users/stephen-hawking'
-import { Event as DbEvent } from '@entity/Event'
-import { Transaction } from '@entity/Transaction'
-import { User } from '@entity/User'
-import { cleanDB, testEnvironment } from '@test/helpers'
-import { logger } from '@test/testSetup'
-import { GraphQLError } from 'graphql'
+
import { findUserByEmail } from './UserResolver'
let mutate: any, query: any, con: any
diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts
index 5b10c098f..430cdb363 100644
--- a/backend/src/graphql/resolver/TransactionResolver.ts
+++ b/backend/src/graphql/resolver/TransactionResolver.ts
@@ -2,43 +2,40 @@
/* eslint-disable new-cap */
/* eslint-disable @typescript-eslint/no-non-null-assertion */
-import Decimal from 'decimal.js-light'
-import { Resolver, Query, Args, Authorized, Ctx, Mutation } from 'type-graphql'
import { getCustomRepository, getConnection, In } from '@dbTools/typeorm'
-
-import { User as dbUser } from '@entity/User'
import { Transaction as dbTransaction } from '@entity/Transaction'
import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink'
+import { User as dbUser } from '@entity/User'
+import { Decimal } from 'decimal.js-light'
+import { Resolver, Query, Args, Authorized, Ctx, Mutation } from 'type-graphql'
+
+import Paginated from '@arg/Paginated'
+import TransactionSendArgs from '@arg/TransactionSendArgs'
+import { Order } from '@enum/Order'
+import { TransactionTypeId } from '@enum/TransactionTypeId'
+import { Transaction } from '@model/Transaction'
+import { TransactionList } from '@model/TransactionList'
+import { User } from '@model/User'
import { TransactionRepository } from '@repository/Transaction'
import { TransactionLinkRepository } from '@repository/TransactionLink'
-import { User } from '@model/User'
-import { Transaction } from '@model/Transaction'
-import { TransactionList } from '@model/TransactionList'
-import { Order } from '@enum/Order'
-import { TransactionTypeId } from '@enum/TransactionTypeId'
-import { calculateBalance } from '@/util/validate'
-import TransactionSendArgs from '@arg/TransactionSendArgs'
-import Paginated from '@arg/Paginated'
-
-import { backendLogger as logger } from '@/server/logger'
-import { Context, getUser } from '@/server/context'
import { RIGHTS } from '@/auth/RIGHTS'
-import { communityUser } from '@/util/communityUser'
-import { virtualLinkTransaction, virtualDecayTransaction } from '@/util/virtualTransactions'
import {
sendTransactionLinkRedeemedEmail,
sendTransactionReceivedEmail,
} from '@/emails/sendEmailVariants'
import { EVENT_TRANSACTION_RECEIVE, EVENT_TRANSACTION_SEND } from '@/event/Event'
+import { Context, getUser } from '@/server/context'
+import LogError from '@/server/LogError'
+import { backendLogger as logger } from '@/server/logger'
+import { communityUser } from '@/util/communityUser'
+import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK'
+import { calculateBalance } from '@/util/validate'
+import { virtualLinkTransaction, virtualDecayTransaction } from '@/util/virtualTransactions'
import { BalanceResolver } from './BalanceResolver'
import { MEMO_MAX_CHARS, MEMO_MIN_CHARS } from './const/const'
import { findUserByEmail } from './UserResolver'
-
-import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK'
-import LogError from '@/server/LogError'
-
import { getLastTransaction } from './util/getLastTransaction'
export const executeTransaction = async (
diff --git a/backend/src/graphql/resolver/UserResolver.test.ts b/backend/src/graphql/resolver/UserResolver.test.ts
index d3c78e2af..69a5f824f 100644
--- a/backend/src/graphql/resolver/UserResolver.test.ts
+++ b/backend/src/graphql/resolver/UserResolver.test.ts
@@ -6,12 +6,32 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
-import { objectValuesToArray } from '@/util/utilities'
+import { Event as DbEvent } from '@entity/Event'
+import { TransactionLink } from '@entity/TransactionLink'
+import { User } from '@entity/User'
+import { UserContact } from '@entity/UserContact'
+import { GraphQLError } from 'graphql'
+import { validate as validateUUID, version as versionUUID } from 'uuid'
+
+import { OptInType } from '@enum/OptInType'
+import { PasswordEncryptionType } from '@enum/PasswordEncryptionType'
+import { UserContactType } from '@enum/UserContactType'
+import { ContributionLink } from '@model/ContributionLink'
import { testEnvironment, headerPushMock, resetToken, cleanDB } from '@test/helpers'
import { logger, i18n as localization } from '@test/testSetup'
-import { printTimeDuration } from '@/util/time'
+
+import CONFIG from '@/config'
+import {
+ sendAccountActivationEmail,
+ sendAccountMultiRegistrationEmail,
+ sendResetPasswordEmail,
+} from '@/emails/sendEmailVariants'
+import { EventType } from '@/event/Event'
+import { SecretKeyCryptographyCreateKey } from '@/password/EncryptorUtils'
+import { encryptPassword } from '@/password/PasswordEncryptor'
+import { contributionLinkFactory } from '@/seeds/factory/contributionLink'
+import { transactionLinkFactory } from '@/seeds/factory/transactionLink'
import { userFactory } from '@/seeds/factory/user'
-import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg'
import {
login,
logout,
@@ -27,31 +47,13 @@ import {
sendActivationEmail,
} from '@/seeds/graphql/mutations'
import { verifyLogin, queryOptIn, searchAdminUsers, searchUsers } from '@/seeds/graphql/queries'
-import { GraphQLError } from 'graphql'
-import { User } from '@entity/User'
-import CONFIG from '@/config'
-import {
- sendAccountActivationEmail,
- sendAccountMultiRegistrationEmail,
- sendResetPasswordEmail,
-} from '@/emails/sendEmailVariants'
-import { contributionLinkFactory } from '@/seeds/factory/contributionLink'
-import { transactionLinkFactory } from '@/seeds/factory/transactionLink'
-import { ContributionLink } from '@model/ContributionLink'
-import { TransactionLink } from '@entity/TransactionLink'
-import { EventType } from '@/event/Event'
-import { Event as DbEvent } from '@entity/Event'
-import { validate as validateUUID, version as versionUUID } from 'uuid'
-import { peterLustig } from '@/seeds/users/peter-lustig'
-import { UserContact } from '@entity/UserContact'
-import { OptInType } from '../enum/OptInType'
-import { UserContactType } from '../enum/UserContactType'
+import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg'
import { bobBaumeister } from '@/seeds/users/bob-baumeister'
-import { stephenHawking } from '@/seeds/users/stephen-hawking'
import { garrickOllivander } from '@/seeds/users/garrick-ollivander'
-import { encryptPassword } from '@/password/PasswordEncryptor'
-import { PasswordEncryptionType } from '../enum/PasswordEncryptionType'
-import { SecretKeyCryptographyCreateKey } from '@/password/EncryptorUtils'
+import { peterLustig } from '@/seeds/users/peter-lustig'
+import { stephenHawking } from '@/seeds/users/stephen-hawking'
+import { printTimeDuration } from '@/util/time'
+import { objectValuesToArray } from '@/util/utilities'
// import { klicktippSignIn } from '@/apis/KlicktippController'
diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts
index d2bc9d71e..a01719775 100644
--- a/backend/src/graphql/resolver/UserResolver.ts
+++ b/backend/src/graphql/resolver/UserResolver.ts
@@ -2,8 +2,12 @@
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/restrict-template-expressions */
+import { getConnection, getCustomRepository, IsNull, Not } from '@dbTools/typeorm'
+import { ContributionLink as DbContributionLink } from '@entity/ContributionLink'
+import { TransactionLink as DbTransactionLink } from '@entity/TransactionLink'
+import { User as DbUser } from '@entity/User'
+import { UserContact as DbUserContact } from '@entity/UserContact'
import i18n from 'i18n'
-import { v4 as uuidv4 } from 'uuid'
import {
Resolver,
Query,
@@ -15,43 +19,31 @@ import {
Mutation,
Int,
} from 'type-graphql'
-import { getConnection, getCustomRepository, IsNull, Not } from '@dbTools/typeorm'
+import { v4 as uuidv4 } from 'uuid'
-import { User as DbUser } from '@entity/User'
-import { UserContact as DbUserContact } from '@entity/UserContact'
-import { TransactionLink as DbTransactionLink } from '@entity/TransactionLink'
-import { ContributionLink as DbContributionLink } from '@entity/ContributionLink'
-import { UserRepository } from '@repository/User'
-
-import { User } from '@model/User'
-import { SearchAdminUsersResult } from '@model/AdminUser'
-import { UserAdmin, SearchUsersResult } from '@model/UserAdmin'
+import CreateUserArgs from '@arg/CreateUserArgs'
+import Paginated from '@arg/Paginated'
+import SearchUsersArgs from '@arg/SearchUsersArgs'
+import UnsecureLoginArgs from '@arg/UnsecureLoginArgs'
+import UpdateUserInfosArgs from '@arg/UpdateUserInfosArgs'
import { OptInType } from '@enum/OptInType'
import { Order } from '@enum/Order'
+import { PasswordEncryptionType } from '@enum/PasswordEncryptionType'
import { UserContactType } from '@enum/UserContactType'
+import { SearchAdminUsersResult } from '@model/AdminUser'
+import { User } from '@model/User'
+import { UserAdmin, SearchUsersResult } from '@model/UserAdmin'
+import { UserRepository } from '@repository/User'
+import { klicktippSignIn } from '@/apis/KlicktippController'
+import { encode } from '@/auth/JWT'
+import { RIGHTS } from '@/auth/RIGHTS'
+import CONFIG from '@/config'
import {
sendAccountActivationEmail,
sendAccountMultiRegistrationEmail,
sendResetPasswordEmail,
} from '@/emails/sendEmailVariants'
-
-import { getTimeDurationObject, printTimeDuration } from '@/util/time'
-import CreateUserArgs from '@arg/CreateUserArgs'
-import UnsecureLoginArgs from '@arg/UnsecureLoginArgs'
-import UpdateUserInfosArgs from '@arg/UpdateUserInfosArgs'
-import Paginated from '@arg/Paginated'
-import SearchUsersArgs from '@arg/SearchUsersArgs'
-
-import { backendLogger as logger } from '@/server/logger'
-import { Context, getUser, getClientTimezoneOffset } from '@/server/context'
-import CONFIG from '@/config'
-import { communityDbUser } from '@/util/communityUser'
-import { encode } from '@/auth/JWT'
-import { klicktippNewsletterStateMiddleware } from '@/middleware/klicktippMiddleware'
-import { klicktippSignIn } from '@/apis/KlicktippController'
-import { RIGHTS } from '@/auth/RIGHTS'
-import { hasElopageBuys } from '@/util/hasElopageBuys'
import {
Event,
EventType,
@@ -68,17 +60,23 @@ import {
EVENT_ADMIN_USER_DELETE,
EVENT_ADMIN_USER_UNDELETE,
} from '@/event/Event'
-import { getUserCreations } from './util/creations'
+import { klicktippNewsletterStateMiddleware } from '@/middleware/klicktippMiddleware'
import { isValidPassword } from '@/password/EncryptorUtils'
-import { FULL_CREATION_AVAILABLE } from './const/const'
import { encryptPassword, verifyPassword } from '@/password/PasswordEncryptor'
-import { PasswordEncryptionType } from '../enum/PasswordEncryptionType'
+import { Context, getUser, getClientTimezoneOffset } from '@/server/context'
import LogError from '@/server/LogError'
+import { backendLogger as logger } from '@/server/logger'
+import { communityDbUser } from '@/util/communityUser'
+import { hasElopageBuys } from '@/util/hasElopageBuys'
+import { getTimeDurationObject, printTimeDuration } from '@/util/time'
-// eslint-disable-next-line @typescript-eslint/no-var-requires
-const sodium = require('sodium-native')
-// eslint-disable-next-line @typescript-eslint/no-var-requires
+import { FULL_CREATION_AVAILABLE } from './const/const'
+import { getUserCreations } from './util/creations'
+
+// 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')
const LANGUAGES = ['de', 'en', 'es', 'fr', 'nl']
const DEFAULT_LANGUAGE = 'de'
diff --git a/backend/src/graphql/resolver/const/const.ts b/backend/src/graphql/resolver/const/const.ts
index e4eb9a13b..b97694221 100644
--- a/backend/src/graphql/resolver/const/const.ts
+++ b/backend/src/graphql/resolver/const/const.ts
@@ -1,4 +1,4 @@
-import Decimal from 'decimal.js-light'
+import { Decimal } from 'decimal.js-light'
export const MAX_CREATION_AMOUNT = new Decimal(1000)
export const FULL_CREATION_AVAILABLE = [
diff --git a/backend/src/graphql/resolver/semaphore.test.ts b/backend/src/graphql/resolver/semaphore.test.ts
index 716d077ac..6963c980e 100644
--- a/backend/src/graphql/resolver/semaphore.test.ts
+++ b/backend/src/graphql/resolver/semaphore.test.ts
@@ -4,13 +4,12 @@
/* eslint-disable @typescript-eslint/restrict-template-expressions */
/* eslint-disable @typescript-eslint/no-explicit-any */
-import Decimal from 'decimal.js-light'
-import { userFactory } from '@/seeds/factory/user'
-import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg'
-import { bobBaumeister } from '@/seeds/users/bob-baumeister'
-import { peterLustig } from '@/seeds/users/peter-lustig'
-import { creationFactory, nMonthsBefore } from '@/seeds/factory/creation'
+import { Decimal } from 'decimal.js-light'
+
import { cleanDB, testEnvironment, contributionDateFormatter } from '@test/helpers'
+
+import { creationFactory, nMonthsBefore } from '@/seeds/factory/creation'
+import { userFactory } from '@/seeds/factory/user'
import {
confirmContribution,
createContribution,
@@ -20,6 +19,9 @@ import {
createContributionLink,
sendCoins,
} from '@/seeds/graphql/mutations'
+import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg'
+import { bobBaumeister } from '@/seeds/users/bob-baumeister'
+import { peterLustig } from '@/seeds/users/peter-lustig'
let mutate: any, con: any
let testEnv: any
diff --git a/backend/src/graphql/resolver/util/creations.test.ts b/backend/src/graphql/resolver/util/creations.test.ts
index 4eabec500..1e3460b30 100644
--- a/backend/src/graphql/resolver/util/creations.test.ts
+++ b/backend/src/graphql/resolver/util/creations.test.ts
@@ -4,13 +4,16 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
-import { testEnvironment, cleanDB, contributionDateFormatter } from '@test/helpers'
-import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg'
-import { peterLustig } from '@/seeds/users/peter-lustig'
-import { User } from '@entity/User'
import { Contribution } from '@entity/Contribution'
+import { User } from '@entity/User'
+
+import { testEnvironment, cleanDB, contributionDateFormatter } from '@test/helpers'
+
import { userFactory } from '@/seeds/factory/user'
import { login, createContribution, adminCreateContribution } from '@/seeds/graphql/mutations'
+import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg'
+import { peterLustig } from '@/seeds/users/peter-lustig'
+
import { getUserCreation } from './creations'
let mutate: any, con: any
diff --git a/backend/src/graphql/resolver/util/creations.ts b/backend/src/graphql/resolver/util/creations.ts
index a45703ed2..dbf0650a6 100644
--- a/backend/src/graphql/resolver/util/creations.ts
+++ b/backend/src/graphql/resolver/util/creations.ts
@@ -1,13 +1,15 @@
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
-import LogError from '@/server/LogError'
-import { backendLogger as logger } from '@/server/logger'
import { getConnection } from '@dbTools/typeorm'
import { Contribution } from '@entity/Contribution'
-import Decimal from 'decimal.js-light'
-import { FULL_CREATION_AVAILABLE, MAX_CREATION_AMOUNT } from '../const/const'
+import { Decimal } from 'decimal.js-light'
+
import { OpenCreation } from '@model/OpenCreation'
+import { FULL_CREATION_AVAILABLE, MAX_CREATION_AMOUNT } from '@/graphql/resolver/const/const'
+import LogError from '@/server/LogError'
+import { backendLogger as logger } from '@/server/logger'
+
interface CreationMap {
id: number
creations: Decimal[]
diff --git a/backend/src/graphql/resolver/util/findContributions.ts b/backend/src/graphql/resolver/util/findContributions.ts
index 1daa831c4..a08631e2c 100644
--- a/backend/src/graphql/resolver/util/findContributions.ts
+++ b/backend/src/graphql/resolver/util/findContributions.ts
@@ -1,7 +1,8 @@
+import { In } from '@dbTools/typeorm'
+import { Contribution as DbContribution } from '@entity/Contribution'
+
import { ContributionStatus } from '@enum/ContributionStatus'
import { Order } from '@enum/Order'
-import { Contribution as DbContribution } from '@entity/Contribution'
-import { In } from '@dbTools/typeorm'
interface FindContributionsOptions {
order: Order
diff --git a/backend/src/graphql/resolver/util/transactionLinkList.ts b/backend/src/graphql/resolver/util/transactionLinkList.ts
index 2d151b94a..544d35114 100644
--- a/backend/src/graphql/resolver/util/transactionLinkList.ts
+++ b/backend/src/graphql/resolver/util/transactionLinkList.ts
@@ -1,10 +1,12 @@
import { MoreThan } from '@dbTools/typeorm'
import { TransactionLink as DbTransactionLink } from '@entity/TransactionLink'
import { User as DbUser } from '@entity/User'
-import { Order } from '@enum/Order'
+
import Paginated from '@arg/Paginated'
import TransactionLinkFilters from '@arg/TransactionLinkFilters'
+import { Order } from '@enum/Order'
import { TransactionLink, TransactionLinkResult } from '@model/TransactionLink'
+
import { User } from '@/graphql/model/User'
export default async function transactionLinkList(
diff --git a/backend/src/graphql/scalar/Decimal.ts b/backend/src/graphql/scalar/Decimal.ts
index da5a99e0c..e46446cee 100644
--- a/backend/src/graphql/scalar/Decimal.ts
+++ b/backend/src/graphql/scalar/Decimal.ts
@@ -1,7 +1,7 @@
+import { Decimal } from 'decimal.js-light'
import { GraphQLScalarType, Kind } from 'graphql'
-import Decimal from 'decimal.js-light'
-export default new GraphQLScalarType({
+const DecimalType = new GraphQLScalarType({
name: 'Decimal',
description: 'The `Decimal` scalar type to represent currency values',
@@ -21,3 +21,5 @@ export default new GraphQLScalarType({
return new Decimal(ast.value)
},
})
+
+export default DecimalType
diff --git a/backend/src/graphql/schema.ts b/backend/src/graphql/schema.ts
index f14f45efa..c6097f027 100644
--- a/backend/src/graphql/schema.ts
+++ b/backend/src/graphql/schema.ts
@@ -1,10 +1,11 @@
+import path from 'path'
+
+import { Decimal } from 'decimal.js-light'
import { GraphQLSchema } from 'graphql'
import { buildSchema } from 'type-graphql'
-import path from 'path'
import isAuthorized from './directive/isAuthorized'
import DecimalScalar from './scalar/Decimal'
-import Decimal from 'decimal.js-light'
const schema = async (): Promise => {
return buildSchema({
diff --git a/backend/src/graphql/union/QueryLinkResult.ts b/backend/src/graphql/union/QueryLinkResult.ts
index bcd0ad6b8..390175d1d 100644
--- a/backend/src/graphql/union/QueryLinkResult.ts
+++ b/backend/src/graphql/union/QueryLinkResult.ts
@@ -1,6 +1,8 @@
import { createUnionType } from 'type-graphql'
-import { TransactionLink } from '@model/TransactionLink'
+
import { ContributionLink } from '@model/ContributionLink'
+import { TransactionLink } from '@model/TransactionLink'
+
export default createUnionType({
name: 'QueryLinkResult', // the name of the GraphQL union
types: () => [TransactionLink, ContributionLink] as const, // function that returns tuple of object types classes
diff --git a/backend/src/index.ts b/backend/src/index.ts
index cd6d002cc..353b77616 100644
--- a/backend/src/index.ts
+++ b/backend/src/index.ts
@@ -1,10 +1,9 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
-import createServer from './server/createServer'
-
// config
import CONFIG from './config'
import { startValidateCommunities } from './federation/validateCommunities'
+import createServer from './server/createServer'
async function main() {
const { app } = await createServer()
diff --git a/backend/src/middleware/klicktippMiddleware.ts b/backend/src/middleware/klicktippMiddleware.ts
index 0469b4ccc..481094752 100644
--- a/backend/src/middleware/klicktippMiddleware.ts
+++ b/backend/src/middleware/klicktippMiddleware.ts
@@ -3,8 +3,10 @@
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/restrict-template-expressions */
import { MiddlewareFn } from 'type-graphql'
-import { /* klicktippSignIn, */ getKlickTippUser } from '@/apis/KlicktippController'
+
import { KlickTipp } from '@model/KlickTipp'
+
+import { /* klicktippSignIn, */ getKlickTippUser } from '@/apis/KlicktippController'
import CONFIG from '@/config'
import { klickTippLogger as logger } from '@/server/logger'
diff --git a/backend/src/password/EncryptorUtils.ts b/backend/src/password/EncryptorUtils.ts
index 4c802a86f..eb25edda6 100644
--- a/backend/src/password/EncryptorUtils.ts
+++ b/backend/src/password/EncryptorUtils.ts
@@ -1,13 +1,15 @@
/* eslint-disable @typescript-eslint/no-unsafe-call */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
+import { User } from '@entity/User'
+
+import { PasswordEncryptionType } from '@enum/PasswordEncryptionType'
+
import CONFIG from '@/config'
import LogError from '@/server/LogError'
import { backendLogger as logger } from '@/server/logger'
-import { User } from '@entity/User'
-import { PasswordEncryptionType } from '@enum/PasswordEncryptionType'
-// eslint-disable-next-line @typescript-eslint/no-var-requires
+// eslint-disable-next-line @typescript-eslint/no-var-requires, import/no-commonjs
const sodium = require('sodium-native')
// We will reuse this for changePassword
diff --git a/backend/src/password/PasswordEncryptor.ts b/backend/src/password/PasswordEncryptor.ts
index 1735106c1..1c7457a40 100644
--- a/backend/src/password/PasswordEncryptor.ts
+++ b/backend/src/password/PasswordEncryptor.ts
@@ -1,4 +1,5 @@
import { User } from '@entity/User'
+
// import { logger } from '@test/testSetup' getting error "jest is not defined"
import { getUserCryptographicSalt, SecretKeyCryptographyCreateKey } from './EncryptorUtils'
diff --git a/backend/src/seeds/creation/index.ts b/backend/src/seeds/creation/index.ts
index 38cb98361..3f2a545a4 100644
--- a/backend/src/seeds/creation/index.ts
+++ b/backend/src/seeds/creation/index.ts
@@ -1,5 +1,6 @@
+import { nMonthsBefore } from '@/seeds/factory/creation'
+
import { CreationInterface } from './CreationInterface'
-import { nMonthsBefore } from '../factory/creation'
const bobsSendings = [
{
diff --git a/backend/src/seeds/factory/contributionLink.ts b/backend/src/seeds/factory/contributionLink.ts
index 5925cdcfe..51e970a5c 100644
--- a/backend/src/seeds/factory/contributionLink.ts
+++ b/backend/src/seeds/factory/contributionLink.ts
@@ -2,9 +2,11 @@
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/unbound-method */
import { ApolloServerTestClient } from 'apollo-server-testing'
-import { login, createContributionLink } from '@/seeds/graphql/mutations'
+
import { ContributionLink } from '@model/ContributionLink'
+
import { ContributionLinkInterface } from '@/seeds/contributionLink/ContributionLinkInterface'
+import { login, createContributionLink } from '@/seeds/graphql/mutations'
export const contributionLinkFactory = async (
client: ApolloServerTestClient,
diff --git a/backend/src/seeds/factory/creation.ts b/backend/src/seeds/factory/creation.ts
index db58c9d51..6a3aaa3e7 100644
--- a/backend/src/seeds/factory/creation.ts
+++ b/backend/src/seeds/factory/creation.ts
@@ -5,12 +5,13 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
-import { login, createContribution, confirmContribution } from '@/seeds/graphql/mutations'
-import { CreationInterface } from '@/seeds/creation/CreationInterface'
-import { ApolloServerTestClient } from 'apollo-server-testing'
-import { Transaction } from '@entity/Transaction'
import { Contribution } from '@entity/Contribution'
+import { Transaction } from '@entity/Transaction'
+import { ApolloServerTestClient } from 'apollo-server-testing'
+
import { findUserByEmail } from '@/graphql/resolver/UserResolver'
+import { CreationInterface } from '@/seeds/creation/CreationInterface'
+import { login, createContribution, confirmContribution } from '@/seeds/graphql/mutations'
// import CONFIG from '@/config/index'
export const nMonthsBefore = (date: Date, months = 1): string => {
diff --git a/backend/src/seeds/factory/transactionLink.ts b/backend/src/seeds/factory/transactionLink.ts
index 797a93183..cab478c4b 100644
--- a/backend/src/seeds/factory/transactionLink.ts
+++ b/backend/src/seeds/factory/transactionLink.ts
@@ -1,10 +1,11 @@
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/unbound-method */
+import { TransactionLink } from '@entity/TransactionLink'
import { ApolloServerTestClient } from 'apollo-server-testing'
+
+import { transactionLinkExpireDate } from '@/graphql/resolver/TransactionLinkResolver'
import { login, createTransactionLink } from '@/seeds/graphql/mutations'
import { TransactionLinkInterface } from '@/seeds/transactionLink/TransactionLinkInterface'
-import { transactionLinkExpireDate } from '@/graphql/resolver/TransactionLinkResolver'
-import { TransactionLink } from '@entity/TransactionLink'
export const transactionLinkFactory = async (
client: ApolloServerTestClient,
diff --git a/backend/src/seeds/factory/user.ts b/backend/src/seeds/factory/user.ts
index 854e5a4ed..13a274911 100644
--- a/backend/src/seeds/factory/user.ts
+++ b/backend/src/seeds/factory/user.ts
@@ -1,10 +1,11 @@
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/unbound-method */
-import { createUser, setPassword } from '@/seeds/graphql/mutations'
import { User } from '@entity/User'
-import { UserInterface } from '@/seeds/users/UserInterface'
import { ApolloServerTestClient } from 'apollo-server-testing'
+import { createUser, setPassword } from '@/seeds/graphql/mutations'
+import { UserInterface } from '@/seeds/users/UserInterface'
+
export const userFactory = async (
client: ApolloServerTestClient,
user: UserInterface,
diff --git a/backend/src/seeds/graphql/mutations.ts b/backend/src/seeds/graphql/mutations.ts
index 1aa12a32f..7e141e5d6 100644
--- a/backend/src/seeds/graphql/mutations.ts
+++ b/backend/src/seeds/graphql/mutations.ts
@@ -1,4 +1,4 @@
-import gql from 'graphql-tag'
+import { gql } from 'graphql-tag'
export const subscribeNewsletter = gql`
mutation ($email: String!, $language: String!) {
@@ -133,18 +133,11 @@ export const unDeleteUser = gql`
`
export const adminUpdateContribution = gql`
- mutation ($id: Int!, $email: String!, $amount: Decimal!, $memo: String!, $creationDate: String!) {
- adminUpdateContribution(
- id: $id
- email: $email
- amount: $amount
- memo: $memo
- creationDate: $creationDate
- ) {
+ mutation ($id: Int!, $amount: Decimal!, $memo: String!, $creationDate: String!) {
+ adminUpdateContribution(id: $id, amount: $amount, memo: $memo, creationDate: $creationDate) {
amount
date
memo
- creation
}
}
`
diff --git a/backend/src/seeds/graphql/queries.ts b/backend/src/seeds/graphql/queries.ts
index 06654eb91..03b71b2de 100644
--- a/backend/src/seeds/graphql/queries.ts
+++ b/backend/src/seeds/graphql/queries.ts
@@ -1,4 +1,4 @@
-import gql from 'graphql-tag'
+import { gql } from 'graphql-tag'
export const verifyLogin = gql`
query {
diff --git a/backend/src/seeds/index.ts b/backend/src/seeds/index.ts
index 55cd65ec1..d1960eea9 100644
--- a/backend/src/seeds/index.ts
+++ b/backend/src/seeds/index.ts
@@ -5,22 +5,22 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
-import { backendLogger as logger } from '@/server/logger'
-import createServer from '../server/createServer'
+import { entities } from '@entity/index'
import { createTestClient } from 'apollo-server-testing'
-
import { name, internet, datatype } from 'faker'
-import { users } from './users/index'
-import { creations } from './creation/index'
-import { transactionLinks } from './transactionLink/index'
+import CONFIG from '@/config'
+import createServer from '@/server/createServer'
+import { backendLogger as logger } from '@/server/logger'
+
import { contributionLinks } from './contributionLink/index'
-import { userFactory } from './factory/user'
+import { creations } from './creation/index'
+import { contributionLinkFactory } from './factory/contributionLink'
import { creationFactory } from './factory/creation'
import { transactionLinkFactory } from './factory/transactionLink'
-import { contributionLinkFactory } from './factory/contributionLink'
-import { entities } from '@entity/index'
-import CONFIG from '@/config'
+import { userFactory } from './factory/user'
+import { transactionLinks } from './transactionLink/index'
+import { users } from './users/index'
CONFIG.EMAIL = false
diff --git a/backend/src/seeds/users/index.ts b/backend/src/seeds/users/index.ts
index 7a6dbe519..beb6c6f25 100644
--- a/backend/src/seeds/users/index.ts
+++ b/backend/src/seeds/users/index.ts
@@ -1,9 +1,9 @@
-import { peterLustig } from './peter-lustig'
import { bibiBloxberg } from './bibi-bloxberg'
import { bobBaumeister } from './bob-baumeister'
+import { garrickOllivander } from './garrick-ollivander'
+import { peterLustig } from './peter-lustig'
import { raeuberHotzenplotz } from './raeuber-hotzenplotz'
import { stephenHawking } from './stephen-hawking'
-import { garrickOllivander } from './garrick-ollivander'
export const users = [
peterLustig,
diff --git a/backend/src/server/context.ts b/backend/src/server/context.ts
index 32a765777..f0e63daea 100644
--- a/backend/src/server/context.ts
+++ b/backend/src/server/context.ts
@@ -1,8 +1,10 @@
-import { Role } from '@/auth/Role'
-import { User as dbUser } from '@entity/User'
import { Transaction as dbTransaction } from '@entity/Transaction'
-import Decimal from 'decimal.js-light'
+import { User as dbUser } from '@entity/User'
import { ExpressContext } from 'apollo-server-express'
+import { Decimal } from 'decimal.js-light'
+
+import { Role } from '@/auth/Role'
+
import LogError from './LogError'
export interface Context {
diff --git a/backend/src/server/createServer.ts b/backend/src/server/createServer.ts
index 0c5009b6f..8a94ef3eb 100644
--- a/backend/src/server/createServer.ts
+++ b/backend/src/server/createServer.ts
@@ -1,35 +1,22 @@
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/restrict-template-expressions */
/* eslint-disable @typescript-eslint/unbound-method */
-import 'reflect-metadata'
-
-import { ApolloServer } from 'apollo-server-express'
-import express, { Express } from 'express'
-
-// database
-import connection from '@/typeorm/connection'
-import { checkDBVersion } from '@/typeorm/DBVersion'
-
-// server
-import cors from './cors'
-import serverContext from './context'
-import plugins from './plugins'
-
-// config
-import CONFIG from '@/config'
-
-// graphql
-import schema from '@/graphql/schema'
-
-// webhooks
-import { elopageWebhook } from '@/webhook/elopage'
import { Connection } from '@dbTools/typeorm'
-
-import { apolloLogger } from './logger'
+import { ApolloServer } from 'apollo-server-express'
+import express, { Express, json, urlencoded } from 'express'
import { Logger } from 'log4js'
-// i18n
+import CONFIG from '@/config'
+import schema from '@/graphql/schema'
+import connection from '@/typeorm/connection'
+import { checkDBVersion } from '@/typeorm/DBVersion'
+import { elopageWebhook } from '@/webhook/elopage'
+
+import serverContext from './context'
+import cors from './cors'
import { i18n } from './localization'
+import { apolloLogger } from './logger'
+import plugins from './plugins'
// TODO implement
// import queryComplexity, { simpleEstimator, fieldConfigEstimator } from "graphql-query-complexity";
@@ -66,9 +53,9 @@ const createServer = async (
app.use(cors)
// bodyparser json
- app.use(express.json())
+ app.use(json())
// bodyparser urlencoded for elopage
- app.use(express.urlencoded({ extended: true }))
+ app.use(urlencoded({ extended: true }))
// i18n
app.use(localization.init)
diff --git a/backend/src/server/localization.ts b/backend/src/server/localization.ts
index 44fb1b526..59ba4cfce 100644
--- a/backend/src/server/localization.ts
+++ b/backend/src/server/localization.ts
@@ -1,7 +1,9 @@
import path from 'path'
-import { backendLogger } from './logger'
+
import i18n from 'i18n'
+import { backendLogger } from './logger'
+
i18n.configure({
locales: ['en', 'de'],
defaultLocale: 'en',
diff --git a/backend/src/server/logger.ts b/backend/src/server/logger.ts
index 5cfa94285..89f292ab7 100644
--- a/backend/src/server/logger.ts
+++ b/backend/src/server/logger.ts
@@ -1,20 +1,21 @@
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
-import log4js from 'log4js'
-import CONFIG from '@/config'
-
import { readFileSync } from 'fs'
+import { configure, getLogger } from 'log4js'
+
+import CONFIG from '@/config'
+
const options = JSON.parse(readFileSync(CONFIG.LOG4JS_CONFIG, 'utf-8'))
options.categories.backend.level = CONFIG.LOG_LEVEL
options.categories.apollo.level = CONFIG.LOG_LEVEL
-log4js.configure(options)
+configure(options)
-const apolloLogger = log4js.getLogger('apollo')
-const backendLogger = log4js.getLogger('backend')
-const klickTippLogger = log4js.getLogger('klicktipp')
+const apolloLogger = getLogger('apollo')
+const backendLogger = getLogger('backend')
+const klickTippLogger = getLogger('klicktipp')
backendLogger.addContext('user', 'unknown')
diff --git a/backend/src/typeorm/DBVersion.ts b/backend/src/typeorm/DBVersion.ts
index cb53c49f1..c4c8d6c78 100644
--- a/backend/src/typeorm/DBVersion.ts
+++ b/backend/src/typeorm/DBVersion.ts
@@ -1,4 +1,5 @@
import { Migration } from '@entity/Migration'
+
import { backendLogger as logger } from '@/server/logger'
const getDBVersion = async (): Promise => {
diff --git a/backend/src/typeorm/connection.ts b/backend/src/typeorm/connection.ts
index d08d935d4..a3a20450b 100644
--- a/backend/src/typeorm/connection.ts
+++ b/backend/src/typeorm/connection.ts
@@ -1,9 +1,10 @@
// 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
import { Connection, createConnection, FileLogger } from '@dbTools/typeorm'
-import CONFIG from '@/config'
import { entities } from '@entity/index'
+import CONFIG from '@/config'
+
const connection = async (): Promise => {
try {
return createConnection({
diff --git a/backend/src/typeorm/repository/Transaction.ts b/backend/src/typeorm/repository/Transaction.ts
index 58e9ca30b..61e87b3c8 100644
--- a/backend/src/typeorm/repository/Transaction.ts
+++ b/backend/src/typeorm/repository/Transaction.ts
@@ -1,5 +1,6 @@
import { EntityRepository, Repository } from '@dbTools/typeorm'
import { Transaction } from '@entity/Transaction'
+
import { Order } from '@enum/Order'
import { TransactionTypeId } from '@enum/TransactionTypeId'
diff --git a/backend/src/typeorm/repository/TransactionLink.ts b/backend/src/typeorm/repository/TransactionLink.ts
index 7df1fd465..d2458b386 100644
--- a/backend/src/typeorm/repository/TransactionLink.ts
+++ b/backend/src/typeorm/repository/TransactionLink.ts
@@ -1,7 +1,7 @@
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
import { Repository, EntityRepository } from '@dbTools/typeorm'
import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink'
-import Decimal from 'decimal.js-light'
+import { Decimal } from 'decimal.js-light'
@EntityRepository(dbTransactionLink)
export class TransactionLinkRepository extends Repository {
diff --git a/backend/src/typeorm/repository/User.ts b/backend/src/typeorm/repository/User.ts
index e72a6e717..71e43329b 100644
--- a/backend/src/typeorm/repository/User.ts
+++ b/backend/src/typeorm/repository/User.ts
@@ -1,7 +1,8 @@
-import SearchUsersFilters from '@/graphql/arg/SearchUsersFilters'
import { Brackets, EntityRepository, IsNull, Not, Repository } from '@dbTools/typeorm'
import { User as DbUser } from '@entity/User'
+import SearchUsersFilters from '@/graphql/arg/SearchUsersFilters'
+
@EntityRepository(DbUser)
export class UserRepository extends Repository {
async findBySearchCriteriaPagedFiltered(
diff --git a/backend/src/util/communityUser.ts b/backend/src/util/communityUser.ts
index 4d04be1b8..f96c33470 100644
--- a/backend/src/util/communityUser.ts
+++ b/backend/src/util/communityUser.ts
@@ -1,12 +1,14 @@
/* eslint-disable @typescript-eslint/no-unused-vars */
-import { PasswordEncryptionType } from '@/graphql/enum/PasswordEncryptionType'
import { SaveOptions, RemoveOptions } from '@dbTools/typeorm'
import { User as dbUser } from '@entity/User'
import { UserContact } from '@entity/UserContact'
-// import { UserContact as EmailContact } from '@entity/UserContact'
+
import { User } from '@model/User'
+import { PasswordEncryptionType } from '@/graphql/enum/PasswordEncryptionType'
+// import { UserContact as EmailContact } from '@entity/UserContact'
+
const communityDbUser: dbUser = {
id: -1,
gradidoID: '11111111-2222-4333-4444-55555555',
diff --git a/backend/src/util/decay.test.ts b/backend/src/util/decay.test.ts
index 0e7b02f56..1d4ebab3b 100644
--- a/backend/src/util/decay.test.ts
+++ b/backend/src/util/decay.test.ts
@@ -1,5 +1,5 @@
-import Decimal from 'decimal.js-light'
-import 'reflect-metadata' // This might be wise to load in a test setup file
+import { Decimal } from 'decimal.js-light'
+
import { decayFormula, calculateDecay } from './decay'
describe('utils/decay', () => {
diff --git a/backend/src/util/decay.ts b/backend/src/util/decay.ts
index 641654756..77157e203 100644
--- a/backend/src/util/decay.ts
+++ b/backend/src/util/decay.ts
@@ -1,6 +1,8 @@
-import Decimal from 'decimal.js-light'
-import CONFIG from '@/config'
+import { Decimal } from 'decimal.js-light'
+
import { Decay } from '@model/Decay'
+
+import CONFIG from '@/config'
import LogError from '@/server/LogError'
// TODO: externalize all those definitions and functions into an external decay library
diff --git a/backend/src/util/klicktipp.ts b/backend/src/util/klicktipp.ts
index baa7970fc..4d90be134 100644
--- a/backend/src/util/klicktipp.ts
+++ b/backend/src/util/klicktipp.ts
@@ -1,7 +1,8 @@
-import connection from '@/typeorm/connection'
-import { getKlickTippUser } from '@/apis/KlicktippController'
import { User } from '@entity/User'
+
+import { getKlickTippUser } from '@/apis/KlicktippController'
import LogError from '@/server/LogError'
+import connection from '@/typeorm/connection'
export async function retrieveNotRegisteredEmails(): Promise {
const con = await connection()
diff --git a/backend/src/util/utilities.ts b/backend/src/util/utilities.ts
index fa8e82d9e..2cf53f1e4 100644
--- a/backend/src/util/utilities.ts
+++ b/backend/src/util/utilities.ts
@@ -1,4 +1,4 @@
-import Decimal from 'decimal.js-light'
+import { Decimal } from 'decimal.js-light'
import i18n from 'i18n'
export const objectValuesToArray = (obj: { [x: string]: string }): Array => {
diff --git a/backend/src/util/validate.ts b/backend/src/util/validate.ts
index 482e9eb50..22a6ee5db 100644
--- a/backend/src/util/validate.ts
+++ b/backend/src/util/validate.ts
@@ -1,10 +1,13 @@
-import { calculateDecay } from './decay'
-import Decimal from 'decimal.js-light'
-import { Decay } from '@model/Decay'
import { getCustomRepository } from '@dbTools/typeorm'
-import { TransactionLinkRepository } from '@repository/TransactionLink'
import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink'
-import { getLastTransaction } from '../graphql/resolver/util/getLastTransaction'
+import { Decimal } from 'decimal.js-light'
+
+import { Decay } from '@model/Decay'
+import { TransactionLinkRepository } from '@repository/TransactionLink'
+
+import { getLastTransaction } from '@/graphql/resolver/util/getLastTransaction'
+
+import { calculateDecay } from './decay'
function isStringBoolean(value: string): boolean {
const lowerValue = value.toLowerCase()
diff --git a/backend/src/util/virtualTransactions.ts b/backend/src/util/virtualTransactions.ts
index b02f87ee5..68a37746b 100644
--- a/backend/src/util/virtualTransactions.ts
+++ b/backend/src/util/virtualTransactions.ts
@@ -1,11 +1,13 @@
/* eslint-disable @typescript-eslint/no-unused-vars */
-import { Transaction } from '@model/Transaction'
import { SaveOptions, RemoveOptions } from '@dbTools/typeorm'
import { Transaction as dbTransaction } from '@entity/Transaction'
+import { Decimal } from 'decimal.js-light'
+
import { TransactionTypeId } from '@enum/TransactionTypeId'
-import { calculateDecay } from './decay'
+import { Transaction } from '@model/Transaction'
import { User } from '@model/User'
-import Decimal from 'decimal.js-light'
+
+import { calculateDecay } from './decay'
const defaultModelFunctions = {
hasId: function (): boolean {
diff --git a/backend/src/webhook/elopage.ts b/backend/src/webhook/elopage.ts
index 587bb788c..404f2696a 100644
--- a/backend/src/webhook/elopage.ts
+++ b/backend/src/webhook/elopage.ts
@@ -32,9 +32,10 @@
*/
import { LoginElopageBuys } from '@entity/LoginElopageBuys'
-import { UserResolver } from '@/graphql/resolver/UserResolver'
import { UserContact as dbUserContact } from '@entity/UserContact'
+import { UserResolver } from '@/graphql/resolver/UserResolver'
+
export const elopageWebhook = async (req: any, res: any): Promise => {
// eslint-disable-next-line no-console
console.log('Elopage Hook received', req.body)
diff --git a/backend/test/extensions.ts b/backend/test/extensions.ts
index 26fb11510..359597f4a 100644
--- a/backend/test/extensions.ts
+++ b/backend/test/extensions.ts
@@ -3,7 +3,7 @@
/* eslint-disable @typescript-eslint/restrict-template-expressions */
/* eslint-disable @typescript-eslint/no-empty-interface */
-import Decimal from 'decimal.js-light'
+import { Decimal } from 'decimal.js-light'
expect.extend({
decimalEqual(received, value) {
diff --git a/backend/test/helpers.ts b/backend/test/helpers.ts
index a5f721717..f440adc02 100644
--- a/backend/test/helpers.ts
+++ b/backend/test/helpers.ts
@@ -6,10 +6,12 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
-import { createTestClient } from 'apollo-server-testing'
-import createServer from '../src/server/createServer'
import { initialize } from '@dbTools/helpers'
import { entities } from '@entity/index'
+import { createTestClient } from 'apollo-server-testing'
+
+import createServer from '@/server/createServer'
+
import { i18n, logger } from './testSetup'
export const headerPushMock = jest.fn((t) => {
diff --git a/backend/test/testSetup.ts b/backend/test/testSetup.ts
index b13e3cf26..4e8a67e3f 100644
--- a/backend/test/testSetup.ts
+++ b/backend/test/testSetup.ts
@@ -1,8 +1,8 @@
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/no-unsafe-return */
import CONFIG from '@/config'
-import { backendLogger as logger } from '@/server/logger'
import { i18n } from '@/server/localization'
+import { backendLogger as logger } from '@/server/logger'
CONFIG.EMAIL = true
CONFIG.EMAIL_TEST_MODUS = false
diff --git a/backend/yarn.lock b/backend/yarn.lock
index 2e5487de4..4be995dc5 100644
--- a/backend/yarn.lock
+++ b/backend/yarn.lock
@@ -712,6 +712,18 @@
"@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0"
+"@pkgr/utils@^2.3.1":
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.3.1.tgz#0a9b06ffddee364d6642b3cd562ca76f55b34a03"
+ integrity sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==
+ dependencies:
+ cross-spawn "^7.0.3"
+ is-glob "^4.0.3"
+ open "^8.4.0"
+ picocolors "^1.0.0"
+ tiny-glob "^0.2.9"
+ tslib "^2.4.0"
+
"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf"
@@ -792,6 +804,11 @@
dependencies:
"@sinonjs/commons" "^1.7.0"
+"@sqltools/formatter@^1.2.2":
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/@sqltools/formatter/-/formatter-1.2.5.tgz#3abc203c79b8c3e90fd6c156a0c62d5403520e12"
+ integrity sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==
+
"@szmarczak/http-timer@^1.1.2":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421"
@@ -1084,6 +1101,13 @@
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40"
integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==
+"@types/mysql@^2.15.8":
+ version "2.15.21"
+ resolved "https://registry.yarnpkg.com/@types/mysql/-/mysql-2.15.21.tgz#7516cba7f9d077f980100c85fd500c8210bd5e45"
+ integrity sha512-NPotx5CVful7yB+qZbWtXL2fA4e7aEHkihHLjklc6ID8aq7bhguHgeIoC1EmSNTAuCgI6ZXrjt2ZSaXnYX0EUg==
+ dependencies:
+ "@types/node" "*"
+
"@types/node@*", "@types/node@^16.10.3":
version "16.10.3"
resolved "https://registry.yarnpkg.com/@types/node/-/node-16.10.3.tgz#7a8f2838603ea314d1d22bb3171d899e15c57bd5"
@@ -1180,6 +1204,11 @@
dependencies:
"@types/yargs-parser" "*"
+"@types/zen-observable@0.8.3":
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.3.tgz#781d360c282436494b32fe7d9f7f8e64b3118aa3"
+ integrity sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw==
+
"@typescript-eslint/eslint-plugin@^4.28.0":
version "4.33.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276"
@@ -1481,6 +1510,11 @@ ansi-styles@^5.0.0:
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
+any-promise@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
+ integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==
+
anymatch@^3.0.3, anymatch@~3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
@@ -1646,6 +1680,11 @@ apollo-utilities@^1.0.1, apollo-utilities@^1.3.0:
ts-invariant "^0.4.0"
tslib "^1.10.0"
+app-root-path@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.1.0.tgz#5971a2fc12ba170369a7a1ef018c71e6e47c2e86"
+ integrity sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==
+
arg@^4.1.0:
version "4.1.3"
resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
@@ -1658,6 +1697,11 @@ argparse@^1.0.7:
dependencies:
sprintf-js "~1.0.2"
+argparse@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
array-differ@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b"
@@ -1668,15 +1712,15 @@ array-flatten@1.1.1:
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
-array-includes@^3.1.3:
- version "3.1.4"
- resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9"
- integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==
+array-includes@^3.1.6:
+ version "3.1.6"
+ resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f"
+ integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==
dependencies:
call-bind "^1.0.2"
- define-properties "^1.1.3"
- es-abstract "^1.19.1"
- get-intrinsic "^1.1.1"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+ get-intrinsic "^1.1.3"
is-string "^1.0.7"
array-union@^2.1.0:
@@ -1684,14 +1728,25 @@ array-union@^2.1.0:
resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
-array.prototype.flat@^1.2.4:
- version "1.2.5"
- resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz#07e0975d84bbc7c48cd1879d609e682598d33e13"
- integrity sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==
+array.prototype.flat@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2"
+ integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==
dependencies:
call-bind "^1.0.2"
- define-properties "^1.1.3"
- es-abstract "^1.19.0"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+ es-shim-unscopables "^1.0.0"
+
+array.prototype.flatmap@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183"
+ integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+ es-shim-unscopables "^1.0.0"
arrify@^2.0.1:
version "2.0.1"
@@ -1725,6 +1780,11 @@ asynckit@^0.4.0:
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+available-typed-arrays@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
+ integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
+
await-semaphore@^0.1.3:
version "0.1.3"
resolved "https://registry.yarnpkg.com/await-semaphore/-/await-semaphore-0.1.3.tgz#2b88018cc8c28e06167ae1cdff02504f1f9688d3"
@@ -1815,6 +1875,16 @@ balanced-match@^1.0.0:
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+base64-js@^1.3.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+ integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
+bignumber.js@9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.0.tgz#805880f84a329b5eac6e7cb6f8274b6d82bdf075"
+ integrity sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==
+
binary-extensions@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
@@ -1920,6 +1990,14 @@ buffer-from@^1.0.0:
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+buffer@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6"
+ integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==
+ dependencies:
+ base64-js "^1.3.1"
+ ieee754 "^1.2.1"
+
busboy@^0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b"
@@ -2075,6 +2153,18 @@ cli-boxes@^2.2.1:
resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f"
integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==
+cli-highlight@^2.1.11:
+ version "2.1.11"
+ resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf"
+ integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==
+ dependencies:
+ chalk "^4.0.0"
+ highlight.js "^10.7.1"
+ mz "^2.4.0"
+ parse5 "^5.1.1"
+ parse5-htmlparser2-tree-adapter "^6.0.0"
+ yargs "^16.0.0"
+
cliui@^7.0.2:
version "7.0.4"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
@@ -2084,6 +2174,15 @@ cliui@^7.0.2:
strip-ansi "^6.0.0"
wrap-ansi "^7.0.0"
+cliui@^8.0.1:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa"
+ integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.1"
+ wrap-ansi "^7.0.0"
+
clone-response@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b"
@@ -2208,6 +2307,11 @@ core-js-pure@^3.10.2:
resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.18.2.tgz#d8cc11d4885ea919f3de776d45e720e4c769d406"
integrity sha512-4hMMLUlZhKJKOWbbGD1/VDUxGPEhEoN/T01k7bx271WiBKCvCfkgPzy0IeRS4PB50p6/N1q/SZL4B/TRsTE5bA==
+core-util-is@~1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
+ integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
+
cors@^2.8.5:
version "2.8.5"
resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29"
@@ -2267,6 +2371,11 @@ crypto-random-string@^2.0.0:
resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5"
integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==
+crypto@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/crypto/-/crypto-1.0.1.tgz#2af1b7cad8175d24c8a1b0778255794a21803037"
+ integrity sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==
+
css-select@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b"
@@ -2319,7 +2428,7 @@ date-format@^4.0.9:
resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.9.tgz#4788015ac56dedebe83b03bc361f00c1ddcf1923"
integrity sha512-+8J+BOUpSrlKLQLeF8xJJVTxS8QfRSuJgwxSVvslzgO3E6khbI0F5mMEPf5mTYhCCm4h99knYP6H3W9n3BQFrg==
-debug@2.6.9, debug@^2.2.0, debug@^2.6.9:
+debug@2.6.9, debug@^2.2.0:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
@@ -2389,6 +2498,11 @@ defer-to-connect@^1.0.1:
resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591"
integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==
+define-lazy-prop@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
+ integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==
+
define-properties@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
@@ -2396,6 +2510,14 @@ define-properties@^1.1.3:
dependencies:
object-keys "^1.0.12"
+define-properties@^1.1.4:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5"
+ integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==
+ dependencies:
+ has-property-descriptors "^1.0.0"
+ object-keys "^1.1.1"
+
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
@@ -2538,6 +2660,11 @@ dotenv@^10.0.0:
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81"
integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==
+dotenv@^8.2.0:
+ version "8.6.0"
+ resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b"
+ integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==
+
duplexer3@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
@@ -2601,6 +2728,14 @@ end-of-stream@^1.1.0:
dependencies:
once "^1.4.0"
+enhanced-resolve@^5.10.0:
+ version "5.12.0"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634"
+ integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==
+ dependencies:
+ graceful-fs "^4.2.4"
+ tapable "^2.2.0"
+
enquirer@^2.3.5:
version "2.3.6"
resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
@@ -2613,13 +2748,6 @@ entities@^2.0.0:
resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
-error-ex@^1.3.1:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
- integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
- dependencies:
- is-arrayish "^0.2.1"
-
es-abstract@^1.19.0, es-abstract@^1.19.1:
version "1.19.1"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3"
@@ -2646,6 +2774,61 @@ es-abstract@^1.19.0, es-abstract@^1.19.1:
string.prototype.trimstart "^1.0.4"
unbox-primitive "^1.0.1"
+es-abstract@^1.20.4:
+ version "1.21.1"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.1.tgz#e6105a099967c08377830a0c9cb589d570dd86c6"
+ integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==
+ dependencies:
+ available-typed-arrays "^1.0.5"
+ call-bind "^1.0.2"
+ es-set-tostringtag "^2.0.1"
+ es-to-primitive "^1.2.1"
+ function-bind "^1.1.1"
+ function.prototype.name "^1.1.5"
+ get-intrinsic "^1.1.3"
+ get-symbol-description "^1.0.0"
+ globalthis "^1.0.3"
+ gopd "^1.0.1"
+ has "^1.0.3"
+ has-property-descriptors "^1.0.0"
+ has-proto "^1.0.1"
+ has-symbols "^1.0.3"
+ internal-slot "^1.0.4"
+ is-array-buffer "^3.0.1"
+ is-callable "^1.2.7"
+ is-negative-zero "^2.0.2"
+ is-regex "^1.1.4"
+ is-shared-array-buffer "^1.0.2"
+ is-string "^1.0.7"
+ is-typed-array "^1.1.10"
+ is-weakref "^1.0.2"
+ object-inspect "^1.12.2"
+ object-keys "^1.1.1"
+ object.assign "^4.1.4"
+ regexp.prototype.flags "^1.4.3"
+ safe-regex-test "^1.0.0"
+ string.prototype.trimend "^1.0.6"
+ string.prototype.trimstart "^1.0.6"
+ typed-array-length "^1.0.4"
+ unbox-primitive "^1.0.2"
+ which-typed-array "^1.1.9"
+
+es-set-tostringtag@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8"
+ integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==
+ dependencies:
+ get-intrinsic "^1.1.3"
+ has "^1.0.3"
+ has-tostringtag "^1.0.0"
+
+es-shim-unscopables@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241"
+ integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==
+ dependencies:
+ has "^1.0.3"
+
es-to-primitive@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
@@ -2717,21 +2900,34 @@ eslint-config-standard@^16.0.3:
resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz#6c8761e544e96c531ff92642eeb87842b8488516"
integrity sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==
-eslint-import-resolver-node@^0.3.6:
- version "0.3.6"
- resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd"
- integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==
+eslint-import-resolver-node@^0.3.7:
+ version "0.3.7"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7"
+ integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==
dependencies:
debug "^3.2.7"
- resolve "^1.20.0"
+ is-core-module "^2.11.0"
+ resolve "^1.22.1"
-eslint-module-utils@^2.6.2:
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz#94e5540dd15fe1522e8ffa3ec8db3b7fa7e7a534"
- integrity sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q==
+eslint-import-resolver-typescript@^3.5.3:
+ version "3.5.3"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.3.tgz#db5ed9e906651b7a59dd84870aaef0e78c663a05"
+ integrity sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ==
+ dependencies:
+ debug "^4.3.4"
+ enhanced-resolve "^5.10.0"
+ get-tsconfig "^4.2.0"
+ globby "^13.1.2"
+ is-core-module "^2.10.0"
+ is-glob "^4.0.3"
+ synckit "^0.8.4"
+
+eslint-module-utils@^2.7.4:
+ version "2.7.4"
+ resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974"
+ integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==
dependencies:
debug "^3.2.7"
- pkg-dir "^2.0.0"
eslint-plugin-es@^3.0.0:
version "3.0.1"
@@ -2741,26 +2937,26 @@ eslint-plugin-es@^3.0.0:
eslint-utils "^2.0.0"
regexpp "^3.0.0"
-eslint-plugin-import@^2.23.4:
- version "2.24.2"
- resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.24.2.tgz#2c8cd2e341f3885918ee27d18479910ade7bb4da"
- integrity sha512-hNVtyhiEtZmpsabL4neEj+6M5DCLgpYyG9nzJY8lZQeQXEn5UPW1DpUdsMHMXsq98dbNm7nt1w9ZMSVpfJdi8Q==
+eslint-plugin-import@^2.27.5:
+ version "2.27.5"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65"
+ integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==
dependencies:
- array-includes "^3.1.3"
- array.prototype.flat "^1.2.4"
- debug "^2.6.9"
+ array-includes "^3.1.6"
+ array.prototype.flat "^1.3.1"
+ array.prototype.flatmap "^1.3.1"
+ debug "^3.2.7"
doctrine "^2.1.0"
- eslint-import-resolver-node "^0.3.6"
- eslint-module-utils "^2.6.2"
- find-up "^2.0.0"
+ eslint-import-resolver-node "^0.3.7"
+ eslint-module-utils "^2.7.4"
has "^1.0.3"
- is-core-module "^2.6.0"
- minimatch "^3.0.4"
- object.values "^1.1.4"
- pkg-up "^2.0.0"
- read-pkg-up "^3.0.0"
- resolve "^1.20.0"
- tsconfig-paths "^3.11.0"
+ is-core-module "^2.11.0"
+ is-glob "^4.0.3"
+ minimatch "^3.1.2"
+ object.values "^1.1.6"
+ resolve "^1.22.1"
+ semver "^6.3.0"
+ tsconfig-paths "^3.14.1"
eslint-plugin-jest@^27.2.1:
version "27.2.1"
@@ -3048,7 +3244,7 @@ fast-glob@^3.1.1:
merge2 "^1.3.0"
micromatch "^4.0.4"
-fast-glob@^3.2.9:
+fast-glob@^3.2.11, fast-glob@^3.2.9:
version "3.2.12"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80"
integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
@@ -3117,13 +3313,6 @@ finalhandler@~1.1.2:
statuses "~1.5.0"
unpipe "~1.0.0"
-find-up@^2.0.0, find-up@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
- integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
- dependencies:
- locate-path "^2.0.0"
-
find-up@^4.0.0, find-up@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
@@ -3210,11 +3399,26 @@ function-bind@^1.1.1:
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+function.prototype.name@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621"
+ integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+ es-abstract "^1.19.0"
+ functions-have-names "^1.2.2"
+
functional-red-black-tree@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
+functions-have-names@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
+ integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
+
generate-function@^2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f"
@@ -3241,6 +3445,15 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1:
has "^1.0.3"
has-symbols "^1.0.1"
+get-intrinsic@^1.1.3, get-intrinsic@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f"
+ integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==
+ dependencies:
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.3"
+
get-package-type@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
@@ -3290,6 +3503,11 @@ get-symbol-description@^1.0.0:
call-bind "^1.0.2"
get-intrinsic "^1.1.1"
+get-tsconfig@^4.2.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.4.0.tgz#64eee64596668a81b8fce18403f94f245ee0d4e5"
+ integrity sha512-0Gdjo/9+FzsYhXCEFueo2aY1z1tpXrxWZzP7k8ul9qt1U5o8rYJwTJYmaeHdrVosYIVYkOy2iwCJ9FdpocJhPQ==
+
glob-parent@^5.1.2, glob-parent@~5.1.2:
version "5.1.2"
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
@@ -3328,6 +3546,18 @@ globals@^13.6.0, globals@^13.9.0:
dependencies:
type-fest "^0.20.2"
+globalthis@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf"
+ integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==
+ dependencies:
+ define-properties "^1.1.3"
+
+globalyzer@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465"
+ integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==
+
globby@^11.0.3:
version "11.0.4"
resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5"
@@ -3352,6 +3582,29 @@ globby@^11.1.0:
merge2 "^1.4.1"
slash "^3.0.0"
+globby@^13.1.2:
+ version "13.1.3"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.3.tgz#f62baf5720bcb2c1330c8d4ef222ee12318563ff"
+ integrity sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==
+ dependencies:
+ dir-glob "^3.0.1"
+ fast-glob "^3.2.11"
+ ignore "^5.2.0"
+ merge2 "^1.4.1"
+ slash "^4.0.0"
+
+globrex@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098"
+ integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==
+
+gopd@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
+ integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==
+ dependencies:
+ get-intrinsic "^1.1.3"
+
got@^9.6.0:
version "9.6.0"
resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85"
@@ -3379,6 +3632,20 @@ graceful-fs@^4.1.6, graceful-fs@^4.2.0:
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
+"gradido-database@file:../database":
+ version "1.19.1"
+ dependencies:
+ "@types/uuid" "^8.3.4"
+ cross-env "^7.0.3"
+ crypto "^1.0.1"
+ decimal.js-light "^2.5.1"
+ dotenv "^10.0.0"
+ mysql2 "^2.3.0"
+ reflect-metadata "^0.1.13"
+ ts-mysql-migrate "^1.0.2"
+ typeorm "^0.2.38"
+ uuid "^8.3.2"
+
graphql-extensions@^0.15.0:
version "0.15.0"
resolved "https://registry.yarnpkg.com/graphql-extensions/-/graphql-extensions-0.15.0.tgz#3f291f9274876b0c289fa4061909a12678bd9817"
@@ -3419,6 +3686,13 @@ graphql-tag@^2.11.0:
dependencies:
tslib "^2.1.0"
+graphql-tag@^2.12.6:
+ version "2.12.6"
+ resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1"
+ integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==
+ dependencies:
+ tslib "^2.1.0"
+
graphql-tools@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-4.0.8.tgz#e7fb9f0d43408fb0878ba66b522ce871bafe9d30"
@@ -3440,6 +3714,11 @@ has-bigints@^1.0.1:
resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113"
integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==
+has-bigints@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
+ integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
+
has-flag@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
@@ -3450,11 +3729,28 @@ has-flag@^4.0.0:
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+has-property-descriptors@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861"
+ integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==
+ dependencies:
+ get-intrinsic "^1.1.1"
+
+has-proto@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0"
+ integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==
+
has-symbols@^1.0.1, has-symbols@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423"
integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==
+has-symbols@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
+ integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
+
has-tostringtag@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
@@ -3479,10 +3775,10 @@ he@1.2.0, he@^1.2.0:
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
-hosted-git-info@^2.1.4:
- version "2.8.9"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
- integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
+highlight.js@^10.7.1:
+ version "10.7.3"
+ resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531"
+ integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==
html-encoding-sniffer@^2.0.1:
version "2.0.1"
@@ -3645,6 +3941,11 @@ iconv-lite@0.6.3, iconv-lite@^0.6.2:
dependencies:
safer-buffer ">= 2.1.2 < 3.0.0"
+ieee754@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+ integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+
ignore-by-default@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
@@ -3699,7 +4000,7 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
-inherits@2, inherits@2.0.4, inherits@^2.0.1:
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@~2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -3728,15 +4029,28 @@ internal-slot@^1.0.3:
has "^1.0.3"
side-channel "^1.0.4"
+internal-slot@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986"
+ integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==
+ dependencies:
+ get-intrinsic "^1.2.0"
+ has "^1.0.3"
+ side-channel "^1.0.4"
+
ipaddr.js@1.9.1:
version "1.9.1"
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
-is-arrayish@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
- integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+is-array-buffer@^3.0.1:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe"
+ integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==
+ dependencies:
+ call-bind "^1.0.2"
+ get-intrinsic "^1.2.0"
+ is-typed-array "^1.1.10"
is-bigint@^1.0.1:
version "1.0.4"
@@ -3765,6 +4079,11 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.4:
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945"
integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==
+is-callable@^1.2.7:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
+ integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
+
is-ci@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
@@ -3779,7 +4098,14 @@ is-ci@^3.0.0:
dependencies:
ci-info "^3.1.1"
-is-core-module@^2.2.0, is-core-module@^2.6.0:
+is-core-module@^2.10.0, is-core-module@^2.11.0:
+ version "2.11.0"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144"
+ integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==
+ dependencies:
+ has "^1.0.3"
+
+is-core-module@^2.2.0:
version "2.7.0"
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.7.0.tgz#3c0ef7d31b4acfc574f80c58409d568a836848e3"
integrity sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ==
@@ -3800,7 +4126,7 @@ is-date-object@^1.0.1:
dependencies:
has-tostringtag "^1.0.0"
-is-docker@^2.0.0:
+is-docker@^2.0.0, is-docker@^2.1.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
@@ -3848,6 +4174,11 @@ is-negative-zero@^2.0.1:
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24"
integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==
+is-negative-zero@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
+ integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
+
is-npm@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8"
@@ -3903,6 +4234,13 @@ is-shared-array-buffer@^1.0.1:
resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6"
integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==
+is-shared-array-buffer@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79"
+ integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==
+ dependencies:
+ call-bind "^1.0.2"
+
is-stream@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
@@ -3927,6 +4265,17 @@ is-symbol@^1.0.2, is-symbol@^1.0.3:
dependencies:
has-symbols "^1.0.2"
+is-typed-array@^1.1.10, is-typed-array@^1.1.9:
+ version "1.1.10"
+ resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f"
+ integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==
+ dependencies:
+ available-typed-arrays "^1.0.5"
+ call-bind "^1.0.2"
+ for-each "^0.3.3"
+ gopd "^1.0.1"
+ has-tostringtag "^1.0.0"
+
is-typedarray@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
@@ -3939,7 +4288,14 @@ is-weakref@^1.0.1:
dependencies:
call-bind "^1.0.0"
-is-wsl@^2.1.1:
+is-weakref@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
+ integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
+ dependencies:
+ call-bind "^1.0.2"
+
+is-wsl@^2.1.1, is-wsl@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
@@ -3951,6 +4307,11 @@ is-yarn-global@^0.3.0:
resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232"
integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==
+isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
+
isexe@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
@@ -4431,6 +4792,13 @@ js-yaml@^3.13.1:
argparse "^1.0.7"
esprima "^4.0.0"
+js-yaml@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
+ integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+ dependencies:
+ argparse "^2.0.1"
+
jsdom@^16.6.0:
version "16.7.0"
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710"
@@ -4474,11 +4842,6 @@ json-buffer@3.0.0:
resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898"
integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=
-json-parse-better-errors@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
- integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
-
json-schema-traverse@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
@@ -4508,6 +4871,13 @@ json5@^1.0.1:
dependencies:
minimist "^1.2.0"
+json5@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593"
+ integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==
+ dependencies:
+ minimist "^1.2.0"
+
jsonfile@^6.0.1:
version "6.1.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
@@ -4648,24 +5018,6 @@ linkify-it@4.0.0:
dependencies:
uc.micro "^1.0.1"
-load-json-file@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
- integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs=
- dependencies:
- graceful-fs "^4.1.2"
- parse-json "^4.0.0"
- pify "^3.0.0"
- strip-bom "^3.0.0"
-
-locate-path@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
- integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
- dependencies:
- p-locate "^2.0.0"
- path-exists "^3.0.0"
-
locate-path@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
@@ -4914,6 +5266,13 @@ minimatch@^3.0.4:
dependencies:
brace-expansion "^1.1.7"
+minimatch@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
+ integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+ dependencies:
+ brace-expansion "^1.1.7"
+
minimist@^1.2.0, minimist@^1.2.5:
version "1.2.5"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
@@ -4924,6 +5283,11 @@ minimist@^1.2.6:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
+mkdirp@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
+ integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
+
moo@^0.5.0, moo@^0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.1.tgz#7aae7f384b9b09f620b6abf6f74ebbcd1b65dbc4"
@@ -4979,6 +5343,25 @@ mysql2@^2.3.0:
seq-queue "^0.0.5"
sqlstring "^2.3.2"
+mysql@^2.18.1:
+ version "2.18.1"
+ resolved "https://registry.yarnpkg.com/mysql/-/mysql-2.18.1.tgz#2254143855c5a8c73825e4522baf2ea021766717"
+ integrity sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==
+ dependencies:
+ bignumber.js "9.0.0"
+ readable-stream "2.3.7"
+ safe-buffer "5.1.2"
+ sqlstring "2.3.1"
+
+mz@^2.4.0:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
+ integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
+ dependencies:
+ any-promise "^1.0.0"
+ object-assign "^4.0.1"
+ thenify-all "^1.0.0"
+
named-placeholders@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/named-placeholders/-/named-placeholders-1.1.2.tgz#ceb1fbff50b6b33492b5cf214ccf5e39cef3d0e8"
@@ -5083,16 +5466,6 @@ nopt@~1.0.10:
dependencies:
abbrev "1"
-normalize-package-data@^2.3.2:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
- integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
- dependencies:
- hosted-git-info "^2.1.4"
- resolve "^1.10.0"
- semver "2 || 3 || 4 || 5"
- validate-npm-package-license "^3.0.1"
-
normalize-path@^3.0.0, normalize-path@~3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
@@ -5129,7 +5502,7 @@ nwsapi@^2.2.0:
resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7"
integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==
-object-assign@^4, object-assign@^4.1.1:
+object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
@@ -5139,6 +5512,11 @@ object-inspect@^1.11.0, object-inspect@^1.9.0:
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1"
integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==
+object-inspect@^1.12.2:
+ version "1.12.3"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9"
+ integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==
+
object-keys@^1.0.12, object-keys@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
@@ -5159,6 +5537,16 @@ object.assign@^4.1.2:
has-symbols "^1.0.1"
object-keys "^1.1.1"
+object.assign@^4.1.4:
+ version "4.1.4"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f"
+ integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ has-symbols "^1.0.3"
+ object-keys "^1.1.1"
+
object.getownpropertydescriptors@^2.1.1:
version "2.1.3"
resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e"
@@ -5168,14 +5556,14 @@ object.getownpropertydescriptors@^2.1.1:
define-properties "^1.1.3"
es-abstract "^1.19.1"
-object.values@^1.1.4:
- version "1.1.5"
- resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac"
- integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==
+object.values@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d"
+ integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==
dependencies:
call-bind "^1.0.2"
- define-properties "^1.1.3"
- es-abstract "^1.19.1"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
on-finished@~2.3.0:
version "2.3.0"
@@ -5206,6 +5594,15 @@ open@7:
is-docker "^2.0.0"
is-wsl "^2.1.1"
+open@^8.4.0:
+ version "8.4.2"
+ resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9"
+ integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==
+ dependencies:
+ define-lazy-prop "^2.0.0"
+ is-docker "^2.1.1"
+ is-wsl "^2.2.0"
+
optionator@^0.8.1:
version "0.8.3"
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
@@ -5247,13 +5644,6 @@ p-finally@^1.0.0:
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==
-p-limit@^1.1.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
- integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
- dependencies:
- p-try "^1.0.0"
-
p-limit@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
@@ -5261,13 +5651,6 @@ p-limit@^2.2.0:
dependencies:
p-try "^2.0.0"
-p-locate@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
- integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
- dependencies:
- p-limit "^1.1.0"
-
p-locate@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
@@ -5282,11 +5665,6 @@ p-timeout@^3.0.0, p-timeout@^3.1.0:
dependencies:
p-finally "^1.0.0"
-p-try@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
- integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
-
p-try@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
@@ -5316,15 +5694,7 @@ parent-module@^1.0.0:
dependencies:
callsites "^3.0.0"
-parse-json@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
- integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
- dependencies:
- error-ex "^1.3.1"
- json-parse-better-errors "^1.0.1"
-
-parse5-htmlparser2-tree-adapter@^6.0.1:
+parse5-htmlparser2-tree-adapter@^6.0.0, parse5-htmlparser2-tree-adapter@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6"
integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==
@@ -5336,6 +5706,11 @@ parse5@6.0.1, parse5@^6.0.1:
resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
+parse5@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178"
+ integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==
+
parseley@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/parseley/-/parseley-0.7.0.tgz#9949e3a0ed05c5072adb04f013c2810cf49171a8"
@@ -5349,11 +5724,6 @@ parseurl@^1.3.2, parseurl@~1.3.3:
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
-path-exists@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
- integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
-
path-exists@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
@@ -5384,13 +5754,6 @@ path-to-regexp@0.1.7:
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
-path-type@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
- integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
- dependencies:
- pify "^3.0.0"
-
path-type@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
@@ -5401,16 +5764,16 @@ picocolors@^0.2.1:
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f"
integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==
+picocolors@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
+ integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
+
picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3:
version "2.3.0"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
-pify@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
- integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
-
pify@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
@@ -5423,13 +5786,6 @@ pirates@^4.0.1:
dependencies:
node-modules-regexp "^1.0.0"
-pkg-dir@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
- integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
- dependencies:
- find-up "^2.1.0"
-
pkg-dir@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
@@ -5437,13 +5793,6 @@ pkg-dir@^4.2.0:
dependencies:
find-up "^4.0.0"
-pkg-up@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f"
- integrity sha1-yBmscoBZpGHKscOImivjxJoATX8=
- dependencies:
- find-up "^2.1.0"
-
prelude-ls@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
@@ -5498,6 +5847,11 @@ preview-email@^3.0.7:
pug "^3.0.2"
uuid "^8.3.2"
+process-nextick-args@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
progress@^2.0.0:
version "2.0.3"
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
@@ -5729,22 +6083,18 @@ react-is@^17.0.1:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
-read-pkg-up@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07"
- integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=
+readable-stream@2.3.7:
+ version "2.3.7"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
+ integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
dependencies:
- find-up "^2.0.0"
- read-pkg "^3.0.0"
-
-read-pkg@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
- integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=
- dependencies:
- load-json-file "^4.0.0"
- normalize-package-data "^2.3.2"
- path-type "^3.0.0"
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
readdirp@~3.6.0:
version "3.6.0"
@@ -5758,6 +6108,15 @@ reflect-metadata@^0.1.13:
resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08"
integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==
+regexp.prototype.flags@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac"
+ integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+ functions-have-names "^1.2.2"
+
regexpp@^3.0.0, regexpp@^3.1.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
@@ -5804,7 +6163,7 @@ resolve-from@^5.0.0:
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
-resolve@^1.10.0, resolve@^1.10.1, resolve@^1.20.0:
+resolve@^1.10.1, resolve@^1.20.0:
version "1.20.0"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==
@@ -5812,7 +6171,7 @@ resolve@^1.10.0, resolve@^1.10.1, resolve@^1.20.0:
is-core-module "^2.2.0"
path-parse "^1.0.6"
-resolve@^1.15.1:
+resolve@^1.15.1, resolve@^1.22.1:
version "1.22.1"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
@@ -5869,7 +6228,7 @@ run-parallel@^1.1.9:
dependencies:
queue-microtask "^1.2.2"
-safe-buffer@5.1.2, safe-buffer@~5.1.1:
+safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
@@ -5884,11 +6243,25 @@ safe-identifier@^0.4.1:
resolved "https://registry.yarnpkg.com/safe-identifier/-/safe-identifier-0.4.2.tgz#cf6bfca31c2897c588092d1750d30ef501d59fcb"
integrity sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==
+safe-regex-test@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295"
+ integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==
+ dependencies:
+ call-bind "^1.0.2"
+ get-intrinsic "^1.1.3"
+ is-regex "^1.1.4"
+
"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0":
version "2.1.2"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+sax@>=0.6.0:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+ integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
saxes@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d"
@@ -5910,11 +6283,6 @@ semver-diff@^3.1.1:
dependencies:
semver "^6.3.0"
-"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0, semver@^5.7.1:
- version "5.7.1"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
- integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
-
semver@7.x, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5:
version "7.3.5"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
@@ -5922,6 +6290,11 @@ semver@7.x, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5:
dependencies:
lru-cache "^6.0.0"
+semver@^5.5.0, semver@^5.6.0, semver@^5.7.1:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+ integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+
semver@^6.0.0, semver@^6.1.0, semver@^6.2.0, semver@^6.3.0:
version "6.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
@@ -6039,6 +6412,11 @@ slash@^3.0.0:
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+slash@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
+ integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
+
slice-ansi@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
@@ -6083,37 +6461,16 @@ source-map@^0.7.3:
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
-spdx-correct@^3.0.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"
- integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==
- dependencies:
- spdx-expression-parse "^3.0.0"
- spdx-license-ids "^3.0.0"
-
-spdx-exceptions@^2.1.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
- integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
-
-spdx-expression-parse@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
- integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
- dependencies:
- spdx-exceptions "^2.1.0"
- spdx-license-ids "^3.0.0"
-
-spdx-license-ids@^3.0.0:
- version "3.0.10"
- resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz#0d9becccde7003d6c658d487dd48a32f0bf3014b"
- integrity sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==
-
sprintf-js@~1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+sqlstring@2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.1.tgz#475393ff9e91479aea62dcaf0ca3d14983a7fb40"
+ integrity sha512-ooAzh/7dxIG5+uDik1z/Rd1vli0+38izZhGzSa34FwR7IbelPWCCKSNIl8jlL/F7ERvy8CB2jNeM1E9i9mXMAQ==
+
sqlstring@^2.3.2:
version "2.3.2"
resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.2.tgz#cdae7169389a1375b18e885f2e60b3e460809514"
@@ -6170,6 +6527,15 @@ string.prototype.trimend@^1.0.4:
call-bind "^1.0.2"
define-properties "^1.1.3"
+string.prototype.trimend@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533"
+ integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+
string.prototype.trimstart@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed"
@@ -6178,6 +6544,22 @@ string.prototype.trimstart@^1.0.4:
call-bind "^1.0.2"
define-properties "^1.1.3"
+string.prototype.trimstart@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4"
+ integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
strip-ansi@^6.0.0, strip-ansi@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
@@ -6270,6 +6652,14 @@ symbol-tree@^3.2.4:
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
+synckit@^0.8.4:
+ version "0.8.5"
+ resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3"
+ integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==
+ dependencies:
+ "@pkgr/utils" "^2.3.1"
+ tslib "^2.5.0"
+
table@^6.0.9:
version "6.7.2"
resolved "https://registry.yarnpkg.com/table/-/table-6.7.2.tgz#a8d39b9f5966693ca8b0feba270a78722cbaf3b0"
@@ -6282,6 +6672,11 @@ table@^6.0.9:
string-width "^4.2.3"
strip-ansi "^6.0.1"
+tapable@^2.2.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
+ integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
+
terminal-link@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994"
@@ -6304,11 +6699,33 @@ text-table@^0.2.0:
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
+thenify-all@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
+ integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==
+ dependencies:
+ thenify ">= 3.1.0 < 4"
+
+"thenify@>= 3.1.0 < 4":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f"
+ integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==
+ dependencies:
+ any-promise "^1.0.0"
+
throat@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375"
integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==
+tiny-glob@^0.2.9:
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2"
+ integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==
+ dependencies:
+ globalyzer "0.1.0"
+ globrex "^0.1.2"
+
titleize@2:
version "2.1.0"
resolved "https://registry.yarnpkg.com/titleize/-/titleize-2.1.0.tgz#5530de07c22147a0488887172b5bd94f5b30a48f"
@@ -6400,6 +6817,14 @@ ts-jest@^27.0.5:
semver "7.x"
yargs-parser "20.x"
+ts-mysql-migrate@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/ts-mysql-migrate/-/ts-mysql-migrate-1.0.2.tgz#736d37c3aa3fef92f226b869098e939950d0e18c"
+ integrity sha512-zDW6iQsfPCJfQ3JMhfUGjhy8aK+VNTvPrXmJH66PB2EGEvyn4m7x2nBdhDNhKuwYU9LMxW1p+l39Ei+btXNpxA==
+ dependencies:
+ "@types/mysql" "^2.15.8"
+ mysql "^2.18.1"
+
ts-node@^10.0.0:
version "10.2.1"
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.2.1.tgz#4cc93bea0a7aba2179497e65bb08ddfc198b3ab5"
@@ -6418,16 +6843,6 @@ ts-node@^10.0.0:
make-error "^1.1.1"
yn "3.1.1"
-tsconfig-paths@^3.11.0:
- version "3.11.0"
- resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz#954c1fe973da6339c78e06b03ce2e48810b65f36"
- integrity sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA==
- dependencies:
- "@types/json5" "^0.0.29"
- json5 "^1.0.1"
- minimist "^1.2.0"
- strip-bom "^3.0.0"
-
tsconfig-paths@^3.14.0:
version "3.14.0"
resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.0.tgz#4fcc48f9ccea8826c41b9ca093479de7f5018976"
@@ -6438,6 +6853,16 @@ tsconfig-paths@^3.14.0:
minimist "^1.2.0"
strip-bom "^3.0.0"
+tsconfig-paths@^3.14.1:
+ version "3.14.2"
+ resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088"
+ integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==
+ dependencies:
+ "@types/json5" "^0.0.29"
+ json5 "^1.0.2"
+ minimist "^1.2.6"
+ strip-bom "^3.0.0"
+
tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.3:
version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
@@ -6453,6 +6878,11 @@ tslib@^2.2.0:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3"
integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==
+tslib@^2.4.0, tslib@^2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf"
+ integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==
+
tsutils@^3.21.0:
version "3.21.0"
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
@@ -6516,6 +6946,15 @@ type-is@^1.6.16, type-is@~1.6.17, type-is@~1.6.18:
media-typer "0.3.0"
mime-types "~2.1.24"
+typed-array-length@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb"
+ integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==
+ dependencies:
+ call-bind "^1.0.2"
+ for-each "^0.3.3"
+ is-typed-array "^1.1.9"
+
typedarray-to-buffer@^3.1.5:
version "3.1.5"
resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
@@ -6523,6 +6962,29 @@ typedarray-to-buffer@^3.1.5:
dependencies:
is-typedarray "^1.0.0"
+typeorm@^0.2.38:
+ version "0.2.45"
+ resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.2.45.tgz#e5bbb3af822dc4646bad96cfa48cd22fa4687cea"
+ integrity sha512-c0rCO8VMJ3ER7JQ73xfk0zDnVv0WDjpsP6Q1m6CVKul7DB9iVdWLRjPzc8v2eaeBuomsbZ2+gTaYr8k1gm3bYA==
+ dependencies:
+ "@sqltools/formatter" "^1.2.2"
+ app-root-path "^3.0.0"
+ buffer "^6.0.3"
+ chalk "^4.1.0"
+ cli-highlight "^2.1.11"
+ debug "^4.3.1"
+ dotenv "^8.2.0"
+ glob "^7.1.6"
+ js-yaml "^4.0.0"
+ mkdirp "^1.0.4"
+ reflect-metadata "^0.1.13"
+ sha.js "^2.4.11"
+ tslib "^2.1.0"
+ uuid "^8.3.2"
+ xml2js "^0.4.23"
+ yargs "^17.0.1"
+ zen-observable-ts "^1.0.0"
+
typescript@^4.3.4:
version "4.4.3"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.3.tgz#bdc5407caa2b109efd4f82fe130656f977a29324"
@@ -6543,6 +7005,16 @@ unbox-primitive@^1.0.1:
has-symbols "^1.0.2"
which-boxed-primitive "^1.0.2"
+unbox-primitive@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
+ integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==
+ dependencies:
+ call-bind "^1.0.2"
+ has-bigints "^1.0.2"
+ has-symbols "^1.0.3"
+ which-boxed-primitive "^1.0.2"
+
undefsafe@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.3.tgz#6b166e7094ad46313b2202da7ecc2cd7cc6e7aae"
@@ -6616,6 +7088,11 @@ url-parse-lax@^3.0.0:
dependencies:
prepend-http "^2.0.0"
+util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+
util.promisify@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.1.tgz#77832f57ced2c9478174149cae9b96e9918cd54b"
@@ -6661,14 +7138,6 @@ valid-data-url@^3.0.0:
resolved "https://registry.yarnpkg.com/valid-data-url/-/valid-data-url-3.0.1.tgz#826c1744e71b5632e847dd15dbd45b9fb38aa34f"
integrity sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA==
-validate-npm-package-license@^3.0.1:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
- integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
- dependencies:
- spdx-correct "^3.0.0"
- spdx-expression-parse "^3.0.0"
-
validator@^13.5.2:
version "13.6.0"
resolved "https://registry.yarnpkg.com/validator/-/validator-13.6.0.tgz#1e71899c14cdc7b2068463cb24c1cc16f6ec7059"
@@ -6772,6 +7241,18 @@ which-boxed-primitive@^1.0.2:
is-string "^1.0.5"
is-symbol "^1.0.3"
+which-typed-array@^1.1.9:
+ version "1.1.9"
+ resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6"
+ integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==
+ dependencies:
+ available-typed-arrays "^1.0.5"
+ call-bind "^1.0.2"
+ for-each "^0.3.3"
+ gopd "^1.0.1"
+ has-tostringtag "^1.0.0"
+ is-typed-array "^1.1.10"
+
which@^1.2.9:
version "1.3.1"
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
@@ -6847,6 +7328,19 @@ xml-name-validator@^3.0.0:
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
+xml2js@^0.4.23:
+ version "0.4.23"
+ resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66"
+ integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==
+ dependencies:
+ sax ">=0.6.0"
+ xmlbuilder "~11.0.0"
+
+xmlbuilder@~11.0.0:
+ version "11.0.1"
+ resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3"
+ integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==
+
xmlchars@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
@@ -6880,7 +7374,12 @@ yargs-parser@20.x, yargs-parser@^20.2.2:
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
-yargs@^16.2.0:
+yargs-parser@^21.1.1:
+ version "21.1.1"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
+ integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
+
+yargs@^16.0.0, yargs@^16.2.0:
version "16.2.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
@@ -6893,6 +7392,19 @@ yargs@^16.2.0:
y18n "^5.0.5"
yargs-parser "^20.2.2"
+yargs@^17.0.1:
+ version "17.7.1"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.1.tgz#34a77645201d1a8fc5213ace787c220eabbd0967"
+ integrity sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==
+ dependencies:
+ cliui "^8.0.1"
+ escalade "^3.1.1"
+ get-caller-file "^2.0.5"
+ require-directory "^2.1.1"
+ string-width "^4.2.3"
+ y18n "^5.0.5"
+ yargs-parser "^21.1.1"
+
yn@3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
@@ -6906,7 +7418,15 @@ zen-observable-ts@^0.8.21:
tslib "^1.9.3"
zen-observable "^0.8.0"
-zen-observable@^0.8.0:
+zen-observable-ts@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-1.1.0.tgz#2d1aa9d79b87058e9b75698b92791c1838551f83"
+ integrity sha512-1h4zlLSqI2cRLPJUHJFL8bCWHhkpuXkF+dbGkRaWjgDIG26DmzyshUMrdV/rL3UnR+mhaX4fRq8LPouq0MYYIA==
+ dependencies:
+ "@types/zen-observable" "0.8.3"
+ zen-observable "0.8.15"
+
+zen-observable@0.8.15, zen-observable@^0.8.0:
version "0.8.15"
resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15"
integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==
diff --git a/deployment/bare_metal/start.sh b/deployment/bare_metal/start.sh
index 6c3c07766..b30d90f19 100755
--- a/deployment/bare_metal/start.sh
+++ b/deployment/bare_metal/start.sh
@@ -118,6 +118,18 @@ case "$NGINX_SSL" in
esac
envsubst "$(env | sed -e 's/=.*//' -e 's/^/\$/g')" < $NGINX_CONFIG_DIR/$TEMPLATE_FILE > $NGINX_CONFIG_DIR/update-page.conf
+# Clean tmp folder - remove yarn files
+find /tmp -name "yarn--*" -exec rm -r {} \;
+
+# Remove node_modules folders
+# we had problems with corrupted node_modules folder
+rm -Rf $PROJECT_ROOT/database/node_modules
+rm -Rf $PROJECT_ROOT/backend/node_modules
+rm -Rf $PROJECT_ROOT/frontend/node_modules
+rm -Rf $PROJECT_ROOT/admin/node_modules
+rm -Rf $PROJECT_ROOT/dht-node/node_modules
+rm -Rf $PROJECT_ROOT/federation/node_modules
+
# Regenerate .env files
cp -f $PROJECT_ROOT/database/.env $PROJECT_ROOT/database/.env.bak
cp -f $PROJECT_ROOT/backend/.env $PROJECT_ROOT/backend/.env.bak
diff --git a/federation/.env.template b/federation/.env.template
index af6e8f627..5713a7f3f 100644
--- a/federation/.env.template
+++ b/federation/.env.template
@@ -5,12 +5,11 @@ LOG_LEVEL=$LOG_LEVEL
GRAPHIQL=false
# Database
-DB_HOST=$DB_HOST
-DB_PORT=$DB_PORT
-DB_DATABASE=$DB_DATABASE
+DB_HOST=localhost
+DB_PORT=3306
DB_USER=$DB_USER
DB_PASSWORD=$DB_PASSWORD
+DB_DATABASE=gradido_community
# Federation
FEDERATION_COMMUNITY_URL=$FEDERATION_COMMUNITY_URL
-
diff --git a/frontend/src/components/Contributions/ContributionListItem.vue b/frontend/src/components/Contributions/ContributionListItem.vue
index 56546d183..27e8459bd 100644
--- a/frontend/src/components/Contributions/ContributionListItem.vue
+++ b/frontend/src/components/Contributions/ContributionListItem.vue
@@ -47,7 +47,7 @@
{{ amount | GDD }}
-
+
@@ -58,7 +58,7 @@
>
@@ -69,7 +69,7 @@
{{ $t('edit') }}
-
-
+
{{ $t('moderatorChat') }}
@@ -180,6 +179,11 @@ export default {
required: false,
default: false,
},
+ moderatorId: {
+ type: Number,
+ required: false,
+ default: 0,
+ },
},
data() {
return {
diff --git a/frontend/src/graphql/queries.js b/frontend/src/graphql/queries.js
index 7193eded0..1a37d082b 100644
--- a/frontend/src/graphql/queries.js
+++ b/frontend/src/graphql/queries.js
@@ -187,6 +187,7 @@ export const listContributions = gql`
messagesCount
deniedAt
deniedBy
+ moderatorId
}
}
}
@@ -236,7 +237,7 @@ export const searchAdminUsers = gql`
`
export const listContributionMessages = gql`
- query($contributionId: Float!, $pageSize: Int = 25, $currentPage: Int = 1, $order: Order = ASC) {
+ query($contributionId: Int!, $pageSize: Int = 25, $currentPage: Int = 1, $order: Order = ASC) {
listContributionMessages(
contributionId: $contributionId
pageSize: $pageSize