Browse Source

refactor: move dashboard files in root folder

Nicolas Meienberger 2 năm trước cách đây
mục cha
commit
9c340faecb
100 tập tin đã thay đổi với 199 bổ sung367 xóa
  1. 15 0
      .dockerignore
  2. 0 0
      .env.example
  3. 6 5
      .env.test
  4. 0 0
      .eslintignore
  5. 0 0
      .eslintrc.js
  6. 4 4
      .github/workflows/ci.yml
  7. 45 26
      .gitignore
  8. 0 0
      .prettierrc.js
  9. 8 4
      Dockerfile
  10. 9 4
      Dockerfile.dev
  11. 0 0
      __mocks__/fs-extra.ts
  12. 0 0
      __mocks__/redis.ts
  13. 0 0
      app-data/.gitkeep
  14. 0 0
      apps/.gitkeep
  15. 0 3
      commitlint.config.js
  16. 1 1
      docker-compose.dev.yml
  17. 0 0
      esbuild.js
  18. 0 7
      jest.config.js
  19. 0 0
      jest.config.ts
  20. 0 0
      media/.gitkeep
  21. 0 0
      media/data/.gitkeep
  22. 0 0
      media/data/books/.gitkeep
  23. 0 0
      media/data/books/ebooks/.gitkeep
  24. BIN
      media/data/books/metadata.db
  25. 0 0
      media/data/books/spoken/.gitkeep
  26. 0 0
      media/data/images/.gitkeep
  27. 0 0
      media/data/movies/.gitkeep
  28. 0 0
      media/data/music/.gitkeep
  29. 0 0
      media/data/podcasts/.gitkeep
  30. 0 0
      media/data/tv/.gitkeep
  31. 0 0
      media/torrents/.gitkeep
  32. 0 0
      media/torrents/complete/.gitkeep
  33. 0 0
      media/torrents/incomplete/.gitkeep
  34. 0 0
      media/torrents/watch/.gitkeep
  35. 0 0
      next-env.d.ts
  36. 0 0
      next.config.mjs
  37. 106 14
      package.json
  38. 0 5
      packages/dashboard/.dockerignore
  39. 0 6
      packages/dashboard/.env.test
  40. 0 37
      packages/dashboard/.gitignore
  41. 0 34
      packages/dashboard/README.md
  42. 0 114
      packages/dashboard/package.json
  43. 0 41
      packages/dashboard/tsconfig.json
  44. 0 61
      pnpm-lock.yaml
  45. 0 0
      prisma/schema.prisma
  46. 0 0
      public/android-chrome-192x192.png
  47. 0 0
      public/android-chrome-512x512.png
  48. 0 0
      public/apple-touch-icon.png
  49. 0 0
      public/browserconfig.xml
  50. 0 0
      public/empty.svg
  51. 0 0
      public/error.png
  52. 0 0
      public/favicon-16x16.png
  53. 0 0
      public/favicon-32x32.png
  54. 0 0
      public/favicon.ico
  55. 0 0
      public/mockServiceWorker.js
  56. 0 0
      public/mstile-150x150.png
  57. 0 0
      public/placeholder.png
  58. 0 0
      public/safari-pinned-tab.svg
  59. 0 0
      public/site.webmanifest
  60. 0 0
      public/tipi.png
  61. 0 0
      repos/.gitkeep
  62. 4 0
      scripts/install.sh
  63. 1 1
      sonar-project.properties
  64. 0 0
      src/client/components/AppLogo/AppLogo.module.scss
  65. 0 0
      src/client/components/AppLogo/AppLogo.tsx
  66. 0 0
      src/client/components/AppLogo/index.ts
  67. 0 0
      src/client/components/AppStatus/AppStatus.module.scss
  68. 0 0
      src/client/components/AppStatus/AppStatus.tsx
  69. 0 0
      src/client/components/AppStatus/index.tsx
  70. 0 0
      src/client/components/AppTile/AppTile.module.scss
  71. 0 0
      src/client/components/AppTile/AppTile.tsx
  72. 0 0
      src/client/components/AppTile/index.tsx
  73. 0 0
      src/client/components/Layout/Layout.module.scss
  74. 0 0
      src/client/components/Layout/Layout.tsx
  75. 0 0
      src/client/components/Layout/index.ts
  76. 0 0
      src/client/components/Markdown/Markdown.tsx
  77. 0 0
      src/client/components/StatusScreen/StatusScreen.tsx
  78. 0 0
      src/client/components/StatusScreen/index.ts
  79. 0 0
      src/client/components/hoc/AuthProvider/AuthProvider.test.tsx
  80. 0 0
      src/client/components/hoc/AuthProvider/AuthProvider.tsx
  81. 0 0
      src/client/components/hoc/AuthProvider/index.ts
  82. 0 0
      src/client/components/hoc/StatusProvider/StatusProvider.test.tsx
  83. 0 0
      src/client/components/hoc/StatusProvider/StatusProvider.tsx
  84. 0 0
      src/client/components/hoc/StatusProvider/index.ts
  85. 0 0
      src/client/components/hoc/ToastProvider/ToastProvider.test.tsx
  86. 0 0
      src/client/components/hoc/ToastProvider/ToastProvider.tsx
  87. 0 0
      src/client/components/hoc/ToastProvider/index.ts
  88. 0 0
      src/client/components/ui/Button/Button.test.tsx
  89. 0 0
      src/client/components/ui/Button/Button.tsx
  90. 0 0
      src/client/components/ui/Button/index.ts
  91. 0 0
      src/client/components/ui/DataGrid/DataGrid.test.tsx
  92. 0 0
      src/client/components/ui/DataGrid/DataGrid.tsx
  93. 0 0
      src/client/components/ui/DataGrid/DataGridItem.tsx
  94. 0 0
      src/client/components/ui/DataGrid/index.ts
  95. 0 0
      src/client/components/ui/EmptyPage/EmptyPage.module.scss
  96. 0 0
      src/client/components/ui/EmptyPage/EmptyPage.test.tsx
  97. 0 0
      src/client/components/ui/EmptyPage/EmptyPage.tsx
  98. 0 0
      src/client/components/ui/EmptyPage/index.ts
  99. 0 0
      src/client/components/ui/ErrorPage/ErrorPage.module.scss
  100. 0 0
      src/client/components/ui/ErrorPage/ErrorPage.test.tsx

+ 15 - 0
.dockerignore

