diff --git a/.github/workflows/deployment-docker-image.yml b/.github/workflows/deployment-docker-image.yml
index 63592aff5..3611ae31e 100644
--- a/.github/workflows/deployment-docker-image.yml
+++ b/.github/workflows/deployment-docker-image.yml
@@ -11,6 +11,11 @@ on:
required: false
default: true
description: Send notifications
+ push-image:
+ type: boolean
+ required: false
+ default: true
+ description: Push Docker Image
permissions:
contents: write
@@ -93,9 +98,9 @@ jobs:
id: buildPushAction
uses: docker/build-push-action@v6
with:
- platforms: linux/amd64 # we currently do't build for linux/arm64 as it's really slow and we'll move to a self hosted runner for that or use the official github runner, once it's available
+ platforms: linux/amd64,linux/arm64
context: .
- push: true
+ push: ${{ github.events.inputs.push-image && 'true' || 'false' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
network: host
diff --git a/Dockerfile b/Dockerfile
index d1379e26e..a0e2c5949 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:20.17.0-alpine AS base
+FROM --platform=linux/amd64 node:20.17.0-alpine AS base
FROM base AS builder
RUN apk add --no-cache libc6-compat
diff --git a/apps/nextjs/package.json b/apps/nextjs/package.json
index 69a399841..82be0f98d 100644
--- a/apps/nextjs/package.json
+++ b/apps/nextjs/package.json
@@ -7,12 +7,13 @@
"build": "pnpm with-env next build",
"clean": "git clean -xdf .next .turbo node_modules",
"dev": "pnpm with-env next dev",
- "lint": "eslint",
"format": "prettier --check . --ignore-path ../../.gitignore",
+ "lint": "eslint",
"start": "pnpm with-env next start",
"typecheck": "tsc --noEmit",
"with-env": "dotenv -e ../../.env --"
},
+ "prettier": "@homarr/prettier-config",
"dependencies": {
"@homarr/analytics": "workspace:^0.1.0",
"@homarr/api": "workspace:^0.1.0",
@@ -40,10 +41,10 @@
"@mantine/tiptap": "^7.12.2",
"@million/lint": "1.0.0-rc.84",
"@t3-oss/env-nextjs": "^0.11.1",
- "@tanstack/react-query": "^5.53.1",
- "@tanstack/react-query-devtools": "^5.53.1",
- "@tanstack/react-query-next-experimental": "5.53.1",
"@tabler/icons-react": "^3.14.0",
+ "@tanstack/react-query": "^5.55.0",
+ "@tanstack/react-query-devtools": "^5.55.0",
+ "@tanstack/react-query-next-experimental": "5.55.0",
"@trpc/client": "next",
"@trpc/next": "next",
"@trpc/react-query": "next",
@@ -59,14 +60,14 @@
"glob": "^11.0.0",
"jotai": "^2.9.3",
"mantine-react-table": "2.0.0-beta.6",
- "next": "^14.2.7",
+ "next": "^14.2.8",
"postcss-preset-mantine": "^1.17.0",
"prismjs": "^1.29.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-error-boundary": "^4.0.13",
"react-simple-code-editor": "^0.14.1",
- "sass": "^1.77.8",
+ "sass": "^1.78.0",
"superjson": "2.2.1",
"swagger-ui-react": "^5.17.14",
"use-deep-compare-effect": "^1.8.1"
@@ -76,7 +77,7 @@
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
"@types/chroma-js": "2.4.4",
- "@types/node": "^20.16.2",
+ "@types/node": "^20.16.5",
"@types/prismjs": "^1.26.4",
"@types/react": "^18.3.5",
"@types/react-dom": "^18.3.0",
@@ -86,6 +87,5 @@
"node-loader": "^2.0.0",
"prettier": "^3.3.3",
"typescript": "^5.5.4"
- },
- "prettier": "@homarr/prettier-config"
+ }
}
diff --git a/apps/nextjs/src/app/[locale]/_client-providers/mantine.tsx b/apps/nextjs/src/app/[locale]/_client-providers/mantine.tsx
new file mode 100644
index 000000000..9a2f3aecb
--- /dev/null
+++ b/apps/nextjs/src/app/[locale]/_client-providers/mantine.tsx
@@ -0,0 +1,89 @@
+"use client";
+
+import { useState } from "react";
+import type { PropsWithChildren } from "react";
+import type { MantineColorScheme, MantineColorSchemeManager } from "@mantine/core";
+import { createTheme, isMantineColorScheme, MantineProvider } from "@mantine/core";
+
+import { clientApi } from "@homarr/api/client";
+import { useSession } from "@homarr/auth/client";
+
+export const CustomMantineProvider = ({ children }: PropsWithChildren) => {
+ const manager = useColorSchemeManager();
+
+ return (
+
+ {children}
+
+ );
+};
+
+function useColorSchemeManager(): MantineColorSchemeManager {
+ const key = "homarr-color-scheme";
+ const { data: session } = useSession();
+ const [sessionColorScheme, setSessionColorScheme] = useState(
+ session?.user.colorScheme,
+ );
+ const { mutate: mutateColorScheme } = clientApi.user.changeColorScheme.useMutation({
+ onSuccess: (_, variables) => {
+ setSessionColorScheme(variables.colorScheme);
+ },
+ });
+
+ let handleStorageEvent: (event: StorageEvent) => void;
+
+ return {
+ get: (defaultValue) => {
+ if (typeof window === "undefined") {
+ return defaultValue;
+ }
+
+ if (sessionColorScheme) {
+ return sessionColorScheme;
+ }
+
+ try {
+ return (window.localStorage.getItem(key) as MantineColorScheme | undefined) ?? defaultValue;
+ } catch {
+ return defaultValue;
+ }
+ },
+
+ set: (value) => {
+ try {
+ if (session) {
+ mutateColorScheme({ colorScheme: value });
+ }
+ window.localStorage.setItem(key, value);
+ } catch (error) {
+ console.warn("[@mantine/core] Local storage color scheme manager was unable to save color scheme.", error);
+ }
+ },
+
+ subscribe: (onUpdate) => {
+ handleStorageEvent = (event) => {
+ if (session) return; // Ignore updates when session is available as we are using session color scheme
+ if (event.storageArea === window.localStorage && event.key === key && isMantineColorScheme(event.newValue)) {
+ onUpdate(event.newValue);
+ }
+ };
+
+ window.addEventListener("storage", handleStorageEvent);
+ },
+
+ unsubscribe: () => {
+ window.removeEventListener("storage", handleStorageEvent);
+ },
+
+ clear: () => {
+ window.localStorage.removeItem(key);
+ },
+ };
+}
diff --git a/apps/nextjs/src/app/[locale]/_client-providers/trpc.tsx b/apps/nextjs/src/app/[locale]/_client-providers/trpc.tsx
index db34ced95..ff3078ae6 100644
--- a/apps/nextjs/src/app/[locale]/_client-providers/trpc.tsx
+++ b/apps/nextjs/src/app/[locale]/_client-providers/trpc.tsx
@@ -12,7 +12,7 @@ import type { AppRouter } from "@homarr/api";
import { clientApi } from "@homarr/api/client";
const wsClient = createWSClient({
- url: "ws://localhost:3001",
+ url: typeof window === "undefined" ? "ws://localhost:3001" : `ws://${window.location.hostname}:3001`,
});
export function TRPCReactProvider(props: PropsWithChildren) {
diff --git a/apps/nextjs/src/app/[locale]/layout.tsx b/apps/nextjs/src/app/[locale]/layout.tsx
index 223ebf9be..ae7c4600c 100644
--- a/apps/nextjs/src/app/[locale]/layout.tsx
+++ b/apps/nextjs/src/app/[locale]/layout.tsx
@@ -1,13 +1,11 @@
import type { Metadata, Viewport } from "next";
import { Inter } from "next/font/google";
-import "@homarr/ui/styles.css";
import "@homarr/notifications/styles.css";
import "@homarr/spotlight/styles.css";
+import "@homarr/ui/styles.css";
import "~/styles/scroll-area.scss";
-import { ColorSchemeScript, createTheme, MantineProvider } from "@mantine/core";
-
import { env } from "@homarr/auth/env.mjs";
import { auth } from "@homarr/auth/next";
import { ModalProvider } from "@homarr/modals";
@@ -15,6 +13,7 @@ import { Notifications } from "@homarr/notifications";
import { Analytics } from "~/components/layout/analytics";
import { JotaiProvider } from "./_client-providers/jotai";
+import { CustomMantineProvider } from "./_client-providers/mantine";
import { NextInternationalProvider } from "./_client-providers/next-international";
import { AuthProvider } from "./_client-providers/session";
import { TRPCReactProvider } from "./_client-providers/trpc";
@@ -51,34 +50,25 @@ export const viewport: Viewport = {
],
};
-export default function Layout(props: { children: React.ReactNode; params: { locale: string } }) {
- const colorScheme = "dark";
+export default async function Layout(props: { children: React.ReactNode; params: { locale: string } }) {
+ const session = await auth();
+ const colorScheme = session?.user.colorScheme;
const StackedProvider = composeWrappers([
- async (innerProps) => {
- const session = await auth();
+ (innerProps) => {
return ;
},
(innerProps) => ,
(innerProps) => ,
(innerProps) => ,
- (innerProps) => (
-
- ),
+ (innerProps) => ,
(innerProps) => ,
]);
return (
-
+ // Instead of ColorSchemScript we use data-mantine-color-scheme to prevent flickering
+
-
diff --git a/apps/nextjs/src/app/[locale]/manage/tools/logs/client.tsx b/apps/nextjs/src/app/[locale]/manage/tools/logs/client.tsx
new file mode 100644
index 000000000..304505d63
--- /dev/null
+++ b/apps/nextjs/src/app/[locale]/manage/tools/logs/client.tsx
@@ -0,0 +1,10 @@
+"use client";
+
+import dynamic from "next/dynamic";
+
+export const ClientSideTerminalComponent = dynamic(
+ () => import("./terminal").then(({ TerminalComponent }) => TerminalComponent),
+ {
+ ssr: false,
+ },
+);
diff --git a/apps/nextjs/src/app/[locale]/manage/tools/logs/page.tsx b/apps/nextjs/src/app/[locale]/manage/tools/logs/page.tsx
index 7822da49c..da45b84bb 100644
--- a/apps/nextjs/src/app/[locale]/manage/tools/logs/page.tsx
+++ b/apps/nextjs/src/app/[locale]/manage/tools/logs/page.tsx
@@ -4,11 +4,10 @@ import { getScopedI18n } from "@homarr/translation/server";
import "@xterm/xterm/css/xterm.css";
-import dynamic from "next/dynamic";
-
import { DynamicBreadcrumb } from "~/components/navigation/dynamic-breadcrumb";
import { fullHeightWithoutHeaderAndFooter } from "~/constants";
import { createMetaTitle } from "~/metadata";
+import { ClientSideTerminalComponent } from "./client";
export async function generateMetadata() {
const t = await getScopedI18n("management");
@@ -18,10 +17,6 @@ export async function generateMetadata() {
};
}
-const ClientSideTerminalComponent = dynamic(() => import("./terminal"), {
- ssr: false,
-});
-
export default function LogsManagementPage() {
return (
<>
diff --git a/apps/nextjs/src/app/[locale]/manage/tools/logs/terminal.tsx b/apps/nextjs/src/app/[locale]/manage/tools/logs/terminal.tsx
index 428f1f300..b989e8e58 100644
--- a/apps/nextjs/src/app/[locale]/manage/tools/logs/terminal.tsx
+++ b/apps/nextjs/src/app/[locale]/manage/tools/logs/terminal.tsx
@@ -10,7 +10,7 @@ import { clientApi } from "@homarr/api/client";
import classes from "./terminal.module.css";
-export default function TerminalComponent() {
+export const TerminalComponent = () => {
const ref = useRef(null);
const terminalRef = useRef();
@@ -54,4 +54,4 @@ export default function TerminalComponent() {
};
}, []);
return ;
-}
+};
diff --git a/apps/tasks/package.json b/apps/tasks/package.json
index eda472148..200b05db9 100644
--- a/apps/tasks/package.json
+++ b/apps/tasks/package.json
@@ -2,25 +2,29 @@
"name": "@homarr/tasks",
"version": "0.1.0",
"private": true,
+ "license": "MIT",
+ "type": "module",
"exports": {
".": "./src/index.ts"
},
"main": "./src/main.ts",
"types": "./src/main.ts",
- "license": "MIT",
- "type": "module",
"scripts": {
- "dev": "pnpm with-env tsx ./src/main.ts",
"build": "esbuild src/main.ts --bundle --platform=node --outfile=tasks.cjs",
"clean": "rm -rf .turbo node_modules",
- "lint": "eslint",
+ "dev": "pnpm with-env tsx ./src/main.ts",
"format": "prettier --check . --ignore-path ../../.gitignore",
+ "lint": "eslint",
"typecheck": "tsc --noEmit",
"with-env": "dotenv -e ../../.env --"
},
+ "prettier": "@homarr/prettier-config",
"dependencies": {
"@homarr/analytics": "workspace:^0.1.0",
"@homarr/common": "workspace:^0.1.0",
+ "@homarr/cron-job-runner": "workspace:^0.1.0",
+ "@homarr/cron-jobs": "workspace:^0.1.0",
+ "@homarr/cron-jobs-core": "workspace:^0.1.0",
"@homarr/db": "workspace:^0.1.0",
"@homarr/definitions": "workspace:^0.1.0",
"@homarr/icons": "workspace:^0.1.0",
@@ -30,11 +34,8 @@
"@homarr/redis": "workspace:^0.1.0",
"@homarr/server-settings": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
- "@homarr/cron-jobs-core": "workspace:^0.1.0",
"@homarr/widgets": "workspace:^0.1.0",
"dayjs": "^1.11.13",
- "@homarr/cron-jobs": "workspace:^0.1.0",
- "@homarr/cron-job-runner": "workspace:^0.1.0",
"dotenv": "^16.4.5",
"superjson": "2.2.1",
"undici": "6.19.8"
@@ -43,12 +44,11 @@
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
- "@types/node": "^20.16.2",
+ "@types/node": "^20.16.5",
"dotenv-cli": "^7.4.2",
"eslint": "^9.9.1",
"prettier": "^3.3.3",
"tsx": "4.13.3",
"typescript": "^5.5.4"
- },
- "prettier": "@homarr/prettier-config"
+ }
}
diff --git a/apps/websocket/package.json b/apps/websocket/package.json
index 6e660dab3..b651380e7 100644
--- a/apps/websocket/package.json
+++ b/apps/websocket/package.json
@@ -2,19 +2,20 @@
"name": "@homarr/websocket",
"version": "0.1.0",
"private": true,
- "main": "./src/main.ts",
- "types": "./src/main.ts",
"license": "MIT",
"type": "module",
+ "main": "./src/main.ts",
+ "types": "./src/main.ts",
"scripts": {
- "dev": "pnpm with-env tsx ./src/main.ts",
"build": "esbuild src/main.ts --bundle --platform=node --outfile=wssServer.cjs --external:bcrypt --external:cpu-features --loader:.html=text --loader:.node=text",
"clean": "rm -rf .turbo node_modules",
- "lint": "eslint",
+ "dev": "pnpm with-env tsx ./src/main.ts",
"format": "prettier --check . --ignore-path ../../.gitignore",
+ "lint": "eslint",
"typecheck": "tsc --noEmit",
"with-env": "dotenv -e ../../.env --"
},
+ "prettier": "@homarr/prettier-config",
"dependencies": {
"@homarr/api": "workspace:^0.1.0",
"@homarr/auth": "workspace:^0.1.0",
@@ -24,9 +25,9 @@
"@homarr/log": "workspace:^",
"@homarr/redis": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
+ "dotenv": "^16.4.5",
"tsx": "4.13.3",
- "ws": "^8.18.0",
- "dotenv": "^16.4.5"
+ "ws": "^8.18.0"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
@@ -36,6 +37,5 @@
"eslint": "^9.9.1",
"prettier": "^3.3.3",
"typescript": "^5.5.4"
- },
- "prettier": "@homarr/prettier-config"
+ }
}
diff --git a/package.json b/package.json
index b780e2ba5..7e1dd0384 100644
--- a/package.json
+++ b/package.json
@@ -1,22 +1,17 @@
{
"name": "homarr",
"private": true,
- "engines": {
- "node": ">=20.17.0"
- },
- "packageManager": "pnpm@9.9.0",
"scripts": {
"build": "turbo build",
"clean": "git clean -xdf node_modules",
"clean:workspaces": "turbo clean",
- "db:push": "pnpm -F db push:sqlite",
- "db:studio": "pnpm -F db studio",
- "db:migration:sqlite:generate": "pnpm -F db migration:sqlite:generate",
+ "cli": "pnpm with-env tsx packages/cli/index.ts",
"db:migration:mysql:generate": "pnpm -F db migration:mysql:generate",
- "db:migration:sqlite:run": "pnpm -F db migration:sqlite:run",
"db:migration:mysql:run": "pnpm -F db migration:mysql:run",
- "cli": "pnpm with-env tsx packages/cli/index.ts",
- "with-env": "dotenv -e .env --",
+ "db:migration:sqlite:generate": "pnpm -F db migration:sqlite:generate",
+ "db:migration:sqlite:run": "pnpm -F db migration:sqlite:run",
+ "db:push": "pnpm -F db push:sqlite",
+ "db:studio": "pnpm -F db studio",
"dev": "turbo dev --parallel",
"docker:dev": "docker compose -f ./development/development.docker-compose.yml up",
"format": "turbo format --continue -- --cache --cache-location node_modules/.cache/.prettiercache",
@@ -26,24 +21,29 @@
"lint:ws": "pnpm dlx sherif@latest",
"test": "cross-env NODE_ENV=development vitest run --coverage.enabled",
"test:ui": "cross-env NODE_ENV=development vitest --ui --coverage.enabled",
- "typecheck": "turbo typecheck"
+ "typecheck": "turbo typecheck",
+ "with-env": "dotenv -e .env --"
},
+ "prettier": "@homarr/prettier-config",
"devDependencies": {
"@homarr/prettier-config": "workspace:^0.1.0",
- "@turbo/gen": "^2.1.0",
+ "@turbo/gen": "^2.1.1",
"@vitejs/plugin-react": "^4.3.1",
"@vitest/coverage-v8": "^2.0.5",
"@vitest/ui": "^2.0.5",
"cross-env": "^7.0.3",
"jsdom": "^25.0.0",
"prettier": "^3.3.3",
- "testcontainers": "^10.12.0",
- "turbo": "^2.1.0",
+ "testcontainers": "^10.13.0",
+ "turbo": "^2.1.1",
"typescript": "^5.5.4",
"vite-tsconfig-paths": "^5.0.1",
"vitest": "^2.0.5"
},
- "prettier": "@homarr/prettier-config",
+ "packageManager": "pnpm@9.9.0",
+ "engines": {
+ "node": ">=20.17.0"
+ },
"pnpm": {
"patchedDependencies": {
"trpc-swagger@1.2.6": "patches/trpc-swagger@1.2.6.patch"
diff --git a/packages/analytics/package.json b/packages/analytics/package.json
index 1c7422249..4870fdb28 100644
--- a/packages/analytics/package.json
+++ b/packages/analytics/package.json
@@ -1,7 +1,8 @@
{
"name": "@homarr/analytics",
- "private": true,
"version": "0.1.0",
+ "private": true,
+ "license": "MIT",
"type": "module",
"exports": {
".": "./index.ts"
@@ -13,19 +14,19 @@
]
}
},
- "license": "MIT",
"scripts": {
"clean": "rm -rf .turbo node_modules",
- "lint": "eslint",
"format": "prettier --check . --ignore-path ../../.gitignore",
+ "lint": "eslint",
"typecheck": "tsc --noEmit"
},
+ "prettier": "@homarr/prettier-config",
"dependencies": {
- "@umami/node": "^0.4.0",
- "superjson": "2.2.1",
"@homarr/db": "workspace:^0.1.0",
"@homarr/log": "workspace:^0.1.0",
- "@homarr/server-settings": "workspace:^0.1.0"
+ "@homarr/server-settings": "workspace:^0.1.0",
+ "@umami/node": "^0.4.0",
+ "superjson": "2.2.1"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
@@ -33,6 +34,5 @@
"@homarr/tsconfig": "workspace:^0.1.0",
"eslint": "^9.9.1",
"typescript": "^5.5.4"
- },
- "prettier": "@homarr/prettier-config"
+ }
}
diff --git a/packages/api/package.json b/packages/api/package.json
index 0c23cd94d..e8399f5ff 100644
--- a/packages/api/package.json
+++ b/packages/api/package.json
@@ -1,45 +1,46 @@
{
"name": "@homarr/api",
"version": "0.1.0",
+ "private": true,
+ "license": "MIT",
+ "type": "module",
"exports": {
".": "./src/index.ts",
"./client": "./src/client.ts",
"./server": "./src/server.ts",
"./websocket": "./src/websocket.ts"
},
- "private": true,
"main": "./index.ts",
"types": "./index.ts",
- "license": "MIT",
- "type": "module",
"scripts": {
"clean": "rm -rf .turbo node_modules",
- "lint": "eslint",
"format": "prettier --check . --ignore-path ../../.gitignore",
+ "lint": "eslint",
"typecheck": "tsc --noEmit"
},
+ "prettier": "@homarr/prettier-config",
"dependencies": {
"@homarr/auth": "workspace:^0.1.0",
"@homarr/common": "workspace:^0.1.0",
- "@homarr/cron-jobs": "workspace:^0.1.0",
"@homarr/cron-job-runner": "workspace:^0.1.0",
"@homarr/cron-job-status": "workspace:^0.1.0",
+ "@homarr/cron-jobs": "workspace:^0.1.0",
"@homarr/db": "workspace:^0.1.0",
"@homarr/definitions": "workspace:^0.1.0",
"@homarr/integrations": "workspace:^0.1.0",
"@homarr/log": "workspace:^",
"@homarr/ping": "workspace:^0.1.0",
"@homarr/redis": "workspace:^0.1.0",
- "@homarr/validation": "workspace:^0.1.0",
"@homarr/server-settings": "workspace:^0.1.0",
- "@trpc/react-query": "next",
+ "@homarr/validation": "workspace:^0.1.0",
"@trpc/client": "next",
+ "@trpc/react-query": "next",
"@trpc/server": "next",
"dockerode": "^4.0.2",
+ "next": "^14.2.8",
+ "react": "^18.3.1",
"superjson": "2.2.1",
- "trpc-swagger": "^1.2.6",
- "next": "^14.2.7",
- "react": "^18.3.1"
+ "trpc-swagger": "^1.2.6"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
@@ -49,6 +50,5 @@
"eslint": "^9.9.1",
"prettier": "^3.3.3",
"typescript": "^5.5.4"
- },
- "prettier": "@homarr/prettier-config"
+ }
}
diff --git a/packages/api/src/router/test/board.spec.ts b/packages/api/src/router/test/board.spec.ts
index c1d0f45bb..b95f6279c 100644
--- a/packages/api/src/router/test/board.spec.ts
+++ b/packages/api/src/router/test/board.spec.ts
@@ -30,6 +30,7 @@ const defaultSession = {
user: {
id: defaultCreatorId,
permissions: [],
+ colorScheme: "light",
},
expires: new Date().toISOString(),
} satisfies Session;
@@ -87,6 +88,7 @@ describe("getAllBoards should return all boards accessable to the current user",
user: {
id: defaultCreatorId,
permissions: ["board-view-all"],
+ colorScheme: "light",
},
expires: new Date().toISOString(),
},
diff --git a/packages/api/src/router/test/docker/docker-router.spec.ts b/packages/api/src/router/test/docker/docker-router.spec.ts
index c92a0bbfc..f81313fe2 100644
--- a/packages/api/src/router/test/docker/docker-router.spec.ts
+++ b/packages/api/src/router/test/docker/docker-router.spec.ts
@@ -29,6 +29,7 @@ const createSessionWithPermissions = (...permissions: GroupPermissionKey[]) =>
user: {
id: "1",
permissions,
+ colorScheme: "light",
},
expires: new Date().toISOString(),
}) satisfies Session;
diff --git a/packages/api/src/router/test/group.spec.ts b/packages/api/src/router/test/group.spec.ts
index 51c11e70e..5e3ca35a4 100644
--- a/packages/api/src/router/test/group.spec.ts
+++ b/packages/api/src/router/test/group.spec.ts
@@ -12,6 +12,7 @@ const defaultSession = {
user: {
id: defaultOwnerId,
permissions: [],
+ colorScheme: "light",
},
expires: new Date().toISOString(),
} satisfies Session;
diff --git a/packages/api/src/router/test/integration/integration-router.spec.ts b/packages/api/src/router/test/integration/integration-router.spec.ts
index 2f21e666b..dde896352 100644
--- a/packages/api/src/router/test/integration/integration-router.spec.ts
+++ b/packages/api/src/router/test/integration/integration-router.spec.ts
@@ -17,6 +17,7 @@ const defaultSessionWithPermissions = (permissions: GroupPermissionKey[] = []) =
user: {
id: defaultUserId,
permissions,
+ colorScheme: "light",
},
expires: new Date().toISOString(),
}) satisfies Session;
diff --git a/packages/api/src/router/test/invite.spec.ts b/packages/api/src/router/test/invite.spec.ts
index 9c39d5bb2..6be30f7a9 100644
--- a/packages/api/src/router/test/invite.spec.ts
+++ b/packages/api/src/router/test/invite.spec.ts
@@ -12,6 +12,7 @@ const defaultSession = {
user: {
id: createId(),
permissions: [],
+ colorScheme: "light",
},
expires: new Date().toISOString(),
} satisfies Session;
diff --git a/packages/api/src/router/test/serverSettings.spec.ts b/packages/api/src/router/test/serverSettings.spec.ts
index 331631229..dffa42e35 100644
--- a/packages/api/src/router/test/serverSettings.spec.ts
+++ b/packages/api/src/router/test/serverSettings.spec.ts
@@ -16,6 +16,7 @@ const defaultSession = {
user: {
id: createId(),
permissions: [],
+ colorScheme: "light",
},
expires: new Date().toISOString(),
} satisfies Session;
diff --git a/packages/api/src/router/test/user.spec.ts b/packages/api/src/router/test/user.spec.ts
index 9a4696969..e27074426 100644
--- a/packages/api/src/router/test/user.spec.ts
+++ b/packages/api/src/router/test/user.spec.ts
@@ -246,6 +246,7 @@ describe("editProfile shoud update user", () => {
image: null,
homeBoardId: null,
provider: "credentials",
+ colorScheme: "auto",
});
});
@@ -287,6 +288,7 @@ describe("editProfile shoud update user", () => {
image: null,
homeBoardId: null,
provider: "credentials",
+ colorScheme: "auto",
});
});
});
@@ -312,6 +314,7 @@ describe("delete should delete user", () => {
salt: null,
homeBoardId: null,
provider: "ldap" as const,
+ colorScheme: "auto" as const,
},
{
id: userToDelete,
@@ -322,6 +325,7 @@ describe("delete should delete user", () => {
password: null,
salt: null,
homeBoardId: null,
+ colorScheme: "auto" as const,
},
{
id: createId(),
@@ -333,6 +337,7 @@ describe("delete should delete user", () => {
salt: null,
homeBoardId: null,
provider: "oidc" as const,
+ colorScheme: "auto" as const,
},
];
diff --git a/packages/api/src/router/user.ts b/packages/api/src/router/user.ts
index 4ede622cf..362b3b7d7 100644
--- a/packages/api/src/router/user.ts
+++ b/packages/api/src/router/user.ts
@@ -317,6 +317,14 @@ export const userRouter = createTRPCRouter({
})
.where(eq(users.id, input.userId));
}),
+ changeColorScheme: protectedProcedure.input(validation.user.changeColorScheme).mutation(async ({ input, ctx }) => {
+ await ctx.db
+ .update(users)
+ .set({
+ colorScheme: input.colorScheme,
+ })
+ .where(eq(users.id, ctx.session.user.id));
+ }),
});
const createUserAsync = async (db: Database, input: z.infer) => {
diff --git a/packages/auth/callbacks.ts b/packages/auth/callbacks.ts
index 90242b836..3665a674f 100644
--- a/packages/auth/callbacks.ts
+++ b/packages/auth/callbacks.ts
@@ -4,7 +4,7 @@ import type { NextAuthConfig } from "next-auth";
import type { Database } from "@homarr/db";
import { eq, inArray } from "@homarr/db";
-import { groupMembers, groupPermissions } from "@homarr/db/schema/sqlite";
+import { groupMembers, groupPermissions, users } from "@homarr/db/schema/sqlite";
import { getPermissionsWithChildren } from "@homarr/definitions";
import { env } from "./env.mjs";
@@ -31,10 +31,18 @@ export const getCurrentUserPermissionsAsync = async (db: Database, userId: strin
export const createSessionCallback = (db: Database): NextAuthCallbackOf<"session"> => {
return async ({ session, user }) => {
+ const additionalProperties = await db.query.users.findFirst({
+ where: eq(users.id, user.id),
+ columns: {
+ colorScheme: true,
+ },
+ });
+
return {
...session,
user: {
...session.user,
+ ...additionalProperties,
id: user.id,
name: user.name,
permissions: await getCurrentUserPermissionsAsync(db, user.id),
diff --git a/packages/auth/index.ts b/packages/auth/index.ts
index 78c3e7e88..1cb226fa2 100644
--- a/packages/auth/index.ts
+++ b/packages/auth/index.ts
@@ -1,7 +1,7 @@
import { headers } from "next/headers";
import type { DefaultSession } from "@auth/core/types";
-import type { GroupPermissionKey } from "@homarr/definitions";
+import type { ColorScheme, GroupPermissionKey } from "@homarr/definitions";
import { createConfiguration } from "./configuration";
@@ -12,6 +12,7 @@ declare module "next-auth" {
user: {
id: string;
permissions: GroupPermissionKey[];
+ colorScheme: ColorScheme;
} & DefaultSession["user"];
}
}
diff --git a/packages/auth/package.json b/packages/auth/package.json
index 78f7ca546..6f4ea6af2 100644
--- a/packages/auth/package.json
+++ b/packages/auth/package.json
@@ -1,6 +1,8 @@
{
"name": "@homarr/auth",
"version": "0.1.0",
+ "private": true,
+ "license": "MIT",
"type": "module",
"exports": {
".": "./index.ts",
@@ -11,29 +13,28 @@
"./shared": "./shared.ts",
"./env.mjs": "./env.mjs"
},
- "private": true,
"main": "./index.ts",
"types": "./index.ts",
- "license": "MIT",
"scripts": {
"clean": "rm -rf .turbo node_modules",
- "lint": "eslint",
"format": "prettier --check . --ignore-path ../../.gitignore",
+ "lint": "eslint",
"typecheck": "tsc --noEmit"
},
+ "prettier": "@homarr/prettier-config",
"dependencies": {
- "@homarr/db": "workspace:^0.1.0",
+ "@auth/core": "^0.34.2",
+ "@auth/drizzle-adapter": "^1.4.2",
"@homarr/common": "workspace:^0.1.0",
+ "@homarr/db": "workspace:^0.1.0",
"@homarr/definitions": "workspace:^0.1.0",
"@homarr/log": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
- "@auth/core": "^0.34.2",
- "@auth/drizzle-adapter": "^1.4.2",
"@t3-oss/env-nextjs": "^0.11.1",
"bcrypt": "^5.1.1",
"cookies": "^0.9.1",
"ldapts": "7.1.1",
- "next": "^14.2.7",
+ "next": "^14.2.8",
"next-auth": "5.0.0-beta.20",
"react": "^18.3.1",
"react-dom": "^18.3.1"
@@ -47,6 +48,5 @@
"eslint": "^9.9.1",
"prettier": "^3.3.3",
"typescript": "^5.5.4"
- },
- "prettier": "@homarr/prettier-config"
+ }
}
diff --git a/packages/auth/permissions/test/board-permissions.spec.ts b/packages/auth/permissions/test/board-permissions.spec.ts
index 3e02e6be6..f897491ae 100644
--- a/packages/auth/permissions/test/board-permissions.spec.ts
+++ b/packages/auth/permissions/test/board-permissions.spec.ts
@@ -20,6 +20,7 @@ describe("constructBoardPermissions", () => {
user: {
id: "1",
permissions: [],
+ colorScheme: "light",
},
expires: new Date().toISOString(),
} satisfies Session;
@@ -47,6 +48,7 @@ describe("constructBoardPermissions", () => {
user: {
id: "2",
permissions: getPermissionsWithChildren(["board-full-all"]),
+ colorScheme: "light",
},
expires: new Date().toISOString(),
} satisfies Session;
@@ -74,6 +76,7 @@ describe("constructBoardPermissions", () => {
user: {
id: "2",
permissions: getPermissionsWithChildren(["board-modify-all"]),
+ colorScheme: "light",
},
expires: new Date().toISOString(),
} satisfies Session;
@@ -102,6 +105,7 @@ describe("constructBoardPermissions", () => {
user: {
id: "2",
permissions: [],
+ colorScheme: "light",
},
expires: new Date().toISOString(),
} satisfies Session;
@@ -129,6 +133,7 @@ describe("constructBoardPermissions", () => {
user: {
id: "2",
permissions: [],
+ colorScheme: "light",
},
expires: new Date().toISOString(),
} satisfies Session;
@@ -156,6 +161,7 @@ describe("constructBoardPermissions", () => {
user: {
id: "2",
permissions: getPermissionsWithChildren(["board-view-all"]),
+ colorScheme: "light",
},
expires: new Date().toISOString(),
} satisfies Session;
@@ -183,6 +189,7 @@ describe("constructBoardPermissions", () => {
user: {
id: "2",
permissions: [],
+ colorScheme: "light",
},
expires: new Date().toISOString(),
} satisfies Session;
@@ -210,6 +217,7 @@ describe("constructBoardPermissions", () => {
user: {
id: "2",
permissions: [],
+ colorScheme: "light",
},
expires: new Date().toISOString(),
} satisfies Session;
@@ -237,6 +245,7 @@ describe("constructBoardPermissions", () => {
user: {
id: "2",
permissions: [],
+ colorScheme: "light",
},
expires: new Date().toISOString(),
} satisfies Session;
@@ -264,6 +273,7 @@ describe("constructBoardPermissions", () => {
user: {
id: "2",
permissions: [],
+ colorScheme: "light",
},
expires: new Date().toISOString(),
} satisfies Session;
diff --git a/packages/auth/permissions/test/integration-permissions.spec.ts b/packages/auth/permissions/test/integration-permissions.spec.ts
index 01c9ba818..b84041ae6 100644
--- a/packages/auth/permissions/test/integration-permissions.spec.ts
+++ b/packages/auth/permissions/test/integration-permissions.spec.ts
@@ -16,6 +16,7 @@ describe("constructIntegrationPermissions", () => {
user: {
id: "2",
permissions: getPermissionsWithChildren(["integration-full-all"]),
+ colorScheme: "light",
},
expires: new Date().toISOString(),
} satisfies Session;
@@ -39,6 +40,7 @@ describe("constructIntegrationPermissions", () => {
user: {
id: "2",
permissions: getPermissionsWithChildren(["integration-interact-all"]),
+ colorScheme: "light",
},
expires: new Date().toISOString(),
} satisfies Session;
@@ -62,6 +64,7 @@ describe("constructIntegrationPermissions", () => {
user: {
id: "2",
permissions: [],
+ colorScheme: "light",
},
expires: new Date().toISOString(),
} satisfies Session;
@@ -85,6 +88,7 @@ describe("constructIntegrationPermissions", () => {
user: {
id: "2",
permissions: [],
+ colorScheme: "light",
},
expires: new Date().toISOString(),
} satisfies Session;
@@ -108,6 +112,7 @@ describe("constructIntegrationPermissions", () => {
user: {
id: "2",
permissions: getPermissionsWithChildren(["integration-use-all"]),
+ colorScheme: "light",
},
expires: new Date().toISOString(),
} satisfies Session;
@@ -131,6 +136,7 @@ describe("constructIntegrationPermissions", () => {
user: {
id: "2",
permissions: [],
+ colorScheme: "light",
},
expires: new Date().toISOString(),
} satisfies Session;
@@ -154,6 +160,7 @@ describe("constructIntegrationPermissions", () => {
user: {
id: "2",
permissions: [],
+ colorScheme: "light",
},
expires: new Date().toISOString(),
} satisfies Session;
@@ -177,6 +184,7 @@ describe("constructIntegrationPermissions", () => {
user: {
id: "2",
permissions: [],
+ colorScheme: "light",
},
expires: new Date().toISOString(),
} satisfies Session;
@@ -190,40 +198,3 @@ describe("constructIntegrationPermissions", () => {
expect(result.hasUseAccess).toBe(false);
});
});
-/*
-
-
-
-
-
-
-
-
- test("should return hasViewAccess as true when board is public", () => {
- // Arrange
- const board = {
- creator: {
- id: "1",
- },
- userPermissions: [],
- groupPermissions: [],
- isPublic: true,
- };
- const session = {
- user: {
- id: "2",
- permissions: [],
- },
- expires: new Date().toISOString(),
- } satisfies Session;
-
- // Act
- const result = constructBoardPermissions(board, session);
-
- // Assert
- expect(result.hasFullAccess).toBe(false);
- expect(result.hasChangeAccess).toBe(false);
- expect(result.hasViewAccess).toBe(true);
- });
-});
-*/
diff --git a/packages/auth/permissions/test/integration-query-permissions.spec.ts b/packages/auth/permissions/test/integration-query-permissions.spec.ts
index c0185c177..faf527d92 100644
--- a/packages/auth/permissions/test/integration-query-permissions.spec.ts
+++ b/packages/auth/permissions/test/integration-query-permissions.spec.ts
@@ -20,6 +20,7 @@ const createSession = (user: Partial): Session => ({
user: {
id: "1",
permissions: [],
+ colorScheme: "light",
...user,
},
expires: new Date().toISOString(),
diff --git a/packages/auth/session.ts b/packages/auth/session.ts
index 48701ef0b..5510ca89b 100644
--- a/packages/auth/session.ts
+++ b/packages/auth/session.ts
@@ -32,6 +32,7 @@ export const getSessionFromTokenAsync = async (db: Database, token: string | und
name: true,
email: true,
image: true,
+ colorScheme: true,
},
},
},
diff --git a/packages/auth/test/callbacks.spec.ts b/packages/auth/test/callbacks.spec.ts
index 755b56fe8..e793c6749 100644
--- a/packages/auth/test/callbacks.spec.ts
+++ b/packages/auth/test/callbacks.spec.ts
@@ -101,6 +101,7 @@ describe("session callback", () => {
email: "no-email",
emailVerified: new Date("2023-01-13"),
permissions: [],
+ colorScheme: "dark",
},
expires: "2023-01-13" as Date & string,
sessionToken: "token",
diff --git a/packages/cli/package.json b/packages/cli/package.json
index b352cb868..6376fb9b9 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -1,7 +1,8 @@
{
"name": "@homarr/cli",
- "private": true,
"version": "0.1.0",
+ "private": true,
+ "license": "MIT",
"type": "module",
"exports": {
".": "./index.ts"
@@ -13,19 +14,19 @@
]
}
},
- "license": "MIT",
"scripts": {
- "clean": "rm -rf .turbo node_modules",
- "lint": "eslint",
"build": "esbuild src/index.ts --bundle --platform=node --outfile=cli.cjs --external:bcrypt --external:cpu-features --loader:.html=text --loader:.node=text",
+ "clean": "rm -rf .turbo node_modules",
"format": "prettier --check . --ignore-path ../../.gitignore",
+ "lint": "eslint",
"typecheck": "tsc --noEmit"
},
+ "prettier": "@homarr/prettier-config",
"dependencies": {
"@drizzle-team/brocli": "^0.10.1",
- "@homarr/db": "workspace:^0.1.0",
- "@homarr/common": "workspace:^0.1.0",
"@homarr/auth": "workspace:^0.1.0",
+ "@homarr/common": "workspace:^0.1.0",
+ "@homarr/db": "workspace:^0.1.0",
"dotenv": "^16.4.5"
},
"devDependencies": {
@@ -34,6 +35,5 @@
"@homarr/tsconfig": "workspace:^0.1.0",
"eslint": "^9.9.1",
"typescript": "^5.5.4"
- },
- "prettier": "@homarr/prettier-config"
+ }
}
diff --git a/packages/common/package.json b/packages/common/package.json
index 343532534..dde0170e7 100644
--- a/packages/common/package.json
+++ b/packages/common/package.json
@@ -1,7 +1,8 @@
{
"name": "@homarr/common",
- "private": true,
"version": "0.1.0",
+ "private": true,
+ "license": "MIT",
"type": "module",
"exports": {
".": "./index.ts",
@@ -16,18 +17,18 @@
]
}
},
- "license": "MIT",
"scripts": {
"clean": "rm -rf .turbo node_modules",
- "lint": "eslint",
"format": "prettier --check . --ignore-path ../../.gitignore",
+ "lint": "eslint",
"typecheck": "tsc --noEmit"
},
+ "prettier": "@homarr/prettier-config",
"dependencies": {
"dayjs": "^1.11.13",
- "next": "^14.2.7",
+ "next": "^14.2.8",
"react": "^18.3.1",
- "tldts": "^6.1.41"
+ "tldts": "^6.1.42"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
@@ -35,6 +36,5 @@
"@homarr/tsconfig": "workspace:^0.1.0",
"eslint": "^9.9.1",
"typescript": "^5.5.4"
- },
- "prettier": "@homarr/prettier-config"
+ }
}
diff --git a/packages/cron-job-runner/package.json b/packages/cron-job-runner/package.json
index 8fc5270fb..d4a18e976 100644
--- a/packages/cron-job-runner/package.json
+++ b/packages/cron-job-runner/package.json
@@ -1,7 +1,8 @@
{
"name": "@homarr/cron-job-runner",
- "private": true,
"version": "0.1.0",
+ "private": true,
+ "license": "MIT",
"type": "module",
"exports": {
".": "./index.ts"
@@ -13,13 +14,13 @@
]
}
},
- "license": "MIT",
"scripts": {
"clean": "rm -rf .turbo node_modules",
- "lint": "eslint",
"format": "prettier --check . --ignore-path ../../.gitignore",
+ "lint": "eslint",
"typecheck": "tsc --noEmit"
},
+ "prettier": "@homarr/prettier-config",
"dependencies": {
"@homarr/cron-jobs": "workspace:^0.1.0",
"@homarr/log": "workspace:^0.1.0",
@@ -31,6 +32,5 @@
"@homarr/tsconfig": "workspace:^0.1.0",
"eslint": "^9.9.1",
"typescript": "^5.5.4"
- },
- "prettier": "@homarr/prettier-config"
+ }
}
diff --git a/packages/cron-job-status/package.json b/packages/cron-job-status/package.json
index 484f270fb..d4e8b63c4 100644
--- a/packages/cron-job-status/package.json
+++ b/packages/cron-job-status/package.json
@@ -1,7 +1,8 @@
{
"name": "@homarr/cron-job-status",
- "private": true,
"version": "0.1.0",
+ "private": true,
+ "license": "MIT",
"type": "module",
"exports": {
".": "./index.ts",
@@ -14,13 +15,13 @@
]
}
},
- "license": "MIT",
"scripts": {
"clean": "rm -rf .turbo node_modules",
- "lint": "eslint",
"format": "prettier --check . --ignore-path ../../.gitignore",
+ "lint": "eslint",
"typecheck": "tsc --noEmit"
},
+ "prettier": "@homarr/prettier-config",
"dependencies": {
"@homarr/redis": "workspace:^0.1.0"
},
@@ -30,6 +31,5 @@
"@homarr/tsconfig": "workspace:^0.1.0",
"eslint": "^9.9.1",
"typescript": "^5.5.4"
- },
- "prettier": "@homarr/prettier-config"
+ }
}
diff --git a/packages/cron-jobs-core/package.json b/packages/cron-jobs-core/package.json
index 4bdf5a97d..5b78de5fa 100644
--- a/packages/cron-jobs-core/package.json
+++ b/packages/cron-jobs-core/package.json
@@ -1,7 +1,8 @@
{
"name": "@homarr/cron-jobs-core",
- "private": true,
"version": "0.1.0",
+ "private": true,
+ "license": "MIT",
"type": "module",
"exports": {
".": "./index.ts",
@@ -15,16 +16,16 @@
]
}
},
- "license": "MIT",
"scripts": {
"clean": "rm -rf .turbo node_modules",
- "lint": "eslint",
"format": "prettier --check . --ignore-path ../../.gitignore",
+ "lint": "eslint",
"typecheck": "tsc --noEmit"
},
+ "prettier": "@homarr/prettier-config",
"dependencies": {
- "node-cron": "^3.0.3",
- "@homarr/common": "workspace:^0.1.0"
+ "@homarr/common": "workspace:^0.1.0",
+ "node-cron": "^3.0.3"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
@@ -33,6 +34,5 @@
"@types/node-cron": "^3.0.11",
"eslint": "^9.9.1",
"typescript": "^5.5.4"
- },
- "prettier": "@homarr/prettier-config"
+ }
}
diff --git a/packages/cron-jobs/package.json b/packages/cron-jobs/package.json
index caf1eb442..3578badcd 100644
--- a/packages/cron-jobs/package.json
+++ b/packages/cron-jobs/package.json
@@ -1,7 +1,8 @@
{
"name": "@homarr/cron-jobs",
- "private": true,
"version": "0.1.0",
+ "private": true,
+ "license": "MIT",
"type": "module",
"exports": {
".": "./index.ts"
@@ -13,13 +14,13 @@
]
}
},
- "license": "MIT",
"scripts": {
"clean": "rm -rf .turbo node_modules",
- "lint": "eslint",
"format": "prettier --check . --ignore-path ../../.gitignore",
+ "lint": "eslint",
"typecheck": "tsc --noEmit"
},
+ "prettier": "@homarr/prettier-config",
"dependencies": {
"@extractus/feed-extractor": "^7.1.3",
"@homarr/analytics": "workspace:^0.1.0",
@@ -42,6 +43,5 @@
"@homarr/tsconfig": "workspace:^0.1.0",
"eslint": "^9.9.1",
"typescript": "^5.5.4"
- },
- "prettier": "@homarr/prettier-config"
+ }
}
diff --git a/packages/db/migrations/mysql/0007_boring_nocturne.sql b/packages/db/migrations/mysql/0007_boring_nocturne.sql
new file mode 100644
index 000000000..b041b6918
--- /dev/null
+++ b/packages/db/migrations/mysql/0007_boring_nocturne.sql
@@ -0,0 +1 @@
+ALTER TABLE `user` ADD `colorScheme` varchar(5) DEFAULT 'auto' NOT NULL;
\ No newline at end of file
diff --git a/packages/db/migrations/mysql/meta/0007_snapshot.json b/packages/db/migrations/mysql/meta/0007_snapshot.json
new file mode 100644
index 000000000..b1b162698
--- /dev/null
+++ b/packages/db/migrations/mysql/meta/0007_snapshot.json
@@ -0,0 +1,1373 @@
+{
+ "version": "5",
+ "dialect": "mysql",
+ "id": "b7264307-fc31-48c0-973f-0e0dd91f5f90",
+ "prevId": "67352107-06b7-4f5d-a4e0-4ba27327f588",
+ "tables": {
+ "account": {
+ "name": "account",
+ "columns": {
+ "userId": {
+ "name": "userId",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "type": {
+ "name": "type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "provider": {
+ "name": "provider",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "providerAccountId": {
+ "name": "providerAccountId",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "refresh_token": {
+ "name": "refresh_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "access_token": {
+ "name": "access_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "token_type": {
+ "name": "token_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "scope": {
+ "name": "scope",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "id_token": {
+ "name": "id_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "session_state": {
+ "name": "session_state",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "userId_idx": {
+ "name": "userId_idx",
+ "columns": ["userId"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "account_userId_user_id_fk": {
+ "name": "account_userId_user_id_fk",
+ "tableFrom": "account",
+ "tableTo": "user",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "account_provider_providerAccountId_pk": {
+ "name": "account_provider_providerAccountId_pk",
+ "columns": ["provider", "providerAccountId"]
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "app": {
+ "name": "app",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "icon_url": {
+ "name": "icon_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "href": {
+ "name": "href",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "app_id": {
+ "name": "app_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "boardGroupPermission": {
+ "name": "boardGroupPermission",
+ "columns": {
+ "board_id": {
+ "name": "board_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "group_id": {
+ "name": "group_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "permission": {
+ "name": "permission",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "boardGroupPermission_board_id_board_id_fk": {
+ "name": "boardGroupPermission_board_id_board_id_fk",
+ "tableFrom": "boardGroupPermission",
+ "tableTo": "board",
+ "columnsFrom": ["board_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "boardGroupPermission_group_id_group_id_fk": {
+ "name": "boardGroupPermission_group_id_group_id_fk",
+ "tableFrom": "boardGroupPermission",
+ "tableTo": "group",
+ "columnsFrom": ["group_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "boardGroupPermission_board_id_group_id_permission_pk": {
+ "name": "boardGroupPermission_board_id_group_id_permission_pk",
+ "columns": ["board_id", "group_id", "permission"]
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "boardUserPermission": {
+ "name": "boardUserPermission",
+ "columns": {
+ "board_id": {
+ "name": "board_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "permission": {
+ "name": "permission",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "boardUserPermission_board_id_board_id_fk": {
+ "name": "boardUserPermission_board_id_board_id_fk",
+ "tableFrom": "boardUserPermission",
+ "tableTo": "board",
+ "columnsFrom": ["board_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "boardUserPermission_user_id_user_id_fk": {
+ "name": "boardUserPermission_user_id_user_id_fk",
+ "tableFrom": "boardUserPermission",
+ "tableTo": "user",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "boardUserPermission_board_id_user_id_permission_pk": {
+ "name": "boardUserPermission_board_id_user_id_permission_pk",
+ "columns": ["board_id", "user_id", "permission"]
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "board": {
+ "name": "board",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(256)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "is_public": {
+ "name": "is_public",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": false
+ },
+ "creator_id": {
+ "name": "creator_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "page_title": {
+ "name": "page_title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "meta_title": {
+ "name": "meta_title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "logo_image_url": {
+ "name": "logo_image_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "favicon_image_url": {
+ "name": "favicon_image_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "background_image_url": {
+ "name": "background_image_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "background_image_attachment": {
+ "name": "background_image_attachment",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "('fixed')"
+ },
+ "background_image_repeat": {
+ "name": "background_image_repeat",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "('no-repeat')"
+ },
+ "background_image_size": {
+ "name": "background_image_size",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "('cover')"
+ },
+ "primary_color": {
+ "name": "primary_color",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "('#fa5252')"
+ },
+ "secondary_color": {
+ "name": "secondary_color",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "('#fd7e14')"
+ },
+ "opacity": {
+ "name": "opacity",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": 100
+ },
+ "custom_css": {
+ "name": "custom_css",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "column_count": {
+ "name": "column_count",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": 10
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "board_creator_id_user_id_fk": {
+ "name": "board_creator_id_user_id_fk",
+ "tableFrom": "board",
+ "tableTo": "user",
+ "columnsFrom": ["creator_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "board_id": {
+ "name": "board_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "board_name_unique": {
+ "name": "board_name_unique",
+ "columns": ["name"]
+ }
+ }
+ },
+ "groupMember": {
+ "name": "groupMember",
+ "columns": {
+ "groupId": {
+ "name": "groupId",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "userId": {
+ "name": "userId",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "groupMember_groupId_group_id_fk": {
+ "name": "groupMember_groupId_group_id_fk",
+ "tableFrom": "groupMember",
+ "tableTo": "group",
+ "columnsFrom": ["groupId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "groupMember_userId_user_id_fk": {
+ "name": "groupMember_userId_user_id_fk",
+ "tableFrom": "groupMember",
+ "tableTo": "user",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "groupMember_groupId_userId_pk": {
+ "name": "groupMember_groupId_userId_pk",
+ "columns": ["groupId", "userId"]
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "groupPermission": {
+ "name": "groupPermission",
+ "columns": {
+ "groupId": {
+ "name": "groupId",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "permission": {
+ "name": "permission",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "groupPermission_groupId_group_id_fk": {
+ "name": "groupPermission_groupId_group_id_fk",
+ "tableFrom": "groupPermission",
+ "tableTo": "group",
+ "columnsFrom": ["groupId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "group": {
+ "name": "group",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "owner_id": {
+ "name": "owner_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "group_owner_id_user_id_fk": {
+ "name": "group_owner_id_user_id_fk",
+ "tableFrom": "group",
+ "tableTo": "user",
+ "columnsFrom": ["owner_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "group_id": {
+ "name": "group_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "iconRepository": {
+ "name": "iconRepository",
+ "columns": {
+ "iconRepository_id": {
+ "name": "iconRepository_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "iconRepository_slug": {
+ "name": "iconRepository_slug",
+ "type": "varchar(150)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "iconRepository_iconRepository_id": {
+ "name": "iconRepository_iconRepository_id",
+ "columns": ["iconRepository_id"]
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "icon": {
+ "name": "icon",
+ "columns": {
+ "icon_id": {
+ "name": "icon_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "icon_name": {
+ "name": "icon_name",
+ "type": "varchar(250)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "icon_url": {
+ "name": "icon_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "icon_checksum": {
+ "name": "icon_checksum",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "iconRepository_id": {
+ "name": "iconRepository_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "icon_iconRepository_id_iconRepository_iconRepository_id_fk": {
+ "name": "icon_iconRepository_id_iconRepository_iconRepository_id_fk",
+ "tableFrom": "icon",
+ "tableTo": "iconRepository",
+ "columnsFrom": ["iconRepository_id"],
+ "columnsTo": ["iconRepository_id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "icon_icon_id": {
+ "name": "icon_icon_id",
+ "columns": ["icon_id"]
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "integrationGroupPermissions": {
+ "name": "integrationGroupPermissions",
+ "columns": {
+ "integration_id": {
+ "name": "integration_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "group_id": {
+ "name": "group_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "permission": {
+ "name": "permission",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "integrationGroupPermissions_integration_id_integration_id_fk": {
+ "name": "integrationGroupPermissions_integration_id_integration_id_fk",
+ "tableFrom": "integrationGroupPermissions",
+ "tableTo": "integration",
+ "columnsFrom": ["integration_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "integrationGroupPermissions_group_id_group_id_fk": {
+ "name": "integrationGroupPermissions_group_id_group_id_fk",
+ "tableFrom": "integrationGroupPermissions",
+ "tableTo": "group",
+ "columnsFrom": ["group_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "integrationGroupPermissions_integration_id_group_id_permission_pk": {
+ "name": "integrationGroupPermissions_integration_id_group_id_permission_pk",
+ "columns": ["integration_id", "group_id", "permission"]
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "integration_item": {
+ "name": "integration_item",
+ "columns": {
+ "item_id": {
+ "name": "item_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "integration_id": {
+ "name": "integration_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "integration_item_item_id_item_id_fk": {
+ "name": "integration_item_item_id_item_id_fk",
+ "tableFrom": "integration_item",
+ "tableTo": "item",
+ "columnsFrom": ["item_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "integration_item_integration_id_integration_id_fk": {
+ "name": "integration_item_integration_id_integration_id_fk",
+ "tableFrom": "integration_item",
+ "tableTo": "integration",
+ "columnsFrom": ["integration_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "integration_item_item_id_integration_id_pk": {
+ "name": "integration_item_item_id_integration_id_pk",
+ "columns": ["item_id", "integration_id"]
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "integrationSecret": {
+ "name": "integrationSecret",
+ "columns": {
+ "kind": {
+ "name": "kind",
+ "type": "varchar(16)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "value": {
+ "name": "value",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "integration_id": {
+ "name": "integration_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "integration_secret__kind_idx": {
+ "name": "integration_secret__kind_idx",
+ "columns": ["kind"],
+ "isUnique": false
+ },
+ "integration_secret__updated_at_idx": {
+ "name": "integration_secret__updated_at_idx",
+ "columns": ["updated_at"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "integrationSecret_integration_id_integration_id_fk": {
+ "name": "integrationSecret_integration_id_integration_id_fk",
+ "tableFrom": "integrationSecret",
+ "tableTo": "integration",
+ "columnsFrom": ["integration_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "integrationSecret_integration_id_kind_pk": {
+ "name": "integrationSecret_integration_id_kind_pk",
+ "columns": ["integration_id", "kind"]
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "integrationUserPermission": {
+ "name": "integrationUserPermission",
+ "columns": {
+ "integration_id": {
+ "name": "integration_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "permission": {
+ "name": "permission",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "integrationUserPermission_integration_id_integration_id_fk": {
+ "name": "integrationUserPermission_integration_id_integration_id_fk",
+ "tableFrom": "integrationUserPermission",
+ "tableTo": "integration",
+ "columnsFrom": ["integration_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "integrationUserPermission_user_id_user_id_fk": {
+ "name": "integrationUserPermission_user_id_user_id_fk",
+ "tableFrom": "integrationUserPermission",
+ "tableTo": "user",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "integrationUserPermission_integration_id_user_id_permission_pk": {
+ "name": "integrationUserPermission_integration_id_user_id_permission_pk",
+ "columns": ["integration_id", "user_id", "permission"]
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "integration": {
+ "name": "integration",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "url": {
+ "name": "url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "kind": {
+ "name": "kind",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "integration__kind_idx": {
+ "name": "integration__kind_idx",
+ "columns": ["kind"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "integration_id": {
+ "name": "integration_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "invite": {
+ "name": "invite",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "token": {
+ "name": "token",
+ "type": "varchar(512)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "expiration_date": {
+ "name": "expiration_date",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "creator_id": {
+ "name": "creator_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "invite_creator_id_user_id_fk": {
+ "name": "invite_creator_id_user_id_fk",
+ "tableFrom": "invite",
+ "tableTo": "user",
+ "columnsFrom": ["creator_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "invite_id": {
+ "name": "invite_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "invite_token_unique": {
+ "name": "invite_token_unique",
+ "columns": ["token"]
+ }
+ }
+ },
+ "item": {
+ "name": "item",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "section_id": {
+ "name": "section_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "kind": {
+ "name": "kind",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "x_offset": {
+ "name": "x_offset",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "y_offset": {
+ "name": "y_offset",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "width": {
+ "name": "width",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "height": {
+ "name": "height",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "options": {
+ "name": "options",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "('{\"json\": {}}')"
+ },
+ "advanced_options": {
+ "name": "advanced_options",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "('{\"json\": {}}')"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "item_section_id_section_id_fk": {
+ "name": "item_section_id_section_id_fk",
+ "tableFrom": "item",
+ "tableTo": "section",
+ "columnsFrom": ["section_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "item_id": {
+ "name": "item_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "section": {
+ "name": "section",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "board_id": {
+ "name": "board_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "kind": {
+ "name": "kind",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "x_offset": {
+ "name": "x_offset",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "y_offset": {
+ "name": "y_offset",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "width": {
+ "name": "width",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "height": {
+ "name": "height",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "parent_section_id": {
+ "name": "parent_section_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "section_board_id_board_id_fk": {
+ "name": "section_board_id_board_id_fk",
+ "tableFrom": "section",
+ "tableTo": "board",
+ "columnsFrom": ["board_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "section_parent_section_id_section_id_fk": {
+ "name": "section_parent_section_id_section_id_fk",
+ "tableFrom": "section",
+ "tableTo": "section",
+ "columnsFrom": ["parent_section_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "section_id": {
+ "name": "section_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "serverSetting": {
+ "name": "serverSetting",
+ "columns": {
+ "key": {
+ "name": "key",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "value": {
+ "name": "value",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "('{\"json\": {}}')"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "serverSetting_key": {
+ "name": "serverSetting_key",
+ "columns": ["key"]
+ }
+ },
+ "uniqueConstraints": {
+ "serverSetting_key_unique": {
+ "name": "serverSetting_key_unique",
+ "columns": ["key"]
+ }
+ }
+ },
+ "session": {
+ "name": "session",
+ "columns": {
+ "sessionToken": {
+ "name": "sessionToken",
+ "type": "varchar(512)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "userId": {
+ "name": "userId",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "expires": {
+ "name": "expires",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "user_id_idx": {
+ "name": "user_id_idx",
+ "columns": ["userId"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "session_userId_user_id_fk": {
+ "name": "session_userId_user_id_fk",
+ "tableFrom": "session",
+ "tableTo": "user",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "session_sessionToken": {
+ "name": "session_sessionToken",
+ "columns": ["sessionToken"]
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "user": {
+ "name": "user",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "emailVerified": {
+ "name": "emailVerified",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "image": {
+ "name": "image",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "password": {
+ "name": "password",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "salt": {
+ "name": "salt",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "provider": {
+ "name": "provider",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'credentials'"
+ },
+ "homeBoardId": {
+ "name": "homeBoardId",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "colorScheme": {
+ "name": "colorScheme",
+ "type": "varchar(5)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'auto'"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "user_homeBoardId_board_id_fk": {
+ "name": "user_homeBoardId_board_id_fk",
+ "tableFrom": "user",
+ "tableTo": "board",
+ "columnsFrom": ["homeBoardId"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "user_id": {
+ "name": "user_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "verificationToken": {
+ "name": "verificationToken",
+ "columns": {
+ "identifier": {
+ "name": "identifier",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "token": {
+ "name": "token",
+ "type": "varchar(512)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "expires": {
+ "name": "expires",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "verificationToken_identifier_token_pk": {
+ "name": "verificationToken_identifier_token_pk",
+ "columns": ["identifier", "token"]
+ }
+ },
+ "uniqueConstraints": {}
+ }
+ },
+ "_meta": {
+ "schemas": {},
+ "tables": {},
+ "columns": {}
+ },
+ "internal": {
+ "tables": {},
+ "indexes": {}
+ }
+}
diff --git a/packages/db/migrations/mysql/meta/_journal.json b/packages/db/migrations/mysql/meta/_journal.json
index 1a45a04c0..8917665c6 100644
--- a/packages/db/migrations/mysql/meta/_journal.json
+++ b/packages/db/migrations/mysql/meta/_journal.json
@@ -50,6 +50,13 @@
"when": 1722517058725,
"tag": "0006_young_micromax",
"breakpoints": true
+ },
+ {
+ "idx": 7,
+ "version": "5",
+ "when": 1723749320706,
+ "tag": "0007_boring_nocturne",
+ "breakpoints": true
}
]
}
diff --git a/packages/db/migrations/sqlite/0007_known_ultragirl.sql b/packages/db/migrations/sqlite/0007_known_ultragirl.sql
new file mode 100644
index 000000000..7a4040a01
--- /dev/null
+++ b/packages/db/migrations/sqlite/0007_known_ultragirl.sql
@@ -0,0 +1 @@
+ALTER TABLE `user` ADD `colorScheme` text DEFAULT 'auto' NOT NULL;
diff --git a/packages/db/migrations/sqlite/meta/0007_snapshot.json b/packages/db/migrations/sqlite/meta/0007_snapshot.json
new file mode 100644
index 000000000..85bccfaea
--- /dev/null
+++ b/packages/db/migrations/sqlite/meta/0007_snapshot.json
@@ -0,0 +1,1316 @@
+{
+ "version": "6",
+ "dialect": "sqlite",
+ "id": "11d3d936-3e3a-43b7-84b8-f0a1020b3b82",
+ "prevId": "589ffaa4-4b95-4c6e-84b0-5b0d7959750b",
+ "tables": {
+ "account": {
+ "name": "account",
+ "columns": {
+ "userId": {
+ "name": "userId",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "type": {
+ "name": "type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "provider": {
+ "name": "provider",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "providerAccountId": {
+ "name": "providerAccountId",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "refresh_token": {
+ "name": "refresh_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "access_token": {
+ "name": "access_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "token_type": {
+ "name": "token_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "scope": {
+ "name": "scope",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "id_token": {
+ "name": "id_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "session_state": {
+ "name": "session_state",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "userId_idx": {
+ "name": "userId_idx",
+ "columns": ["userId"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "account_userId_user_id_fk": {
+ "name": "account_userId_user_id_fk",
+ "tableFrom": "account",
+ "tableTo": "user",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "account_provider_providerAccountId_pk": {
+ "columns": ["provider", "providerAccountId"],
+ "name": "account_provider_providerAccountId_pk"
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "app": {
+ "name": "app",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "icon_url": {
+ "name": "icon_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "href": {
+ "name": "href",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "boardGroupPermission": {
+ "name": "boardGroupPermission",
+ "columns": {
+ "board_id": {
+ "name": "board_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "group_id": {
+ "name": "group_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "permission": {
+ "name": "permission",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "boardGroupPermission_board_id_board_id_fk": {
+ "name": "boardGroupPermission_board_id_board_id_fk",
+ "tableFrom": "boardGroupPermission",
+ "tableTo": "board",
+ "columnsFrom": ["board_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "boardGroupPermission_group_id_group_id_fk": {
+ "name": "boardGroupPermission_group_id_group_id_fk",
+ "tableFrom": "boardGroupPermission",
+ "tableTo": "group",
+ "columnsFrom": ["group_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "boardGroupPermission_board_id_group_id_permission_pk": {
+ "columns": ["board_id", "group_id", "permission"],
+ "name": "boardGroupPermission_board_id_group_id_permission_pk"
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "boardUserPermission": {
+ "name": "boardUserPermission",
+ "columns": {
+ "board_id": {
+ "name": "board_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "permission": {
+ "name": "permission",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "boardUserPermission_board_id_board_id_fk": {
+ "name": "boardUserPermission_board_id_board_id_fk",
+ "tableFrom": "boardUserPermission",
+ "tableTo": "board",
+ "columnsFrom": ["board_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "boardUserPermission_user_id_user_id_fk": {
+ "name": "boardUserPermission_user_id_user_id_fk",
+ "tableFrom": "boardUserPermission",
+ "tableTo": "user",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "boardUserPermission_board_id_user_id_permission_pk": {
+ "columns": ["board_id", "user_id", "permission"],
+ "name": "boardUserPermission_board_id_user_id_permission_pk"
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "board": {
+ "name": "board",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "is_public": {
+ "name": "is_public",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": false
+ },
+ "creator_id": {
+ "name": "creator_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "page_title": {
+ "name": "page_title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "meta_title": {
+ "name": "meta_title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "logo_image_url": {
+ "name": "logo_image_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "favicon_image_url": {
+ "name": "favicon_image_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "background_image_url": {
+ "name": "background_image_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "background_image_attachment": {
+ "name": "background_image_attachment",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'fixed'"
+ },
+ "background_image_repeat": {
+ "name": "background_image_repeat",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'no-repeat'"
+ },
+ "background_image_size": {
+ "name": "background_image_size",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'cover'"
+ },
+ "primary_color": {
+ "name": "primary_color",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'#fa5252'"
+ },
+ "secondary_color": {
+ "name": "secondary_color",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'#fd7e14'"
+ },
+ "opacity": {
+ "name": "opacity",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": 100
+ },
+ "custom_css": {
+ "name": "custom_css",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "column_count": {
+ "name": "column_count",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": 10
+ }
+ },
+ "indexes": {
+ "board_name_unique": {
+ "name": "board_name_unique",
+ "columns": ["name"],
+ "isUnique": true
+ }
+ },
+ "foreignKeys": {
+ "board_creator_id_user_id_fk": {
+ "name": "board_creator_id_user_id_fk",
+ "tableFrom": "board",
+ "tableTo": "user",
+ "columnsFrom": ["creator_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "groupMember": {
+ "name": "groupMember",
+ "columns": {
+ "groupId": {
+ "name": "groupId",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "userId": {
+ "name": "userId",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "groupMember_groupId_group_id_fk": {
+ "name": "groupMember_groupId_group_id_fk",
+ "tableFrom": "groupMember",
+ "tableTo": "group",
+ "columnsFrom": ["groupId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "groupMember_userId_user_id_fk": {
+ "name": "groupMember_userId_user_id_fk",
+ "tableFrom": "groupMember",
+ "tableTo": "user",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "groupMember_groupId_userId_pk": {
+ "columns": ["groupId", "userId"],
+ "name": "groupMember_groupId_userId_pk"
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "groupPermission": {
+ "name": "groupPermission",
+ "columns": {
+ "groupId": {
+ "name": "groupId",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "permission": {
+ "name": "permission",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "groupPermission_groupId_group_id_fk": {
+ "name": "groupPermission_groupId_group_id_fk",
+ "tableFrom": "groupPermission",
+ "tableTo": "group",
+ "columnsFrom": ["groupId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "group": {
+ "name": "group",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "owner_id": {
+ "name": "owner_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "group_owner_id_user_id_fk": {
+ "name": "group_owner_id_user_id_fk",
+ "tableFrom": "group",
+ "tableTo": "user",
+ "columnsFrom": ["owner_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "iconRepository": {
+ "name": "iconRepository",
+ "columns": {
+ "iconRepository_id": {
+ "name": "iconRepository_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "iconRepository_slug": {
+ "name": "iconRepository_slug",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "icon": {
+ "name": "icon",
+ "columns": {
+ "icon_id": {
+ "name": "icon_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "icon_name": {
+ "name": "icon_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "icon_url": {
+ "name": "icon_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "icon_checksum": {
+ "name": "icon_checksum",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "iconRepository_id": {
+ "name": "iconRepository_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "icon_iconRepository_id_iconRepository_iconRepository_id_fk": {
+ "name": "icon_iconRepository_id_iconRepository_iconRepository_id_fk",
+ "tableFrom": "icon",
+ "tableTo": "iconRepository",
+ "columnsFrom": ["iconRepository_id"],
+ "columnsTo": ["iconRepository_id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "integrationGroupPermissions": {
+ "name": "integrationGroupPermissions",
+ "columns": {
+ "integration_id": {
+ "name": "integration_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "group_id": {
+ "name": "group_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "permission": {
+ "name": "permission",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "integrationGroupPermissions_integration_id_integration_id_fk": {
+ "name": "integrationGroupPermissions_integration_id_integration_id_fk",
+ "tableFrom": "integrationGroupPermissions",
+ "tableTo": "integration",
+ "columnsFrom": ["integration_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "integrationGroupPermissions_group_id_group_id_fk": {
+ "name": "integrationGroupPermissions_group_id_group_id_fk",
+ "tableFrom": "integrationGroupPermissions",
+ "tableTo": "group",
+ "columnsFrom": ["group_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "integrationGroupPermissions_integration_id_group_id_permission_pk": {
+ "columns": ["integration_id", "group_id", "permission"],
+ "name": "integrationGroupPermissions_integration_id_group_id_permission_pk"
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "integration_item": {
+ "name": "integration_item",
+ "columns": {
+ "item_id": {
+ "name": "item_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "integration_id": {
+ "name": "integration_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "integration_item_item_id_item_id_fk": {
+ "name": "integration_item_item_id_item_id_fk",
+ "tableFrom": "integration_item",
+ "tableTo": "item",
+ "columnsFrom": ["item_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "integration_item_integration_id_integration_id_fk": {
+ "name": "integration_item_integration_id_integration_id_fk",
+ "tableFrom": "integration_item",
+ "tableTo": "integration",
+ "columnsFrom": ["integration_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "integration_item_item_id_integration_id_pk": {
+ "columns": ["item_id", "integration_id"],
+ "name": "integration_item_item_id_integration_id_pk"
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "integrationSecret": {
+ "name": "integrationSecret",
+ "columns": {
+ "kind": {
+ "name": "kind",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "value": {
+ "name": "value",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "integration_id": {
+ "name": "integration_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "integration_secret__kind_idx": {
+ "name": "integration_secret__kind_idx",
+ "columns": ["kind"],
+ "isUnique": false
+ },
+ "integration_secret__updated_at_idx": {
+ "name": "integration_secret__updated_at_idx",
+ "columns": ["updated_at"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "integrationSecret_integration_id_integration_id_fk": {
+ "name": "integrationSecret_integration_id_integration_id_fk",
+ "tableFrom": "integrationSecret",
+ "tableTo": "integration",
+ "columnsFrom": ["integration_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "integrationSecret_integration_id_kind_pk": {
+ "columns": ["integration_id", "kind"],
+ "name": "integrationSecret_integration_id_kind_pk"
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "integrationUserPermission": {
+ "name": "integrationUserPermission",
+ "columns": {
+ "integration_id": {
+ "name": "integration_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "permission": {
+ "name": "permission",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "integrationUserPermission_integration_id_integration_id_fk": {
+ "name": "integrationUserPermission_integration_id_integration_id_fk",
+ "tableFrom": "integrationUserPermission",
+ "tableTo": "integration",
+ "columnsFrom": ["integration_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "integrationUserPermission_user_id_user_id_fk": {
+ "name": "integrationUserPermission_user_id_user_id_fk",
+ "tableFrom": "integrationUserPermission",
+ "tableTo": "user",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "integrationUserPermission_integration_id_user_id_permission_pk": {
+ "columns": ["integration_id", "user_id", "permission"],
+ "name": "integrationUserPermission_integration_id_user_id_permission_pk"
+ }
+ },
+ "uniqueConstraints": {}
+ },
+ "integration": {
+ "name": "integration",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "url": {
+ "name": "url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "kind": {
+ "name": "kind",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "integration__kind_idx": {
+ "name": "integration__kind_idx",
+ "columns": ["kind"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "invite": {
+ "name": "invite",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "token": {
+ "name": "token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "expiration_date": {
+ "name": "expiration_date",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "creator_id": {
+ "name": "creator_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "invite_token_unique": {
+ "name": "invite_token_unique",
+ "columns": ["token"],
+ "isUnique": true
+ }
+ },
+ "foreignKeys": {
+ "invite_creator_id_user_id_fk": {
+ "name": "invite_creator_id_user_id_fk",
+ "tableFrom": "invite",
+ "tableTo": "user",
+ "columnsFrom": ["creator_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "item": {
+ "name": "item",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "section_id": {
+ "name": "section_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "kind": {
+ "name": "kind",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "x_offset": {
+ "name": "x_offset",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "y_offset": {
+ "name": "y_offset",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "width": {
+ "name": "width",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "height": {
+ "name": "height",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "options": {
+ "name": "options",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'{\"json\": {}}'"
+ },
+ "advanced_options": {
+ "name": "advanced_options",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'{\"json\": {}}'"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "item_section_id_section_id_fk": {
+ "name": "item_section_id_section_id_fk",
+ "tableFrom": "item",
+ "tableTo": "section",
+ "columnsFrom": ["section_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "section": {
+ "name": "section",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "board_id": {
+ "name": "board_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "kind": {
+ "name": "kind",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "x_offset": {
+ "name": "x_offset",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "y_offset": {
+ "name": "y_offset",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "width": {
+ "name": "width",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "height": {
+ "name": "height",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "parent_section_id": {
+ "name": "parent_section_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "section_board_id_board_id_fk": {
+ "name": "section_board_id_board_id_fk",
+ "tableFrom": "section",
+ "tableTo": "board",
+ "columnsFrom": ["board_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "section_parent_section_id_section_id_fk": {
+ "name": "section_parent_section_id_section_id_fk",
+ "tableFrom": "section",
+ "tableTo": "section",
+ "columnsFrom": ["parent_section_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "serverSetting": {
+ "name": "serverSetting",
+ "columns": {
+ "key": {
+ "name": "key",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "value": {
+ "name": "value",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'{\"json\": {}}'"
+ }
+ },
+ "indexes": {
+ "serverSetting_key_unique": {
+ "name": "serverSetting_key_unique",
+ "columns": ["key"],
+ "isUnique": true
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "session": {
+ "name": "session",
+ "columns": {
+ "sessionToken": {
+ "name": "sessionToken",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "userId": {
+ "name": "userId",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "expires": {
+ "name": "expires",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "user_id_idx": {
+ "name": "user_id_idx",
+ "columns": ["userId"],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "session_userId_user_id_fk": {
+ "name": "session_userId_user_id_fk",
+ "tableFrom": "session",
+ "tableTo": "user",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "user": {
+ "name": "user",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "emailVerified": {
+ "name": "emailVerified",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "image": {
+ "name": "image",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "password": {
+ "name": "password",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "salt": {
+ "name": "salt",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "provider": {
+ "name": "provider",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'credentials'"
+ },
+ "homeBoardId": {
+ "name": "homeBoardId",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "colorScheme": {
+ "name": "colorScheme",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'auto'"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "user_homeBoardId_board_id_fk": {
+ "name": "user_homeBoardId_board_id_fk",
+ "tableFrom": "user",
+ "tableTo": "board",
+ "columnsFrom": ["homeBoardId"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "verificationToken": {
+ "name": "verificationToken",
+ "columns": {
+ "identifier": {
+ "name": "identifier",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "token": {
+ "name": "token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "expires": {
+ "name": "expires",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "verificationToken_identifier_token_pk": {
+ "columns": ["identifier", "token"],
+ "name": "verificationToken_identifier_token_pk"
+ }
+ },
+ "uniqueConstraints": {}
+ }
+ },
+ "enums": {},
+ "_meta": {
+ "schemas": {},
+ "tables": {},
+ "columns": {}
+ },
+ "internal": {
+ "indexes": {}
+ }
+}
diff --git a/packages/db/migrations/sqlite/meta/_journal.json b/packages/db/migrations/sqlite/meta/_journal.json
index 99839fc25..e2e4864d9 100644
--- a/packages/db/migrations/sqlite/meta/_journal.json
+++ b/packages/db/migrations/sqlite/meta/_journal.json
@@ -50,6 +50,13 @@
"when": 1722517033483,
"tag": "0006_windy_doctor_faustus",
"breakpoints": true
+ },
+ {
+ "idx": 7,
+ "version": "6",
+ "when": 1723746828385,
+ "tag": "0007_known_ultragirl",
+ "breakpoints": true
}
]
}
diff --git a/packages/db/package.json b/packages/db/package.json
index 0769bcbdd..43497e5b3 100644
--- a/packages/db/package.json
+++ b/packages/db/package.json
@@ -1,6 +1,8 @@
{
"name": "@homarr/db",
"version": "0.1.0",
+ "private": true,
+ "license": "MIT",
"type": "module",
"exports": {
".": "./index.ts",
@@ -9,37 +11,36 @@
"./test": "./test/index.ts",
"./queries": "./queries/index.ts"
},
- "private": true,
"main": "./index.ts",
"types": "./index.ts",
- "license": "MIT",
"scripts": {
"build": "pnpm run build:sqlite && pnpm run build:mysql",
- "build:sqlite": "esbuild migrations/sqlite/migrate.ts --bundle --platform=node --outfile=migrations/sqlite/migrate.cjs",
"build:mysql": "esbuild migrations/mysql/migrate.ts --bundle --platform=node --outfile=migrations/mysql/migrate.cjs",
+ "build:sqlite": "esbuild migrations/sqlite/migrate.ts --bundle --platform=node --outfile=migrations/sqlite/migrate.cjs",
"clean": "rm -rf .turbo node_modules",
- "lint": "eslint",
"format": "prettier --check . --ignore-path ../../.gitignore",
- "migration:sqlite:generate": "drizzle-kit generate --config ./configs/sqlite.config.ts",
- "migration:sqlite:run": "drizzle-kit migrate --config ./configs/sqlite.config.ts",
+ "lint": "eslint",
"migration:mysql:generate": "drizzle-kit generate --config ./configs/mysql.config.ts",
"migration:mysql:run": "drizzle-kit migrate --config ./configs/mysql.config.ts",
- "push:sqlite": "drizzle-kit push --config ./configs/sqlite.config.ts",
+ "migration:sqlite:generate": "drizzle-kit generate --config ./configs/sqlite.config.ts",
+ "migration:sqlite:run": "drizzle-kit migrate --config ./configs/sqlite.config.ts",
"push:mysql": "drizzle-kit push --config ./configs/mysql.config.ts",
+ "push:sqlite": "drizzle-kit push --config ./configs/sqlite.config.ts",
"studio": "drizzle-kit studio --config ./configs/sqlite.config.ts",
"typecheck": "tsc --noEmit"
},
+ "prettier": "@homarr/prettier-config",
"dependencies": {
+ "@auth/core": "^0.34.2",
"@homarr/common": "workspace:^0.1.0",
"@homarr/definitions": "workspace:^0.1.0",
"@homarr/log": "workspace:^0.1.0",
"@paralleldrive/cuid2": "^2.2.2",
- "@auth/core": "^0.34.2",
"better-sqlite3": "^11.2.1",
- "drizzle-orm": "^0.33.0",
"dotenv": "^16.4.5",
- "mysql2": "3.11.0",
- "drizzle-kit": "^0.24.2"
+ "drizzle-kit": "^0.24.2",
+ "drizzle-orm": "^0.33.0",
+ "mysql2": "3.11.0"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
@@ -50,6 +51,5 @@
"eslint": "^9.9.1",
"prettier": "^3.3.3",
"typescript": "^5.5.4"
- },
- "prettier": "@homarr/prettier-config"
+ }
}
diff --git a/packages/db/schema/mysql.ts b/packages/db/schema/mysql.ts
index e45186ac0..32cabdbe5 100644
--- a/packages/db/schema/mysql.ts
+++ b/packages/db/schema/mysql.ts
@@ -8,6 +8,7 @@ import type {
BackgroundImageRepeat,
BackgroundImageSize,
BoardPermission,
+ ColorScheme,
GroupPermissionKey,
IntegrationKind,
IntegrationPermission,
@@ -30,6 +31,7 @@ export const users = mysqlTable("user", {
homeBoardId: varchar("homeBoardId", { length: 64 }).references((): AnyMySqlColumn => boards.id, {
onDelete: "set null",
}),
+ colorScheme: varchar("colorScheme", { length: 5 }).$type().default("auto").notNull(),
});
export const accounts = mysqlTable(
diff --git a/packages/db/schema/sqlite.ts b/packages/db/schema/sqlite.ts
index 197dd9c8e..268c19c75 100644
--- a/packages/db/schema/sqlite.ts
+++ b/packages/db/schema/sqlite.ts
@@ -10,6 +10,7 @@ import type {
BackgroundImageRepeat,
BackgroundImageSize,
BoardPermission,
+ ColorScheme,
GroupPermissionKey,
IntegrationKind,
IntegrationPermission,
@@ -31,6 +32,7 @@ export const users = sqliteTable("user", {
homeBoardId: text("homeBoardId").references((): AnySQLiteColumn => boards.id, {
onDelete: "set null",
}),
+ colorScheme: text("colorScheme").$type().default("auto").notNull(),
});
export const accounts = sqliteTable(
diff --git a/packages/definitions/package.json b/packages/definitions/package.json
index ce7a906d2..7b025b25f 100644
--- a/packages/definitions/package.json
+++ b/packages/definitions/package.json
@@ -1,7 +1,8 @@
{
"name": "@homarr/definitions",
- "private": true,
"version": "0.1.0",
+ "private": true,
+ "license": "MIT",
"type": "module",
"exports": {
".": "./index.ts"
@@ -13,13 +14,13 @@
]
}
},
- "license": "MIT",
"scripts": {
"clean": "rm -rf .turbo node_modules",
- "lint": "eslint",
"format": "prettier --check . --ignore-path ../../.gitignore",
+ "lint": "eslint",
"typecheck": "tsc --noEmit"
},
+ "prettier": "@homarr/prettier-config",
"dependencies": {
"@homarr/common": "workspace:^0.1.0"
},
@@ -29,6 +30,5 @@
"@homarr/tsconfig": "workspace:^0.1.0",
"eslint": "^9.9.1",
"typescript": "^5.5.4"
- },
- "prettier": "@homarr/prettier-config"
+ }
}
diff --git a/packages/definitions/src/index.ts b/packages/definitions/src/index.ts
index 140b2d924..d2dcd8e0a 100644
--- a/packages/definitions/src/index.ts
+++ b/packages/definitions/src/index.ts
@@ -5,3 +5,4 @@ export * from "./widget";
export * from "./permissions";
export * from "./docker";
export * from "./auth";
+export * from "./user";
diff --git a/packages/definitions/src/integration.ts b/packages/definitions/src/integration.ts
index 7564a6ae8..fbe355d6f 100644
--- a/packages/definitions/src/integration.ts
+++ b/packages/definitions/src/integration.ts
@@ -63,6 +63,12 @@ export const integrationDefs = {
iconUrl: "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/readarr.png",
category: ["calendar"],
},
+ prowlarr: {
+ name: "Prowlarr",
+ secretKinds: [["apiKey"]],
+ iconUrl: "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/prowlarr.png",
+ category: ["indexerManager"],
+ },
jellyfin: {
name: "Jellyfin",
secretKinds: [["username", "password"], ["apiKey"]],
@@ -103,7 +109,7 @@ export const integrationDefs = {
name: "Home Assistant",
secretKinds: [["apiKey"]],
iconUrl: "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/home-assistant.png",
- category: [],
+ category: ["smartHomeServer"],
},
} satisfies Record<
string,
@@ -138,4 +144,5 @@ export type IntegrationCategory =
| "mediaRequest"
| "downloadClient"
| "useNetClient"
- | "smartHomeServer";
+ | "smartHomeServer"
+ | "indexerManager";
diff --git a/packages/definitions/src/user.ts b/packages/definitions/src/user.ts
new file mode 100644
index 000000000..28f24ae7b
--- /dev/null
+++ b/packages/definitions/src/user.ts
@@ -0,0 +1,2 @@
+export const colorSchemes = ["light", "dark", "auto"] as const;
+export type ColorScheme = (typeof colorSchemes)[number];
diff --git a/packages/form/package.json b/packages/form/package.json
index b61baaeb7..9c150c670 100644
--- a/packages/form/package.json
+++ b/packages/form/package.json
@@ -1,7 +1,8 @@
{
"name": "@homarr/form",
- "private": true,
"version": "0.1.0",
+ "private": true,
+ "license": "MIT",
"type": "module",
"exports": {
".": "./index.ts"
@@ -13,17 +14,17 @@
]
}
},
- "license": "MIT",
"scripts": {
"clean": "rm -rf .turbo node_modules",
- "lint": "eslint",
"format": "prettier --check . --ignore-path ../../.gitignore",
+ "lint": "eslint",
"typecheck": "tsc --noEmit"
},
+ "prettier": "@homarr/prettier-config",
"dependencies": {
- "@mantine/form": "^7.12.2",
+ "@homarr/translation": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
- "@homarr/translation": "workspace:^0.1.0"
+ "@mantine/form": "^7.12.2"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
@@ -31,6 +32,5 @@
"@homarr/tsconfig": "workspace:^0.1.0",
"eslint": "^9.9.1",
"typescript": "^5.5.4"
- },
- "prettier": "@homarr/prettier-config"
+ }
}
diff --git a/packages/icons/package.json b/packages/icons/package.json
index c5801f318..3926129c9 100644
--- a/packages/icons/package.json
+++ b/packages/icons/package.json
@@ -1,7 +1,8 @@
{
"name": "@homarr/icons",
- "private": true,
"version": "0.1.0",
+ "private": true,
+ "license": "MIT",
"type": "module",
"exports": {
".": "./index.ts"
@@ -13,16 +14,16 @@
]
}
},
- "license": "MIT",
"scripts": {
"clean": "rm -rf .turbo node_modules",
- "lint": "eslint",
"format": "prettier --check . --ignore-path ../../.gitignore",
+ "lint": "eslint",
"typecheck": "tsc --noEmit"
},
+ "prettier": "@homarr/prettier-config",
"dependencies": {
- "@homarr/log": "workspace:^0.1.0",
- "@homarr/common": "workspace:^0.1.0"
+ "@homarr/common": "workspace:^0.1.0",
+ "@homarr/log": "workspace:^0.1.0"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
@@ -30,6 +31,5 @@
"@homarr/tsconfig": "workspace:^0.1.0",
"eslint": "^9.9.1",
"typescript": "^5.5.4"
- },
- "prettier": "@homarr/prettier-config"
+ }
}
diff --git a/packages/integrations/package.json b/packages/integrations/package.json
index 1a42bc3b3..eef4cd8d2 100644
--- a/packages/integrations/package.json
+++ b/packages/integrations/package.json
@@ -1,7 +1,9 @@
{
"name": "@homarr/integrations",
- "private": true,
"version": "0.1.0",
+ "private": true,
+ "license": "MIT",
+ "type": "module",
"exports": {
".": "./index.ts",
"./client": "./src/client.ts",
@@ -14,21 +16,20 @@
]
}
},
- "license": "MIT",
- "type": "module",
"scripts": {
"clean": "rm -rf .turbo node_modules",
- "lint": "eslint",
"format": "prettier --check . --ignore-path ../../.gitignore",
+ "lint": "eslint",
"typecheck": "tsc --noEmit"
},
+ "prettier": "@homarr/prettier-config",
"dependencies": {
"@homarr/common": "workspace:^0.1.0",
"@homarr/definitions": "workspace:^0.1.0",
"@homarr/log": "workspace:^0.1.0",
+ "@homarr/translation": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
- "@jellyfin/sdk": "^0.10.0",
- "@homarr/translation": "workspace:^0.1.0"
+ "@jellyfin/sdk": "^0.10.0"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
@@ -36,6 +37,5 @@
"@homarr/tsconfig": "workspace:^0.1.0",
"eslint": "^9.9.1",
"typescript": "^5.5.4"
- },
- "prettier": "@homarr/prettier-config"
+ }
}
diff --git a/packages/integrations/src/base/creator.ts b/packages/integrations/src/base/creator.ts
index 94f23b70f..27c289ef2 100644
--- a/packages/integrations/src/base/creator.ts
+++ b/packages/integrations/src/base/creator.ts
@@ -7,6 +7,7 @@ import { JellyseerrIntegration } from "../jellyseerr/jellyseerr-integration";
import { SonarrIntegration } from "../media-organizer/sonarr/sonarr-integration";
import { OverseerrIntegration } from "../overseerr/overseerr-integration";
import { PiHoleIntegration } from "../pi-hole/pi-hole-integration";
+import { ProwlarrIntegration } from "../prowlarr/prowlarr-integration";
import type { Integration, IntegrationInput } from "./integration";
export const integrationCreatorByKind = (
@@ -28,4 +29,5 @@ export const integrationCreators = {
sonarr: SonarrIntegration,
jellyseerr: JellyseerrIntegration,
overseerr: OverseerrIntegration,
+ prowlarr: ProwlarrIntegration,
} satisfies Partial Integration>>;
diff --git a/packages/integrations/src/interfaces/indexer-manager/indexer.ts b/packages/integrations/src/interfaces/indexer-manager/indexer.ts
new file mode 100644
index 000000000..81393d9e7
--- /dev/null
+++ b/packages/integrations/src/interfaces/indexer-manager/indexer.ts
@@ -0,0 +1,12 @@
+export interface Indexer {
+ id: number;
+ name: string;
+ url: string;
+ /**
+ * Enabled: when the user enable / disable the indexer.
+ * Status: when there is an error with the indexer site.
+ * If one of the options are false the indexer is off.
+ */
+ enabled: boolean;
+ status: boolean;
+}
diff --git a/packages/integrations/src/prowlarr/prowlarr-integration.ts b/packages/integrations/src/prowlarr/prowlarr-integration.ts
new file mode 100644
index 000000000..e023e21a5
--- /dev/null
+++ b/packages/integrations/src/prowlarr/prowlarr-integration.ts
@@ -0,0 +1,99 @@
+import { Integration } from "../base/integration";
+import { IntegrationTestConnectionError } from "../base/test-connection-error";
+import type { Indexer } from "../interfaces/indexer-manager/indexer";
+import { indexerResponseSchema, statusResponseSchema } from "./prowlarr-types";
+
+export class ProwlarrIntegration extends Integration {
+ public async getIndexersAsync(): Promise {
+ const apiKey = super.getSecretValue("apiKey");
+
+ const indexerResponse = await fetch(`${this.integration.url}/api/v1/indexer`, {
+ headers: {
+ "X-Api-Key": apiKey,
+ },
+ });
+ if (!indexerResponse.ok) {
+ throw new Error(
+ `Failed to fetch indexers for ${this.integration.name} (${this.integration.id}): ${indexerResponse.statusText}`,
+ );
+ }
+
+ const statusResponse = await fetch(`${this.integration.url}/api/v1/indexerstatus`, {
+ headers: {
+ "X-Api-Key": apiKey,
+ },
+ });
+ if (!statusResponse.ok) {
+ throw new Error(
+ `Failed to fetch status for ${this.integration.name} (${this.integration.id}): ${statusResponse.statusText}`,
+ );
+ }
+
+ const indexersResult = indexerResponseSchema.array().safeParse(await indexerResponse.json());
+ const statusResult = statusResponseSchema.safeParse(await statusResponse.json());
+
+ const errorMessages: string[] = [];
+ if (!indexersResult.success) {
+ errorMessages.push(`Indexers parsing error: ${indexersResult.error.message}`);
+ }
+ if (!statusResult.success) {
+ errorMessages.push(`Status parsing error: ${statusResult.error.message}`);
+ }
+ if (!indexersResult.success || !statusResult.success) {
+ throw new Error(
+ `Failed to parse indexers for ${this.integration.name} (${this.integration.id}), most likely your api key is wrong:\n${errorMessages.join("\n")}`,
+ );
+ }
+
+ const inactiveIndexerIds = new Set(statusResult.data.map((status: { id: number }) => status.id));
+
+ const indexers: Indexer[] = indexersResult.data.map((indexer) => ({
+ id: indexer.id,
+ name: indexer.name,
+ url: indexer.indexerUrls[0] ?? "",
+ enabled: indexer.enable,
+ status: inactiveIndexerIds.has(indexer.id),
+ }));
+
+ return indexers;
+ }
+
+ public async testAllAsync(): Promise {
+ const apiKey = super.getSecretValue("apiKey");
+ const response = await fetch(`${this.integration.url}/api/v1/indexer/testall`, {
+ headers: {
+ "X-Api-Key": apiKey,
+ },
+ });
+
+ if (!response.ok) {
+ throw new Error(
+ `Failed to test all indexers for ${this.integration.name} (${this.integration.id}): ${response.statusText}`,
+ );
+ }
+ }
+
+ public async testConnectionAsync(): Promise {
+ const apiKey = super.getSecretValue("apiKey");
+
+ await super.handleTestConnectionResponseAsync({
+ queryFunctionAsync: async () => {
+ return await fetch(`${this.integration.url}/api`, {
+ headers: {
+ "X-Api-Key": apiKey,
+ },
+ });
+ },
+ handleResponseAsync: async (response) => {
+ try {
+ const result = (await response.json()) as unknown;
+ if (typeof result === "object" && result !== null) return;
+ } catch {
+ throw new IntegrationTestConnectionError("invalidJson");
+ }
+
+ throw new IntegrationTestConnectionError("invalidCredentials");
+ },
+ });
+ }
+}
diff --git a/packages/integrations/src/prowlarr/prowlarr-types.ts b/packages/integrations/src/prowlarr/prowlarr-types.ts
new file mode 100644
index 000000000..9b61f74f0
--- /dev/null
+++ b/packages/integrations/src/prowlarr/prowlarr-types.ts
@@ -0,0 +1,14 @@
+import { z } from "@homarr/validation";
+
+export const indexerResponseSchema = z.object({
+ id: z.number(),
+ indexerUrls: z.array(z.string()),
+ name: z.string(),
+ enable: z.boolean(),
+});
+
+export const statusResponseSchema = z.array(
+ z.object({
+ id: z.number(),
+ }),
+);
diff --git a/packages/log/package.json b/packages/log/package.json
index 6ab1677e8..b5830fbee 100644
--- a/packages/log/package.json
+++ b/packages/log/package.json
@@ -1,7 +1,8 @@
{
"name": "@homarr/log",
- "private": true,
"version": "0.1.0",
+ "private": true,
+ "license": "MIT",
"type": "module",
"exports": {
".": {
@@ -17,13 +18,13 @@
]
}
},
- "license": "MIT",
"scripts": {
"clean": "rm -rf .turbo node_modules",
- "lint": "eslint",
"format": "prettier --check . --ignore-path ../../.gitignore",
+ "lint": "eslint",
"typecheck": "tsc --noEmit"
},
+ "prettier": "@homarr/prettier-config",
"dependencies": {
"ioredis": "5.4.1",
"superjson": "2.2.1",
@@ -35,6 +36,5 @@
"@homarr/tsconfig": "workspace:^0.1.0",
"eslint": "^9.9.1",
"typescript": "^5.5.4"
- },
- "prettier": "@homarr/prettier-config"
+ }
}
diff --git a/packages/modals/package.json b/packages/modals/package.json
index 52cc86a17..d0065baa4 100644
--- a/packages/modals/package.json
+++ b/packages/modals/package.json
@@ -1,7 +1,8 @@
{
"name": "@homarr/modals",
- "private": true,
"version": "0.1.0",
+ "private": true,
+ "license": "MIT",
"type": "module",
"exports": {
".": "./index.ts"
@@ -13,19 +14,19 @@
]
}
},
- "license": "MIT",
"scripts": {
"clean": "rm -rf .turbo node_modules",
- "lint": "eslint",
"format": "prettier --check . --ignore-path ../../.gitignore",
+ "lint": "eslint",
"typecheck": "tsc --noEmit"
},
+ "prettier": "@homarr/prettier-config",
"dependencies": {
- "@homarr/ui": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0",
- "react": "^18.3.1",
+ "@homarr/ui": "workspace:^0.1.0",
"@mantine/core": "^7.12.2",
- "@mantine/hooks": "^7.12.2"
+ "@mantine/hooks": "^7.12.2",
+ "react": "^18.3.1"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
@@ -33,6 +34,5 @@
"@homarr/tsconfig": "workspace:^0.1.0",
"eslint": "^9.9.1",
"typescript": "^5.5.4"
- },
- "prettier": "@homarr/prettier-config"
+ }
}
diff --git a/packages/notifications/package.json b/packages/notifications/package.json
index b8598aefa..499a5a89c 100644
--- a/packages/notifications/package.json
+++ b/packages/notifications/package.json
@@ -1,7 +1,8 @@
{
"name": "@homarr/notifications",
- "private": true,
"version": "0.1.0",
+ "private": true,
+ "license": "MIT",
"type": "module",
"exports": {
".": "./index.ts",
@@ -14,16 +15,16 @@
]
}
},
- "license": "MIT",
"scripts": {
"clean": "rm -rf .turbo node_modules",
- "lint": "eslint",
"format": "prettier --check . --ignore-path ../../.gitignore",
+ "lint": "eslint",
"typecheck": "tsc --noEmit"
},
+ "prettier": "@homarr/prettier-config",
"dependencies": {
- "@mantine/notifications": "^7.12.2",
"@homarr/ui": "workspace:^0.1.0",
+ "@mantine/notifications": "^7.12.2",
"@tabler/icons-react": "^3.14.0"
},
"devDependencies": {
@@ -32,6 +33,5 @@
"@homarr/tsconfig": "workspace:^0.1.0",
"eslint": "^9.9.1",
"typescript": "^5.5.4"
- },
- "prettier": "@homarr/prettier-config"
+ }
}
diff --git a/packages/ping/package.json b/packages/ping/package.json
index 3e3249610..741a63917 100644
--- a/packages/ping/package.json
+++ b/packages/ping/package.json
@@ -1,7 +1,9 @@
{
"name": "@homarr/ping",
- "private": true,
"version": "0.1.0",
+ "private": true,
+ "license": "MIT",
+ "type": "module",
"exports": {
".": "./index.ts"
},
@@ -12,14 +14,13 @@
]
}
},
- "license": "MIT",
- "type": "module",
"scripts": {
"clean": "rm -rf .turbo node_modules",
- "lint": "eslint",
"format": "prettier --check . --ignore-path ../../.gitignore",
+ "lint": "eslint",
"typecheck": "tsc --noEmit"
},
+ "prettier": "@homarr/prettier-config",
"dependencies": {
"@homarr/common": "workspace:^0.1.0",
"@homarr/log": "workspace:^0.1.0"
@@ -30,6 +31,5 @@
"@homarr/tsconfig": "workspace:^0.1.0",
"eslint": "^9.9.1",
"typescript": "^5.5.4"
- },
- "prettier": "@homarr/prettier-config"
+ }
}
diff --git a/packages/redis/package.json b/packages/redis/package.json
index 55f22c3a9..d6de9128d 100644
--- a/packages/redis/package.json
+++ b/packages/redis/package.json
@@ -1,7 +1,9 @@
{
"name": "@homarr/redis",
- "private": true,
"version": "0.1.0",
+ "private": true,
+ "license": "MIT",
+ "type": "module",
"exports": {
".": "./index.ts"
},
@@ -12,21 +14,20 @@
]
}
},
- "license": "MIT",
- "type": "module",
"scripts": {
"clean": "rm -rf .turbo node_modules",
- "lint": "eslint",
"format": "prettier --check . --ignore-path ../../.gitignore",
+ "lint": "eslint",
"typecheck": "tsc --noEmit"
},
+ "prettier": "@homarr/prettier-config",
"dependencies": {
- "ioredis": "5.4.1",
- "superjson": "2.2.1",
- "@homarr/log": "workspace:^",
- "@homarr/db": "workspace:^",
"@homarr/common": "workspace:^",
- "@homarr/definitions": "workspace:^"
+ "@homarr/db": "workspace:^",
+ "@homarr/definitions": "workspace:^",
+ "@homarr/log": "workspace:^",
+ "ioredis": "5.4.1",
+ "superjson": "2.2.1"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
@@ -34,6 +35,5 @@
"@homarr/tsconfig": "workspace:^0.1.0",
"eslint": "^9.9.1",
"typescript": "^5.5.4"
- },
- "prettier": "@homarr/prettier-config"
+ }
}
diff --git a/packages/server-settings/package.json b/packages/server-settings/package.json
index 95d5e7272..b513928b9 100644
--- a/packages/server-settings/package.json
+++ b/packages/server-settings/package.json
@@ -1,7 +1,9 @@
{
"name": "@homarr/server-settings",
- "private": true,
"version": "0.1.0",
+ "private": true,
+ "license": "MIT",
+ "type": "module",
"exports": {
".": "./index.ts"
},
@@ -12,20 +14,18 @@
]
}
},
- "type": "module",
- "license": "MIT",
"scripts": {
"clean": "rm -rf .turbo node_modules",
- "lint": "eslint",
"format": "prettier --check . --ignore-path ../../.gitignore",
+ "lint": "eslint",
"typecheck": "tsc --noEmit"
},
+ "prettier": "@homarr/prettier-config",
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
"eslint": "^9.9.1",
"typescript": "^5.5.4"
- },
- "prettier": "@homarr/prettier-config"
+ }
}
diff --git a/packages/spotlight/package.json b/packages/spotlight/package.json
index 9453fce54..cd58026f6 100644
--- a/packages/spotlight/package.json
+++ b/packages/spotlight/package.json
@@ -1,7 +1,8 @@
{
"name": "@homarr/spotlight",
- "private": true,
"version": "0.1.0",
+ "private": true,
+ "license": "MIT",
"type": "module",
"exports": {
".": "./index.ts",
@@ -14,22 +15,22 @@
]
}
},
- "license": "MIT",
"scripts": {
"clean": "rm -rf .turbo node_modules",
- "lint": "eslint",
"format": "prettier --check . --ignore-path ../../.gitignore",
+ "lint": "eslint",
"typecheck": "tsc --noEmit"
},
+ "prettier": "@homarr/prettier-config",
"dependencies": {
- "@homarr/ui": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0",
+ "@homarr/ui": "workspace:^0.1.0",
"@mantine/core": "^7.12.2",
"@mantine/hooks": "^7.12.2",
"@mantine/spotlight": "^7.12.2",
"@tabler/icons-react": "^3.14.0",
"jotai": "^2.9.3",
- "next": "^14.2.7",
+ "next": "^14.2.8",
"react": "^18.3.1",
"use-deep-compare-effect": "^1.8.1"
},
@@ -39,6 +40,5 @@
"@homarr/tsconfig": "workspace:^0.1.0",
"eslint": "^9.9.1",
"typescript": "^5.5.4"
- },
- "prettier": "@homarr/prettier-config"
+ }
}
diff --git a/packages/translation/package.json b/packages/translation/package.json
index 22418ea26..1afd60b4f 100644
--- a/packages/translation/package.json
+++ b/packages/translation/package.json
@@ -1,7 +1,8 @@
{
"name": "@homarr/translation",
- "private": true,
"version": "0.1.0",
+ "private": true,
+ "license": "MIT",
"type": "module",
"exports": {
".": "./index.ts",
@@ -16,13 +17,13 @@
]
}
},
- "license": "MIT",
"scripts": {
"clean": "rm -rf .turbo node_modules",
- "lint": "eslint",
"format": "prettier --check . --ignore-path ../../.gitignore",
+ "lint": "eslint",
"typecheck": "tsc --noEmit"
},
+ "prettier": "@homarr/prettier-config",
"dependencies": {
"dayjs": "^1.11.13",
"mantine-react-table": "2.0.0-beta.6",
@@ -34,6 +35,5 @@
"@homarr/tsconfig": "workspace:^0.1.0",
"eslint": "^9.9.1",
"typescript": "^5.5.4"
- },
- "prettier": "@homarr/prettier-config"
+ }
}
diff --git a/packages/ui/package.json b/packages/ui/package.json
index 7e954c306..4777dfd96 100644
--- a/packages/ui/package.json
+++ b/packages/ui/package.json
@@ -1,7 +1,8 @@
{
"name": "@homarr/ui",
- "private": true,
"version": "0.1.0",
+ "private": true,
+ "license": "MIT",
"type": "module",
"exports": {
".": "./index.ts",
@@ -15,24 +16,24 @@
]
}
},
- "license": "MIT",
"scripts": {
"clean": "rm -rf .turbo node_modules",
- "lint": "eslint",
"format": "prettier --check . --ignore-path ../../.gitignore",
+ "lint": "eslint",
"typecheck": "tsc --noEmit"
},
+ "prettier": "@homarr/prettier-config",
"dependencies": {
- "@homarr/log": "workspace:^0.1.0",
- "@homarr/validation": "workspace:^0.1.0",
"@homarr/common": "workspace:^0.1.0",
+ "@homarr/log": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0",
+ "@homarr/validation": "workspace:^0.1.0",
"@mantine/core": "^7.12.2",
"@mantine/dates": "^7.12.2",
"@mantine/hooks": "^7.12.2",
"@tabler/icons-react": "^3.14.0",
"mantine-react-table": "2.0.0-beta.6",
- "next": "^14.2.7",
+ "next": "^14.2.8",
"react": "^18.3.1"
},
"devDependencies": {
@@ -42,6 +43,5 @@
"@types/css-modules": "^1.0.5",
"eslint": "^9.9.1",
"typescript": "^5.5.4"
- },
- "prettier": "@homarr/prettier-config"
+ }
}
diff --git a/packages/validation/package.json b/packages/validation/package.json
index b50247501..4e716b625 100644
--- a/packages/validation/package.json
+++ b/packages/validation/package.json
@@ -1,7 +1,8 @@
{
"name": "@homarr/validation",
- "private": true,
"version": "0.1.0",
+ "private": true,
+ "license": "MIT",
"type": "module",
"exports": {
".": "./index.ts",
@@ -14,17 +15,17 @@
]
}
},
- "license": "MIT",
"scripts": {
"clean": "rm -rf .turbo node_modules",
- "lint": "eslint",
"format": "prettier --check . --ignore-path ../../.gitignore",
+ "lint": "eslint",
"typecheck": "tsc --noEmit"
},
+ "prettier": "@homarr/prettier-config",
"dependencies": {
- "zod": "^3.23.8",
"@homarr/definitions": "workspace:^0.1.0",
- "@homarr/translation": "workspace:^0.1.0"
+ "@homarr/translation": "workspace:^0.1.0",
+ "zod": "^3.23.8"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
@@ -32,6 +33,5 @@
"@homarr/tsconfig": "workspace:^0.1.0",
"eslint": "^9.9.1",
"typescript": "^5.5.4"
- },
- "prettier": "@homarr/prettier-config"
+ }
}
diff --git a/packages/validation/src/user.ts b/packages/validation/src/user.ts
index 5d26be3d3..1057265cd 100644
--- a/packages/validation/src/user.ts
+++ b/packages/validation/src/user.ts
@@ -1,7 +1,9 @@
import { z } from "zod";
+import { colorSchemes } from "@homarr/definitions";
import type { TranslationObject } from "@homarr/translation";
+import { zodEnumFromArray } from "./enums";
import { createCustomErrorParams } from "./form/i18n";
const usernameSchema = z.string().min(3).max(255);
@@ -98,6 +100,10 @@ const changeHomeBoardSchema = z.object({
homeBoardId: z.string().min(1),
});
+const changeColorSchemeSchema = z.object({
+ colorScheme: zodEnumFromArray(colorSchemes),
+});
+
export const userSchemas = {
signIn: signInSchema,
registration: registrationSchema,
@@ -109,4 +115,5 @@ export const userSchemas = {
changePassword: changePasswordSchema,
changeHomeBoard: changeHomeBoardSchema,
changePasswordApi: changePasswordApiSchema,
+ changeColorScheme: changeColorSchemeSchema,
};
diff --git a/packages/widgets/package.json b/packages/widgets/package.json
index 3b44765b7..9243dfcb9 100644
--- a/packages/widgets/package.json
+++ b/packages/widgets/package.json
@@ -1,7 +1,8 @@
{
"name": "@homarr/widgets",
- "private": true,
"version": "0.1.0",
+ "private": true,
+ "license": "MIT",
"type": "module",
"exports": {
".": "./index.ts",
@@ -14,13 +15,13 @@
]
}
},
- "license": "MIT",
"scripts": {
"clean": "rm -rf .turbo node_modules",
- "lint": "eslint",
"format": "prettier --check . --ignore-path ../../.gitignore",
+ "lint": "eslint",
"typecheck": "tsc --noEmit"
},
+ "prettier": "@homarr/prettier-config",
"dependencies": {
"@extractus/feed-extractor": "^7.1.3",
"@homarr/api": "workspace:^0.1.0",
@@ -35,8 +36,8 @@
"@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
- "@mantine/hooks": "^7.12.2",
"@mantine/core": "^7.12.2",
+ "@mantine/hooks": "^7.12.2",
"@tabler/icons-react": "^3.14.0",
"@tiptap/extension-color": "2.6.6",
"@tiptap/extension-highlight": "2.6.6",
@@ -55,8 +56,8 @@
"@tiptap/starter-kit": "^2.6.6",
"clsx": "^2.1.1",
"dayjs": "^1.11.13",
- "next": "^14.2.7",
"mantine-react-table": "2.0.0-beta.6",
+ "next": "^14.2.8",
"react": "^18.3.1",
"video.js": "^8.17.3"
},
@@ -67,6 +68,5 @@
"@types/video.js": "^7.3.58",
"eslint": "^9.9.1",
"typescript": "^5.5.4"
- },
- "prettier": "@homarr/prettier-config"
+ }
}
diff --git a/packages/widgets/src/dns-hole/controls/component.tsx b/packages/widgets/src/dns-hole/controls/component.tsx
index 0859dc728..dd13969c3 100644
--- a/packages/widgets/src/dns-hole/controls/component.tsx
+++ b/packages/widgets/src/dns-hole/controls/component.tsx
@@ -1,7 +1,7 @@
"use client";
import { useEffect, useState } from "react";
-import { ActionIcon, Badge, Box, Button, Card, Flex, Image, Stack, Text, Tooltip, UnstyledButton } from "@mantine/core";
+import { ActionIcon, Badge, Button, Card, Flex, Image, Stack, Text, Tooltip, UnstyledButton } from "@mantine/core";
import { useDisclosure } from "@mantine/hooks";
import { IconClockPause, IconPlayerPlay, IconPlayerStop } from "@tabler/icons-react";
@@ -76,7 +76,7 @@ export default function DnsHoleControlsWidget({ options, integrationIds }: Widge
return (
{options.showToggleAllButtons && (
-
+
)}
-
+
{data.map((integrationData) => (
= ({
return (
-
-
-
-
-
+
+
+
{integrationDef.name}
toggleDns(integrationId)}>
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 36f82dbc7..7aea20e2f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -17,14 +17,14 @@ importers:
specifier: workspace:^0.1.0
version: link:tooling/prettier
'@turbo/gen':
- specifier: ^2.1.0
- version: 2.1.0(@types/node@20.16.2)(typescript@5.5.4)
+ specifier: ^2.1.1
+ version: 2.1.1(@types/node@20.16.5)(typescript@5.5.4)
'@vitejs/plugin-react':
specifier: ^4.3.1
- version: 4.3.1(vite@5.2.11(@types/node@20.16.2)(sass@1.77.8)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0))
+ version: 4.3.1(vite@5.2.11(@types/node@20.16.5)(sass@1.78.0)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0))
'@vitest/coverage-v8':
specifier: ^2.0.5
- version: 2.0.5(vitest@2.0.5(@types/node@20.16.2)(@vitest/ui@2.0.5)(jsdom@25.0.0)(sass@1.77.8)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0))
+ version: 2.0.5(vitest@2.0.5(@types/node@20.16.5)(@vitest/ui@2.0.5)(jsdom@25.0.0)(sass@1.78.0)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0))
'@vitest/ui':
specifier: ^2.0.5
version: 2.0.5(vitest@2.0.5)
@@ -38,20 +38,20 @@ importers:
specifier: ^3.3.3
version: 3.3.3
testcontainers:
- specifier: ^10.12.0
- version: 10.12.0
+ specifier: ^10.13.0
+ version: 10.13.0
turbo:
- specifier: ^2.1.0
- version: 2.1.0
+ specifier: ^2.1.1
+ version: 2.1.1
typescript:
specifier: ^5.5.4
version: 5.5.4
vite-tsconfig-paths:
specifier: ^5.0.1
- version: 5.0.1(typescript@5.5.4)(vite@5.2.11(@types/node@20.16.2)(sass@1.77.8)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0))
+ version: 5.0.1(typescript@5.5.4)(vite@5.2.11(@types/node@20.16.5)(sass@1.78.0)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0))
vitest:
specifier: ^2.0.5
- version: 2.0.5(@types/node@20.16.2)(@vitest/ui@2.0.5)(jsdom@25.0.0)(sass@1.77.8)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0)
+ version: 2.0.5(@types/node@20.16.5)(@vitest/ui@2.0.5)(jsdom@25.0.0)(sass@1.78.0)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0)
apps/nextjs:
dependencies:
@@ -137,26 +137,26 @@ importers:
specifier: ^3.14.0
version: 3.14.0(react@18.3.1)
'@tanstack/react-query':
- specifier: ^5.53.1
- version: 5.53.1(react@18.3.1)
+ specifier: ^5.55.0
+ version: 5.55.0(react@18.3.1)
'@tanstack/react-query-devtools':
- specifier: ^5.53.1
- version: 5.53.1(@tanstack/react-query@5.53.1(react@18.3.1))(react@18.3.1)
+ specifier: ^5.55.0
+ version: 5.55.0(@tanstack/react-query@5.55.0(react@18.3.1))(react@18.3.1)
'@tanstack/react-query-next-experimental':
- specifier: 5.53.1
- version: 5.53.1(@tanstack/react-query@5.53.1(react@18.3.1))(next@14.2.7(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(react@18.3.1)
+ specifier: 5.55.0
+ version: 5.55.0(@tanstack/react-query@5.55.0(react@18.3.1))(next@14.2.8(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.78.0))(react@18.3.1)
'@trpc/client':
specifier: next
- version: 11.0.0-rc.490(@trpc/server@11.0.0-rc.490)
+ version: 11.0.0-rc.498(@trpc/server@11.0.0-rc.498)
'@trpc/next':
specifier: next
- version: 11.0.0-rc.490(@tanstack/react-query@5.53.1(react@18.3.1))(@trpc/client@11.0.0-rc.490(@trpc/server@11.0.0-rc.490))(@trpc/react-query@11.0.0-rc.490(@tanstack/react-query@5.53.1(react@18.3.1))(@trpc/client@11.0.0-rc.490(@trpc/server@11.0.0-rc.490))(@trpc/server@11.0.0-rc.490)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@11.0.0-rc.490)(next@14.2.7(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 11.0.0-rc.498(@tanstack/react-query@5.55.0(react@18.3.1))(@trpc/client@11.0.0-rc.498(@trpc/server@11.0.0-rc.498))(@trpc/react-query@11.0.0-rc.498(@tanstack/react-query@5.55.0(react@18.3.1))(@trpc/client@11.0.0-rc.498(@trpc/server@11.0.0-rc.498))(@trpc/server@11.0.0-rc.498)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@11.0.0-rc.498)(next@14.2.8(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.78.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@trpc/react-query':
specifier: next
- version: 11.0.0-rc.490(@tanstack/react-query@5.53.1(react@18.3.1))(@trpc/client@11.0.0-rc.490(@trpc/server@11.0.0-rc.490))(@trpc/server@11.0.0-rc.490)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 11.0.0-rc.498(@tanstack/react-query@5.55.0(react@18.3.1))(@trpc/client@11.0.0-rc.498(@trpc/server@11.0.0-rc.498))(@trpc/server@11.0.0-rc.498)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@trpc/server':
specifier: next
- version: 11.0.0-rc.490
+ version: 11.0.0-rc.498
'@xterm/addon-canvas':
specifier: ^0.7.0
version: 0.7.0(@xterm/xterm@5.5.0)
@@ -191,8 +191,8 @@ importers:
specifier: 2.0.0-beta.6
version: 2.0.0-beta.6(@mantine/core@7.12.2(@mantine/hooks@7.12.2(react@18.3.1))(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/dates@7.12.2(@mantine/core@7.12.2(@mantine/hooks@7.12.2(react@18.3.1))(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.12.2(react@18.3.1))(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.12.2(react@18.3.1))(@tabler/icons-react@3.14.0(react@18.3.1))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
next:
- specifier: ^14.2.7
- version: 14.2.7(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8)
+ specifier: ^14.2.8
+ version: 14.2.8(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.78.0)
postcss-preset-mantine:
specifier: ^1.17.0
version: 1.17.0(postcss@8.4.38)
@@ -212,8 +212,8 @@ importers:
specifier: ^0.14.1
version: 0.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
sass:
- specifier: ^1.77.8
- version: 1.77.8
+ specifier: ^1.78.0
+ version: 1.78.0
superjson:
specifier: 2.2.1
version: 2.2.1
@@ -237,8 +237,8 @@ importers:
specifier: 2.4.4
version: 2.4.4
'@types/node':
- specifier: ^20.16.2
- version: 20.16.2
+ specifier: ^20.16.5
+ version: 20.16.5
'@types/prismjs':
specifier: ^1.26.4
version: 1.26.4
@@ -337,8 +337,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../../tooling/typescript
'@types/node':
- specifier: ^20.16.2
- version: 20.16.2
+ specifier: ^20.16.5
+ version: 20.16.5
dotenv-cli:
specifier: ^7.4.2
version: 7.4.2
@@ -490,19 +490,19 @@ importers:
version: link:../validation
'@trpc/client':
specifier: next
- version: 11.0.0-rc.490(@trpc/server@11.0.0-rc.490)
+ version: 11.0.0-rc.498(@trpc/server@11.0.0-rc.498)
'@trpc/react-query':
specifier: next
- version: 11.0.0-rc.490(@tanstack/react-query@5.53.1(react@18.3.1))(@trpc/client@11.0.0-rc.490(@trpc/server@11.0.0-rc.490))(@trpc/server@11.0.0-rc.490)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 11.0.0-rc.498(@tanstack/react-query@5.55.0(react@18.3.1))(@trpc/client@11.0.0-rc.498(@trpc/server@11.0.0-rc.498))(@trpc/server@11.0.0-rc.498)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@trpc/server':
specifier: next
- version: 11.0.0-rc.490
+ version: 11.0.0-rc.498
dockerode:
specifier: ^4.0.2
version: 4.0.2
next:
- specifier: ^14.2.7
- version: 14.2.7(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8)
+ specifier: ^14.2.8
+ version: 14.2.8(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.78.0)
react:
specifier: ^18.3.1
version: 18.3.1
@@ -511,7 +511,7 @@ importers:
version: 2.2.1
trpc-swagger:
specifier: ^1.2.6
- version: 1.2.6(patch_hash=6s72z7zx33c52iesv5sewipn6i)(@trpc/client@11.0.0-rc.490(@trpc/server@11.0.0-rc.490))(@trpc/server@11.0.0-rc.490)(zod@3.23.8)
+ version: 1.2.6(patch_hash=6s72z7zx33c52iesv5sewipn6i)(@trpc/client@11.0.0-rc.498(@trpc/server@11.0.0-rc.498))(@trpc/server@11.0.0-rc.498)(zod@3.23.8)
devDependencies:
'@homarr/eslint-config':
specifier: workspace:^0.2.0
@@ -571,11 +571,11 @@ importers:
specifier: 7.1.1
version: 7.1.1
next:
- specifier: ^14.2.7
- version: 14.2.7(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8)
+ specifier: ^14.2.8
+ version: 14.2.8(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.78.0)
next-auth:
specifier: 5.0.0-beta.20
- version: 5.0.0-beta.20(next@14.2.7(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(react@18.3.1)
+ version: 5.0.0-beta.20(next@14.2.8(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.78.0))(react@18.3.1)
react:
specifier: ^18.3.1
version: 18.3.1
@@ -648,14 +648,14 @@ importers:
specifier: ^1.11.13
version: 1.11.13
next:
- specifier: ^14.2.7
- version: 14.2.7(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8)
+ specifier: ^14.2.8
+ version: 14.2.8(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.78.0)
react:
specifier: ^18.3.1
version: 18.3.1
tldts:
- specifier: ^6.1.41
- version: 6.1.41
+ specifier: ^6.1.42
+ version: 6.1.42
devDependencies:
'@homarr/eslint-config':
specifier: workspace:^0.2.0
@@ -1176,8 +1176,8 @@ importers:
specifier: ^2.9.3
version: 2.9.3(@types/react@18.3.5)(react@18.3.1)
next:
- specifier: ^14.2.7
- version: 14.2.7(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8)
+ specifier: ^14.2.8
+ version: 14.2.8(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.78.0)
react:
specifier: ^18.3.1
version: 18.3.1
@@ -1259,8 +1259,8 @@ importers:
specifier: 2.0.0-beta.6
version: 2.0.0-beta.6(@mantine/core@7.12.2(@mantine/hooks@7.12.2(react@18.3.1))(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/dates@7.12.2(@mantine/core@7.12.2(@mantine/hooks@7.12.2(react@18.3.1))(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.12.2(react@18.3.1))(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.12.2(react@18.3.1))(@tabler/icons-react@3.14.0(react@18.3.1))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
next:
- specifier: ^14.2.7
- version: 14.2.7(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8)
+ specifier: ^14.2.8
+ version: 14.2.8(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.78.0)
react:
specifier: ^18.3.1
version: 18.3.1
@@ -1417,8 +1417,8 @@ importers:
specifier: 2.0.0-beta.6
version: 2.0.0-beta.6(@mantine/core@7.12.2(@mantine/hooks@7.12.2(react@18.3.1))(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/dates@7.12.2(@mantine/core@7.12.2(@mantine/hooks@7.12.2(react@18.3.1))(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.12.2(react@18.3.1))(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.12.2(react@18.3.1))(@tabler/icons-react@3.14.0(react@18.3.1))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
next:
- specifier: ^14.2.7
- version: 14.2.7(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8)
+ specifier: ^14.2.8
+ version: 14.2.8(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.78.0)
react:
specifier: ^18.3.1
version: 18.3.1
@@ -1448,29 +1448,29 @@ importers:
tooling/eslint:
dependencies:
'@next/eslint-plugin-next':
- specifier: ^14.2.7
- version: 14.2.7
+ specifier: ^14.2.8
+ version: 14.2.8
eslint-config-prettier:
specifier: ^9.1.0
version: 9.1.0(eslint@9.9.1)
eslint-config-turbo:
- specifier: ^2.1.0
- version: 2.1.0(eslint@9.9.1)
+ specifier: ^2.1.1
+ version: 2.1.1(eslint@9.9.1)
eslint-plugin-import:
- specifier: ^2.29.1
- version: 2.29.1(@typescript-eslint/parser@8.3.0(eslint@9.9.1)(typescript@5.5.4))(eslint@9.9.1)
+ specifier: ^2.30.0
+ version: 2.30.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1)(typescript@5.5.4))(eslint@9.9.1)
eslint-plugin-jsx-a11y:
- specifier: ^6.9.0
- version: 6.9.0(eslint@9.9.1)
+ specifier: ^6.10.0
+ version: 6.10.0(eslint@9.9.1)
eslint-plugin-react:
- specifier: ^7.35.0
- version: 7.35.0(eslint@9.9.1)
+ specifier: ^7.35.2
+ version: 7.35.2(eslint@9.9.1)
eslint-plugin-react-hooks:
specifier: ^4.6.2
version: 4.6.2(eslint@9.9.1)
typescript-eslint:
- specifier: ^8.3.0
- version: 8.3.0(eslint@9.9.1)(typescript@5.5.4)
+ specifier: ^8.4.0
+ version: 8.4.0(eslint@9.9.1)(typescript@5.5.4)
devDependencies:
'@homarr/prettier-config':
specifier: workspace:^0.1.0
@@ -2298,62 +2298,62 @@ packages:
resolution: {integrity: sha512-wtxyxMPAJNoX66LQMy/elx0JfikYD62zflc0q4LngQHGiCKmwgncTg9MebsPUtsBikGY1Aom28hKmhq1T51V/w==}
hasBin: true
- '@next/env@14.2.7':
- resolution: {integrity: sha512-OTx9y6I3xE/eih+qtthppwLytmpJVPM5PPoJxChFsbjIEFXIayG0h/xLzefHGJviAa3Q5+Fd+9uYojKkHDKxoQ==}
+ '@next/env@14.2.8':
+ resolution: {integrity: sha512-L44a+ynqkolyNBnYfF8VoCiSrjSZWgEHYKkKLGcs/a80qh7AkfVUD/MduVPgdsWZ31tgROR+yJRA0PZjSVBXWQ==}
- '@next/eslint-plugin-next@14.2.7':
- resolution: {integrity: sha512-+7xh142AdhZGjY9/L0iFo7mqRBMJHe+q+uOL+hto1Lfo9DeWCGcR6no4StlFbVSVcA6fQLKEX6y6qhMsSKbgNQ==}
+ '@next/eslint-plugin-next@14.2.8':
+ resolution: {integrity: sha512-ue5vcq9Fjk3asACRDrzYjcGMEN7pMMDQ5zUD+FenkqvlPCVUD1x7PxBNOLfPYDZOrk/Vnl4GHmjj2mZDqPW8TQ==}
- '@next/swc-darwin-arm64@14.2.7':
- resolution: {integrity: sha512-UhZGcOyI9LE/tZL3h9rs/2wMZaaJKwnpAyegUVDGZqwsla6hMfeSj9ssBWQS9yA4UXun3pPhrFLVnw5KXZs3vw==}
+ '@next/swc-darwin-arm64@14.2.8':
+ resolution: {integrity: sha512-1VrQlG8OzdyvvGZhGJFnaNE2P10Jjy/2FopnqbY0nSa/gr8If3iINxvOEW3cmVeoAYkmW0RsBazQecA2dBFOSw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
- '@next/swc-darwin-x64@14.2.7':
- resolution: {integrity: sha512-ys2cUgZYRc+CbyDeLAaAdZgS7N1Kpyy+wo0b/gAj+SeOeaj0Lw/q+G1hp+DuDiDAVyxLBCJXEY/AkhDmtihUTA==}
+ '@next/swc-darwin-x64@14.2.8':
+ resolution: {integrity: sha512-87t3I86rNRSOJB1gXIUzaQWWSWrkWPDyZGsR0Z7JAPtLeX3uUOW2fHxl7dNWD2BZvbvftctTQjgtfpp7nMtmWg==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
- '@next/swc-linux-arm64-gnu@14.2.7':
- resolution: {integrity: sha512-2xoWtE13sUJ3qrC1lwE/HjbDPm+kBQYFkkiVECJWctRASAHQ+NwjMzgrfqqMYHfMxFb5Wws3w9PqzZJqKFdWcQ==}
+ '@next/swc-linux-arm64-gnu@14.2.8':
+ resolution: {integrity: sha512-ta2sfVzbOpTbgBrF9HM5m+U58dv6QPuwU4n5EX4LLyCJGKc433Z0D9h9gay/HSOjLEXJ2fJYrMP5JYYbHdxhtw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- '@next/swc-linux-arm64-musl@14.2.7':
- resolution: {integrity: sha512-+zJ1gJdl35BSAGpkCbfyiY6iRTaPrt3KTl4SF/B1NyELkqqnrNX6cp4IjjjxKpd64/7enI0kf6b9O1Uf3cL0pw==}
+ '@next/swc-linux-arm64-musl@14.2.8':
+ resolution: {integrity: sha512-+IoLTPK6Z5uIgDhgeWnQF5/o5GBN7+zyUNrs4Bes1W3g9++YELb8y0unFybS8s87ntAKMDl6jeQ+mD7oNwp/Ng==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- '@next/swc-linux-x64-gnu@14.2.7':
- resolution: {integrity: sha512-m6EBqrskeMUzykBrv0fDX/28lWIBGhMzOYaStp0ihkjzIYJiKUOzVYD1gULHc8XDf5EMSqoH/0/TRAgXqpQwmw==}
+ '@next/swc-linux-x64-gnu@14.2.8':
+ resolution: {integrity: sha512-pO+hVXC+mvzUOQJJRG4RX4wJsRJ5BkURSf6dD6EjUXAX4Ml9es1WsEfkaZ4lcpmFzFvY47IkDaffks/GdCn9ag==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- '@next/swc-linux-x64-musl@14.2.7':
- resolution: {integrity: sha512-gUu0viOMvMlzFRz1r1eQ7Ql4OE+hPOmA7smfZAhn8vC4+0swMZaZxa9CSIozTYavi+bJNDZ3tgiSdMjmMzRJlQ==}
+ '@next/swc-linux-x64-musl@14.2.8':
+ resolution: {integrity: sha512-bCat9izctychCtf3uL1nqHq31N5e1VxvdyNcBQflkudPMLbxVnlrw45Vi87K+lt1CwrtVayHqzo4ie0Szcpwzg==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- '@next/swc-win32-arm64-msvc@14.2.7':
- resolution: {integrity: sha512-PGbONHIVIuzWlYmLvuFKcj+8jXnLbx4WrlESYlVnEzDsa3+Q2hI1YHoXaSmbq0k4ZwZ7J6sWNV4UZfx1OeOlbQ==}
+ '@next/swc-win32-arm64-msvc@14.2.8':
+ resolution: {integrity: sha512-gbxfUaSPV7EyUobpavida2Hwi62GhSJaSg7iBjmBWoxkxlmETOD7U4tWt763cGIsyE6jM7IoNavq0BXqwdW2QA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
- '@next/swc-win32-ia32-msvc@14.2.7':
- resolution: {integrity: sha512-BiSY5umlx9ed5RQDoHcdbuKTUkuFORDqzYKPHlLeS+STUWQKWziVOn3Ic41LuTBvqE0TRJPKpio9GSIblNR+0w==}
+ '@next/swc-win32-ia32-msvc@14.2.8':
+ resolution: {integrity: sha512-PUXzEzjTTlUh3b5VAn1nlpwvujTnuCMMwbiCnaTazoVlN1nA3kWjlmp42IfURA2N/nyrlVEw7pURa/o4Qxj1cw==}
engines: {node: '>= 10'}
cpu: [ia32]
os: [win32]
- '@next/swc-win32-x64-msvc@14.2.7':
- resolution: {integrity: sha512-pxsI23gKWRt/SPHFkDEsP+w+Nd7gK37Hpv0ngc5HpWy2e7cKx9zR/+Q2ptAUqICNTecAaGWvmhway7pj/JLEWA==}
+ '@next/swc-win32-x64-msvc@14.2.8':
+ resolution: {integrity: sha512-EnPKv0ttq02E9/1KZ/8Dn7kuutv6hy1CKc0HlNcvzOQcm4/SQtvfws5gY0zrG9tuupd3HfC2L/zcTrnBhpjTuQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
@@ -2506,6 +2506,9 @@ packages:
'@rrweb/types@2.0.0-alpha.16':
resolution: {integrity: sha512-E6cACNVsm+NUhn7dzocQoKyXI7BHrHRRm5Ab23yrAzEQ2caWocCEYJhqDlc4KRVJBkQfXZfyWm8+2d0uggFuZg==}
+ '@rtsao/scc@1.1.0':
+ resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
+
'@socket.io/component-emitter@3.1.2':
resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==}
@@ -2629,27 +2632,27 @@ packages:
resolution: {integrity: sha512-PnVV3d2poenUM31ZbZi/yXkBu3J7kd5k2u51CGwwNojag451AjTH9N6n41yjXz2fpLeewleyLBmNS6+HcGDlXw==}
engines: {node: '>=12'}
- '@tanstack/query-core@5.53.1':
- resolution: {integrity: sha512-mvLG7s4Zy3Yvc2LsKm8BVafbmPrsReKgqwhmp4XKVmRW9us3KbWRqu3qBBfhVavcUUEHfNK7PvpTchvQpVdFpw==}
+ '@tanstack/query-core@5.54.1':
+ resolution: {integrity: sha512-hKS+WRpT5zBFip21pB6Jx1C0hranWQrbv5EJ7qPoiV5MYI3C8rTCqWC9DdBseiPT1JgQWh8Y55YthuYZNiw3Xw==}
- '@tanstack/query-devtools@5.52.3':
- resolution: {integrity: sha512-oGX9qJuNpr4vOQyeksqHr+FgLQGs5UooK87R1wTtcsUUdrRKGSgs3cBllZMtWBJxg+yVvg0TlHNGYLMjvqX3GA==}
+ '@tanstack/query-devtools@5.54.0':
+ resolution: {integrity: sha512-B8Sa6mh7/4m2fyk2/YnUXeOZ1/us7G/C/i1It8YcCbieXc8vf1AdSYjR+mZIoJeKOKLqA741hZqfj8d4F1NCVg==}
- '@tanstack/react-query-devtools@5.53.1':
- resolution: {integrity: sha512-AjShRLM3/9Rglgeo0X52M8MKPEvcNnFQvs3yZq8ExQWu8YhZMzqVsFVn4PqOeyEHbnsRS2bmi0jPP/tBrlWU0A==}
+ '@tanstack/react-query-devtools@5.55.0':
+ resolution: {integrity: sha512-omUloSS7Ru+LNmXeK56ygtAgMXMR5M74v8kn4lRjMkjT/aTJHWGI2yJh0I1EE1a8tjwXyviqy+qWfJaeqQcTIA==}
peerDependencies:
- '@tanstack/react-query': ^5.53.1
+ '@tanstack/react-query': ^5.55.0
react: ^18 || ^19
- '@tanstack/react-query-next-experimental@5.53.1':
- resolution: {integrity: sha512-EmvJSE6JH6NnE9wX8FzY5PmnaJnyELTAcS9mxOvGOZJttZmLS+E8l8cdQZQToTzniXzeHCoQjvpuABETfgi4ng==}
+ '@tanstack/react-query-next-experimental@5.55.0':
+ resolution: {integrity: sha512-AKVc7ZkG/yomgWVFP0cr53a8DOlvu7Ig5sC0IUjghzoE0AfDCSSi/bn1kOCRqXSluUrA6RDUyp8MlCDFlvEseg==}
peerDependencies:
- '@tanstack/react-query': ^5.53.1
+ '@tanstack/react-query': ^5.55.0
next: ^13 || ^14 || ^15
react: ^18 || ^19
- '@tanstack/react-query@5.53.1':
- resolution: {integrity: sha512-35HU4836Ey1/W74BxmS8p9KHXcDRGPdkw6w3VX0Tc5S9v5acFl80oi/yc6nsmoLhu68wQkWMyX0h7y7cOtY5OA==}
+ '@tanstack/react-query@5.55.0':
+ resolution: {integrity: sha512-2uYuxEbRQD8TORUiTUacEOwt1e8aoSqUOJFGY5TUrh6rQ3U85zrMS2wvbNhBhXGh6Vj69QDCP2yv8tIY7joo6Q==}
peerDependencies:
react: ^18 || ^19
@@ -2871,18 +2874,18 @@ packages:
'@tootallnate/quickjs-emscripten@0.23.0':
resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==}
- '@trpc/client@11.0.0-rc.490':
- resolution: {integrity: sha512-rfAzHF27osuP36JWGzq9TgXMnNc5kk1oAIoMafVHkCu3XlEZH3Ym2BpucHBWp/b5JYrtvzM91jskzvE0yO3mYw==}
+ '@trpc/client@11.0.0-rc.498':
+ resolution: {integrity: sha512-a1VjvLHCo8gPENMfzI8lVF1ys6kOGI3f/cIAZUMB0d2TlkDERlFYANnSnzFvmiKy6ICh3lsQQ3OIMmIfyd8OtQ==}
peerDependencies:
- '@trpc/server': 11.0.0-rc.490+b6a851870
+ '@trpc/server': 11.0.0-rc.498+5714423cc
- '@trpc/next@11.0.0-rc.490':
- resolution: {integrity: sha512-ie0adjNr78ZvuBCaRL5Yr3u98TUo61ASVPBOgdYNx6/S2XLEUpL7nhY0VHNjSrnh3Ng8IzpdKM4uJsqHvnCFVg==}
+ '@trpc/next@11.0.0-rc.498':
+ resolution: {integrity: sha512-GoaRReGOd949aZbzJI8xv+QFcLUpp7+BOw5NdgLjEk47Nin2TcLl19Tk8JhXImFzwDLF8JQFrHvk91mnb6ka0Q==}
peerDependencies:
'@tanstack/react-query': ^5.49.2
- '@trpc/client': 11.0.0-rc.490+b6a851870
- '@trpc/react-query': 11.0.0-rc.490+b6a851870
- '@trpc/server': 11.0.0-rc.490+b6a851870
+ '@trpc/client': 11.0.0-rc.498+5714423cc
+ '@trpc/react-query': 11.0.0-rc.498+5714423cc
+ '@trpc/server': 11.0.0-rc.498+5714423cc
next: '*'
react: '>=16.8.0'
react-dom: '>=16.8.0'
@@ -2892,17 +2895,17 @@ packages:
'@trpc/react-query':
optional: true
- '@trpc/react-query@11.0.0-rc.490':
- resolution: {integrity: sha512-sM1AlLA5JPjsTRZJmXieAcbxHQXx+TGg1WTpyCAlBAue9rXGu9FoydfYxhpVcSrSbzdZ5HRmg/cXnC77/O7nBg==}
+ '@trpc/react-query@11.0.0-rc.498':
+ resolution: {integrity: sha512-il/fgO9DSTHmrJbDInGNl8PymLo19CEfIjBXmerTm4hg/p438fQb4ZKDVbpBxEThgAaaP6D0HTELWn5VDWG3VQ==}
peerDependencies:
'@tanstack/react-query': ^5.49.2
- '@trpc/client': 11.0.0-rc.490+b6a851870
- '@trpc/server': 11.0.0-rc.490+b6a851870
+ '@trpc/client': 11.0.0-rc.498+5714423cc
+ '@trpc/server': 11.0.0-rc.498+5714423cc
react: '>=18.2.0'
react-dom: '>=18.2.0'
- '@trpc/server@11.0.0-rc.490':
- resolution: {integrity: sha512-JkKLvA0QIErqslsgU6uFvpv9xtxe78C59zqUdZFmUI0V9pIAJlxmODV4I9hTDcX8P+B30rP3z+q2+bPozN2MaQ==}
+ '@trpc/server@11.0.0-rc.498':
+ resolution: {integrity: sha512-LECCOz8JNB67CBasPA6fkLbhJIbUQRP1wq02xUfUMeaSEZFWJL+7fcTgLaWFQSHMMnMsvkLuDuDDkUSCF2SXmg==}
'@tsconfig/node10@1.0.11':
resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
@@ -2919,12 +2922,12 @@ packages:
'@tsconfig/svelte@1.0.13':
resolution: {integrity: sha512-5lYJP45Xllo4yE/RUBccBT32eBlRDbqN8r1/MIvQbKxW3aFqaYPCNgm8D5V20X4ShHcwvYWNlKg3liDh1MlBoA==}
- '@turbo/gen@2.1.0':
- resolution: {integrity: sha512-R7T8qU/J1pDk0MBpmsFLpLIERyh6NNHfdUP747RkSP7jv9gcIpRQ2Wl1fIXpbBmXqckV8QW+4laRvoq49jMM6g==}
+ '@turbo/gen@2.1.1':
+ resolution: {integrity: sha512-IaC8k3u/00giD3WjEy81Zwj8CFZJCrSf7sCA8gdug76C2DUm79CdAQ+tImR3KOMwnefIP0LH1NSPtREMKi59zQ==}
hasBin: true
- '@turbo/workspaces@2.1.0':
- resolution: {integrity: sha512-WRvfzUJRjnqLOjELSddM/3dc/ah9aXtUSYf4BK9PxKlwmtbDrgluLho3vMkiO1zcPF7N8bg7EeJKxZcmcBHw3A==}
+ '@turbo/workspaces@2.1.1':
+ resolution: {integrity: sha512-E9tnNIBRC09IjM521TaExmHUBo26qT41OCSgFpg2FdmLiobqxG2G2hzmdbDFC7QwcVifVF9FD/3gRtDqRqDj5g==}
hasBin: true
'@types/asn1@0.2.4':
@@ -3023,8 +3026,8 @@ packages:
'@types/node@18.19.33':
resolution: {integrity: sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A==}
- '@types/node@20.16.2':
- resolution: {integrity: sha512-91s/n4qUPV/wg8eE9KHYW1kouTfDk2FPGjXbBMfRWP/2vg1rCXNQL1OCabwGs0XSdukuK+MwCDXE30QpSeMUhQ==}
+ '@types/node@20.16.5':
+ resolution: {integrity: sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==}
'@types/prismjs@1.26.4':
resolution: {integrity: sha512-rlAnzkW2sZOjbqZ743IHUhFcvzaGbqijwOu8QZnZCjfQzBqFE3s4lOTJEsxikImav9uzz/42I+O7YUs1mWgMlg==}
@@ -3089,8 +3092,8 @@ packages:
'@types/ws@8.5.12':
resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
- '@typescript-eslint/eslint-plugin@8.3.0':
- resolution: {integrity: sha512-FLAIn63G5KH+adZosDYiutqkOkYEx0nvcwNNfJAf+c7Ae/H35qWwTYvPZUKFj5AS+WfHG/WJJfWnDnyNUlp8UA==}
+ '@typescript-eslint/eslint-plugin@8.4.0':
+ resolution: {integrity: sha512-rg8LGdv7ri3oAlenMACk9e+AR4wUV0yrrG+XKsGKOK0EVgeEDqurkXMPILG2836fW4ibokTB5v4b6Z9+GYQDEw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
@@ -3100,8 +3103,8 @@ packages:
typescript:
optional: true
- '@typescript-eslint/parser@8.3.0':
- resolution: {integrity: sha512-h53RhVyLu6AtpUzVCYLPhZGL5jzTD9fZL+SYf/+hYOx2bDkyQXztXSc4tbvKYHzfMXExMLiL9CWqJmVz6+78IQ==}
+ '@typescript-eslint/parser@8.4.0':
+ resolution: {integrity: sha512-NHgWmKSgJk5K9N16GIhQ4jSobBoJwrmURaLErad0qlLjrpP5bECYg+wxVTGlGZmJbU03jj/dfnb6V9bw+5icsA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -3110,12 +3113,12 @@ packages:
typescript:
optional: true
- '@typescript-eslint/scope-manager@8.3.0':
- resolution: {integrity: sha512-mz2X8WcN2nVu5Hodku+IR8GgCOl4C0G/Z1ruaWN4dgec64kDBabuXyPAr+/RgJtumv8EEkqIzf3X2U5DUKB2eg==}
+ '@typescript-eslint/scope-manager@8.4.0':
+ resolution: {integrity: sha512-n2jFxLeY0JmKfUqy3P70rs6vdoPjHK8P/w+zJcV3fk0b0BwRXC/zxRTEnAsgYT7MwdQDt/ZEbtdzdVC+hcpF0A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/type-utils@8.3.0':
- resolution: {integrity: sha512-wrV6qh//nLbfXZQoj32EXKmwHf4b7L+xXLrP3FZ0GOUU72gSvLjeWUl5J5Ue5IwRxIV1TfF73j/eaBapxx99Lg==}
+ '@typescript-eslint/type-utils@8.4.0':
+ resolution: {integrity: sha512-pu2PAmNrl9KX6TtirVOrbLPLwDmASpZhK/XU7WvoKoCUkdtq9zF7qQ7gna0GBZFN0hci0vHaSusiL2WpsQk37A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '*'
@@ -3123,12 +3126,12 @@ packages:
typescript:
optional: true
- '@typescript-eslint/types@8.3.0':
- resolution: {integrity: sha512-y6sSEeK+facMaAyixM36dQ5NVXTnKWunfD1Ft4xraYqxP0lC0POJmIaL/mw72CUMqjY9qfyVfXafMeaUj0noWw==}
+ '@typescript-eslint/types@8.4.0':
+ resolution: {integrity: sha512-T1RB3KQdskh9t3v/qv7niK6P8yvn7ja1mS7QK7XfRVL6wtZ8/mFs/FHf4fKvTA0rKnqnYxl/uHFNbnEt0phgbw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/typescript-estree@8.3.0':
- resolution: {integrity: sha512-Mq7FTHl0R36EmWlCJWojIC1qn/ZWo2YiWYc1XVtasJ7FIgjo0MVv9rZWXEE7IK2CGrtwe1dVOxWwqXUdNgfRCA==}
+ '@typescript-eslint/typescript-estree@8.4.0':
+ resolution: {integrity: sha512-kJ2OIP4dQw5gdI4uXsaxUZHRwWAGpREJ9Zq6D5L0BweyOrWsL6Sz0YcAZGWhvKnH7fm1J5YFE1JrQL0c9dd53A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '*'
@@ -3136,14 +3139,14 @@ packages:
typescript:
optional: true
- '@typescript-eslint/utils@8.3.0':
- resolution: {integrity: sha512-F77WwqxIi/qGkIGOGXNBLV7nykwfjLsdauRB/DOFPdv6LTF3BHHkBpq81/b5iMPSF055oO2BiivDJV4ChvNtXA==}
+ '@typescript-eslint/utils@8.4.0':
+ resolution: {integrity: sha512-swULW8n1IKLjRAgciCkTCafyTHHfwVQFt8DovmaF69sKbOxTSFMmIZaSHjqO9i/RV0wIblaawhzvtva8Nmm7lQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
- '@typescript-eslint/visitor-keys@8.3.0':
- resolution: {integrity: sha512-RmZwrTbQ9QveF15m/Cl28n0LXD6ea2CjkhH5rQ55ewz3H24w+AMCJHPVYaZ8/0HoG8Z3cLLFFycRXxeO2tz9FA==}
+ '@typescript-eslint/visitor-keys@8.4.0':
+ resolution: {integrity: sha512-zTQD6WLNTre1hj5wp09nBIDiOc2U5r/qmzo7wxPn4ZgAjHql09EofqhF9WF+fZHzL5aCyaIpPcT2hyxl73kr9A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@umami/node@0.4.0':
@@ -3471,15 +3474,16 @@ packages:
resolution: {integrity: sha512-+H+kuK34PfMaI9PNU/NSjBKL5hh/KDM9J72kwYeYEm0A8B1AC4fuCy3qsjnA7lxklgyXsB68yn8Z2xoZEjgwCQ==}
engines: {node: '>= 6.0.0'}
- axe-core@4.9.1:
- resolution: {integrity: sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==}
+ axe-core@4.10.0:
+ resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==}
engines: {node: '>=4'}
axios@1.7.2:
resolution: {integrity: sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==}
- axobject-query@3.1.1:
- resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==}
+ axobject-query@4.1.0:
+ resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
+ engines: {node: '>= 0.4'}
b4a@1.6.6:
resolution: {integrity: sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==}
@@ -4303,16 +4307,16 @@ packages:
peerDependencies:
eslint: '>=7.0.0'
- eslint-config-turbo@2.1.0:
- resolution: {integrity: sha512-3SeE2OCWnkA/84adGJXABm++966LNGxRdXtXKBcplJdIe4PmERkov1z6Kzp2PrPKT13wGu/bwoLV5h1rm7v9ug==}
+ eslint-config-turbo@2.1.1:
+ resolution: {integrity: sha512-JJF8SZErmgKCGkt124WUmTt0sQ5YLvPo2YxDsfzn9avGJC7/BQIa+3FZoDb3zeYYsZx91pZ6htQAJaKK8NQQAg==}
peerDependencies:
eslint: '>6.6.0'
eslint-import-resolver-node@0.3.9:
resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
- eslint-module-utils@2.8.1:
- resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==}
+ eslint-module-utils@2.9.0:
+ resolution: {integrity: sha512-McVbYmwA3NEKwRQY5g4aWMdcZE5xZxV8i8l7CqJSrameuGSQJtSWaL/LxTEzSKKaCcOhlpDR8XEfYXWPrdo/ZQ==}
engines: {node: '>=4'}
peerDependencies:
'@typescript-eslint/parser': '*'
@@ -4332,8 +4336,8 @@ packages:
eslint-import-resolver-webpack:
optional: true
- eslint-plugin-import@2.29.1:
- resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==}
+ eslint-plugin-import@2.30.0:
+ resolution: {integrity: sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==}
engines: {node: '>=4'}
peerDependencies:
'@typescript-eslint/parser': '*'
@@ -4342,11 +4346,11 @@ packages:
'@typescript-eslint/parser':
optional: true
- eslint-plugin-jsx-a11y@6.9.0:
- resolution: {integrity: sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==}
+ eslint-plugin-jsx-a11y@6.10.0:
+ resolution: {integrity: sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg==}
engines: {node: '>=4.0'}
peerDependencies:
- eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
+ eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9
eslint-plugin-react-hooks@4.6.2:
resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==}
@@ -4354,14 +4358,14 @@ packages:
peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
- eslint-plugin-react@7.35.0:
- resolution: {integrity: sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==}
+ eslint-plugin-react@7.35.2:
+ resolution: {integrity: sha512-Rbj2R9zwP2GYNcIak4xoAMV57hrBh3hTaR0k7hVjwCQgryE/pw5px4b13EYjduOI0hfXyZhwBxaGpOTbWSGzKQ==}
engines: {node: '>=4'}
peerDependencies:
eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
- eslint-plugin-turbo@2.1.0:
- resolution: {integrity: sha512-+CWVY29y7Qa+gvrKSzP+TOYrHAlNLCh/97K5VtDdnpH54h/JFmnd3U0aSG6WANe0HgAK8NHQfeWFDdRzfDqbKA==}
+ eslint-plugin-turbo@2.1.1:
+ resolution: {integrity: sha512-E/34kdQd0n3RP18+e0DSV0f3YTSCOojUh1p4X0Xrho2PBYmJ3umSnNo9FhkZt6UDACl+nBQcYTFkRHMz76lJdw==}
peerDependencies:
eslint: '>6.6.0'
@@ -4931,8 +4935,9 @@ packages:
resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==}
hasBin: true
- is-core-module@2.13.1:
- resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
+ is-core-module@2.15.1:
+ resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==}
+ engines: {node: '>= 0.4'}
is-data-view@1.0.1:
resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==}
@@ -5548,8 +5553,8 @@ packages:
next-international@1.2.4:
resolution: {integrity: sha512-JQvp+h2iSgA/t8hu5S/Lwow1ZErJutQRdpnplxjv4VTlCiND8T95fYih8BjkHcVhQbtM+Wu9Mb1CM32wD9hlWQ==}
- next@14.2.7:
- resolution: {integrity: sha512-4Qy2aK0LwH4eQiSvQWyKuC7JXE13bIopEQesWE0c/P3uuNRnZCQanI0vsrMLmUQJLAto+A+/8+sve2hd+BQuOQ==}
+ next@14.2.8:
+ resolution: {integrity: sha512-EyEyJZ89r8C5FPlS/401AiF3O8jeMtHIE+bLom9MwcdWJJFBgRl+MR/2VgO0v5bI6tQORNY0a0DR5sjpFNrjbg==}
engines: {node: '>=18.17.0'}
hasBin: true
peerDependencies:
@@ -6381,8 +6386,8 @@ packages:
safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
- sass@1.77.8:
- resolution: {integrity: sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==}
+ sass@1.78.0:
+ resolution: {integrity: sha512-AaIqGSrjo5lA2Yg7RvFZrlXDBCp3nV4XP73GrLGvdRWWwk+8H3l0SDvq/5bA4eF+0RFPLuWUk3E+P1U/YqnpsQ==}
engines: {node: '>=14.0.0'}
hasBin: true
@@ -6763,8 +6768,8 @@ packages:
resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==}
engines: {node: '>=18'}
- testcontainers@10.12.0:
- resolution: {integrity: sha512-KEtFj7VvfZPZuyugYJe5aYC/frFN2LRHwQVOVbdZf1vYYGDa4VQt6d0/bM3PcgTE1BOAY6cWBD/S41yu4JQ1Kg==}
+ testcontainers@10.13.0:
+ resolution: {integrity: sha512-SDblQvirbJw1ZpenxaAairGtAesw5XMOCHLbRhTTUBJtBkZJGce8Vx/I8lXQxWIM8HRXsg3HILTHGQvYo4x7wQ==}
text-decoder@1.1.0:
resolution: {integrity: sha512-TmLJNj6UgX8xcUZo4UDStGQtDiTzF7BzWlzn9g7UWrjkpHr5uJTK1ld16wZ3LXb2vb6jH8qU89dW5whuMdXYdw==}
@@ -6805,11 +6810,11 @@ packages:
title-case@2.1.1:
resolution: {integrity: sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==}
- tldts-core@6.1.41:
- resolution: {integrity: sha512-SkwZgo1ZzMp2ziMBwci5VBnLR9VywCi02jSgMX5TO5kf9fdaBsxZkblLff3NlJNTcH0vfvEsgw2B7jVR556Vgw==}
+ tldts-core@6.1.42:
+ resolution: {integrity: sha512-MJKxTFpAyUNxST7IrONoeQcFXuF3tQvnVuJ8IRBlA9rzlsAt1speUZSQxai3jrWwxMJ29FWrdpUWBW2pN99Ftw==}
- tldts@6.1.41:
- resolution: {integrity: sha512-RNpUkL5fYD2DTQQCdr8QMDp6UL0ThtpXT3q3+qPE05dIT+RK2I3M0VByVbQN1dEhLUGzimivVwxK2By9epLk6w==}
+ tldts@6.1.42:
+ resolution: {integrity: sha512-4IQJNZrYPHLVdiaRGmg6X5XrtkwGcfV1BBudNsWlJrl3mXDPEs6IlDzb0rDcgyUx531thK6nT5OA13UpGfZUjA==}
hasBin: true
tmp@0.0.33:
@@ -6935,38 +6940,38 @@ packages:
tunnel-agent@0.6.0:
resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
- turbo-darwin-64@2.1.0:
- resolution: {integrity: sha512-gHwpDk2gyB7qZ57gUUwDIS/IkglqEjjVtPZCTxmCRg28Tiwjui0azsLVKrnHP9UZHllozwbi28x8HXLXLEFF1w==}
+ turbo-darwin-64@2.1.1:
+ resolution: {integrity: sha512-aYNuJpZlCoi0Htd79fl/2DywpewGKijdXeOfg9KzNuPVKzSMYlAXuAlNGh0MKjiOcyqxQGL7Mq9LFhwA0VpDpQ==}
cpu: [x64]
os: [darwin]
- turbo-darwin-arm64@2.1.0:
- resolution: {integrity: sha512-GLaqGetNC6eS4eqXgsheLOHic/OcnGCGDi5boVf+TFZTXYH6YE15L4ugZha4xHXCr1KouCLILHh+f8EHEmWylg==}
+ turbo-darwin-arm64@2.1.1:
+ resolution: {integrity: sha512-tifJKD8yHY48rHXPMcM8o1jI/Jk2KCaXiNjTKvvy9Zsim61BZksNVLelIbrRoCGwAN6PUBZO2lGU5iL/TQJ5Pw==}
cpu: [arm64]
os: [darwin]
- turbo-linux-64@2.1.0:
- resolution: {integrity: sha512-VzBOsj7JyGoZtiNZZ6brjnY7UehRnClluw7pwznuLPzClkqOOPMd2jOcgkWxnP/xW4NBmOoFANXXrtvKBD4f2w==}
+ turbo-linux-64@2.1.1:
+ resolution: {integrity: sha512-Js6d/bSQe9DuV9c7ITXYpsU/ADzFHABdz1UIHa7Oqjj9VOEbFeA9WpAn0c+mdJrVD+IXJFbbDZUjN7VYssmtcg==}
cpu: [x64]
os: [linux]
- turbo-linux-arm64@2.1.0:
- resolution: {integrity: sha512-St7svJnOO5g4F6R7Z32e10I/0M3e6qpNjEYybXwPNul9NSfnUXeky4WoKaALwqNhyJ7nYemoFpZ1d+i8hFQTHg==}
+ turbo-linux-arm64@2.1.1:
+ resolution: {integrity: sha512-LidzTCq0yvQ+N8w8Qub9FmhQ/mmEIeoqFi7DSupekEV2EjvE9jw/zYc9Pk67X+g7dHVfgOnvVzmrjChdxpFePw==}
cpu: [arm64]
os: [linux]
- turbo-windows-64@2.1.0:
- resolution: {integrity: sha512-iSobNud2MrJ1SZ1upVPlErT8xexsr0MQtKapdfq6z0M0rBnrDGEq5bUCSScWyGu+O4+glB4br9xkTAkGFqaxqQ==}
+ turbo-windows-64@2.1.1:
+ resolution: {integrity: sha512-GKc9ZywKwy4xLDhwXd6H07yzl0TB52HjXMrFLyHGhCVnf/w0oq4sLJv2sjbvuarPjsyx4xnCBJ3m3oyL2XmFtA==}
cpu: [x64]
os: [win32]
- turbo-windows-arm64@2.1.0:
- resolution: {integrity: sha512-d61jN4rjE5PnUfF66GKrKoj8S8Ql4FGXzFFzZz4kjsHpZZzCTtqlzPZBmd1byzGYhDPTorTqG3G1USohbdyohA==}
+ turbo-windows-arm64@2.1.1:
+ resolution: {integrity: sha512-oFKkMj11KKUv3xSK9/fhAEQTxLUp1Ol1EOktwc32+SFtEU0uls7kosAz0b+qe8k3pJGEMFdDPdqoEjyJidbxtQ==}
cpu: [arm64]
os: [win32]
- turbo@2.1.0:
- resolution: {integrity: sha512-A969/LO/sPHKlapIarY2VVzqQ5JnnW2/1kksZlnMEpsRD6gwOELvVL+ozfMiO7av9RILt3UeN02L17efr6HUCA==}
+ turbo@2.1.1:
+ resolution: {integrity: sha512-u9gUDkmR9dFS8b5kAYqIETK4OnzsS4l2ragJ0+soSMHh6VEeNHjTfSjk1tKxCqLyziCrPogadxP680J+v6yGHw==}
hasBin: true
tweetnacl@0.14.5:
@@ -7014,8 +7019,8 @@ packages:
types-ramda@0.30.0:
resolution: {integrity: sha512-oVPw/KHB5M0Du0txTEKKM8xZOG9cZBRdCVXvwHYuNJUVkAiJ9oWyqkA+9Bj2gjMsHgkkhsYevobQBWs8I2/Xvw==}
- typescript-eslint@8.3.0:
- resolution: {integrity: sha512-EvWjwWLwwKDIJuBjk2I6UkV8KEQcwZ0VM10nR1rIunRDIP67QJTZAHBXTX0HW/oI1H10YESF8yWie8fRQxjvFA==}
+ typescript-eslint@8.4.0:
+ resolution: {integrity: sha512-67qoc3zQZe3CAkO0ua17+7aCLI0dU+sSQd1eKPGq06QE4rfQjstVXR6woHO5qQvGUa550NfGckT4tzh3b3c8Pw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '*'
@@ -7652,7 +7657,7 @@ snapshots:
'@babel/helper-split-export-declaration': 7.24.6
'@babel/parser': 7.24.7
'@babel/types': 7.24.6
- debug: 4.3.5
+ debug: 4.3.6
globals: 11.12.0
transitivePeerDependencies:
- supports-color
@@ -8181,37 +8186,37 @@ snapshots:
- supports-color
- utf-8-validate
- '@next/env@14.2.7': {}
+ '@next/env@14.2.8': {}
- '@next/eslint-plugin-next@14.2.7':
+ '@next/eslint-plugin-next@14.2.8':
dependencies:
glob: 10.3.10
- '@next/swc-darwin-arm64@14.2.7':
+ '@next/swc-darwin-arm64@14.2.8':
optional: true
- '@next/swc-darwin-x64@14.2.7':
+ '@next/swc-darwin-x64@14.2.8':
optional: true
- '@next/swc-linux-arm64-gnu@14.2.7':
+ '@next/swc-linux-arm64-gnu@14.2.8':
optional: true
- '@next/swc-linux-arm64-musl@14.2.7':
+ '@next/swc-linux-arm64-musl@14.2.8':
optional: true
- '@next/swc-linux-x64-gnu@14.2.7':
+ '@next/swc-linux-x64-gnu@14.2.8':
optional: true
- '@next/swc-linux-x64-musl@14.2.7':
+ '@next/swc-linux-x64-musl@14.2.8':
optional: true
- '@next/swc-win32-arm64-msvc@14.2.7':
+ '@next/swc-win32-arm64-msvc@14.2.8':
optional: true
- '@next/swc-win32-ia32-msvc@14.2.7':
+ '@next/swc-win32-ia32-msvc@14.2.8':
optional: true
- '@next/swc-win32-x64-msvc@14.2.7':
+ '@next/swc-win32-x64-msvc@14.2.8':
optional: true
'@noble/hashes@1.4.0': {}
@@ -8318,6 +8323,8 @@ snapshots:
dependencies:
rrweb-snapshot: 2.0.0-alpha.17
+ '@rtsao/scc@1.1.0': {}
+
'@socket.io/component-emitter@3.1.2': {}
'@swagger-api/apidom-ast@1.0.0-alpha.5':
@@ -8683,25 +8690,25 @@ snapshots:
dependencies:
remove-accents: 0.5.0
- '@tanstack/query-core@5.53.1': {}
+ '@tanstack/query-core@5.54.1': {}
- '@tanstack/query-devtools@5.52.3': {}
+ '@tanstack/query-devtools@5.54.0': {}
- '@tanstack/react-query-devtools@5.53.1(@tanstack/react-query@5.53.1(react@18.3.1))(react@18.3.1)':
+ '@tanstack/react-query-devtools@5.55.0(@tanstack/react-query@5.55.0(react@18.3.1))(react@18.3.1)':
dependencies:
- '@tanstack/query-devtools': 5.52.3
- '@tanstack/react-query': 5.53.1(react@18.3.1)
+ '@tanstack/query-devtools': 5.54.0
+ '@tanstack/react-query': 5.55.0(react@18.3.1)
react: 18.3.1
- '@tanstack/react-query-next-experimental@5.53.1(@tanstack/react-query@5.53.1(react@18.3.1))(next@14.2.7(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(react@18.3.1)':
+ '@tanstack/react-query-next-experimental@5.55.0(@tanstack/react-query@5.55.0(react@18.3.1))(next@14.2.8(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.78.0))(react@18.3.1)':
dependencies:
- '@tanstack/react-query': 5.53.1(react@18.3.1)
- next: 14.2.7(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8)
+ '@tanstack/react-query': 5.55.0(react@18.3.1)
+ next: 14.2.8(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.78.0)
react: 18.3.1
- '@tanstack/react-query@5.53.1(react@18.3.1)':
+ '@tanstack/react-query@5.55.0(react@18.3.1)':
dependencies:
- '@tanstack/query-core': 5.53.1
+ '@tanstack/query-core': 5.54.1
react: 18.3.1
'@tanstack/react-table@8.19.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
@@ -8927,30 +8934,30 @@ snapshots:
'@tootallnate/quickjs-emscripten@0.23.0': {}
- '@trpc/client@11.0.0-rc.490(@trpc/server@11.0.0-rc.490)':
+ '@trpc/client@11.0.0-rc.498(@trpc/server@11.0.0-rc.498)':
dependencies:
- '@trpc/server': 11.0.0-rc.490
+ '@trpc/server': 11.0.0-rc.498
- '@trpc/next@11.0.0-rc.490(@tanstack/react-query@5.53.1(react@18.3.1))(@trpc/client@11.0.0-rc.490(@trpc/server@11.0.0-rc.490))(@trpc/react-query@11.0.0-rc.490(@tanstack/react-query@5.53.1(react@18.3.1))(@trpc/client@11.0.0-rc.490(@trpc/server@11.0.0-rc.490))(@trpc/server@11.0.0-rc.490)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@11.0.0-rc.490)(next@14.2.7(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@trpc/next@11.0.0-rc.498(@tanstack/react-query@5.55.0(react@18.3.1))(@trpc/client@11.0.0-rc.498(@trpc/server@11.0.0-rc.498))(@trpc/react-query@11.0.0-rc.498(@tanstack/react-query@5.55.0(react@18.3.1))(@trpc/client@11.0.0-rc.498(@trpc/server@11.0.0-rc.498))(@trpc/server@11.0.0-rc.498)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@11.0.0-rc.498)(next@14.2.8(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.78.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@trpc/client': 11.0.0-rc.490(@trpc/server@11.0.0-rc.490)
- '@trpc/server': 11.0.0-rc.490
- next: 14.2.7(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8)
+ '@trpc/client': 11.0.0-rc.498(@trpc/server@11.0.0-rc.498)
+ '@trpc/server': 11.0.0-rc.498
+ next: 14.2.8(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.78.0)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
- '@tanstack/react-query': 5.53.1(react@18.3.1)
- '@trpc/react-query': 11.0.0-rc.490(@tanstack/react-query@5.53.1(react@18.3.1))(@trpc/client@11.0.0-rc.490(@trpc/server@11.0.0-rc.490))(@trpc/server@11.0.0-rc.490)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tanstack/react-query': 5.55.0(react@18.3.1)
+ '@trpc/react-query': 11.0.0-rc.498(@tanstack/react-query@5.55.0(react@18.3.1))(@trpc/client@11.0.0-rc.498(@trpc/server@11.0.0-rc.498))(@trpc/server@11.0.0-rc.498)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@trpc/react-query@11.0.0-rc.490(@tanstack/react-query@5.53.1(react@18.3.1))(@trpc/client@11.0.0-rc.490(@trpc/server@11.0.0-rc.490))(@trpc/server@11.0.0-rc.490)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@trpc/react-query@11.0.0-rc.498(@tanstack/react-query@5.55.0(react@18.3.1))(@trpc/client@11.0.0-rc.498(@trpc/server@11.0.0-rc.498))(@trpc/server@11.0.0-rc.498)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@tanstack/react-query': 5.53.1(react@18.3.1)
- '@trpc/client': 11.0.0-rc.490(@trpc/server@11.0.0-rc.490)
- '@trpc/server': 11.0.0-rc.490
+ '@tanstack/react-query': 5.55.0(react@18.3.1)
+ '@trpc/client': 11.0.0-rc.498(@trpc/server@11.0.0-rc.498)
+ '@trpc/server': 11.0.0-rc.498
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
- '@trpc/server@11.0.0-rc.490': {}
+ '@trpc/server@11.0.0-rc.498': {}
'@tsconfig/node10@1.0.11': {}
@@ -8962,9 +8969,9 @@ snapshots:
'@tsconfig/svelte@1.0.13': {}
- '@turbo/gen@2.1.0(@types/node@20.16.2)(typescript@5.5.4)':
+ '@turbo/gen@2.1.1(@types/node@20.16.5)(typescript@5.5.4)':
dependencies:
- '@turbo/workspaces': 2.1.0
+ '@turbo/workspaces': 2.1.1
commander: 10.0.1
fs-extra: 10.1.0
inquirer: 8.2.6
@@ -8972,7 +8979,7 @@ snapshots:
node-plop: 0.26.3
picocolors: 1.0.1
proxy-agent: 6.4.0
- ts-node: 10.9.2(@types/node@20.16.2)(typescript@5.5.4)
+ ts-node: 10.9.2(@types/node@20.16.5)(typescript@5.5.4)
update-check: 1.5.4
validate-npm-package-name: 5.0.1
transitivePeerDependencies:
@@ -8982,7 +8989,7 @@ snapshots:
- supports-color
- typescript
- '@turbo/workspaces@2.1.0':
+ '@turbo/workspaces@2.1.1':
dependencies:
commander: 10.0.1
execa: 5.1.1
@@ -8994,12 +9001,12 @@ snapshots:
ora: 4.1.1
picocolors: 1.0.1
rimraf: 3.0.2
- semver: 7.6.2
+ semver: 7.6.3
update-check: 1.5.4
'@types/asn1@0.2.4':
dependencies:
- '@types/node': 20.16.2
+ '@types/node': 20.16.5
'@types/babel__core@7.20.5':
dependencies:
@@ -9024,22 +9031,22 @@ snapshots:
'@types/bcrypt@5.0.2':
dependencies:
- '@types/node': 20.16.2
+ '@types/node': 20.16.5
'@types/better-sqlite3@7.6.11':
dependencies:
- '@types/node': 20.16.2
+ '@types/node': 20.16.5
'@types/body-parser@1.19.5':
dependencies:
'@types/connect': 3.4.38
- '@types/node': 20.16.2
+ '@types/node': 20.16.5
'@types/chroma-js@2.4.4': {}
'@types/connect@3.4.38':
dependencies:
- '@types/node': 20.16.2
+ '@types/node': 20.16.5
'@types/cookie@0.6.0': {}
@@ -9048,7 +9055,7 @@ snapshots:
'@types/connect': 3.4.38
'@types/express': 4.17.21
'@types/keygrip': 1.0.6
- '@types/node': 20.16.2
+ '@types/node': 20.16.5
'@types/css-font-loading-module@0.0.7': {}
@@ -9056,13 +9063,13 @@ snapshots:
'@types/docker-modem@3.0.6':
dependencies:
- '@types/node': 20.16.2
+ '@types/node': 20.16.5
'@types/ssh2': 1.15.0
'@types/dockerode@3.3.31':
dependencies:
'@types/docker-modem': 3.0.6
- '@types/node': 20.16.2
+ '@types/node': 20.16.5
'@types/ssh2': 1.15.0
'@types/eslint-scope@3.7.7':
@@ -9079,7 +9086,7 @@ snapshots:
'@types/express-serve-static-core@4.19.0':
dependencies:
- '@types/node': 20.16.2
+ '@types/node': 20.16.5
'@types/qs': 6.9.15
'@types/range-parser': 1.2.7
'@types/send': 0.17.4
@@ -9094,7 +9101,7 @@ snapshots:
'@types/glob@7.2.0':
dependencies:
'@types/minimatch': 5.1.2
- '@types/node': 20.16.2
+ '@types/node': 20.16.5
'@types/hast@2.3.10':
dependencies:
@@ -9123,7 +9130,7 @@ snapshots:
dependencies:
undici-types: 5.26.5
- '@types/node@20.16.2':
+ '@types/node@20.16.5':
dependencies:
undici-types: 6.19.6
@@ -9151,21 +9158,21 @@ snapshots:
'@types/send@0.17.4':
dependencies:
'@types/mime': 1.3.5
- '@types/node': 20.16.2
+ '@types/node': 20.16.5
'@types/serve-static@1.15.7':
dependencies:
'@types/http-errors': 2.0.4
- '@types/node': 20.16.2
+ '@types/node': 20.16.5
'@types/send': 0.17.4
'@types/ssh2-streams@0.1.12':
dependencies:
- '@types/node': 20.16.2
+ '@types/node': 20.16.5
'@types/ssh2@0.5.52':
dependencies:
- '@types/node': 20.16.2
+ '@types/node': 20.16.5
'@types/ssh2-streams': 0.1.12
'@types/ssh2@1.15.0':
@@ -9178,7 +9185,7 @@ snapshots:
'@types/through@0.0.33':
dependencies:
- '@types/node': 20.16.2
+ '@types/node': 20.16.5
'@types/tinycolor2@1.4.6': {}
@@ -9194,16 +9201,16 @@ snapshots:
'@types/ws@8.5.12':
dependencies:
- '@types/node': 20.16.2
+ '@types/node': 20.16.5
- '@typescript-eslint/eslint-plugin@8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1)(typescript@5.5.4))(eslint@9.9.1)(typescript@5.5.4)':
+ '@typescript-eslint/eslint-plugin@8.4.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1)(typescript@5.5.4))(eslint@9.9.1)(typescript@5.5.4)':
dependencies:
'@eslint-community/regexpp': 4.11.0
- '@typescript-eslint/parser': 8.3.0(eslint@9.9.1)(typescript@5.5.4)
- '@typescript-eslint/scope-manager': 8.3.0
- '@typescript-eslint/type-utils': 8.3.0(eslint@9.9.1)(typescript@5.5.4)
- '@typescript-eslint/utils': 8.3.0(eslint@9.9.1)(typescript@5.5.4)
- '@typescript-eslint/visitor-keys': 8.3.0
+ '@typescript-eslint/parser': 8.4.0(eslint@9.9.1)(typescript@5.5.4)
+ '@typescript-eslint/scope-manager': 8.4.0
+ '@typescript-eslint/type-utils': 8.4.0(eslint@9.9.1)(typescript@5.5.4)
+ '@typescript-eslint/utils': 8.4.0(eslint@9.9.1)(typescript@5.5.4)
+ '@typescript-eslint/visitor-keys': 8.4.0
eslint: 9.9.1
graphemer: 1.4.0
ignore: 5.3.1
@@ -9214,28 +9221,28 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.3.0(eslint@9.9.1)(typescript@5.5.4)':
+ '@typescript-eslint/parser@8.4.0(eslint@9.9.1)(typescript@5.5.4)':
dependencies:
- '@typescript-eslint/scope-manager': 8.3.0
- '@typescript-eslint/types': 8.3.0
- '@typescript-eslint/typescript-estree': 8.3.0(typescript@5.5.4)
- '@typescript-eslint/visitor-keys': 8.3.0
- debug: 4.3.5
+ '@typescript-eslint/scope-manager': 8.4.0
+ '@typescript-eslint/types': 8.4.0
+ '@typescript-eslint/typescript-estree': 8.4.0(typescript@5.5.4)
+ '@typescript-eslint/visitor-keys': 8.4.0
+ debug: 4.3.6
eslint: 9.9.1
optionalDependencies:
typescript: 5.5.4
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@8.3.0':
+ '@typescript-eslint/scope-manager@8.4.0':
dependencies:
- '@typescript-eslint/types': 8.3.0
- '@typescript-eslint/visitor-keys': 8.3.0
+ '@typescript-eslint/types': 8.4.0
+ '@typescript-eslint/visitor-keys': 8.4.0
- '@typescript-eslint/type-utils@8.3.0(eslint@9.9.1)(typescript@5.5.4)':
+ '@typescript-eslint/type-utils@8.4.0(eslint@9.9.1)(typescript@5.5.4)':
dependencies:
- '@typescript-eslint/typescript-estree': 8.3.0(typescript@5.5.4)
- '@typescript-eslint/utils': 8.3.0(eslint@9.9.1)(typescript@5.5.4)
+ '@typescript-eslint/typescript-estree': 8.4.0(typescript@5.5.4)
+ '@typescript-eslint/utils': 8.4.0(eslint@9.9.1)(typescript@5.5.4)
debug: 4.3.6
ts-api-utils: 1.3.0(typescript@5.5.4)
optionalDependencies:
@@ -9244,37 +9251,37 @@ snapshots:
- eslint
- supports-color
- '@typescript-eslint/types@8.3.0': {}
+ '@typescript-eslint/types@8.4.0': {}
- '@typescript-eslint/typescript-estree@8.3.0(typescript@5.5.4)':
+ '@typescript-eslint/typescript-estree@8.4.0(typescript@5.5.4)':
dependencies:
- '@typescript-eslint/types': 8.3.0
- '@typescript-eslint/visitor-keys': 8.3.0
+ '@typescript-eslint/types': 8.4.0
+ '@typescript-eslint/visitor-keys': 8.4.0
debug: 4.3.6
fast-glob: 3.3.2
is-glob: 4.0.3
minimatch: 9.0.4
- semver: 7.6.2
+ semver: 7.6.3
ts-api-utils: 1.3.0(typescript@5.5.4)
optionalDependencies:
typescript: 5.5.4
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.3.0(eslint@9.9.1)(typescript@5.5.4)':
+ '@typescript-eslint/utils@8.4.0(eslint@9.9.1)(typescript@5.5.4)':
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@9.9.1)
- '@typescript-eslint/scope-manager': 8.3.0
- '@typescript-eslint/types': 8.3.0
- '@typescript-eslint/typescript-estree': 8.3.0(typescript@5.5.4)
+ '@typescript-eslint/scope-manager': 8.4.0
+ '@typescript-eslint/types': 8.4.0
+ '@typescript-eslint/typescript-estree': 8.4.0(typescript@5.5.4)
eslint: 9.9.1
transitivePeerDependencies:
- supports-color
- typescript
- '@typescript-eslint/visitor-keys@8.3.0':
+ '@typescript-eslint/visitor-keys@8.4.0':
dependencies:
- '@typescript-eslint/types': 8.3.0
+ '@typescript-eslint/types': 8.4.0
eslint-visitor-keys: 3.4.3
'@umami/node@0.4.0': {}
@@ -9308,18 +9315,18 @@ snapshots:
global: 4.4.0
is-function: 1.0.2
- '@vitejs/plugin-react@4.3.1(vite@5.2.11(@types/node@20.16.2)(sass@1.77.8)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0))':
+ '@vitejs/plugin-react@4.3.1(vite@5.2.11(@types/node@20.16.5)(sass@1.78.0)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0))':
dependencies:
'@babel/core': 7.24.6
'@babel/plugin-transform-react-jsx-self': 7.24.5(@babel/core@7.24.6)
'@babel/plugin-transform-react-jsx-source': 7.24.1(@babel/core@7.24.6)
'@types/babel__core': 7.20.5
react-refresh: 0.14.2
- vite: 5.2.11(@types/node@20.16.2)(sass@1.77.8)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0)
+ vite: 5.2.11(@types/node@20.16.5)(sass@1.78.0)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0)
transitivePeerDependencies:
- supports-color
- '@vitest/coverage-v8@2.0.5(vitest@2.0.5(@types/node@20.16.2)(@vitest/ui@2.0.5)(jsdom@25.0.0)(sass@1.77.8)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0))':
+ '@vitest/coverage-v8@2.0.5(vitest@2.0.5(@types/node@20.16.5)(@vitest/ui@2.0.5)(jsdom@25.0.0)(sass@1.78.0)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0))':
dependencies:
'@ampproject/remapping': 2.3.0
'@bcoe/v8-coverage': 0.2.3
@@ -9333,7 +9340,7 @@ snapshots:
std-env: 3.7.0
test-exclude: 7.0.1
tinyrainbow: 1.2.0
- vitest: 2.0.5(@types/node@20.16.2)(@vitest/ui@2.0.5)(jsdom@25.0.0)(sass@1.77.8)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0)
+ vitest: 2.0.5(@types/node@20.16.5)(@vitest/ui@2.0.5)(jsdom@25.0.0)(sass@1.78.0)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0)
transitivePeerDependencies:
- supports-color
@@ -9372,7 +9379,7 @@ snapshots:
pathe: 1.1.2
sirv: 2.0.4
tinyrainbow: 1.2.0
- vitest: 2.0.5(@types/node@20.16.2)(@vitest/ui@2.0.5)(jsdom@25.0.0)(sass@1.77.8)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0)
+ vitest: 2.0.5(@types/node@20.16.5)(@vitest/ui@2.0.5)(jsdom@25.0.0)(sass@1.78.0)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0)
'@vitest/utils@2.0.5':
dependencies:
@@ -9733,7 +9740,7 @@ snapshots:
aws-ssl-profiles@1.1.1: {}
- axe-core@4.9.1: {}
+ axe-core@4.10.0: {}
axios@1.7.2:
dependencies:
@@ -9743,9 +9750,7 @@ snapshots:
transitivePeerDependencies:
- debug
- axobject-query@3.1.1:
- dependencies:
- deep-equal: 2.2.3
+ axobject-query@4.1.0: {}
b4a@1.6.6: {}
@@ -10430,7 +10435,7 @@ snapshots:
engine.io-client@6.5.4:
dependencies:
'@socket.io/component-emitter': 3.1.2
- debug: 4.3.5
+ debug: 4.3.6
engine.io-parser: 5.2.3
ws: 8.17.1
xmlhttprequest-ssl: 2.0.0
@@ -10658,31 +10663,32 @@ snapshots:
dependencies:
eslint: 9.9.1
- eslint-config-turbo@2.1.0(eslint@9.9.1):
+ eslint-config-turbo@2.1.1(eslint@9.9.1):
dependencies:
eslint: 9.9.1
- eslint-plugin-turbo: 2.1.0(eslint@9.9.1)
+ eslint-plugin-turbo: 2.1.1(eslint@9.9.1)
eslint-import-resolver-node@0.3.9:
dependencies:
debug: 3.2.7
- is-core-module: 2.13.1
+ is-core-module: 2.15.1
resolve: 1.22.8
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.8.1(@typescript-eslint/parser@8.3.0(eslint@9.9.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@9.9.1):
+ eslint-module-utils@2.9.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@9.9.1):
dependencies:
debug: 3.2.7
optionalDependencies:
- '@typescript-eslint/parser': 8.3.0(eslint@9.9.1)(typescript@5.5.4)
+ '@typescript-eslint/parser': 8.4.0(eslint@9.9.1)(typescript@5.5.4)
eslint: 9.9.1
eslint-import-resolver-node: 0.3.9
transitivePeerDependencies:
- supports-color
- eslint-plugin-import@2.29.1(@typescript-eslint/parser@8.3.0(eslint@9.9.1)(typescript@5.5.4))(eslint@9.9.1):
+ eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1)(typescript@5.5.4))(eslint@9.9.1):
dependencies:
+ '@rtsao/scc': 1.1.0
array-includes: 3.1.8
array.prototype.findlastindex: 1.2.5
array.prototype.flat: 1.3.2
@@ -10691,9 +10697,9 @@ snapshots:
doctrine: 2.1.0
eslint: 9.9.1
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.8.1(@typescript-eslint/parser@8.3.0(eslint@9.9.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@9.9.1)
+ eslint-module-utils: 2.9.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@9.9.1)
hasown: 2.0.2
- is-core-module: 2.13.1
+ is-core-module: 2.15.1
is-glob: 4.0.3
minimatch: 3.1.2
object.fromentries: 2.0.8
@@ -10702,20 +10708,20 @@ snapshots:
semver: 6.3.1
tsconfig-paths: 3.15.0
optionalDependencies:
- '@typescript-eslint/parser': 8.3.0(eslint@9.9.1)(typescript@5.5.4)
+ '@typescript-eslint/parser': 8.4.0(eslint@9.9.1)(typescript@5.5.4)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
- eslint-plugin-jsx-a11y@6.9.0(eslint@9.9.1):
+ eslint-plugin-jsx-a11y@6.10.0(eslint@9.9.1):
dependencies:
aria-query: 5.1.3
array-includes: 3.1.8
array.prototype.flatmap: 1.3.2
ast-types-flow: 0.0.8
- axe-core: 4.9.1
- axobject-query: 3.1.1
+ axe-core: 4.10.0
+ axobject-query: 4.1.0
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
es-iterator-helpers: 1.0.19
@@ -10732,7 +10738,7 @@ snapshots:
dependencies:
eslint: 9.9.1
- eslint-plugin-react@7.35.0(eslint@9.9.1):
+ eslint-plugin-react@7.35.2(eslint@9.9.1):
dependencies:
array-includes: 3.1.8
array.prototype.findlast: 1.2.5
@@ -10754,7 +10760,7 @@ snapshots:
string.prototype.matchall: 4.0.11
string.prototype.repeat: 1.0.0
- eslint-plugin-turbo@2.1.0(eslint@9.9.1):
+ eslint-plugin-turbo@2.1.1(eslint@9.9.1):
dependencies:
dotenv: 16.0.3
eslint: 9.9.1
@@ -11235,7 +11241,7 @@ snapshots:
https-proxy-agent@5.0.1:
dependencies:
agent-base: 6.0.2
- debug: 4.3.5
+ debug: 4.3.6
transitivePeerDependencies:
- supports-color
@@ -11399,7 +11405,7 @@ snapshots:
dependencies:
ci-info: 2.0.0
- is-core-module@2.13.1:
+ is-core-module@2.15.1:
dependencies:
hasown: 2.0.2
@@ -11542,7 +11548,7 @@ snapshots:
istanbul-lib-source-maps@5.0.6:
dependencies:
'@jridgewell/trace-mapping': 0.3.25
- debug: 4.3.5
+ debug: 4.3.6
istanbul-lib-coverage: 3.2.2
transitivePeerDependencies:
- supports-color
@@ -11580,7 +11586,7 @@ snapshots:
jest-worker@27.5.1:
dependencies:
- '@types/node': 20.16.2
+ '@types/node': 20.16.5
merge-stream: 2.0.0
supports-color: 8.1.1
@@ -11801,7 +11807,7 @@ snapshots:
make-dir@4.0.0:
dependencies:
- semver: 7.6.2
+ semver: 7.6.3
make-error@1.3.6: {}
@@ -11965,10 +11971,10 @@ snapshots:
netmask@2.0.2: {}
- next-auth@5.0.0-beta.20(next@14.2.7(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(react@18.3.1):
+ next-auth@5.0.0-beta.20(next@14.2.8(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.78.0))(react@18.3.1):
dependencies:
'@auth/core': 0.34.2
- next: 14.2.7(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8)
+ next: 14.2.8(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.78.0)
react: 18.3.1
next-international@1.2.4:
@@ -11977,9 +11983,9 @@ snapshots:
international-types: 0.8.1
server-only: 0.0.1
- next@14.2.7(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8):
+ next@14.2.8(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.78.0):
dependencies:
- '@next/env': 14.2.7
+ '@next/env': 14.2.8
'@swc/helpers': 0.5.5
busboy: 1.6.0
caniuse-lite: 1.0.30001620
@@ -11989,16 +11995,16 @@ snapshots:
react-dom: 18.3.1(react@18.3.1)
styled-jsx: 5.1.1(@babel/core@7.24.6)(react@18.3.1)
optionalDependencies:
- '@next/swc-darwin-arm64': 14.2.7
- '@next/swc-darwin-x64': 14.2.7
- '@next/swc-linux-arm64-gnu': 14.2.7
- '@next/swc-linux-arm64-musl': 14.2.7
- '@next/swc-linux-x64-gnu': 14.2.7
- '@next/swc-linux-x64-musl': 14.2.7
- '@next/swc-win32-arm64-msvc': 14.2.7
- '@next/swc-win32-ia32-msvc': 14.2.7
- '@next/swc-win32-x64-msvc': 14.2.7
- sass: 1.77.8
+ '@next/swc-darwin-arm64': 14.2.8
+ '@next/swc-darwin-x64': 14.2.8
+ '@next/swc-linux-arm64-gnu': 14.2.8
+ '@next/swc-linux-arm64-musl': 14.2.8
+ '@next/swc-linux-x64-gnu': 14.2.8
+ '@next/swc-linux-x64-musl': 14.2.8
+ '@next/swc-win32-arm64-msvc': 14.2.8
+ '@next/swc-win32-ia32-msvc': 14.2.8
+ '@next/swc-win32-x64-msvc': 14.2.8
+ sass: 1.78.0
transitivePeerDependencies:
- '@babel/core'
- babel-plugin-macros
@@ -12015,7 +12021,7 @@ snapshots:
node-abi@3.62.0:
dependencies:
- semver: 7.6.2
+ semver: 7.6.3
node-abort-controller@3.1.1: {}
@@ -12050,7 +12056,7 @@ snapshots:
node-mocks-http@1.14.1:
dependencies:
'@types/express': 4.17.21
- '@types/node': 20.16.2
+ '@types/node': 20.16.5
accepts: 1.3.8
content-disposition: 0.5.4
depd: 1.1.2
@@ -12826,13 +12832,13 @@ snapshots:
resolve@1.22.8:
dependencies:
- is-core-module: 2.13.1
+ is-core-module: 2.15.1
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
resolve@2.0.0-next.5:
dependencies:
- is-core-module: 2.13.1
+ is-core-module: 2.15.1
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
@@ -12948,7 +12954,7 @@ snapshots:
safer-buffer@2.1.2: {}
- sass@1.77.8:
+ sass@1.78.0:
dependencies:
chokidar: 3.6.0
immutable: 4.3.6
@@ -13085,7 +13091,7 @@ snapshots:
socket.io-parser@4.2.4:
dependencies:
'@socket.io/component-emitter': 3.1.2
- debug: 4.3.5
+ debug: 4.3.6
transitivePeerDependencies:
- supports-color
@@ -13420,14 +13426,14 @@ snapshots:
glob: 10.4.5
minimatch: 9.0.4
- testcontainers@10.12.0:
+ testcontainers@10.13.0:
dependencies:
'@balena/dockerignore': 1.0.2
'@types/dockerode': 3.3.31
archiver: 7.0.1
async-lock: 1.4.1
byline: 5.0.0
- debug: 4.3.5
+ debug: 4.3.6
docker-compose: 0.24.8
dockerode: 3.3.5
get-port: 5.1.1
@@ -13474,11 +13480,11 @@ snapshots:
no-case: 2.3.2
upper-case: 1.1.3
- tldts-core@6.1.41: {}
+ tldts-core@6.1.42: {}
- tldts@6.1.41:
+ tldts@6.1.42:
dependencies:
- tldts-core: 6.1.41
+ tldts-core: 6.1.42
tmp@0.0.33:
dependencies:
@@ -13533,10 +13539,10 @@ snapshots:
triple-beam@1.4.1: {}
- trpc-swagger@1.2.6(patch_hash=6s72z7zx33c52iesv5sewipn6i)(@trpc/client@11.0.0-rc.490(@trpc/server@11.0.0-rc.490))(@trpc/server@11.0.0-rc.490)(zod@3.23.8):
+ trpc-swagger@1.2.6(patch_hash=6s72z7zx33c52iesv5sewipn6i)(@trpc/client@11.0.0-rc.498(@trpc/server@11.0.0-rc.498))(@trpc/server@11.0.0-rc.498)(zod@3.23.8):
dependencies:
- '@trpc/client': 11.0.0-rc.490(@trpc/server@11.0.0-rc.490)
- '@trpc/server': 11.0.0-rc.490
+ '@trpc/client': 11.0.0-rc.498(@trpc/server@11.0.0-rc.498)
+ '@trpc/server': 11.0.0-rc.498
chalk-scripts: 1.2.8
co-body: 6.2.0
lodash.clonedeep: 4.5.0
@@ -13551,14 +13557,14 @@ snapshots:
ts-mixer@6.0.4: {}
- ts-node@10.9.2(@types/node@20.16.2)(typescript@5.5.4):
+ ts-node@10.9.2(@types/node@20.16.5)(typescript@5.5.4):
dependencies:
'@cspotcode/source-map-support': 0.8.1
'@tsconfig/node10': 1.0.11
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
- '@types/node': 20.16.2
+ '@types/node': 20.16.5
acorn: 8.12.0
acorn-walk: 8.3.2
arg: 4.1.3
@@ -13599,32 +13605,32 @@ snapshots:
dependencies:
safe-buffer: 5.2.1
- turbo-darwin-64@2.1.0:
+ turbo-darwin-64@2.1.1:
optional: true
- turbo-darwin-arm64@2.1.0:
+ turbo-darwin-arm64@2.1.1:
optional: true
- turbo-linux-64@2.1.0:
+ turbo-linux-64@2.1.1:
optional: true
- turbo-linux-arm64@2.1.0:
+ turbo-linux-arm64@2.1.1:
optional: true
- turbo-windows-64@2.1.0:
+ turbo-windows-64@2.1.1:
optional: true
- turbo-windows-arm64@2.1.0:
+ turbo-windows-arm64@2.1.1:
optional: true
- turbo@2.1.0:
+ turbo@2.1.1:
optionalDependencies:
- turbo-darwin-64: 2.1.0
- turbo-darwin-arm64: 2.1.0
- turbo-linux-64: 2.1.0
- turbo-linux-arm64: 2.1.0
- turbo-windows-64: 2.1.0
- turbo-windows-arm64: 2.1.0
+ turbo-darwin-64: 2.1.1
+ turbo-darwin-arm64: 2.1.1
+ turbo-linux-64: 2.1.1
+ turbo-linux-arm64: 2.1.1
+ turbo-windows-64: 2.1.1
+ turbo-windows-arm64: 2.1.1
tweetnacl@0.14.5: {}
@@ -13683,11 +13689,11 @@ snapshots:
dependencies:
ts-toolbelt: 9.6.0
- typescript-eslint@8.3.0(eslint@9.9.1)(typescript@5.5.4):
+ typescript-eslint@8.4.0(eslint@9.9.1)(typescript@5.5.4):
dependencies:
- '@typescript-eslint/eslint-plugin': 8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1)(typescript@5.5.4))(eslint@9.9.1)(typescript@5.5.4)
- '@typescript-eslint/parser': 8.3.0(eslint@9.9.1)(typescript@5.5.4)
- '@typescript-eslint/utils': 8.3.0(eslint@9.9.1)(typescript@5.5.4)
+ '@typescript-eslint/eslint-plugin': 8.4.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1)(typescript@5.5.4))(eslint@9.9.1)(typescript@5.5.4)
+ '@typescript-eslint/parser': 8.4.0(eslint@9.9.1)(typescript@5.5.4)
+ '@typescript-eslint/utils': 8.4.0(eslint@9.9.1)(typescript@5.5.4)
optionalDependencies:
typescript: 5.5.4
transitivePeerDependencies:
@@ -13867,13 +13873,13 @@ snapshots:
dependencies:
global: 4.4.0
- vite-node@2.0.5(@types/node@20.16.2)(sass@1.77.8)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0):
+ vite-node@2.0.5(@types/node@20.16.5)(sass@1.78.0)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0):
dependencies:
cac: 6.7.14
- debug: 4.3.5
+ debug: 4.3.6
pathe: 1.1.2
tinyrainbow: 1.2.0
- vite: 5.2.11(@types/node@20.16.2)(sass@1.77.8)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0)
+ vite: 5.2.11(@types/node@20.16.5)(sass@1.78.0)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0)
transitivePeerDependencies:
- '@types/node'
- less
@@ -13884,30 +13890,30 @@ snapshots:
- supports-color
- terser
- vite-tsconfig-paths@5.0.1(typescript@5.5.4)(vite@5.2.11(@types/node@20.16.2)(sass@1.77.8)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0)):
+ vite-tsconfig-paths@5.0.1(typescript@5.5.4)(vite@5.2.11(@types/node@20.16.5)(sass@1.78.0)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0)):
dependencies:
debug: 4.3.5
globrex: 0.1.2
tsconfck: 3.0.3(typescript@5.5.4)
optionalDependencies:
- vite: 5.2.11(@types/node@20.16.2)(sass@1.77.8)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0)
+ vite: 5.2.11(@types/node@20.16.5)(sass@1.78.0)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0)
transitivePeerDependencies:
- supports-color
- typescript
- vite@5.2.11(@types/node@20.16.2)(sass@1.77.8)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0):
+ vite@5.2.11(@types/node@20.16.5)(sass@1.78.0)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0):
dependencies:
esbuild: 0.20.2
postcss: 8.4.38
rollup: 4.17.2
optionalDependencies:
- '@types/node': 20.16.2
+ '@types/node': 20.16.5
fsevents: 2.3.3
- sass: 1.77.8
+ sass: 1.78.0
sugarss: 4.0.1(postcss@8.4.38)
terser: 5.31.0
- vitest@2.0.5(@types/node@20.16.2)(@vitest/ui@2.0.5)(jsdom@25.0.0)(sass@1.77.8)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0):
+ vitest@2.0.5(@types/node@20.16.5)(@vitest/ui@2.0.5)(jsdom@25.0.0)(sass@1.78.0)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0):
dependencies:
'@ampproject/remapping': 2.3.0
'@vitest/expect': 2.0.5
@@ -13925,11 +13931,11 @@ snapshots:
tinybench: 2.8.0
tinypool: 1.0.0
tinyrainbow: 1.2.0
- vite: 5.2.11(@types/node@20.16.2)(sass@1.77.8)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0)
- vite-node: 2.0.5(@types/node@20.16.2)(sass@1.77.8)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0)
+ vite: 5.2.11(@types/node@20.16.5)(sass@1.78.0)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0)
+ vite-node: 2.0.5(@types/node@20.16.5)(sass@1.78.0)(sugarss@4.0.1(postcss@8.4.38))(terser@5.31.0)
why-is-node-running: 2.3.0
optionalDependencies:
- '@types/node': 20.16.2
+ '@types/node': 20.16.5
'@vitest/ui': 2.0.5(vitest@2.0.5)
jsdom: 25.0.0
transitivePeerDependencies:
diff --git a/tooling/eslint/package.json b/tooling/eslint/package.json
index b63904e84..e08564a53 100644
--- a/tooling/eslint/package.json
+++ b/tooling/eslint/package.json
@@ -16,14 +16,14 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
- "@next/eslint-plugin-next": "^14.2.7",
+ "@next/eslint-plugin-next": "^14.2.8",
"eslint-config-prettier": "^9.1.0",
- "eslint-config-turbo": "^2.1.0",
- "eslint-plugin-import": "^2.29.1",
- "eslint-plugin-jsx-a11y": "^6.9.0",
- "eslint-plugin-react": "^7.35.0",
+ "eslint-config-turbo": "^2.1.1",
+ "eslint-plugin-import": "^2.30.0",
+ "eslint-plugin-jsx-a11y": "^6.10.0",
+ "eslint-plugin-react": "^7.35.2",
"eslint-plugin-react-hooks": "^4.6.2",
- "typescript-eslint": "^8.3.0"
+ "typescript-eslint": "^8.4.0"
},
"devDependencies": {
"@homarr/prettier-config": "workspace:^0.1.0",