From e5126a4acabb6b0175d5a859a4228d4e3ef3138e Mon Sep 17 00:00:00 2001 From: lnn0q Date: Tue, 8 Jul 2025 16:36:00 +0300 Subject: [PATCH] fixes --- app/client/components/Editor.tsx | 159 ----------------- app/client/components/EditorSlate.tsx | 2 +- app/client/pages/profile/$username.tsx | 1 - .../graphql/resolvers/userUpdateResolver.ts | 6 +- app/server/main.ts | 13 +- package-lock.json | 163 +++++------------- 6 files changed, 56 insertions(+), 288 deletions(-) delete mode 100644 app/client/components/Editor.tsx diff --git a/app/client/components/Editor.tsx b/app/client/components/Editor.tsx deleted file mode 100644 index b6fe75c..0000000 --- a/app/client/components/Editor.tsx +++ /dev/null @@ -1,159 +0,0 @@ -import { Card, Heading, SystemStyleObject } from '@chakra-ui/react'; -import EditorJS, { EditorConfig } from '@editorjs/editorjs'; -import Header from '@editorjs/header'; -import List from '@editorjs/list'; -import Quote from '@editorjs/quote'; -import { useEffect, useRef } from 'react'; - -// @ts-ignore -import Link from '@coolbytes/editorjs-link'; - -export function Editor({ initialData }: { initialData?: EditorConfig['data'] }) { - const ejInstance = useRef(); - - const initEditor = () => { - const editor = new EditorJS({ - holder: 'editorjs', - onReady: () => { - ejInstance.current = editor; - }, - autofocus: true, - data: initialData, - // onChange: async () => { - // const content = await editor.saver.save(); - // }, - tools: { - header: Header, - list: List, - link: Link, - quote: Quote - } - }); - }; - - useEffect(() => { - if (ejInstance.current === null) { - initEditor(); - } - - return () => { - ejInstance?.current?.destroy(); - ejInstance.current = null; - }; - }, []); - - return ( - <> - - - Editor - - -
-
-
- - ); -} - -const editorJsStyles: - | SystemStyleObject - | Omit, keyof any[]> - | undefined = { - '& .ce-block--selected .ce-block__content, \ - & .ce-inline-toolbar, \ - & .codex-editor--narrow .ce-toolbox, \ - & .ce-conversion-toolbar, \ - & .ce-settings, \ - & .ce-settings__button, \ - & .ce-toolbar__settings-btn, \ - & .cdx-button, \ - & .ce-popover': { - background: 'colorPalette.500', - border: 'none' - }, - - '& .ce-inline-tool, \ - & .ce-conversion-toolbar__label, \ - & .ce-toolbox__button, \ - & .cdx-settings-button, \ - & .ce-toolbar__plus': { - color: 'colorPalette.500' - }, - - '& ::selection': { - background: 'colorPalette.500' - }, - - '& .cdx-settings-button:hover, \ - & .ce-settings__button:hover, \ - & .ce-toolbox__button--active, \ - & .ce-toolbox__button:hover, \ - & .cdx-button:hover, \ - & .ce-inline-toolbar__dropdown:hover, \ - & .ce-inline-tool:hover, \ - & .ce-popover__item:hover, \ - & .ce-toolbar__settings-btn:hover': { - background: 'colorPalette.500', - color: 'fg' - }, - - '& .cdx-notify--error': { - background: 'red !important' - }, - - '& .cdx-notify__cross::after, & .cdx-notify__cross::before': { - background: 'white' - }, - - '& .ce-toolbar__plus:hover, \ - & .ce-popover__container': { - backgroundColor: 'bg.emphasized', - color: 'colorPalette.500', - border: 'none' - }, - - '& .ce-popover-item:hover:not(.ce-popover-item--no-hover)': { - backgroundColor: 'colorPalette.500', - color: 'fg' - }, - - '& .cdx-search-field': { - background: 'bg.muted', - color: 'fg', - border: 'none' - }, - - '& .ce-popover-item__title, \ - & .ce-popover-item__icon': { - color: 'fg' - }, - - '& .ce-popover-item-separator': { - color: 'bg.muted' - }, - - '& .ce-toolbar__settings-btn': { - color: 'white' - }, - - '& .ce-toolbar__settings-btn:hover': { - color: 'black' - } -}; diff --git a/app/client/components/EditorSlate.tsx b/app/client/components/EditorSlate.tsx index 50650fb..408ae1c 100644 --- a/app/client/components/EditorSlate.tsx +++ b/app/client/components/EditorSlate.tsx @@ -1,6 +1,6 @@ import { Button, Card, Stack, Text, Wrap } from '@chakra-ui/react'; import isHotkey from 'is-hotkey'; -import React, { KeyboardEvent, MouseEvent, useCallback, useEffect, useMemo } from 'react'; +import React, { KeyboardEvent, MouseEvent, useCallback, useMemo } from 'react'; import { createEditor, Descendant, Editor, Element as SlateElement, Transforms } from 'slate'; import { withHistory } from 'slate-history'; import { diff --git a/app/client/pages/profile/$username.tsx b/app/client/pages/profile/$username.tsx index c3d9e87..d2afd92 100644 --- a/app/client/pages/profile/$username.tsx +++ b/app/client/pages/profile/$username.tsx @@ -6,7 +6,6 @@ import { useIdentity } from '@app/client/hooks/identity'; import { useToastMutation } from '@app/client/hooks/useToastMutation'; import { useUserOneQuery } from '@app/client/hooks/useUserOneQuery'; import { - Box, Button, Card, Heading, diff --git a/app/server/graphql/resolvers/userUpdateResolver.ts b/app/server/graphql/resolvers/userUpdateResolver.ts index 2b2af80..e74c1d0 100644 --- a/app/server/graphql/resolvers/userUpdateResolver.ts +++ b/app/server/graphql/resolvers/userUpdateResolver.ts @@ -1,9 +1,9 @@ +import { call } from '@app/common'; import { ensureIdentity } from '@app/server/helpers'; import { IdentityContext } from '@app/server/identity'; -import { prisma, uuid } from '@app/server/prisma/client'; +import { prisma } from '@app/server/prisma/client'; import { MutationUserUpdateArgs, User } from '@generated/types'; import { toUserSchema } from './mappers/userMapper'; -import { call } from '@app/common'; export async function UserUpdateResolver( _: any, @@ -12,7 +12,7 @@ export async function UserUpdateResolver( ): Promise { ensureIdentity(identity); - if (input.id != identity.id) throw new Error('Operation is not permitted.'); //todo: add admin access + if (input.id !== identity.id) throw new Error('Operation is not permitted.'); if (input.description != null && input.description.length > 700) throw new Error('Description is too long.'); diff --git a/app/server/main.ts b/app/server/main.ts index ee5a87f..7dfe694 100644 --- a/app/server/main.ts +++ b/app/server/main.ts @@ -7,7 +7,7 @@ import 'dotenv/config'; import express from 'express'; import fs from 'fs'; import { GraphQLJSON } from 'graphql-scalars'; -import https from 'https'; +import http from 'http'; import path from 'path'; import ViteExpress from 'vite-express'; import { toAppConfig } from './config'; @@ -18,11 +18,16 @@ import { getIdentityContext, IdentityContext } from './identity'; export const config = toAppConfig(); const __dirname = import.meta.dirname; -const key = fs.readFileSync(path.join(__dirname + '../../../certs/selfsigned.key')); -const cert = fs.readFileSync(path.join(__dirname + '../../../certs/selfsigned.crt')); + +// todo - make built-in ssl conditional +// const key = fs.readFileSync(path.join(__dirname + '../../../certs/selfsigned.key')); +// const cert = fs.readFileSync(path.join(__dirname + '../../../certs/selfsigned.crt')); const app = express(); -const server = https.createServer({ key, cert }, app); + +// todo - make built-in ssl conditional +// const server = https.createServer({ key, cert }, app); +const server = http.createServer(app); const typeDefs = fs.readFileSync(path.join(__dirname, 'graphql', 'schema.graphql'), 'utf8'); diff --git a/package-lock.json b/package-lock.json index d94cc41..314393c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,11 +14,6 @@ "@chakra-ui/toast": "^7.0.2", "@coolbytes/editorjs-link": "^1.0.0", "@deftomat/opinionated": "^1.1.3", - "@editorjs/editorjs": "^2.30.8", - "@editorjs/header": "^2.8.8", - "@editorjs/link": "^2.6.2", - "@editorjs/list": "^2.0.8", - "@editorjs/quote": "^2.7.6", "@emotion/react": "^11.13.5", "@hookform/resolvers": "^3.9.1", "@prisma/client": "^6.4.1", @@ -1820,12 +1815,6 @@ "sisteransi": "^1.0.5" } }, - "node_modules/@codexteam/icons": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.0.5.tgz", - "integrity": "sha512-s6H2KXhLz2rgbMZSkRm8dsMJvyUNZsEjxobBEg9ztdrb1B2H3pEzY6iTwI4XUPJWJ3c3qRKwV4TrO3J5jUdoQA==", - "license": "MIT" - }, "node_modules/@coolbytes/editorjs-link": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@coolbytes/editorjs-link/-/editorjs-link-1.0.0.tgz", @@ -1866,15 +1855,6 @@ "node": ">=18.0.0" } }, - "node_modules/@deftomat/opinionated/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/@deftomat/opinionated/node_modules/chalk": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", @@ -1919,14 +1899,14 @@ } }, "node_modules/@deftomat/opinionated/node_modules/glob": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.2.tgz", - "integrity": "sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==", + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", + "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", "license": "ISC", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^4.0.1", - "minimatch": "^10.0.0", + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.0.3", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" @@ -2040,12 +2020,12 @@ } }, "node_modules/@deftomat/opinionated/node_modules/minimatch": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "@isaacs/brace-expansion": "^5.0.0" }, "engines": { "node": "20 || >=22" @@ -2282,84 +2262,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@editorjs/dom": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/@editorjs/dom/-/dom-0.0.5.tgz", - "integrity": "sha512-SZ78Gwpkp3EUhjBIp0lSojeQ35V9acF8SubJsMeOH/vlOUE40GOnvvwWZnF05lO7bIB0dOHhhJy4N7IIAWxP2w==", - "license": "MIT", - "dependencies": { - "@editorjs/helpers": "^0.0.4" - } - }, - "node_modules/@editorjs/editorjs": { - "version": "2.30.8", - "resolved": "https://registry.npmjs.org/@editorjs/editorjs/-/editorjs-2.30.8.tgz", - "integrity": "sha512-ClFuxI1qZTfXPJTacQfsJtOUP6bKoIe6BQNdAvGsDTDVwMnZEzoaSOwvUpdZEE56xppVfQueNK/1MElV9SJKHg==", - "license": "Apache-2.0" - }, - "node_modules/@editorjs/header": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/@editorjs/header/-/header-2.8.8.tgz", - "integrity": "sha512-bsMSs34u2hoi0UBuRoc5EGWXIFzJiwYgkFUYQGVm63y5FU+s8zPBmVx5Ip2sw1xgs0fqfDROqmteMvvmbCy62w==", - "license": "MIT", - "dependencies": { - "@codexteam/icons": "^0.0.5", - "@editorjs/editorjs": "^2.29.1" - } - }, - "node_modules/@editorjs/helpers": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@editorjs/helpers/-/helpers-0.0.4.tgz", - "integrity": "sha512-ieg3dzo2m1/ELze/RMNADiAiC5amXxIlVXoJ5vvXITOu/p/dPsrF+Oi3h5gBYvtGk9vg5LJUSG5YWU0tBUO1tw==", - "license": "MIT" - }, - "node_modules/@editorjs/link": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/@editorjs/link/-/link-2.6.2.tgz", - "integrity": "sha512-3cPx6M4ZvwDDvsi0E0fvMR3rvveAV/C0GRo1JLeZJ9cG9QgyoNolj4eu5Eqx3/r1XTC/he54qYEIZ/Dc4Lr4Ow==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.2", - "@codexteam/icons": "^0.0.4" - } - }, - "node_modules/@editorjs/link/node_modules/@codexteam/icons": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.0.4.tgz", - "integrity": "sha512-V8N/TY2TGyas4wLrPIFq7bcow68b3gu8DfDt1+rrHPtXxcexadKauRJL6eQgfG7Z0LCrN4boLRawR4S9gjIh/Q==", - "license": "MIT" - }, - "node_modules/@editorjs/list": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@editorjs/list/-/list-2.0.8.tgz", - "integrity": "sha512-/EJNvpeJYa1YDtYa85ug9R3sbDyI5ZlMHQ2bIh5S9iPa19qXe45jk6kgcew+jMNQq3j4NS4Q6YeeFbU1QkNMWw==", - "license": "MIT", - "dependencies": { - "@codexteam/icons": "^0.3.2" - } - }, - "node_modules/@editorjs/list/node_modules/@codexteam/icons": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.3.3.tgz", - "integrity": "sha512-cp7mkZPgmBuSxigTm3Vb+DtVHYeX7qXfQd7o05vcLD8Ag5WvRlol2QSn5P10k0CDAJwmkH9nQGQLBycErS9lsQ==", - "license": "MIT" - }, - "node_modules/@editorjs/quote": { - "version": "2.7.6", - "resolved": "https://registry.npmjs.org/@editorjs/quote/-/quote-2.7.6.tgz", - "integrity": "sha512-D01KUMSDj2r+6Z+xjDkQqI+y6URpeHCvj0+P4pah+GtkG040lWjFb2H4pgHFXuol2cbfyAoraYSw85fuPheCvw==", - "license": "MIT", - "dependencies": { - "@codexteam/icons": "^0.3.2", - "@editorjs/dom": "^0.0.5" - } - }, - "node_modules/@editorjs/quote/node_modules/@codexteam/icons": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@codexteam/icons/-/icons-0.3.3.tgz", - "integrity": "sha512-cp7mkZPgmBuSxigTm3Vb+DtVHYeX7qXfQd7o05vcLD8Ag5WvRlol2QSn5P10k0CDAJwmkH9nQGQLBycErS9lsQ==", - "license": "MIT" - }, "node_modules/@emotion/babel-plugin": { "version": "11.13.5", "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", @@ -4931,6 +4833,27 @@ "@swc/helpers": "^0.5.0" } }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -6299,9 +6222,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -7956,9 +7879,9 @@ "license": "MIT" }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -10826,9 +10749,9 @@ } }, "node_modules/graphql-config/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14892,9 +14815,9 @@ } }, "node_modules/sucrase/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": {