@@ -10,3 +10,18 @@ dist/
 docker-compose*.yml
 Dockerfile*
 .dockerignore
+
+# Tipi folder
+logs/
+tests/
+state/
+templates/
+scripts/
+screenshots/
+repos/
+media/
+data/
+apps/
+app-data/
+.github/
+__mocks__/

+ 0 - 0
packages/dashboard/.env.example → .env.example


+ 6 - 5
.env.test

@@ -1,5 +1,6 @@
-ROOT_FOLDER=/test
-ROOT_FOLDER_HOST=/tipi
-JWT_SECRET=secret
-STORAGE_PATH=/test/storage
-APPS_REPO_URL=http://localhost:8080
+POSTGRES_HOST=localhost
+POSTGRES_DBNAME=postgres
+POSTGRES_USERNAME=postgres
+POSTGRES_PASSWORD=postgres
+POSTGRES_PORT=5433
+APPS_REPO_ID=repo-id

+ 0 - 0
packages/dashboard/.eslintignore → .eslintignore


+ 0 - 0
packages/dashboard/.eslintrc.js → .eslintrc.js


+ 4 - 4
.github/workflows/ci.yml

@@ -59,16 +59,16 @@ jobs:
             ${{ runner.os }}-pnpm-store-
 
       - name: Install dependencies
-        run: cd packages/dashboard && pnpm install
+        run: pnpm install
 
       - name: Build client
-        run: cd packages/dashboard && pnpm build:next
+        run: pnpm build:next
 
       - name: Run linter
-        run: cd packages/dashboard && pnpm lint
+        run: pnpm lint
 
       - name: Run tests
-        run: cd packages/dashboard && pnpm test
+        run: pnpm test
 
       - uses: codecov/codecov-action@v3
         with:

+ 45 - 26
.gitignore

@@ -4,6 +4,44 @@
 .DS_Store
 .vscode
 
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
+
+# testing
+/coverage
+
+# next.js
+/.next/
+/out/
+
+# production
+/build
+/dist
+server-preload.js
+
+# misc
+.DS_Store
+*.pem
+
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+.pnpm-debug.log*
+
+# local env files
+.env*.local
+
+# vercel
+.vercel
+
+# typescript
+*.tsbuildinfo
+
 logs
 .pnpm-debug.log
 .env*
@@ -11,33 +49,14 @@ logs
 !.env.test
 github.secrets
 node_modules/
-app-data/*
-data/postgres
-data/redis
-!app-data/.gitkeep
-repos/*
-!repos/.gitkeep
-apps/*
-!apps/.gitkeep
+app-data
+data
+data
+repos
+apps
 traefik/shared
 
 # media folder
 media
-!media/.gitkeep
-!media/data/.gitkeep
-!media/data/books/.gitkeep
-!media/data/books/ebooks/.gitkeep
-!media/data/books/spoken/.gitkeep
-!media/data/movies/.gitkeep
-!media/data/music/.gitkeep
-!media/data/podcasts/.gitkeep
-!media/data/tv/.gitkeep
-!media/data/images/.gitkeep
-!media/torrents/.gitkeep
-!media/torrents/complete/.gitkeep
-!media/torrents/incomplete/.gitkeep
-!media/torrents/watch/.gitkeep
-
-# state folder
-state/*
-!state/.gitkeep
+
+state

+ 0 - 0
packages/dashboard/.prettierrc.js → .prettierrc.js


+ 8 - 4
Dockerfile

@@ -15,14 +15,18 @@ FROM builder_base AS builder
 
 WORKDIR /app
 
-COPY ./packages/dashboard/pnpm-lock.yaml ./
+COPY ./pnpm-lock.yaml ./
 RUN pnpm fetch
 
-COPY ./packages/dashboard/package*.json ./
-COPY ./packages/dashboard/prisma/schema.prisma ./prisma/
+COPY ./package*.json ./
+COPY ./prisma/schema.prisma ./prisma/
 
 RUN pnpm install -r --prefer-offline 
-COPY ./packages/dashboard ./
+COPY ./src ./src
+COPY ./esbuild.js ./esbuild.js
+COPY ./tsconfig.json ./tsconfig.json
+COPY ./next.config.mjs ./next.config.mjs
+COPY ./public ./public
 
 RUN npm run build
 

+ 9 - 4
Dockerfile.dev

@@ -11,13 +11,18 @@ RUN npm install node-gyp -g
 
 WORKDIR /app
 
-COPY ./packages/dashboard/pnpm-lock.yaml ./
+COPY ./pnpm-lock.yaml ./
 RUN pnpm fetch
 
-COPY ./packages/dashboard/package*.json ./
-COPY ./packages/dashboard/prisma/schema.prisma ./prisma/
+COPY ./package*.json ./
+COPY ./prisma/schema.prisma ./prisma/
 
 RUN pnpm install -r --prefer-offline 
-COPY ./packages/dashboard ./
+
+COPY ./src ./src
+COPY ./esbuild.js ./esbuild.js
+COPY ./tsconfig.json ./tsconfig.json
+COPY ./next.config.mjs ./next.config.mjs
+COPY ./public ./public
 
 CMD ["npm", "run", "dev"]

+ 0 - 0
packages/dashboard/__mocks__/fs-extra.ts → __mocks__/fs-extra.ts


+ 0 - 0
packages/dashboard/__mocks__/redis.ts → __mocks__/redis.ts


+ 0 - 0
app-data/.gitkeep


+ 0 - 0
apps/.gitkeep


+ 0 - 3
commitlint.config.js

@@ -1,3 +0,0 @@
-module.exports = {
-  extends: ["@commitlint/config-conventional"],
-};

+ 1 - 1
docker-compose.dev.yml

@@ -76,7 +76,7 @@ services:
     networks:
       - tipi_main_network
     volumes:
-      - ${PWD}/packages/dashboard/src:/app/src
+      - ${PWD}/src:/app/src
       # - /dashboard/node_modules
       # - /dashboard/.next
       - ${PWD}/state:/runtipi/state

+ 0 - 0
packages/dashboard/esbuild.js → esbuild.js


+ 0 - 7
jest.config.js

@@ -1,7 +0,0 @@
-/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
-module.exports = {
-  preset: "ts-jest",
-  testEnvironment: "node",
-  testMatch: ["**/__tests__/**/*.test.ts"],
-  testPathIgnorePatterns: ["/node_modules/", "/packages/"],
-};

+ 0 - 0
packages/dashboard/jest.config.ts → jest.config.ts


+ 0 - 0
media/.gitkeep


+ 0 - 0
media/data/.gitkeep


+ 0 - 0
media/data/books/.gitkeep


+ 0 - 0
media/data/books/ebooks/.gitkeep


BIN
media/data/books/metadata.db


+ 0 - 0
media/data/books/spoken/.gitkeep


+ 0 - 0
media/data/images/.gitkeep


+ 0 - 0
media/data/movies/.gitkeep


+ 0 - 0
media/data/music/.gitkeep


+ 0 - 0
media/data/podcasts/.gitkeep


+ 0 - 0
media/data/tv/.gitkeep


+ 0 - 0
media/torrents/.gitkeep


+ 0 - 0
media/torrents/complete/.gitkeep


+ 0 - 0
media/torrents/incomplete/.gitkeep


+ 0 - 0
media/torrents/watch/.gitkeep


+ 0 - 0
packages/dashboard/next-env.d.ts → next-env.d.ts


+ 0 - 0
packages/dashboard/next.config.mjs → next.config.mjs


+ 106 - 14
package.json

@@ -3,9 +3,19 @@
   "version": "0.8.1",
   "description": "A homeserver for everyone",
   "scripts": {
-    "commit": "git-cz",
-    "act:test-install": "act --container-architecture linux/amd64 -j test-install",
-    "act:docker": "act --container-architecture linux/amd64 --secret-file github.secrets -j build-images",
+    "copy:migrations": "mkdir -p dist/migrations && cp -r ./src/server/migrations dist/migrations",
+    "prisma:pull": "prisma db pull",
+    "test": "dotenv -e .env.test -- jest --colors",
+    "test:client": "jest --colors --selectProjects client --",
+    "test:server": "jest --colors --selectProjects server --",
+    "postinstall": "prisma generate",
+    "dev": "npm run copy:migrations && node ./esbuild.js dev",
+    "start": "NODE_ENV=production node index.js",
+    "lint": "next lint",
+    "lint:fix": "next lint --fix",
+    "build": "npm run copy:migrations && node ./esbuild.js build",
+    "build:server": "node ./esbuild.js build",
+    "build:next": "next build",
     "start:dev": "./scripts/start-dev.sh",
     "start:rc": "docker-compose -f docker-compose.rc.yml --env-file .env up --build",
     "start:prod": "docker-compose -f docker-compose.test.yml --env-file .env up --build",
@@ -17,12 +27,99 @@
     "test:build:arm7": "docker buildx build --platform linux/arm/v7 -t meienberger/runtipi:test .",
     "test:build:amd64": "docker buildx build --platform linux/amd64 -t meienberger/runtipi:test ."
   },
+  "dependencies": {
+    "@hookform/resolvers": "^2.9.10",
+    "@prisma/client": "^4.8.0",
+    "@runtipi/postgres-migrations": "^5.3.0",
+    "@tabler/core": "1.0.0-beta16",
+    "@tabler/icons": "^1.109.0",
+    "@tanstack/react-query": "^4.24.4",
+    "@trpc/client": "^10.11.1",
+    "@trpc/next": "^10.11.1",
+    "@trpc/react-query": "^10.11.1",
+    "@trpc/server": "^10.11.1",
+    "argon2": "^0.29.1",
+    "clsx": "^1.1.1",
+    "express": "^4.17.3",
+    "fs-extra": "^10.1.0",
+    "graphql": "^15.8.0",
+    "graphql-tag": "^2.12.6",
+    "isomorphic-fetch": "^3.0.0",
+    "jsonwebtoken": "^9.0.0",
+    "next": "13.1.6",
+    "node-cron": "^3.0.1",
+    "node-fetch-commonjs": "^3.2.4",
+    "pg": "^8.7.3",
+    "react": "18.2.0",
+    "react-dom": "18.2.0",
+    "react-hook-form": "^7.38.0",
+    "react-markdown": "^8.0.3",
+    "react-select": "^5.6.1",
+    "react-tooltip": "^4.4.3",
+    "redis": "^4.3.1",
+    "remark-breaks": "^3.0.2",
+    "remark-gfm": "^3.0.1",
+    "sass": "^1.55.0",
+    "semver": "^7.3.7",
+    "sharp": "0.30.7",
+    "superjson": "^1.12.0",
+    "tslib": "^2.4.0",
+    "uuid": "^9.0.0",
+    "validator": "^13.7.0",
+    "winston": "^3.7.2",
+    "zod": "^3.19.1",
+    "zustand": "^3.7.2"
+  },
   "devDependencies": {
-    "@commitlint/cli": "^17.0.3",
-    "@commitlint/config-conventional": "^17.0.3",
-    "@commitlint/cz-commitlint": "^17.0.3",
-    "commitizen": "^4.2.4",
-    "inquirer": "8.2.4"
+    "@babel/core": "^7.0.0",
+    "@faker-js/faker": "^7.6.0",
+    "@testing-library/dom": "^8.19.0",
+    "@testing-library/jest-dom": "^5.16.5",
+    "@testing-library/react": "^13.4.0",
+    "@testing-library/user-event": "^14.4.3",
+    "@types/express": "^4.17.13",
+    "@types/fs-extra": "^9.0.13",
+    "@types/isomorphic-fetch": "^0.0.36",
+    "@types/jest": "^29.2.4",
+    "@types/jsonwebtoken": "^9.0.0",
+    "@types/node": "18.11.18",
+    "@types/node-cron": "^3.0.2",
+    "@types/pg": "^8.6.5",
+    "@types/react": "18.0.8",
+    "@types/react-dom": "18.0.3",
+    "@types/semver": "^7.3.12",
+    "@types/testing-library__jest-dom": "^5.14.5",
+    "@types/uuid": "^8.3.4",
+    "@types/validator": "^13.7.2",
+    "@typescript-eslint/eslint-plugin": "^5.47.1",
+    "@typescript-eslint/parser": "^5.47.1",
+    "dotenv-cli": "^6.0.0",
+    "esbuild": "^0.16.17",
+    "eslint": "8.30.0",
+    "eslint-config-airbnb": "^19.0.4",
+    "eslint-config-airbnb-typescript": "^17.0.0",
+    "eslint-config-next": "13.1.1",
+    "eslint-config-prettier": "^8.6.0",
+    "eslint-plugin-import": "^2.25.3",
+    "eslint-plugin-jest": "^27.1.7",
+    "eslint-plugin-jsdoc": "^39.6.9",
+    "eslint-plugin-jsx-a11y": "^6.6.1",
+    "eslint-plugin-react": "^7.31.10",
+    "eslint-plugin-react-hooks": "^4.6.0",
+    "jest": "^29.3.1",
+    "jest-environment-jsdom": "^29.3.1",
+    "msw": "^1.0.0",
+    "next-router-mock": "^0.8.0",
+    "prettier": "^2.8.4",
+    "prisma": "^4.10.1",
+    "ts-jest": "^29.0.3",
+    "ts-node": "^10.9.1",
+    "typescript": "4.9.4",
+    "wait-for-expect": "^3.0.2",
+    "whatwg-fetch": "^3.6.2"
+  },
+  "msw": {
+    "workerDirectory": "public"
   },
   "repository": {
     "type": "git",
@@ -33,10 +130,5 @@
   "bugs": {
     "url": "https://github.com/meienberger/runtipi/issues"
   },
-  "homepage": "https://github.com/meienberger/runtipi#readme",
-  "config": {
-    "commitizen": {
-      "path": "@commitlint/cz-commitlint"
-    }
-  }
+  "homepage": "https://github.com/meienberger/runtipi#readme"
 }

+ 0 - 5
packages/dashboard/.dockerignore

@@ -1,5 +0,0 @@
-node_modules/
-.next/
-dist/
-sessions/
-logs/

+ 0 - 6
packages/dashboard/.env.test

@@ -1,6 +0,0 @@
-POSTGRES_HOST=localhost
-POSTGRES_DBNAME=postgres
-POSTGRES_USERNAME=postgres
-POSTGRES_PASSWORD=postgres
-POSTGRES_PORT=5433
-APPS_REPO_ID=repo-id

+ 0 - 37
packages/dashboard/.gitignore

@@ -1,37 +0,0 @@
-# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
-
-# dependencies
-/node_modules
-/.pnp
-.pnp.js
-
-# testing
-/coverage
-
-# next.js
-/.next/
-/out/
-
-# production
-/build
-/dist
-server-preload.js
-
-# misc
-.DS_Store
-*.pem
-
-# debug
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-.pnpm-debug.log*
-
-# local env files
-.env*.local
-
-# vercel
-.vercel
-
-# typescript
-*.tsbuildinfo

+ 0 - 34
packages/dashboard/README.md

@@ -1,34 +0,0 @@
-This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
-
-## Getting Started
-
-First, run the development server:
-
-```bash
-npm run dev
-# or
-yarn dev
-```
-
-Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
-
-You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file.
-
-[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`.
-
-The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages.
-
-## Learn More
-
-To learn more about Next.js, take a look at the following resources:
-
-- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
-- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
-
-You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
-
-## Deploy on Vercel
-
-The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
-
-Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.

+ 0 - 114
packages/dashboard/package.json

@@ -1,114 +0,0 @@
-{
-  "name": "dashboard",
-  "version": "0.8.1",
-  "private": true,
-  "scripts": {
-    "copy:migrations": "mkdir -p dist/migrations && cp -r src/server/migrations dist/migrations",
-    "prisma:pull": "prisma db pull",
-    "test": "dotenv -e .env.test -- jest --colors",
-    "test:client": "jest --colors --selectProjects client --",
-    "test:server": "jest --colors --selectProjects server --",
-    "postinstall": "prisma generate",
-    "dev": "npm run copy:migrations && node ./esbuild.js dev",
-    "start": "NODE_ENV=production node index.js",
-    "lint": "next lint",
-    "lint:fix": "next lint --fix",
-    "build": "npm run copy:migrations && node ./esbuild.js build",
-    "build:server": "node ./esbuild.js build",
-    "build:next": "next build"
-  },
-  "dependencies": {
-    "@hookform/resolvers": "^2.9.10",
-    "@prisma/client": "^4.8.0",
-    "@runtipi/postgres-migrations": "^5.3.0",
-    "@tabler/core": "1.0.0-beta16",
-    "@tabler/icons": "^1.109.0",
-    "@tanstack/react-query": "^4.24.4",
-    "@trpc/client": "^10.11.1",
-    "@trpc/next": "^10.11.1",
-    "@trpc/react-query": "^10.11.1",
-    "@trpc/server": "^10.11.1",
-    "argon2": "^0.29.1",
-    "clsx": "^1.1.1",
-    "express": "^4.17.3",
-    "fs-extra": "^10.1.0",
-    "graphql": "^15.8.0",
-    "graphql-tag": "^2.12.6",
-    "isomorphic-fetch": "^3.0.0",
-    "jsonwebtoken": "^9.0.0",
-    "next": "13.1.6",
-    "node-cron": "^3.0.1",
-    "node-fetch-commonjs": "^3.2.4",
-    "pg": "^8.7.3",
-    "react": "18.2.0",
-    "react-dom": "18.2.0",
-    "react-hook-form": "^7.38.0",
-    "react-markdown": "^8.0.3",
-    "react-select": "^5.6.1",
-    "react-tooltip": "^4.4.3",
-    "redis": "^4.3.1",
-    "remark-breaks": "^3.0.2",
-    "remark-gfm": "^3.0.1",
-    "sass": "^1.55.0",
-    "semver": "^7.3.7",
-    "sharp": "0.30.7",
-    "superjson": "^1.12.0",
-    "tslib": "^2.4.0",
-    "uuid": "^9.0.0",
-    "validator": "^13.7.0",
-    "winston": "^3.7.2",
-    "zod": "^3.19.1",
-    "zustand": "^3.7.2"
-  },
-  "devDependencies": {
-    "@babel/core": "^7.0.0",
-    "@faker-js/faker": "^7.6.0",
-    "@testing-library/dom": "^8.19.0",
-    "@testing-library/jest-dom": "^5.16.5",
-    "@testing-library/react": "^13.4.0",
-    "@testing-library/user-event": "^14.4.3",
-    "@types/express": "^4.17.13",
-    "@types/fs-extra": "^9.0.13",
-    "@types/isomorphic-fetch": "^0.0.36",
-    "@types/jest": "^29.2.4",
-    "@types/jsonwebtoken": "^9.0.0",
-    "@types/node": "18.11.18",
-    "@types/node-cron": "^3.0.2",
-    "@types/pg": "^8.6.5",
-    "@types/react": "18.0.8",
-    "@types/react-dom": "18.0.3",
-    "@types/semver": "^7.3.12",
-    "@types/testing-library__jest-dom": "^5.14.5",
-    "@types/uuid": "^8.3.4",
-    "@types/validator": "^13.7.2",
-    "@typescript-eslint/eslint-plugin": "^5.47.1",
-    "@typescript-eslint/parser": "^5.47.1",
-    "dotenv-cli": "^6.0.0",
-    "esbuild": "^0.16.17",
-    "eslint": "8.30.0",
-    "eslint-config-airbnb": "^19.0.4",
-    "eslint-config-airbnb-typescript": "^17.0.0",
-    "eslint-config-next": "13.1.1",
-    "eslint-config-prettier": "^8.6.0",
-    "eslint-plugin-import": "^2.25.3",
-    "eslint-plugin-jest": "^27.1.7",
-    "eslint-plugin-jsdoc": "^39.6.9",
-    "eslint-plugin-jsx-a11y": "^6.6.1",
-    "eslint-plugin-react": "^7.31.10",
-    "eslint-plugin-react-hooks": "^4.6.0",
-    "jest": "^29.3.1",
-    "jest-environment-jsdom": "^29.3.1",
-    "msw": "^1.0.0",
-    "next-router-mock": "^0.8.0",
-    "prettier": "^2.8.4",
-    "prisma": "^4.10.1",
-    "ts-jest": "^29.0.3",
-    "ts-node": "^10.9.1",
-    "typescript": "4.9.4",
-    "wait-for-expect": "^3.0.2",
-    "whatwg-fetch": "^3.6.2"
-  },
-  "msw": {
-    "workerDirectory": "public"
-  }
-}

+ 0 - 41
packages/dashboard/tsconfig.json

@@ -1,41 +0,0 @@
-{
-  "compilerOptions": {
-    "target": "es2017",
-    "lib": [
-      "dom",
-      "dom.iterable",
-      "esnext"
-    ],
-    "allowJs": true,
-    "skipLibCheck": true,
-    "strict": true,
-    "forceConsistentCasingInFileNames": true,
-    "noEmit": true,
-    "esModuleInterop": true,
-    "module": "CommonJS",
-    "moduleResolution": "node",
-    "resolveJsonModule": true,
-    "isolatedModules": true,
-    "jsx": "preserve",
-    "incremental": true,
-    "strictNullChecks": true,
-    "allowSyntheticDefaultImports": true,
-    "noUncheckedIndexedAccess": true,
-    "types": [
-      "jest",
-      "@testing-library/jest-dom"
-    ],
-    "experimentalDecorators": true,
-  },
-  "include": [
-    "next-env.d.ts",
-    "**/*.ts",
-    "**/*.tsx",
-    "**/*.mjs",
-    "**/*.js",
-    "**/*.jsx"
-  ],
-  "exclude": [
-    "node_modules"
-  ]
-}

+ 0 - 61
packages/dashboard/pnpm-lock.yaml → pnpm-lock.yaml

@@ -192,7 +192,6 @@ packages:
     dependencies:
       '@jridgewell/gen-mapping': 0.1.1
       '@jridgewell/trace-mapping': 0.3.17
-    dev: true
 
   /@babel/code-frame/7.18.6:
     resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==}
@@ -203,7 +202,6 @@ packages:
   /@babel/compat-data/7.20.14:
     resolution: {integrity: sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==}
     engines: {node: '>=6.9.0'}
-    dev: true
 
   /@babel/core/7.20.12:
     resolution: {integrity: sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==}
@@ -226,7 +224,6 @@ packages:
       semver: 6.3.0
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
   /@babel/generator/7.20.14:
     resolution: {integrity: sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==}
@@ -235,7 +232,6 @@ packages:
       '@babel/types': 7.20.7
       '@jridgewell/gen-mapping': 0.3.2
       jsesc: 2.5.2
-    dev: true
 
   /@babel/helper-compilation-targets/7.20.7_@babel+core@7.20.12:
     resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==}
@@ -249,12 +245,10 @@ packages:
       browserslist: 4.21.5
       lru-cache: 5.1.1
       semver: 6.3.0
-    dev: true
 
   /@babel/helper-environment-visitor/7.18.9:
     resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==}
     engines: {node: '>=6.9.0'}
-    dev: true
 
   /@babel/helper-function-name/7.19.0:
     resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==}
@@ -262,14 +256,12 @@ packages:
     dependencies:
       '@babel/template': 7.20.7
       '@babel/types': 7.20.7
-    dev: true
 
   /@babel/helper-hoist-variables/7.18.6:
     resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==}
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/types': 7.20.7
-    dev: true
 
   /@babel/helper-module-imports/7.18.6:
     resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==}
@@ -291,7 +283,6 @@ packages:
       '@babel/types': 7.20.7
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
   /@babel/helper-plugin-utils/7.20.2:
     resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==}
@@ -303,14 +294,12 @@ packages:
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/types': 7.20.7
-    dev: true
 
   /@babel/helper-split-export-declaration/7.18.6:
     resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==}
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/types': 7.20.7
-    dev: true
 
   /@babel/helper-string-parser/7.19.4:
     resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==}
@@ -323,7 +312,6 @@ packages:
   /@babel/helper-validator-option/7.18.6:
     resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==}
     engines: {node: '>=6.9.0'}
-    dev: true
 
   /@babel/helpers/7.20.13:
     resolution: {integrity: sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==}
@@ -334,7 +322,6 @@ packages:
       '@babel/types': 7.20.7
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
   /@babel/highlight/7.18.6:
     resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==}
@@ -350,7 +337,6 @@ packages:
     hasBin: true
     dependencies:
       '@babel/types': 7.20.7
-    dev: true
 
   /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.20.12:
     resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
@@ -494,7 +480,6 @@ packages:
       '@babel/code-frame': 7.18.6
       '@babel/parser': 7.20.15
       '@babel/types': 7.20.7
-    dev: true
 
   /@babel/traverse/7.20.13:
     resolution: {integrity: sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==}
@@ -512,7 +497,6 @@ packages:
       globals: 11.12.0
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
   /@babel/types/7.20.7:
     resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==}
@@ -1137,7 +1121,6 @@ packages:
     dependencies:
       '@jridgewell/set-array': 1.1.2
       '@jridgewell/sourcemap-codec': 1.4.14
-    dev: true
 
   /@jridgewell/gen-mapping/0.3.2:
     resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==}
@@ -1146,28 +1129,23 @@ packages:
       '@jridgewell/set-array': 1.1.2
       '@jridgewell/sourcemap-codec': 1.4.14
       '@jridgewell/trace-mapping': 0.3.17
-    dev: true
 
   /@jridgewell/resolve-uri/3.1.0:
     resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
     engines: {node: '>=6.0.0'}
-    dev: true
 
   /@jridgewell/set-array/1.1.2:
     resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
     engines: {node: '>=6.0.0'}
-    dev: true
 
   /@jridgewell/sourcemap-codec/1.4.14:
     resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
-    dev: true
 
   /@jridgewell/trace-mapping/0.3.17:
     resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==}
     dependencies:
       '@jridgewell/resolve-uri': 3.1.0
       '@jridgewell/sourcemap-codec': 1.4.14
-    dev: true
 
   /@jridgewell/trace-mapping/0.3.9:
     resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
@@ -1220,7 +1198,6 @@ packages:
 
   /@next/env/13.1.6:
     resolution: {integrity: sha512-s+W9Fdqh5MFk6ECrbnVmmAOwxKQuhGMT7xXHrkYIBMBcTiOqNWhv5KbJIboKR5STXxNXl32hllnvKaffzFaWQg==}
-    dev: false
 
   /@next/eslint-plugin-next/13.1.1:
     resolution: {integrity: sha512-SBrOFS8PC3nQ5aeZmawJkjKkWjwK9RoxvBSv/86nZp0ubdoVQoko8r8htALd9ufp16NhacCdqhu9bzZLDWtALQ==}
@@ -1234,7 +1211,6 @@ packages:
     cpu: [arm]
     os: [android]
     requiresBuild: true
-    dev: false
     optional: true
 
   /@next/swc-android-arm64/13.1.6:
@@ -1243,7 +1219,6 @@ packages:
     cpu: [arm64]
     os: [android]
     requiresBuild: true
-    dev: false
     optional: true
 
   /@next/swc-darwin-arm64/13.1.6:
@@ -1252,7 +1227,6 @@ packages:
     cpu: [arm64]
     os: [darwin]
     requiresBuild: true
-    dev: false
     optional: true
 
   /@next/swc-darwin-x64/13.1.6:
@@ -1261,7 +1235,6 @@ packages:
     cpu: [x64]
     os: [darwin]
     requiresBuild: true
-    dev: false
     optional: true
 
   /@next/swc-freebsd-x64/13.1.6:
@@ -1270,7 +1243,6 @@ packages:
     cpu: [x64]
     os: [freebsd]
     requiresBuild: true
-    dev: false
     optional: true
 
   /@next/swc-linux-arm-gnueabihf/13.1.6:
@@ -1279,7 +1251,6 @@ packages:
     cpu: [arm]
     os: [linux]
     requiresBuild: true
-    dev: false
     optional: true
 
   /@next/swc-linux-arm64-gnu/13.1.6:
@@ -1288,7 +1259,6 @@ packages:
     cpu: [arm64]
     os: [linux]
     requiresBuild: true
-    dev: false
     optional: true
 
   /@next/swc-linux-arm64-musl/13.1.6:
@@ -1297,7 +1267,6 @@ packages:
     cpu: [arm64]
     os: [linux]
     requiresBuild: true
-    dev: false
     optional: true
 
   /@next/swc-linux-x64-gnu/13.1.6:
@@ -1306,7 +1275,6 @@ packages:
     cpu: [x64]
     os: [linux]
     requiresBuild: true
-    dev: false
     optional: true
 
   /@next/swc-linux-x64-musl/13.1.6:
@@ -1315,7 +1283,6 @@ packages:
     cpu: [x64]
     os: [linux]
     requiresBuild: true
-    dev: false
     optional: true
 
   /@next/swc-win32-arm64-msvc/13.1.6:
@@ -1324,7 +1291,6 @@ packages:
     cpu: [arm64]
     os: [win32]
     requiresBuild: true
-    dev: false
     optional: true
 
   /@next/swc-win32-ia32-msvc/13.1.6:
@@ -1333,7 +1299,6 @@ packages:
     cpu: [ia32]
     os: [win32]
     requiresBuild: true
-    dev: false
     optional: true
 
   /@next/swc-win32-x64-msvc/13.1.6:
@@ -1342,7 +1307,6 @@ packages:
     cpu: [x64]
     os: [win32]
     requiresBuild: true
-    dev: false
     optional: true
 
   /@nodelib/fs.scandir/2.1.5:
@@ -1412,7 +1376,6 @@ packages:
   /@prisma/engines/4.10.1:
     resolution: {integrity: sha512-B3tcTxjx196nuAu1GOTKO9cGPUgTFHYRdkPkTS4m5ptb2cejyBlH9X7GOfSt3xlI7p4zAJDshJP4JJivCg9ouA==}
     requiresBuild: true
-    dev: true
 
   /@redis/bloom/1.2.0_@redis+client@1.5.5:
     resolution: {integrity: sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==}
@@ -1498,7 +1461,6 @@ packages:
     resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==}
     dependencies:
       tslib: 2.5.0
-    dev: false
 
   /@tabler/core/1.0.0-beta16_biqbaboplfbrettd7655fr4n2y:
     resolution: {integrity: sha512-jg/IiGLGHeQive1b+DfOR8JA0DB/ihc/wIEMohLkVHplC/R66uYF/8zg5Ptk5OeV2XAkn+UaPwsfcdmmJR4utw==}
@@ -2498,7 +2460,6 @@ packages:
       electron-to-chromium: 1.4.301
       node-releases: 2.0.10
       update-browserslist-db: 1.0.10_browserslist@4.21.5
-    dev: true
 
   /bs-logger/0.2.6:
     resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==}
@@ -2660,7 +2621,6 @@ packages:
 
   /client-only/0.0.1:
     resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
-    dev: false
 
   /cliui/8.0.1:
     resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
@@ -3101,7 +3061,6 @@ packages:
 
   /electron-to-chromium/1.4.301:
     resolution: {integrity: sha512-bz00ASIIDjcgszZKuEA1JEFhbDjqUNbQ/PEhNEl1wbixzYpeTp2H2QWjsQvAL2T1wJBdOwCF5hE896BoMwYKrA==}
-    dev: true
 
   /emittery/0.13.1:
     resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==}
@@ -3258,7 +3217,6 @@ packages:
   /escalade/3.1.1:
     resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
     engines: {node: '>=6'}
-    dev: true
 
   /escape-html/1.0.3:
     resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
@@ -4078,7 +4036,6 @@ packages:
   /gensync/1.0.0-beta.2:
     resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
     engines: {node: '>=6.9.0'}
-    dev: true
 
   /get-caller-file/2.0.5:
     resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
@@ -4155,7 +4112,6 @@ packages:
   /globals/11.12.0:
     resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
     engines: {node: '>=4'}
-    dev: true
 
   /globals/13.20.0:
     resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==}
@@ -4358,7 +4314,6 @@ packages:
 
   /immutable/4.2.4:
     resolution: {integrity: sha512-WDxL3Hheb1JkRN3sQkyujNlL/xRjAo3rJtaU5xeufUauG66JdMr32bLj4gF+vWl84DIA3Zxw7tiAjneYzRRw+w==}
-    dev: false
 
   /import-fresh/3.3.0:
     resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
@@ -5232,7 +5187,6 @@ packages:
     resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
     engines: {node: '>=4'}
     hasBin: true
-    dev: true
 
   /json-parse-even-better-errors/2.3.1:
     resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
@@ -5256,7 +5210,6 @@ packages:
     resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
     engines: {node: '>=6'}
     hasBin: true
-    dev: true
 
   /jsonfile/6.1.0:
     resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
@@ -5405,7 +5358,6 @@ packages:
     resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
     dependencies:
       yallist: 3.1.1
-    dev: true
 
   /lru-cache/6.0.0:
     resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
@@ -5981,7 +5933,6 @@ packages:
     resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
     engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
     hasBin: true
-    dev: false
 
   /napi-build-utils/1.0.2:
     resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==}
@@ -6053,7 +6004,6 @@ packages:
     transitivePeerDependencies:
       - '@babel/core'
       - babel-plugin-macros
-    dev: false
 
   /node-abi/3.33.0:
     resolution: {integrity: sha512-7GGVawqyHF4pfd0YFybhv/eM9JwTtPqx0mAanQ146O3FlSh3pA24zf9IRQTOsfTSqXTNzPSP5iagAJ94jjuVog==}
@@ -6103,7 +6053,6 @@ packages:
 
   /node-releases/2.0.10:
     resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==}
-    dev: true
 
   /nopt/5.0.0:
     resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==}
@@ -6454,7 +6403,6 @@ packages:
       nanoid: 3.3.4
       picocolors: 1.0.0
       source-map-js: 1.0.2
-    dev: false
 
   /postgres-array/2.0.0:
     resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==}
@@ -6534,7 +6482,6 @@ packages:
     requiresBuild: true
     dependencies:
       '@prisma/engines': 4.10.1
-    dev: true
 
   /prompts/2.4.2:
     resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
@@ -6627,7 +6574,6 @@ packages:
       loose-envify: 1.4.0
       react: 18.2.0
       scheduler: 0.23.0
-    dev: false
 
   /react-hook-form/7.43.1_react@18.2.0:
     resolution: {integrity: sha512-+s3+s8LLytRMriwwuSqeLStVjRXFGxgjjx2jED7Z+wz1J/88vpxieRQGvJVvzrzVxshZ0BRuocFERb779m2kNg==}
@@ -6736,7 +6682,6 @@ packages:
     engines: {node: '>=0.10.0'}
     dependencies:
       loose-envify: 1.4.0
-    dev: false
 
   /readable-stream/3.6.0:
     resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==}
@@ -6943,7 +6888,6 @@ packages:
       chokidar: 3.5.3
       immutable: 4.2.4
       source-map-js: 1.0.2
-    dev: false
 
   /saxes/6.0.0:
     resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
@@ -6956,7 +6900,6 @@ packages:
     resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
     dependencies:
       loose-envify: 1.4.0
-    dev: false
 
   /semver/6.3.0:
     resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
@@ -7086,7 +7029,6 @@ packages:
   /source-map-js/1.0.2:
     resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
     engines: {node: '>=0.10.0'}
-    dev: false
 
   /source-map-support/0.5.13:
     resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==}
@@ -7281,7 +7223,6 @@ packages:
       '@babel/core': 7.20.12
       client-only: 0.0.1
       react: 18.2.0
-    dev: false
 
   /stylis/4.1.3:
     resolution: {integrity: sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==}
@@ -7687,7 +7628,6 @@ packages:
       browserslist: 4.21.5
       escalade: 3.1.1
       picocolors: 1.0.0
-    dev: true
 
   /uri-js/4.4.1:
     resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
@@ -8008,7 +7948,6 @@ packages:
 
   /yallist/3.1.1:
     resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
-    dev: true
 
   /yallist/4.0.0:
     resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}

+ 0 - 0
packages/dashboard/prisma/schema.prisma → prisma/schema.prisma


+ 0 - 0
packages/dashboard/public/android-chrome-192x192.png → public/android-chrome-192x192.png


+ 0 - 0
packages/dashboard/public/android-chrome-512x512.png → public/android-chrome-512x512.png


+ 0 - 0
packages/dashboard/public/apple-touch-icon.png → public/apple-touch-icon.png


+ 0 - 0
packages/dashboard/public/browserconfig.xml → public/browserconfig.xml


+ 0 - 0
packages/dashboard/public/empty.svg → public/empty.svg


+ 0 - 0
packages/dashboard/public/error.png → public/error.png


+ 0 - 0
packages/dashboard/public/favicon-16x16.png → public/favicon-16x16.png


+ 0 - 0
packages/dashboard/public/favicon-32x32.png → public/favicon-32x32.png


+ 0 - 0
packages/dashboard/public/favicon.ico → public/favicon.ico


+ 0 - 0
packages/dashboard/public/mockServiceWorker.js → public/mockServiceWorker.js


+ 0 - 0
packages/dashboard/public/mstile-150x150.png → public/mstile-150x150.png


+ 0 - 0
packages/dashboard/public/placeholder.png → public/placeholder.png


+ 0 - 0
packages/dashboard/public/safari-pinned-tab.svg → public/safari-pinned-tab.svg


+ 0 - 0
packages/dashboard/public/site.webmanifest → public/site.webmanifest


+ 0 - 0
packages/dashboard/public/tipi.png → public/tipi.png


+ 0 - 0
repos/.gitkeep


+ 4 - 0
scripts/install.sh

@@ -65,7 +65,11 @@ if [ -f "package.json" ]; then
 fi
 cp -r runtipi-"${LATEST_VERSION}"/package.json .
 
+mkdir -p apps
+mkdir -p app-data
 mkdir -p state
+mkdir -p repos
+
 mkdir -p media/torrents
 mkdir -p media/torrents/watch
 mkdir -p media/torrents/completed

+ 1 - 1
sonar-project.properties

@@ -1,4 +1,4 @@
 sonar.projectKey=runtipi
 sonar.sources=.
-sonar.exclusions=.github/**, .vscode/**, **/__mocks__/**, **/__tests__/**, packages/system-api/src/test/**
+sonar.exclusions=.github/**, .vscode/**, **/__mocks__/**, **/__tests__/** 
 sonar.projectName=runtipi

+ 0 - 0
packages/dashboard/src/client/components/AppLogo/AppLogo.module.scss → src/client/components/AppLogo/AppLogo.module.scss


+ 0 - 0
packages/dashboard/src/client/components/AppLogo/AppLogo.tsx → src/client/components/AppLogo/AppLogo.tsx


+ 0 - 0
packages/dashboard/src/client/components/AppLogo/index.ts → src/client/components/AppLogo/index.ts


+ 0 - 0
packages/dashboard/src/client/components/AppStatus/AppStatus.module.scss → src/client/components/AppStatus/AppStatus.module.scss


+ 0 - 0
packages/dashboard/src/client/components/AppStatus/AppStatus.tsx → src/client/components/AppStatus/AppStatus.tsx


+ 0 - 0
packages/dashboard/src/client/components/AppStatus/index.tsx → src/client/components/AppStatus/index.tsx


+ 0 - 0
packages/dashboard/src/client/components/AppTile/AppTile.module.scss → src/client/components/AppTile/AppTile.module.scss


+ 0 - 0
packages/dashboard/src/client/components/AppTile/AppTile.tsx → src/client/components/AppTile/AppTile.tsx


+ 0 - 0
packages/dashboard/src/client/components/AppTile/index.tsx → src/client/components/AppTile/index.tsx


+ 0 - 0
packages/dashboard/src/client/components/Layout/Layout.module.scss → src/client/components/Layout/Layout.module.scss


+ 0 - 0
packages/dashboard/src/client/components/Layout/Layout.tsx → src/client/components/Layout/Layout.tsx


+ 0 - 0
packages/dashboard/src/client/components/Layout/index.ts → src/client/components/Layout/index.ts


+ 0 - 0
packages/dashboard/src/client/components/Markdown/Markdown.tsx → src/client/components/Markdown/Markdown.tsx


+ 0 - 0
packages/dashboard/src/client/components/StatusScreen/StatusScreen.tsx → src/client/components/StatusScreen/StatusScreen.tsx


+ 0 - 0
packages/dashboard/src/client/components/StatusScreen/index.ts → src/client/components/StatusScreen/index.ts


+ 0 - 0
packages/dashboard/src/client/components/hoc/AuthProvider/AuthProvider.test.tsx → src/client/components/hoc/AuthProvider/AuthProvider.test.tsx


+ 0 - 0
packages/dashboard/src/client/components/hoc/AuthProvider/AuthProvider.tsx → src/client/components/hoc/AuthProvider/AuthProvider.tsx


+ 0 - 0
packages/dashboard/src/client/components/hoc/AuthProvider/index.ts → src/client/components/hoc/AuthProvider/index.ts


+ 0 - 0
packages/dashboard/src/client/components/hoc/StatusProvider/StatusProvider.test.tsx → src/client/components/hoc/StatusProvider/StatusProvider.test.tsx


+ 0 - 0
packages/dashboard/src/client/components/hoc/StatusProvider/StatusProvider.tsx → src/client/components/hoc/StatusProvider/StatusProvider.tsx


+ 0 - 0
packages/dashboard/src/client/components/hoc/StatusProvider/index.ts → src/client/components/hoc/StatusProvider/index.ts


+ 0 - 0
packages/dashboard/src/client/components/hoc/ToastProvider/ToastProvider.test.tsx → src/client/components/hoc/ToastProvider/ToastProvider.test.tsx


+ 0 - 0
packages/dashboard/src/client/components/hoc/ToastProvider/ToastProvider.tsx → src/client/components/hoc/ToastProvider/ToastProvider.tsx


+ 0 - 0
packages/dashboard/src/client/components/hoc/ToastProvider/index.ts → src/client/components/hoc/ToastProvider/index.ts


+ 0 - 0
packages/dashboard/src/client/components/ui/Button/Button.test.tsx → src/client/components/ui/Button/Button.test.tsx


+ 0 - 0
packages/dashboard/src/client/components/ui/Button/Button.tsx → src/client/components/ui/Button/Button.tsx


+ 0 - 0
packages/dashboard/src/client/components/ui/Button/index.ts → src/client/components/ui/Button/index.ts


+ 0 - 0
packages/dashboard/src/client/components/ui/DataGrid/DataGrid.test.tsx → src/client/components/ui/DataGrid/DataGrid.test.tsx


+ 0 - 0
packages/dashboard/src/client/components/ui/DataGrid/DataGrid.tsx → src/client/components/ui/DataGrid/DataGrid.tsx


+ 0 - 0
packages/dashboard/src/client/components/ui/DataGrid/DataGridItem.tsx → src/client/components/ui/DataGrid/DataGridItem.tsx


+ 0 - 0
packages/dashboard/src/client/components/ui/DataGrid/index.ts → src/client/components/ui/DataGrid/index.ts


+ 0 - 0
packages/dashboard/src/client/components/ui/EmptyPage/EmptyPage.module.scss → src/client/components/ui/EmptyPage/EmptyPage.module.scss


+ 0 - 0
packages/dashboard/src/client/components/ui/EmptyPage/EmptyPage.test.tsx → src/client/components/ui/EmptyPage/EmptyPage.test.tsx


+ 0 - 0
packages/dashboard/src/client/components/ui/EmptyPage/EmptyPage.tsx → src/client/components/ui/EmptyPage/EmptyPage.tsx


+ 0 - 0
packages/dashboard/src/client/components/ui/EmptyPage/index.ts → src/client/components/ui/EmptyPage/index.ts


+ 0 - 0
packages/dashboard/src/client/components/ui/ErrorPage/ErrorPage.module.scss → src/client/components/ui/ErrorPage/ErrorPage.module.scss


+ 0 - 0
packages/dashboard/src/client/components/ui/ErrorPage/ErrorPage.test.tsx → src/client/components/ui/ErrorPage/ErrorPage.test.tsx


Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác