diff --git a/.github/workflows/code-quality.yml b/.github/workflows/code-quality.yml
index a75c144b7..a93cfe2f2 100644
--- a/.github/workflows/code-quality.yml
+++ b/.github/workflows/code-quality.yml
@@ -67,11 +67,33 @@ jobs:
- name: Test
run: pnpm test
- - name: 'Report Coverage'
+ - name: "Report Coverage"
# Set if: always() to also generate the report if tests are failing
# Only works if you set `reportOnFailure: true` in your vite config as specified above
- if: always()
- uses: davelosert/vitest-coverage-report-action@v2
+ if: always()
+ uses: davelosert/vitest-coverage-report-action@v2
+
+ e2e:
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v4
+ - name: Setup
+ uses: ./tooling/github/setup
+ - name: Build docker image
+ id: build-docker-image
+ uses: docker/build-push-action@v6
+ with:
+ platforms: linux/amd64
+ context: .
+ push: false
+ tags: homarr-e2e
+ network: host
+ env:
+ SKIP_ENV_VALIDATION: true
+ - name: Run E2E Tests
+ shell: bash
+ run: pnpm test:e2e
build:
runs-on: ubuntu-latest
diff --git a/.github/workflows/deployment-docker-image.yml b/.github/workflows/deployment-docker-image.yml
index 35275a8da..f00513efd 100644
--- a/.github/workflows/deployment-docker-image.yml
+++ b/.github/workflows/deployment-docker-image.yml
@@ -33,9 +33,6 @@ jobs:
deploy:
name: Deploy docker image
runs-on: ubuntu-latest
- strategy:
- matrix:
- node-version: [20]
steps:
- name: Discord notification
if: ${{ github.events.inputs.send-notifications != false }}
@@ -57,21 +54,7 @@ jobs:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
uses: Ilshidur/action-discord@master
with:
- args: "Semver computed next tag to be ${{ steps.semver.outputs.next }}. Current is ${{ steps.semver.outputs.current }}"
- - uses: pnpm/action-setup@v2
- with:
- version: 8
- - name: Use Node.js ${{ matrix.node-version }}
- uses: actions/setup-node@v4
- with:
- node-version: ${{ matrix.node-version }}
- - name: Discord notification
- if: ${{ github.events.inputs.send-notifications != false }}
- env:
- DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
- uses: Ilshidur/action-discord@master
- with:
- args: "Built application artifacts. Building images..."
+ args: "Semver computed next tag to be ${{ steps.semver.outputs.next }}. Current is ${{ steps.semver.outputs.current }}. Building images..."
- name: Log in to the Container registry
uses: docker/login-action@v3
with:
@@ -90,9 +73,9 @@ jobs:
tags: |
type=raw,value=alpha
type=raw,value=early-adopters
-# tags: |
-# type=raw,value=latest
-# type=raw,value=${{ steps.semver.outputs.next }}
+ # tags: |
+ # type=raw,value=latest
+ # type=raw,value=${{ steps.semver.outputs.next }}
- name: Build and push
id: buildPushAction
uses: docker/build-push-action@v6
diff --git a/Dockerfile b/Dockerfile
index 468e189e1..5e682f89b 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -59,8 +59,6 @@ WORKDIR /app
# gettext is required for envsubst
RUN apk add --no-cache redis nginx bash gettext
RUN mkdir /appdata
-RUN mkdir /appdata/db
-RUN mkdir /appdata/redis
VOLUME /appdata
RUN mkdir /secrets
VOLUME /secrets
diff --git a/apps/nextjs/package.json b/apps/nextjs/package.json
index 90dc19a1d..f87b245ea 100644
--- a/apps/nextjs/package.json
+++ b/apps/nextjs/package.json
@@ -37,17 +37,17 @@
"@homarr/ui": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
"@homarr/widgets": "workspace:^0.1.0",
- "@mantine/colors-generator": "^7.13.4",
- "@mantine/core": "^7.13.4",
- "@mantine/hooks": "^7.13.4",
- "@mantine/modals": "^7.13.4",
- "@mantine/tiptap": "^7.13.4",
+ "@mantine/colors-generator": "^7.13.5",
+ "@mantine/core": "^7.13.5",
+ "@mantine/hooks": "^7.13.5",
+ "@mantine/modals": "^7.13.5",
+ "@mantine/tiptap": "^7.13.5",
"@million/lint": "1.0.11",
"@t3-oss/env-nextjs": "^0.11.1",
"@tabler/icons-react": "^3.21.0",
- "@tanstack/react-query": "^5.59.19",
- "@tanstack/react-query-devtools": "^5.59.19",
- "@tanstack/react-query-next-experimental": "5.59.19",
+ "@tanstack/react-query": "^5.59.20",
+ "@tanstack/react-query-devtools": "^5.59.20",
+ "@tanstack/react-query-next-experimental": "5.59.20",
"@trpc/client": "next",
"@trpc/next": "next",
"@trpc/react-query": "next",
@@ -63,7 +63,7 @@
"glob": "^11.0.0",
"jotai": "^2.10.1",
"mantine-react-table": "2.0.0-beta.7",
- "next": "^14.2.16",
+ "next": "^14.2.17",
"postcss-preset-mantine": "^1.17.0",
"prismjs": "^1.29.0",
"react": "^18.3.1",
@@ -72,7 +72,7 @@
"react-simple-code-editor": "^0.14.1",
"sass": "^1.80.6",
"superjson": "2.2.1",
- "swagger-ui-react": "^5.17.14",
+ "swagger-ui-react": "^5.18.2",
"use-deep-compare-effect": "^1.8.1"
},
"devDependencies": {
@@ -80,7 +80,7 @@
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
"@types/chroma-js": "2.4.4",
- "@types/node": "^22.8.7",
+ "@types/node": "^22.9.0",
"@types/prismjs": "^1.26.5",
"@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1",
diff --git a/apps/nextjs/src/app/[locale]/manage/search-engines/_form.tsx b/apps/nextjs/src/app/[locale]/manage/search-engines/_form.tsx
index e937cf503..4db3ba01a 100644
--- a/apps/nextjs/src/app/[locale]/manage/search-engines/_form.tsx
+++ b/apps/nextjs/src/app/[locale]/manage/search-engines/_form.tsx
@@ -1,8 +1,12 @@
"use client";
import Link from "next/link";
-import { Button, Grid, Group, Stack, Textarea, TextInput } from "@mantine/core";
+import type { SegmentedControlItem } from "@mantine/core";
+import { Button, Fieldset, Grid, Group, SegmentedControl, Stack, Textarea, TextInput } from "@mantine/core";
+import { WidgetIntegrationSelect } from "node_modules/@homarr/widgets/src/widget-integration-select";
+import { clientApi } from "@homarr/api/client";
+import { searchEngineTypes } from "@homarr/definitions";
import { useZodForm } from "@homarr/form";
import type { TranslationFunction } from "@homarr/translation";
import { useI18n } from "@homarr/translation/client";
@@ -25,6 +29,8 @@ export const SearchEngineForm = (props: SearchEngineFormProps) => {
const { submitButtonTranslation, handleSubmit, initialValues, isPending, disableShort } = props;
const t = useI18n();
+ const [integrationData] = clientApi.integration.allThatSupportSearch.useSuspenseQuery();
+
const form = useZodForm(validation.searchEngine.manage, {
initialValues: initialValues ?? {
name: "",
@@ -32,6 +38,7 @@ export const SearchEngineForm = (props: SearchEngineFormProps) => {
iconUrl: "",
urlTemplate: "",
description: "",
+ type: "generic",
},
});
@@ -52,11 +59,40 @@ export const SearchEngineForm = (props: SearchEngineFormProps) => {
-
+
+
+
diff --git a/apps/nextjs/src/app/[locale]/manage/search-engines/page.tsx b/apps/nextjs/src/app/[locale]/manage/search-engines/page.tsx
index 436380990..423c7fe9c 100644
--- a/apps/nextjs/src/app/[locale]/manage/search-engines/page.tsx
+++ b/apps/nextjs/src/app/[locale]/manage/search-engines/page.tsx
@@ -91,9 +91,16 @@ const SearchEngineCard = async ({ searchEngine }: SearchEngineCardProps) => {
{searchEngine.description}
)}
-
- {searchEngine.urlTemplate}
-
+ {searchEngine.type === "generic" && searchEngine.urlTemplate !== null && (
+
+ {searchEngine.urlTemplate}
+
+ )}
+ {searchEngine.type === "fromIntegration" && searchEngine.integrationId !== null && (
+
+ {t("page.list.interactive")}
+
+ )}
diff --git a/apps/tasks/package.json b/apps/tasks/package.json
index 5689fbdfb..ea3f53f2d 100644
--- a/apps/tasks/package.json
+++ b/apps/tasks/package.json
@@ -44,7 +44,7 @@
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
- "@types/node": "^22.8.7",
+ "@types/node": "^22.9.0",
"dotenv-cli": "^7.4.2",
"eslint": "^9.14.0",
"prettier": "^3.3.3",
diff --git a/e2e/health-checks.spec.ts b/e2e/health-checks.spec.ts
new file mode 100644
index 000000000..24fd26c91
--- /dev/null
+++ b/e2e/health-checks.spec.ts
@@ -0,0 +1,18 @@
+import { describe, expect, test } from "vitest";
+
+import { createHomarrContainer } from "./shared/create-homarr-container";
+
+describe("Health checks", () => {
+ test("ready and live should return 200 OK", async () => {
+ // Arrange
+ const homarrContainer = await createHomarrContainer().start();
+
+ // Act
+ const readyResponse = await fetch(`http://localhost:${homarrContainer.getMappedPort(7575)}/api/health/ready`);
+ const liveResponse = await fetch(`http://localhost:${homarrContainer.getMappedPort(7575)}/api/health/live`);
+
+ // Assert
+ expect(readyResponse.status).toBe(200);
+ expect(liveResponse.status).toBe(200);
+ }, 20_000);
+});
diff --git a/e2e/home.spec.ts b/e2e/home.spec.ts
new file mode 100644
index 000000000..e8550a3eb
--- /dev/null
+++ b/e2e/home.spec.ts
@@ -0,0 +1,16 @@
+import { describe, expect, test } from "vitest";
+
+import { createHomarrContainer } from "./shared/create-homarr-container";
+
+describe("Home", () => {
+ test("should open with status code 200", async () => {
+ // Arrange
+ const homarrContainer = await createHomarrContainer().start();
+
+ // Act
+ const homeResponse = await fetch(`http://localhost:${homarrContainer.getMappedPort(7575)}/`);
+
+ // Assert
+ expect(homeResponse.status).toBe(200);
+ }, 20_000);
+});
diff --git a/e2e/shared/create-homarr-container.ts b/e2e/shared/create-homarr-container.ts
new file mode 100644
index 000000000..84cbcc711
--- /dev/null
+++ b/e2e/shared/create-homarr-container.ts
@@ -0,0 +1,14 @@
+import { GenericContainer, Wait } from "testcontainers";
+
+export const createHomarrContainer = () => {
+ if (!process.env.CI) {
+ throw new Error("This test should only be run in CI or with a homarr image named 'homarr-e2e'");
+ }
+
+ return new GenericContainer("homarr-e2e")
+ .withEnvironment({
+ AUTH_SECRET: "secret",
+ })
+ .withExposedPorts(7575)
+ .withWaitStrategy(Wait.forHttp("/api/health/ready", 7575));
+};
diff --git a/package.json b/package.json
index 4a4782735..281596568 100644
--- a/package.json
+++ b/package.json
@@ -19,8 +19,9 @@
"lint": "turbo lint --continue -- --cache --cache-location node_modules/.cache/.eslintcache",
"lint:fix": "turbo lint --continue -- --fix --cache --cache-location node_modules/.cache/.eslintcache",
"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",
+ "test": "cross-env NODE_ENV=development vitest run --exclude e2e --coverage.enabled ",
+ "test:e2e": "cross-env NODE_ENV=development vitest e2e",
+ "test:ui": "cross-env NODE_ENV=development vitest --exclude e2e --ui --coverage.enabled",
"typecheck": "turbo typecheck",
"with-env": "dotenv -e .env --"
},
@@ -34,7 +35,7 @@
"cross-env": "^7.0.3",
"jsdom": "^25.0.1",
"prettier": "^3.3.3",
- "testcontainers": "^10.13.2",
+ "testcontainers": "^10.14.0",
"turbo": "^2.2.3",
"typescript": "^5.6.3",
"vite-tsconfig-paths": "^5.1.0",
@@ -49,4 +50,4 @@
"trpc-swagger@1.2.6": "patches/trpc-swagger@1.2.6.patch"
}
}
-}
\ No newline at end of file
+}
diff --git a/packages/api/package.json b/packages/api/package.json
index e387239e7..e362a338c 100644
--- a/packages/api/package.json
+++ b/packages/api/package.json
@@ -39,7 +39,7 @@
"@trpc/react-query": "next",
"@trpc/server": "next",
"dockerode": "^4.0.2",
- "next": "^14.2.16",
+ "next": "^14.2.17",
"react": "^18.3.1",
"superjson": "2.2.1",
"trpc-swagger": "^1.2.6"
diff --git a/packages/api/src/router/integration/integration-router.ts b/packages/api/src/router/integration/integration-router.ts
index 00aa72e34..54963407e 100644
--- a/packages/api/src/router/integration/integration-router.ts
+++ b/packages/api/src/router/integration/integration-router.ts
@@ -1,5 +1,6 @@
import { TRPCError } from "@trpc/server";
+import { objectEntries } from "@homarr/common";
import { decryptSecret, encryptSecret } from "@homarr/common/server";
import type { Database } from "@homarr/db";
import { and, asc, createId, eq, inArray, like } from "@homarr/db";
@@ -12,7 +13,14 @@ import {
integrationUserPermissions,
} from "@homarr/db/schema/sqlite";
import type { IntegrationSecretKind } from "@homarr/definitions";
-import { getPermissionsWithParents, integrationKinds, integrationSecretKindObject } from "@homarr/definitions";
+import {
+ getPermissionsWithParents,
+ integrationDefs,
+ integrationKinds,
+ integrationSecretKindObject,
+ isIntegrationWithSearchSupport,
+} from "@homarr/definitions";
+import { integrationCreatorFromSecrets } from "@homarr/integrations";
import { validation, z } from "@homarr/validation";
import { createTRPCRouter, permissionRequiredProcedure, protectedProcedure, publicProcedure } from "../../trpc";
@@ -62,6 +70,54 @@ export const integrationRouter = createTRPCRouter({
integrationKinds.indexOf(integrationA.kind) - integrationKinds.indexOf(integrationB.kind),
);
}),
+ allThatSupportSearch: publicProcedure.query(async ({ ctx }) => {
+ const groupsOfCurrentUser = await ctx.db.query.groupMembers.findMany({
+ where: eq(groupMembers.userId, ctx.session?.user.id ?? ""),
+ });
+
+ const integrationsFromDb = await ctx.db.query.integrations.findMany({
+ with: {
+ userPermissions: {
+ where: eq(integrationUserPermissions.userId, ctx.session?.user.id ?? ""),
+ },
+ groupPermissions: {
+ where: inArray(
+ integrationGroupPermissions.groupId,
+ groupsOfCurrentUser.map((group) => group.groupId),
+ ),
+ },
+ },
+ where: inArray(
+ integrations.kind,
+ objectEntries(integrationDefs)
+ .filter(([_, integration]) => integration.supportsSearch)
+ .map(([kind, _]) => kind),
+ ),
+ });
+ return integrationsFromDb
+ .map((integration) => {
+ const permissions = integration.userPermissions
+ .map(({ permission }) => permission)
+ .concat(integration.groupPermissions.map(({ permission }) => permission));
+
+ return {
+ id: integration.id,
+ name: integration.name,
+ kind: integration.kind,
+ url: integration.url,
+ permissions: {
+ hasUseAccess:
+ permissions.includes("use") || permissions.includes("interact") || permissions.includes("full"),
+ hasInteractAccess: permissions.includes("interact") || permissions.includes("full"),
+ hasFullAccess: permissions.includes("full"),
+ },
+ };
+ })
+ .sort(
+ (integrationA, integrationB) =>
+ integrationKinds.indexOf(integrationA.kind) - integrationKinds.indexOf(integrationB.kind),
+ );
+ }),
search: protectedProcedure
.input(z.object({ query: z.string(), limit: z.number().min(1).max(100).default(10) }))
.query(async ({ ctx, input }) => {
@@ -326,6 +382,33 @@ export const integrationRouter = createTRPCRouter({
);
});
}),
+ searchInIntegration: protectedProcedure
+ .input(z.object({ integrationId: z.string(), query: z.string() }))
+ .query(async ({ ctx, input }) => {
+ const integration = await ctx.db.query.integrations.findFirst({
+ where: eq(integrations.id, input.integrationId),
+ with: {
+ secrets: true,
+ },
+ });
+
+ if (!integration) {
+ throw new TRPCError({
+ code: "NOT_FOUND",
+ message: "The requested integration does not exist",
+ });
+ }
+
+ if (!isIntegrationWithSearchSupport(integration)) {
+ throw new TRPCError({
+ code: "BAD_REQUEST",
+ message: "The requested integration does not support searching",
+ });
+ }
+
+ const integrationInstance = integrationCreatorFromSecrets(integration);
+ return await integrationInstance.searchAsync(input.query);
+ }),
});
interface UpdateSecretInput {
diff --git a/packages/api/src/router/search-engine/search-engine-router.ts b/packages/api/src/router/search-engine/search-engine-router.ts
index 0452857d5..2bc1584b6 100644
--- a/packages/api/src/router/search-engine/search-engine-router.ts
+++ b/packages/api/src/router/search-engine/search-engine-router.ts
@@ -39,7 +39,19 @@ export const searchEngineRouter = createTRPCRouter({
});
}
- return searchEngine;
+ return searchEngine.type === "fromIntegration"
+ ? {
+ ...searchEngine,
+ type: "fromIntegration" as const,
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ integrationId: searchEngine.integrationId!,
+ }
+ : {
+ ...searchEngine,
+ type: "generic" as const,
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ urlTemplate: searchEngine.urlTemplate!,
+ };
}),
search: protectedProcedure.input(validation.common.search).query(async ({ ctx, input }) => {
return await ctx.db.query.searchEngines.findMany({
@@ -53,8 +65,10 @@ export const searchEngineRouter = createTRPCRouter({
name: input.name,
short: input.short.toLowerCase(),
iconUrl: input.iconUrl,
- urlTemplate: input.urlTemplate,
+ urlTemplate: "urlTemplate" in input ? input.urlTemplate : null,
description: input.description,
+ type: input.type,
+ integrationId: "integrationId" in input ? input.integrationId : null,
});
}),
update: protectedProcedure.input(validation.searchEngine.edit).mutation(async ({ ctx, input }) => {
@@ -74,8 +88,10 @@ export const searchEngineRouter = createTRPCRouter({
.set({
name: input.name,
iconUrl: input.iconUrl,
- urlTemplate: input.urlTemplate,
+ urlTemplate: "urlTemplate" in input ? input.urlTemplate : null,
description: input.description,
+ integrationId: "integrationId" in input ? input.integrationId : null,
+ type: input.type,
})
.where(eq(searchEngines.id, input.id));
}),
diff --git a/packages/auth/package.json b/packages/auth/package.json
index 11c72d4c2..19dc31a65 100644
--- a/packages/auth/package.json
+++ b/packages/auth/package.json
@@ -34,7 +34,7 @@
"bcrypt": "^5.1.1",
"cookies": "^0.9.1",
"ldapts": "7.2.1",
- "next": "^14.2.16",
+ "next": "^14.2.17",
"next-auth": "5.0.0-beta.25",
"react": "^18.3.1",
"react-dom": "^18.3.1"
diff --git a/packages/cli/package.json b/packages/cli/package.json
index 169f0c1fc..565f3c414 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -23,7 +23,7 @@
},
"prettier": "@homarr/prettier-config",
"dependencies": {
- "@drizzle-team/brocli": "^0.10.2",
+ "@drizzle-team/brocli": "^0.11.0",
"@homarr/auth": "workspace:^0.1.0",
"@homarr/common": "workspace:^0.1.0",
"@homarr/db": "workspace:^0.1.0",
diff --git a/packages/common/package.json b/packages/common/package.json
index 69c91ff7b..347628696 100644
--- a/packages/common/package.json
+++ b/packages/common/package.json
@@ -27,9 +27,9 @@
"dependencies": {
"@homarr/log": "workspace:^0.1.0",
"dayjs": "^1.11.13",
- "next": "^14.2.16",
+ "next": "^14.2.17",
"react": "^18.3.1",
- "tldts": "^6.1.58"
+ "tldts": "^6.1.59"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
diff --git a/packages/db/migrations/mysql/0015_unknown_firedrake.sql b/packages/db/migrations/mysql/0015_unknown_firedrake.sql
new file mode 100644
index 000000000..7506ba5e6
--- /dev/null
+++ b/packages/db/migrations/mysql/0015_unknown_firedrake.sql
@@ -0,0 +1,4 @@
+ALTER TABLE `search_engine` MODIFY COLUMN `url_template` text;--> statement-breakpoint
+ALTER TABLE `search_engine` ADD `type` varchar(64) DEFAULT 'generic' NOT NULL;--> statement-breakpoint
+ALTER TABLE `search_engine` ADD `integration_id` varchar(64);--> statement-breakpoint
+ALTER TABLE `search_engine` ADD CONSTRAINT `search_engine_integration_id_integration_id_fk` FOREIGN KEY (`integration_id`) REFERENCES `integration`(`id`) ON DELETE cascade ON UPDATE no action;
\ No newline at end of file
diff --git a/packages/db/migrations/mysql/meta/0015_snapshot.json b/packages/db/migrations/mysql/meta/0015_snapshot.json
new file mode 100644
index 000000000..a667261c6
--- /dev/null
+++ b/packages/db/migrations/mysql/meta/0015_snapshot.json
@@ -0,0 +1,1627 @@
+{
+ "version": "5",
+ "dialect": "mysql",
+ "id": "1bffd9d6-3a7b-42c4-a9e9-618a1b4ca9bc",
+ "prevId": "a7bb5792-ebee-46d2-a962-5795ba0d1465",
+ "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": {},
+ "checkConstraint": {}
+ },
+ "apiKey": {
+ "name": "apiKey",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "apiKey": {
+ "name": "apiKey",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "salt": {
+ "name": "salt",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "userId": {
+ "name": "userId",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "apiKey_userId_user_id_fk": {
+ "name": "apiKey_userId_user_id_fk",
+ "tableFrom": "apiKey",
+ "tableTo": "user",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "apiKey_id": {
+ "name": "apiKey_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "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": {},
+ "checkConstraint": {}
+ },
+ "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": {},
+ "checkConstraint": {}
+ },
+ "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": {},
+ "checkConstraint": {}
+ },
+ "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"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "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": {},
+ "checkConstraint": {}
+ },
+ "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": {},
+ "checkConstraint": {}
+ },
+ "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": {
+ "group_name_unique": {
+ "name": "group_name_unique",
+ "columns": ["name"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "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": {},
+ "checkConstraint": {}
+ },
+ "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": {},
+ "checkConstraint": {}
+ },
+ "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": "varchar(128)",
+ "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": {
+ "integration_group_permission__pk": {
+ "name": "integration_group_permission__pk",
+ "columns": ["integration_id", "group_id", "permission"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "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": {},
+ "checkConstraint": {}
+ },
+ "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": {},
+ "checkConstraint": {}
+ },
+ "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": "varchar(128)",
+ "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": {},
+ "checkConstraint": {}
+ },
+ "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": {},
+ "checkConstraint": {}
+ },
+ "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"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "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": {},
+ "checkConstraint": {}
+ },
+ "media": {
+ "name": "media",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(512)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "content": {
+ "name": "content",
+ "type": "BLOB",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "content_type": {
+ "name": "content_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "size": {
+ "name": "size",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ },
+ "creator_id": {
+ "name": "creator_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "media_creator_id_user_id_fk": {
+ "name": "media_creator_id_user_id_fk",
+ "tableFrom": "media",
+ "tableTo": "user",
+ "columnsFrom": ["creator_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "media_id": {
+ "name": "media_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "search_engine": {
+ "name": "search_engine",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "icon_url": {
+ "name": "icon_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "short": {
+ "name": "short",
+ "type": "varchar(8)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "url_template": {
+ "name": "url_template",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "type": {
+ "name": "type",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'generic'"
+ },
+ "integration_id": {
+ "name": "integration_id",
+ "type": "varchar(64)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "search_engine_integration_id_integration_id_fk": {
+ "name": "search_engine_integration_id_integration_id_fk",
+ "tableFrom": "search_engine",
+ "tableTo": "integration",
+ "columnsFrom": ["integration_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "search_engine_id": {
+ "name": "search_engine_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "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": "varchar(64)",
+ "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": {},
+ "checkConstraint": {}
+ },
+ "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"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "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": {},
+ "checkConstraint": {}
+ },
+ "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": "'dark'"
+ },
+ "firstDayOfWeek": {
+ "name": "firstDayOfWeek",
+ "type": "tinyint",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": 1
+ },
+ "pingIconsEnabled": {
+ "name": "pingIconsEnabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": false
+ }
+ },
+ "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": {},
+ "checkConstraint": {}
+ },
+ "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": {},
+ "checkConstraint": {}
+ }
+ },
+ "views": {},
+ "_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 1c201d874..7deab9fb2 100644
--- a/packages/db/migrations/mysql/meta/_journal.json
+++ b/packages/db/migrations/mysql/meta/_journal.json
@@ -106,6 +106,13 @@
"when": 1729524382483,
"tag": "0014_bizarre_red_shift",
"breakpoints": true
+ },
+ {
+ "idx": 15,
+ "version": "5",
+ "when": 1730653393442,
+ "tag": "0015_unknown_firedrake",
+ "breakpoints": true
}
]
}
diff --git a/packages/db/migrations/sqlite/0015_superb_psylocke.sql b/packages/db/migrations/sqlite/0015_superb_psylocke.sql
new file mode 100644
index 000000000..5b7b1a604
--- /dev/null
+++ b/packages/db/migrations/sqlite/0015_superb_psylocke.sql
@@ -0,0 +1,17 @@
+PRAGMA foreign_keys=OFF;--> statement-breakpoint
+CREATE TABLE `__new_search_engine` (
+ `id` text PRIMARY KEY NOT NULL,
+ `icon_url` text NOT NULL,
+ `name` text NOT NULL,
+ `short` text NOT NULL,
+ `description` text,
+ `url_template` text,
+ `type` text DEFAULT 'generic' NOT NULL,
+ `integration_id` text,
+ FOREIGN KEY (`integration_id`) REFERENCES `integration`(`id`) ON UPDATE no action ON DELETE cascade
+);
+--> statement-breakpoint
+INSERT INTO `__new_search_engine`("id", "icon_url", "name", "short", "description", "url_template") SELECT "id", "icon_url", "name", "short", "description", "url_template" FROM `search_engine`;--> statement-breakpoint
+DROP TABLE `search_engine`;--> statement-breakpoint
+ALTER TABLE `__new_search_engine` RENAME TO `search_engine`;--> statement-breakpoint
+PRAGMA foreign_keys=ON;
\ No newline at end of file
diff --git a/packages/db/migrations/sqlite/meta/0015_snapshot.json b/packages/db/migrations/sqlite/meta/0015_snapshot.json
new file mode 100644
index 000000000..43450f250
--- /dev/null
+++ b/packages/db/migrations/sqlite/meta/0015_snapshot.json
@@ -0,0 +1,1556 @@
+{
+ "version": "6",
+ "dialect": "sqlite",
+ "id": "605f3ca8-6cf3-4f5f-afd3-88d5190377b6",
+ "prevId": "f76c21f2-0fbd-4107-a029-e05e917b9428",
+ "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": {},
+ "checkConstraints": {}
+ },
+ "apiKey": {
+ "name": "apiKey",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "apiKey": {
+ "name": "apiKey",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "salt": {
+ "name": "salt",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "userId": {
+ "name": "userId",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "apiKey_userId_user_id_fk": {
+ "name": "apiKey_userId_user_id_fk",
+ "tableFrom": "apiKey",
+ "tableTo": "user",
+ "columnsFrom": ["userId"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "checkConstraints": {}
+ },
+ "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": {},
+ "checkConstraints": {}
+ },
+ "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": {},
+ "checkConstraints": {}
+ },
+ "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": {},
+ "checkConstraints": {}
+ },
+ "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": {},
+ "checkConstraints": {}
+ },
+ "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": {},
+ "checkConstraints": {}
+ },
+ "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": {},
+ "checkConstraints": {}
+ },
+ "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": {
+ "group_name_unique": {
+ "name": "group_name_unique",
+ "columns": ["name"],
+ "isUnique": true
+ }
+ },
+ "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": {},
+ "checkConstraints": {}
+ },
+ "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": {},
+ "checkConstraints": {}
+ },
+ "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": {},
+ "checkConstraints": {}
+ },
+ "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": {},
+ "checkConstraints": {}
+ },
+ "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": {},
+ "checkConstraints": {}
+ },
+ "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": {},
+ "checkConstraints": {}
+ },
+ "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": {},
+ "checkConstraints": {}
+ },
+ "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": {},
+ "checkConstraints": {}
+ },
+ "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": {},
+ "checkConstraints": {}
+ },
+ "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": {},
+ "checkConstraints": {}
+ },
+ "media": {
+ "name": "media",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "content": {
+ "name": "content",
+ "type": "blob",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "content_type": {
+ "name": "content_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "size": {
+ "name": "size",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(unixepoch())"
+ },
+ "creator_id": {
+ "name": "creator_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "media_creator_id_user_id_fk": {
+ "name": "media_creator_id_user_id_fk",
+ "tableFrom": "media",
+ "tableTo": "user",
+ "columnsFrom": ["creator_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "checkConstraints": {}
+ },
+ "search_engine": {
+ "name": "search_engine",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "icon_url": {
+ "name": "icon_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "short": {
+ "name": "short",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "url_template": {
+ "name": "url_template",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "type": {
+ "name": "type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'generic'"
+ },
+ "integration_id": {
+ "name": "integration_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "search_engine_integration_id_integration_id_fk": {
+ "name": "search_engine_integration_id_integration_id_fk",
+ "tableFrom": "search_engine",
+ "tableTo": "integration",
+ "columnsFrom": ["integration_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "checkConstraints": {}
+ },
+ "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": {},
+ "checkConstraints": {}
+ },
+ "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": {},
+ "checkConstraints": {}
+ },
+ "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": {},
+ "checkConstraints": {}
+ },
+ "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": "'dark'"
+ },
+ "firstDayOfWeek": {
+ "name": "firstDayOfWeek",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": 1
+ },
+ "pingIconsEnabled": {
+ "name": "pingIconsEnabled",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": false
+ }
+ },
+ "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": {},
+ "checkConstraints": {}
+ },
+ "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": {},
+ "checkConstraints": {}
+ }
+ },
+ "views": {},
+ "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 36d590465..3fdf0a8da 100644
--- a/packages/db/migrations/sqlite/meta/_journal.json
+++ b/packages/db/migrations/sqlite/meta/_journal.json
@@ -106,6 +106,13 @@
"when": 1729524387583,
"tag": "0014_colorful_cargill",
"breakpoints": true
+ },
+ {
+ "idx": 15,
+ "version": "6",
+ "when": 1730653336134,
+ "tag": "0015_superb_psylocke",
+ "breakpoints": true
}
]
}
diff --git a/packages/db/package.json b/packages/db/package.json
index 394851905..5a04982cb 100644
--- a/packages/db/package.json
+++ b/packages/db/package.json
@@ -41,12 +41,12 @@
"@homarr/log": "workspace:^0.1.0",
"@homarr/server-settings": "workspace:^0.1.0",
"@paralleldrive/cuid2": "^2.2.2",
- "@testcontainers/mysql": "^10.13.2",
+ "@testcontainers/mysql": "^10.14.0",
"better-sqlite3": "^11.5.0",
"dotenv": "^16.4.5",
- "drizzle-kit": "^0.27.1",
- "drizzle-orm": "^0.36.0",
- "mysql2": "3.11.3"
+ "drizzle-kit": "^0.28.0",
+ "drizzle-orm": "^0.36.1",
+ "mysql2": "3.11.4"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
diff --git a/packages/db/schema/mysql.ts b/packages/db/schema/mysql.ts
index 0bbbbbe8d..062da629b 100644
--- a/packages/db/schema/mysql.ts
+++ b/packages/db/schema/mysql.ts
@@ -25,6 +25,7 @@ import type {
IntegrationKind,
IntegrationPermission,
IntegrationSecretKind,
+ SearchEngineType,
SectionKind,
SupportedAuthProvider,
WidgetKind,
@@ -395,7 +396,9 @@ export const searchEngines = mysqlTable("search_engine", {
name: varchar("name", { length: 64 }).notNull(),
short: varchar("short", { length: 8 }).notNull(),
description: text("description"),
- urlTemplate: text("url_template").notNull(),
+ urlTemplate: text("url_template"),
+ type: varchar("type", { length: 64 }).$type().notNull().default("generic"),
+ integrationId: varchar("integration_id", { length: 64 }).references(() => integrations.id, { onDelete: "cascade" }),
});
export const accountRelations = relations(accounts, ({ one }) => ({
@@ -568,3 +571,10 @@ export const integrationItemRelations = relations(integrationItems, ({ one }) =>
references: [items.id],
}),
}));
+
+export const searchEngineRelations = relations(searchEngines, ({ one }) => ({
+ integration: one(integrations, {
+ fields: [searchEngines.integrationId],
+ references: [integrations.id],
+ }),
+}));
diff --git a/packages/db/schema/sqlite.ts b/packages/db/schema/sqlite.ts
index a66b5f72a..f2f19e71c 100644
--- a/packages/db/schema/sqlite.ts
+++ b/packages/db/schema/sqlite.ts
@@ -16,6 +16,7 @@ import type {
IntegrationKind,
IntegrationPermission,
IntegrationSecretKind,
+ SearchEngineType,
SectionKind,
SupportedAuthProvider,
WidgetKind,
@@ -382,7 +383,9 @@ export const searchEngines = sqliteTable("search_engine", {
name: text("name").notNull(),
short: text("short").notNull(),
description: text("description"),
- urlTemplate: text("url_template").notNull(),
+ urlTemplate: text("url_template"),
+ type: text("type").$type().notNull().default("generic"),
+ integrationId: text("integration_id").references(() => integrations.id, { onDelete: "cascade" }),
});
export const accountRelations = relations(accounts, ({ one }) => ({
@@ -557,6 +560,13 @@ export const integrationItemRelations = relations(integrationItems, ({ one }) =>
}),
}));
+export const searchEngineRelations = relations(searchEngines, ({ one }) => ({
+ integration: one(integrations, {
+ fields: [searchEngines.integrationId],
+ references: [integrations.id],
+ }),
+}));
+
export type User = InferSelectModel;
export type Account = InferSelectModel;
export type Session = InferSelectModel;
diff --git a/packages/definitions/src/index.ts b/packages/definitions/src/index.ts
index c43a2f96c..12c878462 100644
--- a/packages/definitions/src/index.ts
+++ b/packages/definitions/src/index.ts
@@ -9,3 +9,4 @@ export * from "./user";
export * from "./group";
export * from "./docs";
export * from "./cookie";
+export * from "./search-engine";
diff --git a/packages/definitions/src/integration.ts b/packages/definitions/src/integration.ts
index 8603f148a..f9f6cc3e7 100644
--- a/packages/definitions/src/integration.ts
+++ b/packages/definitions/src/integration.ts
@@ -14,6 +14,7 @@ interface integrationDefinition {
iconUrl: string;
secretKinds: AtLeastOneOf; // at least one secret kind set is required
category: AtLeastOneOf;
+ supportsSearch: boolean;
}
export const integrationDefs = {
@@ -22,108 +23,126 @@ export const integrationDefs = {
secretKinds: [["apiKey"]],
iconUrl: "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/sabnzbd.png",
category: ["downloadClient", "usenet"],
+ supportsSearch: false,
},
nzbGet: {
name: "NZBGet",
secretKinds: [["username", "password"]],
iconUrl: "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/nzbget.png",
category: ["downloadClient", "usenet"],
+ supportsSearch: false,
},
deluge: {
name: "Deluge",
secretKinds: [["password"]],
iconUrl: "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/deluge.png",
category: ["downloadClient", "torrent"],
+ supportsSearch: false,
},
transmission: {
name: "Transmission",
secretKinds: [["username", "password"]],
iconUrl: "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/transmission.png",
category: ["downloadClient", "torrent"],
+ supportsSearch: false,
},
qBittorrent: {
name: "qBittorrent",
secretKinds: [["username", "password"]],
iconUrl: "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/qbittorrent.png",
category: ["downloadClient", "torrent"],
+ supportsSearch: false,
},
sonarr: {
name: "Sonarr",
secretKinds: [["apiKey"]],
iconUrl: "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/sonarr.png",
category: ["calendar"],
+ supportsSearch: false,
},
radarr: {
name: "Radarr",
secretKinds: [["apiKey"]],
iconUrl: "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/radarr.png",
category: ["calendar"],
+ supportsSearch: false,
},
lidarr: {
name: "Lidarr",
secretKinds: [["apiKey"]],
iconUrl: "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/lidarr.png",
category: ["calendar"],
+ supportsSearch: false,
},
readarr: {
name: "Readarr",
secretKinds: [["apiKey"]],
iconUrl: "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/readarr.png",
category: ["calendar"],
+ supportsSearch: false,
},
prowlarr: {
name: "Prowlarr",
secretKinds: [["apiKey"]],
iconUrl: "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/prowlarr.png",
category: ["indexerManager"],
+ supportsSearch: false,
},
jellyfin: {
name: "Jellyfin",
secretKinds: [["username", "password"], ["apiKey"]],
iconUrl: "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/jellyfin.png",
category: ["mediaService"],
+ supportsSearch: false,
},
plex: {
name: "Plex",
secretKinds: [["apiKey"]],
iconUrl: "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/plex.png",
category: ["mediaService"],
+ supportsSearch: false,
},
jellyseerr: {
name: "Jellyseerr",
secretKinds: [["apiKey"]],
iconUrl: "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/jellyseerr.png",
category: ["mediaSearch", "mediaRequest"],
+ supportsSearch: true,
},
overseerr: {
name: "Overseerr",
secretKinds: [["apiKey"]],
iconUrl: "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/overseerr.png",
category: ["mediaSearch", "mediaRequest"],
+ supportsSearch: true,
},
piHole: {
name: "Pi-hole",
secretKinds: [["apiKey"]],
iconUrl: "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/pi-hole.png",
category: ["dnsHole"],
+ supportsSearch: false,
},
adGuardHome: {
name: "AdGuard Home",
secretKinds: [["username", "password"]],
iconUrl: "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/adguard-home.png",
category: ["dnsHole"],
+ supportsSearch: false,
},
homeAssistant: {
name: "Home Assistant",
secretKinds: [["apiKey"]],
iconUrl: "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/home-assistant.png",
category: ["smartHomeServer"],
+ supportsSearch: false,
},
openmediavault: {
name: "OpenMediaVault",
secretKinds: [["username", "password"]],
iconUrl: "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/openmediavault.png",
category: ["healthMonitoring"],
+ supportsSearch: false,
},
} as const satisfies Record;
@@ -162,6 +181,22 @@ export type IntegrationKindByCategory = {
U
: never;
+/**
+ * Checks if search is supported by the integration
+ * Uses a typescript guard with is to allow only integrations with search support within if statement
+ * @param integration integration with kind
+ * @returns true if the integration supports search
+ */
+export const isIntegrationWithSearchSupport = (integration: {
+ kind: IntegrationKind;
+}): integration is { kind: IntegrationWithSearchSupport } => {
+ return integrationDefs[integration.kind].supportsSearch;
+};
+
+type IntegrationWithSearchSupport = {
+ [Key in keyof typeof integrationDefs]: true extends (typeof integrationDefs)[Key]["supportsSearch"] ? Key : never;
+}[keyof typeof integrationDefs];
+
export type IntegrationSecretKind = keyof typeof integrationSecretKindObject;
export type IntegrationKind = keyof typeof integrationDefs;
export type IntegrationCategory =
diff --git a/packages/definitions/src/search-engine.ts b/packages/definitions/src/search-engine.ts
new file mode 100644
index 000000000..ecf862d5d
--- /dev/null
+++ b/packages/definitions/src/search-engine.ts
@@ -0,0 +1,2 @@
+export const searchEngineTypes = ["generic", "fromIntegration"] as const;
+export type SearchEngineType = (typeof searchEngineTypes)[number];
diff --git a/packages/form/package.json b/packages/form/package.json
index 0c4b34e7b..de0853ed9 100644
--- a/packages/form/package.json
+++ b/packages/form/package.json
@@ -24,7 +24,7 @@
"dependencies": {
"@homarr/translation": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
- "@mantine/form": "^7.13.4"
+ "@mantine/form": "^7.13.5"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
diff --git a/packages/form/src/index.ts b/packages/form/src/index.ts
index 60a2f425e..f46a2d1ed 100644
--- a/packages/form/src/index.ts
+++ b/packages/form/src/index.ts
@@ -2,11 +2,14 @@ import { useForm, zodResolver } from "@mantine/form";
import { useI18n } from "@homarr/translation/client";
import { z } from "@homarr/validation";
-import type { AnyZodObject, ZodEffects, ZodIntersection } from "@homarr/validation";
+import type { AnyZodObject, ZodDiscriminatedUnion, ZodEffects, ZodIntersection } from "@homarr/validation";
import { zodErrorMap } from "@homarr/validation/form";
export const useZodForm = <
- TSchema extends AnyZodObject | ZodEffects | ZodIntersection,
+ TSchema extends
+ | AnyZodObject
+ | ZodEffects
+ | ZodIntersection, AnyZodObject>,
>(
schema: TSchema,
options: Omit<
diff --git a/packages/integrations/src/base/searchable-integration.ts b/packages/integrations/src/base/searchable-integration.ts
new file mode 100644
index 000000000..918c3b07f
--- /dev/null
+++ b/packages/integrations/src/base/searchable-integration.ts
@@ -0,0 +1,3 @@
+export interface ISearchableIntegration {
+ searchAsync(query: string): Promise<{ image?: string; name: string; link: string }[]>;
+}
diff --git a/packages/integrations/src/overseerr/overseerr-integration.ts b/packages/integrations/src/overseerr/overseerr-integration.ts
index 9de4c316c..8b1d9e8e6 100644
--- a/packages/integrations/src/overseerr/overseerr-integration.ts
+++ b/packages/integrations/src/overseerr/overseerr-integration.ts
@@ -1,13 +1,33 @@
import { z } from "@homarr/validation";
import { Integration } from "../base/integration";
+import type { ISearchableIntegration } from "../base/searchable-integration";
import type { MediaRequest, RequestStats, RequestUser } from "../interfaces/media-requests/media-request";
import { MediaAvailability, MediaRequestStatus } from "../interfaces/media-requests/media-request";
/**
* Overseerr Integration. See https://api-docs.overseerr.dev
*/
-export class OverseerrIntegration extends Integration {
+export class OverseerrIntegration extends Integration implements ISearchableIntegration {
+ public async searchAsync(query: string): Promise<{ image?: string; name: string; link: string; text?: string }[]> {
+ const response = await fetch(`${this.integration.url}/api/v1/search?query=${query}`, {
+ headers: {
+ "X-Api-Key": this.getSecretValue("apiKey"),
+ },
+ });
+ const schemaData = await searchSchema.parseAsync(await response.json());
+
+ if (!schemaData.results) {
+ return [];
+ }
+
+ return schemaData.results.map((result) => ({
+ name: "name" in result ? result.name : result.title,
+ link: `${this.integration.url}/${result.mediaType}/${result.id}`,
+ image: constructSearchResultImage(this.integration.url, result),
+ text: "overview" in result ? result.overview : undefined,
+ }));
+ }
public async testConnectionAsync(): Promise {
const response = await fetch(`${this.integration.url}/api/v1/auth/me`, {
headers: {
@@ -180,6 +200,35 @@ interface MovieInformation {
releaseDate: string;
}
+const searchSchema = z.object({
+ results: z
+ .array(
+ z.discriminatedUnion("mediaType", [
+ z.object({
+ id: z.number(),
+ mediaType: z.literal("tv"),
+ name: z.string(),
+ posterPath: z.string().startsWith("/").endsWith(".jpg").nullable(),
+ overview: z.string(),
+ }),
+ z.object({
+ id: z.number(),
+ mediaType: z.literal("movie"),
+ title: z.string(),
+ posterPath: z.string().startsWith("/").endsWith(".jpg").nullable(),
+ overview: z.string(),
+ }),
+ z.object({
+ id: z.number(),
+ mediaType: z.literal("person"),
+ name: z.string(),
+ profilePath: z.string().startsWith("/").endsWith(".jpg").nullable(),
+ }),
+ ]),
+ )
+ .optional(),
+});
+
const getRequestsSchema = z.object({
results: z
.array(
@@ -239,3 +288,32 @@ const getUsersSchema = z.object({
return val;
}),
});
+
+const constructSearchResultImage = (
+ appUrl: string,
+ result: Exclude["results"], undefined>[number],
+) => {
+ const path = getResultImagePath(appUrl, result);
+ if (!path) {
+ return undefined;
+ }
+
+ return `https://image.tmdb.org/t/p/w600_and_h900_bestv2${path}`;
+};
+
+const getResultImagePath = (
+ appUrl: string,
+ result: Exclude["results"], undefined>[number],
+) => {
+ switch (result.mediaType) {
+ case "person":
+ return result.profilePath;
+ case "tv":
+ case "movie":
+ return result.posterPath;
+ default:
+ throw new Error(
+ `Unable to get search result image from media type '${(result as { mediaType: string }).mediaType}'`,
+ );
+ }
+};
diff --git a/packages/integrations/src/types.ts b/packages/integrations/src/types.ts
index 2bdcc6988..1d3c961d5 100644
--- a/packages/integrations/src/types.ts
+++ b/packages/integrations/src/types.ts
@@ -4,3 +4,4 @@ export * from "./interfaces/health-monitoring/healt-monitoring";
export * from "./interfaces/indexer-manager/indexer";
export * from "./interfaces/media-requests/media-request";
export * from "./pi-hole/pi-hole-types";
+export * from "./base/searchable-integration";
diff --git a/packages/modals-collection/package.json b/packages/modals-collection/package.json
index 7bdab6661..74d166149 100644
--- a/packages/modals-collection/package.json
+++ b/packages/modals-collection/package.json
@@ -30,10 +30,10 @@
"@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
- "@mantine/core": "^7.13.4",
+ "@mantine/core": "^7.13.5",
"@tabler/icons-react": "^3.21.0",
"dayjs": "^1.11.13",
- "next": "^14.2.16",
+ "next": "^14.2.17",
"react": "^18.3.1"
},
"devDependencies": {
diff --git a/packages/modals/package.json b/packages/modals/package.json
index 0cd52bd60..0884a1f33 100644
--- a/packages/modals/package.json
+++ b/packages/modals/package.json
@@ -24,8 +24,8 @@
"dependencies": {
"@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0",
- "@mantine/core": "^7.13.4",
- "@mantine/hooks": "^7.13.4",
+ "@mantine/core": "^7.13.5",
+ "@mantine/hooks": "^7.13.5",
"react": "^18.3.1"
},
"devDependencies": {
diff --git a/packages/notifications/package.json b/packages/notifications/package.json
index 776f0d2fc..418562c8c 100644
--- a/packages/notifications/package.json
+++ b/packages/notifications/package.json
@@ -24,7 +24,7 @@
"prettier": "@homarr/prettier-config",
"dependencies": {
"@homarr/ui": "workspace:^0.1.0",
- "@mantine/notifications": "^7.13.4",
+ "@mantine/notifications": "^7.13.5",
"@tabler/icons-react": "^3.21.0"
},
"devDependencies": {
diff --git a/packages/old-import/src/widgets/definitions/weather.ts b/packages/old-import/src/widgets/definitions/weather.ts
index f883eefa4..099e1468b 100644
--- a/packages/old-import/src/widgets/definitions/weather.ts
+++ b/packages/old-import/src/widgets/definitions/weather.ts
@@ -12,5 +12,15 @@ export type OldmarrWeatherDefinition = CommonOldmarrWidgetDefinition<
latitude: number;
longitude: number;
};
+ dateFormat:
+ | "hide"
+ | "dddd, MMMM D"
+ | "dddd, D MMMM"
+ | "MMM D"
+ | "D MMM"
+ | "DD/MM/YYYY"
+ | "MM/DD/YYYY"
+ | "DD/MM"
+ | "MM/DD";
}
>;
diff --git a/packages/old-import/src/widgets/options.ts b/packages/old-import/src/widgets/options.ts
index 2b688aadf..a95c8a5d9 100644
--- a/packages/old-import/src/widgets/options.ts
+++ b/packages/old-import/src/widgets/options.ts
@@ -72,6 +72,7 @@ const optionMapping: OptionMapping = {
isFormatFahrenheit: (oldOptions) => oldOptions.displayInFahrenheit,
location: (oldOptions) => oldOptions.location,
showCity: (oldOptions) => oldOptions.displayCityName,
+ dateFormat: (oldOptions) => (oldOptions.dateFormat === "hide" ? undefined : oldOptions.dateFormat),
},
iframe: {
embedUrl: (oldOptions) => oldOptions.embedUrl,
diff --git a/packages/spotlight/package.json b/packages/spotlight/package.json
index 9bca91125..767e398f0 100644
--- a/packages/spotlight/package.json
+++ b/packages/spotlight/package.json
@@ -26,16 +26,17 @@
"@homarr/auth": "workspace:^0.1.0",
"@homarr/common": "workspace:^0.1.0",
"@homarr/definitions": "workspace:^0.1.0",
+ "@homarr/integrations": "workspace:^0.1.0",
"@homarr/modals": "workspace:^0.1.0",
"@homarr/modals-collection": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0",
- "@mantine/core": "^7.13.4",
- "@mantine/hooks": "^7.13.4",
- "@mantine/spotlight": "^7.13.4",
+ "@mantine/core": "^7.13.5",
+ "@mantine/hooks": "^7.13.5",
+ "@mantine/spotlight": "^7.13.5",
"@tabler/icons-react": "^3.21.0",
"jotai": "^2.10.1",
- "next": "^14.2.16",
+ "next": "^14.2.17",
"react": "^18.3.1",
"use-deep-compare-effect": "^1.8.1"
},
diff --git a/packages/spotlight/src/modes/external/search-engines-search-group.tsx b/packages/spotlight/src/modes/external/search-engines-search-group.tsx
index fd7563207..5c6529624 100644
--- a/packages/spotlight/src/modes/external/search-engines-search-group.tsx
+++ b/packages/spotlight/src/modes/external/search-engines-search-group.tsx
@@ -1,4 +1,4 @@
-import { Group, Kbd, Stack, Text } from "@mantine/core";
+import { Group, Image, Kbd, Stack, Text } from "@mantine/core";
import { IconSearch } from "@tabler/icons-react";
import type { RouterOutputs } from "@homarr/api";
@@ -12,29 +12,69 @@ import { interaction } from "../../lib/interaction";
type SearchEngine = RouterOutputs["searchEngine"]["search"][number];
export const searchEnginesChildrenOptions = createChildrenOptions({
- useActions: () => [
- {
- key: "search",
- Component: ({ name }) => {
- const tChildren = useScopedI18n("search.mode.external.group.searchEngine.children");
+ useActions: (searchEngine, query) => {
+ const { data } = clientApi.integration.searchInIntegration.useQuery(
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ { integrationId: searchEngine.integrationId!, query },
+ {
+ enabled: searchEngine.type === "fromIntegration" && searchEngine.integrationId !== null && query.length > 0,
+ },
+ );
+ if (searchEngine.type === "generic") {
+ return [
+ {
+ key: "search",
+ Component: ({ name }) => {
+ const tChildren = useScopedI18n("search.mode.external.group.searchEngine.children");
+
+ return (
+
+
+ {tChildren("action.search.label", { name })}
+
+ );
+ },
+ useInteraction: interaction.link(({ urlTemplate }, query) => ({
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ href: urlTemplate!.replace("%s", query),
+ })),
+ },
+ ];
+ }
+
+ return (data ?? []).map((searchResult, index) => ({
+ key: `search-result-${index}`,
+ Component: () => {
return (
-
-
- {tChildren("action.search.label", { name })}
+
+ {searchResult.image ? (
+
+ ) : (
+
+ )}
+
+ {searchResult.name}
+ {searchResult.text && (
+
+ {searchResult.text}
+
+ )}
+
);
},
- useInteraction: interaction.link(({ urlTemplate }, query) => ({
- href: urlTemplate.replace("%s", query),
+ useInteraction: interaction.link(() => ({
+ href: searchResult.link,
+ newTab: true,
})),
- },
- ],
+ }));
+ },
DetailComponent({ options }) {
const tChildren = useScopedI18n("search.mode.external.group.searchEngine.children");
return (
- {tChildren("detail.title")}
+ {options.type === "generic" ? tChildren("detail.title") : tChildren("searchResults.title")}
{options.name}
@@ -72,10 +112,24 @@ export const searchEnginesSearchGroups = createGroup({
setChildrenOptions(searchEnginesChildrenOptions(engine));
},
- useInteraction: interaction.link(({ urlTemplate }, query) => ({
- href: urlTemplate.replace("%s", query),
- newTab: true,
- })),
+ useInteraction: (searchEngine, query) => {
+ if (searchEngine.type === "generic" && searchEngine.urlTemplate) {
+ return {
+ type: "link" as const,
+ href: searchEngine.urlTemplate.replace("%s", query),
+ newTab: true,
+ };
+ }
+
+ if (searchEngine.type === "fromIntegration" && searchEngine.integrationId !== null) {
+ return {
+ type: "children",
+ ...searchEnginesChildrenOptions(searchEngine),
+ };
+ }
+
+ throw new Error(`Unable to process search engine with type ${searchEngine.type}`);
+ },
useQueryOptions(query) {
return clientApi.searchEngine.search.useQuery({
query: query.trim(),
diff --git a/packages/translation/package.json b/packages/translation/package.json
index 5bce578e1..adbb7129d 100644
--- a/packages/translation/package.json
+++ b/packages/translation/package.json
@@ -32,8 +32,8 @@
"dayjs": "^1.11.13",
"deepmerge": "4.3.1",
"mantine-react-table": "2.0.0-beta.7",
- "next": "^14.2.16",
- "next-intl": "3.24.0",
+ "next": "^14.2.17",
+ "next-intl": "3.25.0",
"react": "^18.3.1"
},
"devDependencies": {
diff --git a/packages/translation/src/lang/en.json b/packages/translation/src/lang/en.json
index 5811f712c..849a8f662 100644
--- a/packages/translation/src/lang/en.json
+++ b/packages/translation/src/lang/en.json
@@ -1134,6 +1134,10 @@
"forecastDayCount": {
"label": "Amount of forecast days",
"description": "When the widget is not wide enough, less days are shown"
+ },
+ "dateFormat": {
+ "label": "Date Format",
+ "description": "How the date should look like"
}
},
"kind": {
@@ -2427,6 +2431,9 @@
},
"detail": {
"title": "Select an action for the search engine"
+ },
+ "searchResults": {
+ "title": "Select a search result for actions"
}
},
"option": {
@@ -2596,7 +2603,8 @@
"noResults": {
"title": "There aren't any search engines",
"action": "Create your first search engine"
- }
+ },
+ "interactive": "Interactive, uses an integration"
},
"create": {
"title": "New search engine",
@@ -2622,6 +2630,11 @@
"title": "Unable to apply changes",
"message": "The search engine could not be saved"
}
+ },
+ "configControl": "Configuration",
+ "searchEngineType": {
+ "generic": "Generic",
+ "fromIntegration": "From integration"
}
},
"delete": {
diff --git a/packages/ui/package.json b/packages/ui/package.json
index 3ba424c80..19b0a7269 100644
--- a/packages/ui/package.json
+++ b/packages/ui/package.json
@@ -28,12 +28,12 @@
"@homarr/log": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
- "@mantine/core": "^7.13.4",
- "@mantine/dates": "^7.13.4",
- "@mantine/hooks": "^7.13.4",
+ "@mantine/core": "^7.13.5",
+ "@mantine/dates": "^7.13.5",
+ "@mantine/hooks": "^7.13.5",
"@tabler/icons-react": "^3.21.0",
"mantine-react-table": "2.0.0-beta.7",
- "next": "^14.2.16",
+ "next": "^14.2.17",
"react": "^18.3.1"
},
"devDependencies": {
diff --git a/packages/validation/src/search-engine.ts b/packages/validation/src/search-engine.ts
index ab5f4823e..dbf9b0f4b 100644
--- a/packages/validation/src/search-engine.ts
+++ b/packages/validation/src/search-engine.ts
@@ -1,20 +1,41 @@
+import type { ZodTypeAny } from "zod";
import { z } from "zod";
+import type { SearchEngineType } from "@homarr/definitions";
+
+const genericSearchEngine = z.object({
+ type: z.literal("generic" satisfies SearchEngineType),
+ urlTemplate: z.string().min(1).startsWith("http").includes("%s"),
+});
+
+const fromIntegrationSearchEngine = z.object({
+ type: z.literal("fromIntegration" satisfies SearchEngineType),
+ integrationId: z.string().optional(),
+});
+
const manageSearchEngineSchema = z.object({
name: z.string().min(1).max(64),
short: z.string().min(1).max(8),
iconUrl: z.string().min(1),
- urlTemplate: z.string().min(1).startsWith("http").includes("%s"),
description: z.string().max(512).nullable(),
});
-const editSearchEngineSchema = manageSearchEngineSchema
- .extend({
- id: z.string(),
- })
- .omit({ short: true });
+const createManageSearchEngineSchema = (
+ callback: (schema: typeof manageSearchEngineSchema) => T,
+) =>
+ z
+ .discriminatedUnion("type", [genericSearchEngine, fromIntegrationSearchEngine])
+ .and(callback(manageSearchEngineSchema));
+
+const editSearchEngineSchema = createManageSearchEngineSchema((schema) =>
+ schema
+ .extend({
+ id: z.string(),
+ })
+ .omit({ short: true }),
+);
export const searchEngineSchemas = {
- manage: manageSearchEngineSchema,
+ manage: createManageSearchEngineSchema((schema) => schema),
edit: editSearchEngineSchema,
};
diff --git a/packages/widgets/package.json b/packages/widgets/package.json
index c02d61d27..5f51acbc0 100644
--- a/packages/widgets/package.json
+++ b/packages/widgets/package.json
@@ -40,8 +40,8 @@
"@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
- "@mantine/core": "^7.13.4",
- "@mantine/hooks": "^7.13.4",
+ "@mantine/core": "^7.13.5",
+ "@mantine/hooks": "^7.13.5",
"@tabler/icons-react": "^3.21.0",
"@tiptap/extension-color": "2.9.1",
"@tiptap/extension-highlight": "2.9.1",
@@ -61,7 +61,7 @@
"clsx": "^2.1.1",
"dayjs": "^1.11.13",
"mantine-react-table": "2.0.0-beta.7",
- "next": "^14.2.16",
+ "next": "^14.2.17",
"react": "^18.3.1",
"video.js": "^8.19.1"
},
diff --git a/packages/widgets/src/weather/component.tsx b/packages/widgets/src/weather/component.tsx
index ed487f38e..9f5da3ade 100644
--- a/packages/widgets/src/weather/component.tsx
+++ b/packages/widgets/src/weather/component.tsx
@@ -115,6 +115,7 @@ const WeeklyForecast = ({ options, weather }: WeatherProps) => {
};
function Forecast({ weather, options }: WeatherProps) {
+ const dateFormat = options.dateFormat;
return (
{weather.daily.slice(0, options.forecastDayCount).map((dayWeather, index) => (
@@ -136,6 +137,7 @@ function Forecast({ weather, options }: WeatherProps) {
{
interface WeatherDescriptionProps {
weatherOnly?: boolean;
+ dateFormat?: WidgetProps<"weather">["options"]["dateFormat"];
time?: string;
weatherCode: number;
maxTemp?: string;
@@ -42,13 +45,21 @@ interface WeatherDescriptionProps {
/**
* Description Dropdown for a given set of parameters
+ * @param dateFormat format of the date that will be displayed on the widget
* @param time date that can be formatted by dayjs
* @param weatherCode weather code from api
* @param maxTemp preformatted string for max temperature
* @param minTemp preformatted string for min temperature
* @returns Content for a HoverCard dropdown presenting weather information
*/
-export const WeatherDescription = ({ weatherOnly, time, weatherCode, maxTemp, minTemp }: WeatherDescriptionProps) => {
+export const WeatherDescription = ({
+ weatherOnly,
+ dateFormat,
+ time,
+ weatherCode,
+ maxTemp,
+ minTemp,
+}: WeatherDescriptionProps) => {
const t = useScopedI18n("widget.weather");
const tCommon = useScopedI18n("common");
@@ -60,7 +71,7 @@ export const WeatherDescription = ({ weatherOnly, time, weatherCode, maxTemp, mi
return (
- {dayjs(time).format("dddd MMMM D YYYY")}
+ {dayjs(time).format(dateFormat)}
{t(`kind.${name}`)}
{`${tCommon("information.max")}: ${maxTemp}`}
{`${tCommon("information.min")}: ${minTemp}`}
diff --git a/packages/widgets/src/weather/index.ts b/packages/widgets/src/weather/index.ts
index e0db620dc..137bc9b4d 100644
--- a/packages/widgets/src/weather/index.ts
+++ b/packages/widgets/src/weather/index.ts
@@ -1,4 +1,5 @@
import { IconCloud } from "@tabler/icons-react";
+import dayjs from "dayjs";
import { z } from "@homarr/validation";
@@ -17,6 +18,20 @@ export const { definition, componentLoader } = createWidgetDefinition("weather",
longitude: 2.3488,
},
}),
+ dateFormat: factory.select({
+ options: [
+ { value: "dddd, MMMM D", label: dayjs().format("dddd, MMMM D") },
+ { value: "dddd, D MMMM", label: dayjs().format("dddd, D MMMM") },
+ { value: "MMM D", label: dayjs().format("MMM D") },
+ { value: "D MMM", label: dayjs().format("D MMM") },
+ { value: "DD/MM/YYYY", label: dayjs().format("DD/MM/YYYY") },
+ { value: "MM/DD/YYYY", label: dayjs().format("MM/DD/YYYY") },
+ { value: "DD/MM", label: dayjs().format("DD/MM") },
+ { value: "MM/DD", label: dayjs().format("MM/DD") },
+ ],
+ defaultValue: "dddd, MMMM D",
+ withDescription: true,
+ }),
showCity: factory.switch(),
hasForecast: factory.switch(),
forecastDayCount: factory.slider({
diff --git a/packages/widgets/src/widget-integration-select.tsx b/packages/widgets/src/widget-integration-select.tsx
index 215b1ccf2..f5a41d02e 100644
--- a/packages/widgets/src/widget-integration-select.tsx
+++ b/packages/widgets/src/widget-integration-select.tsx
@@ -30,13 +30,16 @@ interface WidgetIntegrationSelectProps {
error?: string;
onFocus?: FocusEventHandler;
onBlur?: FocusEventHandler;
-
+ canSelectMultiple?: boolean;
data: IntegrationSelectOption[];
+ withAsterisk?: boolean;
}
export const WidgetIntegrationSelect = ({
data,
onChange,
value: valueProp,
+ canSelectMultiple = true,
+ withAsterisk = false,
...props
}: WidgetIntegrationSelectProps) => {
const t = useI18n();
@@ -47,12 +50,16 @@ export const WidgetIntegrationSelect = ({
onDropdownOpen: () => combobox.updateSelectedOptionIndex("active"),
});
- const handleValueSelect = (selectedValue: string) =>
+ const handleValueSelect = (selectedValue: string) => {
onChange(
multiSelectValues.includes(selectedValue)
? multiSelectValues.filter((value) => value !== selectedValue)
: [...multiSelectValues, selectedValue],
);
+ if (!canSelectMultiple) {
+ combobox.closeDropdown();
+ }
+ };
const handleValueRemove = (valueToRemove: string) =>
onChange(multiSelectValues.filter((value) => value !== valueToRemove));
@@ -63,7 +70,14 @@ export const WidgetIntegrationSelect = ({
return null;
}
- return handleValueRemove(item)} />;
+ return (
+ handleValueRemove(item)}
+ showRemoveButton={canSelectMultiple}
+ />
+ );
});
const options = data.map((item) => {
@@ -103,6 +117,7 @@ export const WidgetIntegrationSelect = ({
}
pointer
onClick={() => combobox.toggleDropdown()}
+ withAsterisk={withAsterisk}
{...props}
>
@@ -150,14 +165,17 @@ export interface IntegrationSelectOption {
interface IntegrationPillProps {
option: IntegrationSelectOption;
onRemove: () => void;
+ showRemoveButton: boolean;
}
-const IntegrationPill = ({ option, onRemove }: IntegrationPillProps) => (
-
+const IntegrationPill = ({ option, onRemove, showRemoveButton }: IntegrationPillProps) => (
+
{option.name}
-
+ {showRemoveButton && (
+
+ )}
);
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 5b91e521c..2c16efc2e 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -18,10 +18,10 @@ importers:
version: link:tooling/prettier
'@turbo/gen':
specifier: ^2.2.3
- version: 2.2.3(@types/node@22.8.7)(typescript@5.6.3)
+ version: 2.2.3(@types/node@22.9.0)(typescript@5.6.3)
'@vitejs/plugin-react':
specifier: ^4.3.3
- version: 4.3.3(vite@5.4.5(@types/node@22.8.7)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0))
+ version: 4.3.3(vite@5.4.5(@types/node@22.9.0)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0))
'@vitest/coverage-v8':
specifier: ^2.1.4
version: 2.1.4(vitest@2.1.4)
@@ -38,8 +38,8 @@ importers:
specifier: ^3.3.3
version: 3.3.3
testcontainers:
- specifier: ^10.13.2
- version: 10.13.2
+ specifier: ^10.14.0
+ version: 10.14.0
turbo:
specifier: ^2.2.3
version: 2.2.3
@@ -48,10 +48,10 @@ importers:
version: 5.6.3
vite-tsconfig-paths:
specifier: ^5.1.0
- version: 5.1.0(typescript@5.6.3)(vite@5.4.5(@types/node@22.8.7)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0))
+ version: 5.1.0(typescript@5.6.3)(vite@5.4.5(@types/node@22.9.0)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0))
vitest:
specifier: ^2.1.4
- version: 2.1.4(@types/node@22.8.7)(@vitest/ui@2.1.4)(jsdom@25.0.1)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)
+ version: 2.1.4(@types/node@22.9.0)(@vitest/ui@2.1.4)(jsdom@25.0.1)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)
apps/nextjs:
dependencies:
@@ -122,20 +122,20 @@ importers:
specifier: workspace:^0.1.0
version: link:../../packages/widgets
'@mantine/colors-generator':
- specifier: ^7.13.4
- version: 7.13.4(chroma-js@3.1.2)
+ specifier: ^7.13.5
+ version: 7.13.5(chroma-js@3.1.2)
'@mantine/core':
- specifier: ^7.13.4
- version: 7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: ^7.13.5
+ version: 7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@mantine/hooks':
- specifier: ^7.13.4
- version: 7.13.4(react@18.3.1)
+ specifier: ^7.13.5
+ version: 7.13.5(react@18.3.1)
'@mantine/modals':
- specifier: ^7.13.4
- version: 7.13.4(@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.4(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: ^7.13.5
+ version: 7.13.5(@mantine/core@7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.5(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@mantine/tiptap':
- specifier: ^7.13.4
- version: 7.13.4(@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.4(react@18.3.1))(@tiptap/extension-link@2.9.1(@tiptap/core@2.9.1(@tiptap/pm@2.9.1))(@tiptap/pm@2.9.1))(@tiptap/react@2.9.1(@tiptap/core@2.9.1(@tiptap/pm@2.9.1))(@tiptap/pm@2.9.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: ^7.13.5
+ version: 7.13.5(@mantine/core@7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.5(react@18.3.1))(@tiptap/extension-link@2.9.1(@tiptap/core@2.9.1(@tiptap/pm@2.9.1))(@tiptap/pm@2.9.1))(@tiptap/react@2.9.1(@tiptap/core@2.9.1(@tiptap/pm@2.9.1))(@tiptap/pm@2.9.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@million/lint':
specifier: 1.0.11
version: 1.0.11(rollup@4.21.3)(webpack-sources@3.2.3)
@@ -146,23 +146,23 @@ importers:
specifier: ^3.21.0
version: 3.21.0(react@18.3.1)
'@tanstack/react-query':
- specifier: ^5.59.19
- version: 5.59.19(react@18.3.1)
+ specifier: ^5.59.20
+ version: 5.59.20(react@18.3.1)
'@tanstack/react-query-devtools':
- specifier: ^5.59.19
- version: 5.59.19(@tanstack/react-query@5.59.19(react@18.3.1))(react@18.3.1)
+ specifier: ^5.59.20
+ version: 5.59.20(@tanstack/react-query@5.59.20(react@18.3.1))(react@18.3.1)
'@tanstack/react-query-next-experimental':
- specifier: 5.59.19
- version: 5.59.19(@tanstack/react-query@5.59.19(react@18.3.1))(next@14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6))(react@18.3.1)
+ specifier: 5.59.20
+ version: 5.59.20(@tanstack/react-query@5.59.20(react@18.3.1))(next@14.2.17(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6))(react@18.3.1)
'@trpc/client':
specifier: next
version: 11.0.0-rc.608(@trpc/server@11.0.0-rc.608)
'@trpc/next':
specifier: next
- version: 11.0.0-rc.608(@tanstack/react-query@5.59.19(react@18.3.1))(@trpc/client@11.0.0-rc.608(@trpc/server@11.0.0-rc.608))(@trpc/react-query@11.0.0-rc.608(@tanstack/react-query@5.59.19(react@18.3.1))(@trpc/client@11.0.0-rc.608(@trpc/server@11.0.0-rc.608))(@trpc/server@11.0.0-rc.608)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@11.0.0-rc.608)(next@14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 11.0.0-rc.608(@tanstack/react-query@5.59.20(react@18.3.1))(@trpc/client@11.0.0-rc.608(@trpc/server@11.0.0-rc.608))(@trpc/react-query@11.0.0-rc.608(@tanstack/react-query@5.59.20(react@18.3.1))(@trpc/client@11.0.0-rc.608(@trpc/server@11.0.0-rc.608))(@trpc/server@11.0.0-rc.608)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@11.0.0-rc.608)(next@14.2.17(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@trpc/react-query':
specifier: next
- version: 11.0.0-rc.608(@tanstack/react-query@5.59.19(react@18.3.1))(@trpc/client@11.0.0-rc.608(@trpc/server@11.0.0-rc.608))(@trpc/server@11.0.0-rc.608)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 11.0.0-rc.608(@tanstack/react-query@5.59.20(react@18.3.1))(@trpc/client@11.0.0-rc.608(@trpc/server@11.0.0-rc.608))(@trpc/server@11.0.0-rc.608)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@trpc/server':
specifier: next
version: 11.0.0-rc.608
@@ -198,10 +198,10 @@ importers:
version: 2.10.1(@types/react@18.3.12)(react@18.3.1)
mantine-react-table:
specifier: 2.0.0-beta.7
- version: 2.0.0-beta.7(@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/dates@7.13.4(@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.4(react@18.3.1))(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.4(react@18.3.1))(@tabler/icons-react@3.21.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)
+ version: 2.0.0-beta.7(@mantine/core@7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/dates@7.13.5(@mantine/core@7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.5(react@18.3.1))(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.5(react@18.3.1))(@tabler/icons-react@3.21.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.16
- version: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6)
+ specifier: ^14.2.17
+ version: 14.2.17(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6)
postcss-preset-mantine:
specifier: ^1.17.0
version: 1.17.0(postcss@8.4.47)
@@ -227,8 +227,8 @@ importers:
specifier: 2.2.1
version: 2.2.1
swagger-ui-react:
- specifier: ^5.17.14
- version: 5.17.14(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: ^5.18.2
+ version: 5.18.2(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
use-deep-compare-effect:
specifier: ^1.8.1
version: 1.8.1(react@18.3.1)
@@ -246,8 +246,8 @@ importers:
specifier: 2.4.4
version: 2.4.4
'@types/node':
- specifier: ^22.8.7
- version: 22.8.7
+ specifier: ^22.9.0
+ version: 22.9.0
'@types/prismjs':
specifier: ^1.26.5
version: 1.26.5
@@ -346,8 +346,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../../tooling/typescript
'@types/node':
- specifier: ^22.8.7
- version: 22.8.7
+ specifier: ^22.9.0
+ version: 22.9.0
dotenv-cli:
specifier: ^7.4.2
version: 7.4.2
@@ -508,7 +508,7 @@ importers:
version: 11.0.0-rc.608(@trpc/server@11.0.0-rc.608)
'@trpc/react-query':
specifier: next
- version: 11.0.0-rc.608(@tanstack/react-query@5.59.19(react@18.3.1))(@trpc/client@11.0.0-rc.608(@trpc/server@11.0.0-rc.608))(@trpc/server@11.0.0-rc.608)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 11.0.0-rc.608(@tanstack/react-query@5.59.20(react@18.3.1))(@trpc/client@11.0.0-rc.608(@trpc/server@11.0.0-rc.608))(@trpc/server@11.0.0-rc.608)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@trpc/server':
specifier: next
version: 11.0.0-rc.608
@@ -516,8 +516,8 @@ importers:
specifier: ^4.0.2
version: 4.0.2
next:
- specifier: ^14.2.16
- version: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6)
+ specifier: ^14.2.17
+ version: 14.2.17(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6)
react:
specifier: ^18.3.1
version: 18.3.1
@@ -586,11 +586,11 @@ importers:
specifier: 7.2.1
version: 7.2.1
next:
- specifier: ^14.2.16
- version: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6)
+ specifier: ^14.2.17
+ version: 14.2.17(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6)
next-auth:
specifier: 5.0.0-beta.25
- version: 5.0.0-beta.25(next@14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6))(react@18.3.1)
+ version: 5.0.0-beta.25(next@14.2.17(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6))(react@18.3.1)
react:
specifier: ^18.3.1
version: 18.3.1
@@ -626,8 +626,8 @@ importers:
packages/cli:
dependencies:
'@drizzle-team/brocli':
- specifier: ^0.10.2
- version: 0.10.2
+ specifier: ^0.11.0
+ version: 0.11.0
'@homarr/auth':
specifier: workspace:^0.1.0
version: link:../auth
@@ -666,14 +666,14 @@ importers:
specifier: ^1.11.13
version: 1.11.13
next:
- specifier: ^14.2.16
- version: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6)
+ specifier: ^14.2.17
+ version: 14.2.17(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6)
react:
specifier: ^18.3.1
version: 18.3.1
tldts:
- specifier: ^6.1.58
- version: 6.1.58
+ specifier: ^6.1.59
+ version: 6.1.59
devDependencies:
'@homarr/eslint-config':
specifier: workspace:^0.2.0
@@ -851,8 +851,8 @@ importers:
specifier: ^2.2.2
version: 2.2.2
'@testcontainers/mysql':
- specifier: ^10.13.2
- version: 10.13.2
+ specifier: ^10.14.0
+ version: 10.14.0
better-sqlite3:
specifier: ^11.5.0
version: 11.5.0
@@ -860,14 +860,14 @@ importers:
specifier: ^16.4.5
version: 16.4.5
drizzle-kit:
- specifier: ^0.27.1
- version: 0.27.1
+ specifier: ^0.28.0
+ version: 0.28.0
drizzle-orm:
- specifier: ^0.36.0
- version: 0.36.0(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.11)(@types/react@18.3.12)(better-sqlite3@11.5.0)(mysql2@3.11.3)(react@18.3.1)
+ specifier: ^0.36.1
+ version: 0.36.1(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.11)(@types/react@18.3.12)(better-sqlite3@11.5.0)(mysql2@3.11.4)(react@18.3.1)
mysql2:
- specifier: 3.11.3
- version: 3.11.3
+ specifier: 3.11.4
+ version: 3.11.4
devDependencies:
'@homarr/eslint-config':
specifier: workspace:^0.2.0
@@ -928,8 +928,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../validation
'@mantine/form':
- specifier: ^7.13.4
- version: 7.13.4(react@18.3.1)
+ specifier: ^7.13.5
+ version: 7.13.5(react@18.3.1)
devDependencies:
'@homarr/eslint-config':
specifier: workspace:^0.2.0
@@ -1067,11 +1067,11 @@ importers:
specifier: workspace:^0.1.0
version: link:../ui
'@mantine/core':
- specifier: ^7.13.4
- version: 7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: ^7.13.5
+ version: 7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@mantine/hooks':
- specifier: ^7.13.4
- version: 7.13.4(react@18.3.1)
+ specifier: ^7.13.5
+ version: 7.13.5(react@18.3.1)
react:
specifier: ^18.3.1
version: 18.3.1
@@ -1122,8 +1122,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../validation
'@mantine/core':
- specifier: ^7.13.4
- version: 7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: ^7.13.5
+ version: 7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@tabler/icons-react':
specifier: ^3.21.0
version: 3.21.0(react@18.3.1)
@@ -1131,8 +1131,8 @@ importers:
specifier: ^1.11.13
version: 1.11.13
next:
- specifier: ^14.2.16
- version: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6)
+ specifier: ^14.2.17
+ version: 14.2.17(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6)
react:
specifier: ^18.3.1
version: 18.3.1
@@ -1159,8 +1159,8 @@ importers:
specifier: workspace:^0.1.0
version: link:../ui
'@mantine/notifications':
- specifier: ^7.13.4
- version: 7.13.4(@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.4(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: ^7.13.5
+ version: 7.13.5(@mantine/core@7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.5(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@tabler/icons-react':
specifier: ^3.21.0
version: 3.21.0(react@18.3.1)
@@ -1344,6 +1344,9 @@ importers:
'@homarr/definitions':
specifier: workspace:^0.1.0
version: link:../definitions
+ '@homarr/integrations':
+ specifier: workspace:^0.1.0
+ version: link:../integrations
'@homarr/modals':
specifier: workspace:^0.1.0
version: link:../modals
@@ -1357,14 +1360,14 @@ importers:
specifier: workspace:^0.1.0
version: link:../ui
'@mantine/core':
- specifier: ^7.13.4
- version: 7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: ^7.13.5
+ version: 7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@mantine/hooks':
- specifier: ^7.13.4
- version: 7.13.4(react@18.3.1)
+ specifier: ^7.13.5
+ version: 7.13.5(react@18.3.1)
'@mantine/spotlight':
- specifier: ^7.13.4
- version: 7.13.4(@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.4(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: ^7.13.5
+ version: 7.13.5(@mantine/core@7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.5(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@tabler/icons-react':
specifier: ^3.21.0
version: 3.21.0(react@18.3.1)
@@ -1372,8 +1375,8 @@ importers:
specifier: ^2.10.1
version: 2.10.1(@types/react@18.3.12)(react@18.3.1)
next:
- specifier: ^14.2.16
- version: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6)
+ specifier: ^14.2.17
+ version: 14.2.17(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6)
react:
specifier: ^18.3.1
version: 18.3.1
@@ -1413,13 +1416,13 @@ importers:
version: 4.3.1
mantine-react-table:
specifier: 2.0.0-beta.7
- version: 2.0.0-beta.7(@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/dates@7.13.4(@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.4(react@18.3.1))(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.4(react@18.3.1))(@tabler/icons-react@3.21.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)
+ version: 2.0.0-beta.7(@mantine/core@7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/dates@7.13.5(@mantine/core@7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.5(react@18.3.1))(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.5(react@18.3.1))(@tabler/icons-react@3.21.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.16
- version: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6)
+ specifier: ^14.2.17
+ version: 14.2.17(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6)
next-intl:
- specifier: 3.24.0
- version: 3.24.0(next@14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6))(react@18.3.1)
+ specifier: 3.25.0
+ version: 3.25.0(next@14.2.17(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6))(react@18.3.1)
react:
specifier: ^18.3.1
version: 18.3.1
@@ -1458,23 +1461,23 @@ importers:
specifier: workspace:^0.1.0
version: link:../validation
'@mantine/core':
- specifier: ^7.13.4
- version: 7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: ^7.13.5
+ version: 7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@mantine/dates':
- specifier: ^7.13.4
- version: 7.13.4(@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.4(react@18.3.1))(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: ^7.13.5
+ version: 7.13.5(@mantine/core@7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.5(react@18.3.1))(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@mantine/hooks':
- specifier: ^7.13.4
- version: 7.13.4(react@18.3.1)
+ specifier: ^7.13.5
+ version: 7.13.5(react@18.3.1)
'@tabler/icons-react':
specifier: ^3.21.0
version: 3.21.0(react@18.3.1)
mantine-react-table:
specifier: 2.0.0-beta.7
- version: 2.0.0-beta.7(@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/dates@7.13.4(@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.4(react@18.3.1))(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.4(react@18.3.1))(@tabler/icons-react@3.21.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)
+ version: 2.0.0-beta.7(@mantine/core@7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/dates@7.13.5(@mantine/core@7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.5(react@18.3.1))(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.5(react@18.3.1))(@tabler/icons-react@3.21.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.16
- version: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6)
+ specifier: ^14.2.17
+ version: 14.2.17(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6)
react:
specifier: ^18.3.1
version: 18.3.1
@@ -1586,11 +1589,11 @@ importers:
specifier: workspace:^0.1.0
version: link:../validation
'@mantine/core':
- specifier: ^7.13.4
- version: 7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: ^7.13.5
+ version: 7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@mantine/hooks':
- specifier: ^7.13.4
- version: 7.13.4(react@18.3.1)
+ specifier: ^7.13.5
+ version: 7.13.5(react@18.3.1)
'@tabler/icons-react':
specifier: ^3.21.0
version: 3.21.0(react@18.3.1)
@@ -1647,10 +1650,10 @@ importers:
version: 1.11.13
mantine-react-table:
specifier: 2.0.0-beta.7
- version: 2.0.0-beta.7(@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/dates@7.13.4(@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.4(react@18.3.1))(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.4(react@18.3.1))(@tabler/icons-react@3.21.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)
+ version: 2.0.0-beta.7(@mantine/core@7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/dates@7.13.5(@mantine/core@7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.5(react@18.3.1))(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.5(react@18.3.1))(@tabler/icons-react@3.21.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.16
- version: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6)
+ specifier: ^14.2.17
+ version: 14.2.17(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6)
react:
specifier: ^18.3.1
version: 18.3.1
@@ -1680,8 +1683,8 @@ importers:
tooling/eslint:
dependencies:
'@next/eslint-plugin-next':
- specifier: ^14.2.16
- version: 14.2.16
+ specifier: ^14.2.17
+ version: 14.2.17
eslint-config-prettier:
specifier: ^9.1.0
version: 9.1.0(eslint@9.14.0)
@@ -1722,8 +1725,8 @@ importers:
tooling/prettier:
dependencies:
'@ianvs/prettier-plugin-sort-imports':
- specifier: ^4.3.1
- version: 4.3.1(prettier@3.3.3)
+ specifier: ^4.4.0
+ version: 4.4.0(prettier@3.3.3)
prettier:
specifier: ^3.3.3
version: 3.3.3
@@ -1788,6 +1791,10 @@ packages:
resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==}
engines: {node: '>=6.9.0'}
+ '@babel/code-frame@7.26.2':
+ resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
+ engines: {node: '>=6.9.0'}
+
'@babel/compat-data@7.25.4':
resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==}
engines: {node: '>=6.9.0'}
@@ -1800,6 +1807,10 @@ packages:
resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==}
engines: {node: '>=6.9.0'}
+ '@babel/generator@7.26.2':
+ resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-compilation-targets@7.25.2':
resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==}
engines: {node: '>=6.9.0'}
@@ -1826,10 +1837,18 @@ packages:
resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==}
engines: {node: '>=6.9.0'}
+ '@babel/helper-string-parser@7.25.9':
+ resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-validator-identifier@7.24.7':
resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==}
engines: {node: '>=6.9.0'}
+ '@babel/helper-validator-identifier@7.25.9':
+ resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-validator-option@7.24.8':
resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==}
engines: {node: '>=6.9.0'}
@@ -1847,6 +1866,11 @@ packages:
engines: {node: '>=6.0.0'}
hasBin: true
+ '@babel/parser@7.26.2':
+ resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
'@babel/plugin-transform-react-jsx-self@7.24.7':
resolution: {integrity: sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==}
engines: {node: '>=6.9.0'}
@@ -1871,10 +1895,18 @@ packages:
resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==}
engines: {node: '>=6.9.0'}
+ '@babel/template@7.25.9':
+ resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==}
+ engines: {node: '>=6.9.0'}
+
'@babel/traverse@7.25.6':
resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==}
engines: {node: '>=6.9.0'}
+ '@babel/traverse@7.25.9':
+ resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==}
+ engines: {node: '>=6.9.0'}
+
'@babel/types@7.25.2':
resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==}
engines: {node: '>=6.9.0'}
@@ -1883,14 +1915,18 @@ packages:
resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==}
engines: {node: '>=6.9.0'}
+ '@babel/types@7.26.0':
+ resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==}
+ engines: {node: '>=6.9.0'}
+
'@balena/dockerignore@1.0.2':
resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==}
'@bcoe/v8-coverage@0.2.3':
resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
- '@braintree/sanitize-url@7.0.2':
- resolution: {integrity: sha512-NVf/1YycDMs6+FxS0Tb/W8MjJRDQdXF+tBfDtZ5UZeiRUkTmwKc4vmYCKZTyymfJk1gnMsauvZSX/HiV9jOABw==}
+ '@braintree/sanitize-url@7.0.4':
+ resolution: {integrity: sha512-hPYRrKFoI+nuckPgDJfyYAkybFvheo4usS0Vw0HNAe+fmGBQA5Az37b/yStO284atBoqqdOUhKJ3d9Zw3PQkcQ==}
'@clack/core@0.3.4':
resolution: {integrity: sha512-H4hxZDXgHtWTwV3RAVenqcC4VbJZNegbBjlPvzOzCouXtS2y3sDvlO3IsbrPNWuLWPPlYVYPghQdSF64683Ldw==}
@@ -1960,6 +1996,9 @@ packages:
'@drizzle-team/brocli@0.10.2':
resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==}
+ '@drizzle-team/brocli@0.11.0':
+ resolution: {integrity: sha512-hD3pekGiPg0WPCCGAZmusBBJsDqGUR66Y452YgQsZOnkdQ7ViEPKuyP4huUGEZQefp8g34RRodXYmJ2TbCH+tg==}
+
'@esbuild-kit/core-utils@3.3.2':
resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==}
deprecated: 'Merged into tsx: https://tsx.is'
@@ -2712,8 +2751,8 @@ packages:
react: '>=16.8.0'
react-dom: '>=16.8.0'
- '@floating-ui/react@0.26.24':
- resolution: {integrity: sha512-2ly0pCkZIGEQUq5H8bBK0XJmc1xIK/RM3tvVzY3GBER7IOD1UgmC2Y2tjj4AuS+TC+vTE1KJv2053290jua0Sw==}
+ '@floating-ui/react@0.26.27':
+ resolution: {integrity: sha512-jLP72x0Kr2CgY6eTYi/ra3VA9LOkTo4C+DUTrbFgFOExKy3omYVmwMjNKqxAHdsnyLS96BIDLcO2SlnsNf8KUQ==}
peerDependencies:
react: '>=16.8.0'
react-dom: '>=16.8.0'
@@ -2768,8 +2807,8 @@ packages:
resolution: {integrity: sha512-xnRgu9DxZbkWak/te3fcytNyp8MTbuiZIaueg2rgEvBuN55n04nwLYLU9TX/VVlusc9L2ZNXi99nUFNkHXtr5g==}
engines: {node: '>=18.18'}
- '@ianvs/prettier-plugin-sort-imports@4.3.1':
- resolution: {integrity: sha512-ZHwbyjkANZOjaBm3ZosADD2OUYGFzQGxfy67HmGZU94mHqe7g1LCMA7YYKB1Cq+UTPCBqlAYapY0KXAjKEw8Sg==}
+ '@ianvs/prettier-plugin-sort-imports@4.4.0':
+ resolution: {integrity: sha512-f4/e+/ANGk3tHuwRW0uh2YuBR50I4h1ZjGQ+5uD8sWfinHTivQsnieR5cz24t8M6Vx4rYvZ5v/IEKZhYpzQm9Q==}
peerDependencies:
'@vue/compiler-sfc': 2.7.x || 3.x
prettier: 2 || 3
@@ -2825,75 +2864,75 @@ packages:
'@libsql/core@0.14.0':
resolution: {integrity: sha512-nhbuXf7GP3PSZgdCY2Ecj8vz187ptHlZQ0VRc751oB2C1W8jQUXKKklvt7t1LJiUTQBVJuadF628eUk+3cRi4Q==}
- '@mantine/colors-generator@7.13.4':
- resolution: {integrity: sha512-ICHZpopi8+1i6+tDknQp/OUzyzhxs/SSAjJEHWrim/1BWtb8Ez9hHupRTjhOVpYMX9yV6EPsDcU4Gla6u3KoyQ==}
+ '@mantine/colors-generator@7.13.5':
+ resolution: {integrity: sha512-l26D7srLXiTj7aEorHvcfD4C/siczxzWS82TMJEj+2WfmC3eVRph67OD8B2X0XjXVfymwmnEuT5tlSc+8tqfdQ==}
peerDependencies:
chroma-js: '>=2.4.2'
- '@mantine/core@7.13.4':
- resolution: {integrity: sha512-9I6+SqTq90pnI3WPmOQzQ1PL7IkhQg/5ft8Awhgut8tvk1VaKruDm/K5ysUG3ncHrP+QTI2UHYjNlUrux6HKlw==}
+ '@mantine/core@7.13.5':
+ resolution: {integrity: sha512-1m0C0qH9eIWJZy19M06kKNWbbSLZhsTDvHPqTxMgvFg6JuSN7a6r3v6fqCbvaI1kTQiK51NMe+9vMNVnw4zOsA==}
peerDependencies:
- '@mantine/hooks': 7.13.4
- react: ^18.2.0
- react-dom: ^18.2.0
+ '@mantine/hooks': 7.13.5
+ react: ^18.x || ^19.x
+ react-dom: ^18.x || ^19.x
- '@mantine/dates@7.13.4':
- resolution: {integrity: sha512-1wmFmng8QBNU3JUoxCva357CD4kX/y9wTQoxfv8giYMzC6bNY3tYWW0CYLtSr80ZroMyZOdyXCBIlYYVil8BUQ==}
+ '@mantine/dates@7.13.5':
+ resolution: {integrity: sha512-1Wkl9BWUR5EM1PJQ7AV0haiK3hItKmMHrujNuzHsgzDh5Y1lLzVuiQiNokQurAh/Z5g+qHodRG+109RYcODS1A==}
peerDependencies:
- '@mantine/core': 7.13.4
- '@mantine/hooks': 7.13.4
+ '@mantine/core': 7.13.5
+ '@mantine/hooks': 7.13.5
dayjs: '>=1.0.0'
- react: ^18.2.0
- react-dom: ^18.2.0
+ react: ^18.x || ^19.x
+ react-dom: ^18.x || ^19.x
- '@mantine/form@7.13.4':
- resolution: {integrity: sha512-JzgUzzCpTmXeRxYs6iXM8fq7vOESrPC0Jk9nEgxu/5DO84Ah7ExthinTt4QiXityznXOOLl5U0BgG0j3aXEuew==}
+ '@mantine/form@7.13.5':
+ resolution: {integrity: sha512-BnHbGFPRlIfzpetg+igjn81MUuI38qEcLhiC3s7grolaJncAnvcxSEVUTiwUJP2KS6mqxtNHKOcaqEs7rH8Umg==}
peerDependencies:
- react: ^18.2.0
+ react: ^18.x || ^19.x
- '@mantine/hooks@7.13.4':
- resolution: {integrity: sha512-B2QCegQyWlLdenVNaLNK8H9cTAjLW9JKJ3xWg+ShhpjZDHT2hjZz4L0Nt071Z7mPvyAaOwKGM0FyqTcTjdECfg==}
+ '@mantine/hooks@7.13.5':
+ resolution: {integrity: sha512-hxFOQn6NeN7fP37VXZh7z5KxwqA9HYmydivIay0jyQTYA4Falc8Pb4ozSxnyFbXyxzUWcFIQL4xayHRvedgE+Q==}
peerDependencies:
- react: ^18.2.0
+ react: ^18.x || ^19.x
- '@mantine/modals@7.13.4':
- resolution: {integrity: sha512-CYJVRelRRAZQccdJUsRQONMWdHpV+m1KhgXX7pVcn6nPwKSBxiBVrkoFnXpKMfVMHQR1gvZ4B+hg7y3bmr6QXQ==}
+ '@mantine/modals@7.13.5':
+ resolution: {integrity: sha512-baYeRR7VB2GpdydJGYlsAvorToN021hWCJArLY0PqjDRNXMQK1luDPDHpKEJQWkMqr67axow0LIiSPUDkk7F1A==}
peerDependencies:
- '@mantine/core': 7.13.4
- '@mantine/hooks': 7.13.4
- react: ^18.2.0
- react-dom: ^18.2.0
+ '@mantine/core': 7.13.5
+ '@mantine/hooks': 7.13.5
+ react: ^18.x || ^19.x
+ react-dom: ^18.x || ^19.x
- '@mantine/notifications@7.13.4':
- resolution: {integrity: sha512-CKd3tDGDAegkJYJIMHtF0St4hBpBVAujdmtsEin7UYeVq5N0YYe7j2T1Xu7Ry6dfObkuxeig6csxiJyBrZ2bew==}
+ '@mantine/notifications@7.13.5':
+ resolution: {integrity: sha512-LGxTnqBtZRfACCv8qjL+RGVFwpXXjwIekC1V9JalcNt8/PxZ9H50V/H7lOgTvw5wpnA0W6Jzcdph/gRoZfhwug==}
peerDependencies:
- '@mantine/core': 7.13.4
- '@mantine/hooks': 7.13.4
- react: ^18.2.0
- react-dom: ^18.2.0
+ '@mantine/core': 7.13.5
+ '@mantine/hooks': 7.13.5
+ react: ^18.x || ^19.x
+ react-dom: ^18.x || ^19.x
- '@mantine/spotlight@7.13.4':
- resolution: {integrity: sha512-rplcuOa9tSia8WmWjdqQvn/WG76BQ9d2/Gy6t3e5wHM3TURPPFYCcwUHp9HUvNELj98Hx6TUJ9BmZqyi/TxIPg==}
+ '@mantine/spotlight@7.13.5':
+ resolution: {integrity: sha512-gVwhyDNJxjnvKZG44O99g4fKVsVJEmo3CZC/aMkoRoz9IvKrRpWx11pPfsk/eQJ5kp5nsy49fNRX24yKRkW7Mg==}
peerDependencies:
- '@mantine/core': 7.13.4
- '@mantine/hooks': 7.13.4
- react: ^18.2.0
- react-dom: ^18.2.0
+ '@mantine/core': 7.13.5
+ '@mantine/hooks': 7.13.5
+ react: ^18.x || ^19.x
+ react-dom: ^18.x || ^19.x
- '@mantine/store@7.13.4':
- resolution: {integrity: sha512-DUlnXizE7aCjbVg2J3XLLKsOzt2c2qfQl2Xmx9l/BPE4FFZZKUqGDkYaTDbTAmnN3FVZ9xXycL7bAlq9udO8mA==}
+ '@mantine/store@7.13.5':
+ resolution: {integrity: sha512-+enhEaZpVKn0x3PLN3Txlk/06eIuq2wQhlFQnBe4dnD+C9VZZhXdff/IYCtXwB4XojwJl3rln7BSL4Ih4rSGmw==}
peerDependencies:
- react: ^18.2.0
+ react: ^18.x || ^19.x
- '@mantine/tiptap@7.13.4':
- resolution: {integrity: sha512-E6I9sQq8owYu+vvHKXUjdZufPwiLBHvhVxGeji3EGaMiDF2aH3A7ebzD+C8/isEqONWWU3bkpiV3itCITX5P6w==}
+ '@mantine/tiptap@7.13.5':
+ resolution: {integrity: sha512-dLITQDwurSjywso4dqglXZpfVvqUnvommrb6seIibY3q017CHQlydBiZEW1t1xNoJyYllNInuzDRv8+FXbOn3A==}
peerDependencies:
- '@mantine/core': 7.13.4
- '@mantine/hooks': 7.13.4
+ '@mantine/core': 7.13.5
+ '@mantine/hooks': 7.13.5
'@tiptap/extension-link': '>=2.1.12'
'@tiptap/react': '>=2.1.12'
- react: ^18.2.0
- react-dom: ^18.2.0
+ react: ^18.x || ^19.x
+ react-dom: ^18.x || ^19.x
'@mapbox/node-pre-gyp@1.0.11':
resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==}
@@ -2907,62 +2946,62 @@ packages:
resolution: {integrity: sha512-OztUXhhEHwUiPPcrSXBAqyv1GppnV0evvT9xMGA3BGOhLaR/X79s4qTyziTT0i0rMNcK23HJgKqJfDtcQt/v9w==}
hasBin: true
- '@next/env@14.2.16':
- resolution: {integrity: sha512-fLrX5TfJzHCbnZ9YUSnGW63tMV3L4nSfhgOQ0iCcX21Pt+VSTDuaLsSuL8J/2XAiVA5AnzvXDpf6pMs60QxOag==}
+ '@next/env@14.2.17':
+ resolution: {integrity: sha512-MCgO7VHxXo8sYR/0z+sk9fGyJJU636JyRmkjc7ZJY8Hurl8df35qG5hoAh5KMs75FLjhlEo9bb2LGe89Y/scDA==}
- '@next/eslint-plugin-next@14.2.16':
- resolution: {integrity: sha512-noORwKUMkKc96MWjTOwrsUCjky0oFegHbeJ1yEnQBGbMHAaTEIgLZIIfsYF0x3a06PiS+2TXppfifR+O6VWslg==}
+ '@next/eslint-plugin-next@14.2.17':
+ resolution: {integrity: sha512-fW6/u1jjlBQrMs1ExyINehaK3B+LEW5UqdF6QYL07QK+SECkX0hnEyPMaNKj0ZFzirQ9D8jLWQ00P8oua4yx9g==}
- '@next/swc-darwin-arm64@14.2.16':
- resolution: {integrity: sha512-uFT34QojYkf0+nn6MEZ4gIWQ5aqGF11uIZ1HSxG+cSbj+Mg3+tYm8qXYd3dKN5jqKUm5rBVvf1PBRO/MeQ6rxw==}
+ '@next/swc-darwin-arm64@14.2.17':
+ resolution: {integrity: sha512-WiOf5nElPknrhRMTipXYTJcUz7+8IAjOYw3vXzj3BYRcVY0hRHKWgTgQ5439EvzQyHEko77XK+yN9x9OJ0oOog==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
- '@next/swc-darwin-x64@14.2.16':
- resolution: {integrity: sha512-mCecsFkYezem0QiZlg2bau3Xul77VxUD38b/auAjohMA22G9KTJneUYMv78vWoCCFkleFAhY1NIvbyjj1ncG9g==}
+ '@next/swc-darwin-x64@14.2.17':
+ resolution: {integrity: sha512-29y425wYnL17cvtxrDQWC3CkXe/oRrdt8ie61S03VrpwpPRI0XsnTvtKO06XCisK4alaMnZlf8riwZIbJTaSHQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
- '@next/swc-linux-arm64-gnu@14.2.16':
- resolution: {integrity: sha512-yhkNA36+ECTC91KSyZcgWgKrYIyDnXZj8PqtJ+c2pMvj45xf7y/HrgI17hLdrcYamLfVt7pBaJUMxADtPaczHA==}
+ '@next/swc-linux-arm64-gnu@14.2.17':
+ resolution: {integrity: sha512-SSHLZls3ZwNEHsc+d0ynKS+7Af0Nr8+KTUBAy9pm6xz9SHkJ/TeuEg6W3cbbcMSh6j4ITvrjv3Oi8n27VR+IPw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- '@next/swc-linux-arm64-musl@14.2.16':
- resolution: {integrity: sha512-X2YSyu5RMys8R2lA0yLMCOCtqFOoLxrq2YbazFvcPOE4i/isubYjkh+JCpRmqYfEuCVltvlo+oGfj/b5T2pKUA==}
+ '@next/swc-linux-arm64-musl@14.2.17':
+ resolution: {integrity: sha512-VFge37us5LNPatB4F7iYeuGs9Dprqe4ZkW7lOEJM91r+Wf8EIdViWHLpIwfdDXinvCdLl6b4VyLpEBwpkctJHA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- '@next/swc-linux-x64-gnu@14.2.16':
- resolution: {integrity: sha512-9AGcX7VAkGbc5zTSa+bjQ757tkjr6C/pKS7OK8cX7QEiK6MHIIezBLcQ7gQqbDW2k5yaqba2aDtaBeyyZh1i6Q==}
+ '@next/swc-linux-x64-gnu@14.2.17':
+ resolution: {integrity: sha512-aaQlpxUVb9RZ41adlTYVQ3xvYEfBPUC8+6rDgmQ/0l7SvK8S1YNJzPmDPX6a4t0jLtIoNk7j+nroS/pB4nx7vQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- '@next/swc-linux-x64-musl@14.2.16':
- resolution: {integrity: sha512-Klgeagrdun4WWDaOizdbtIIm8khUDQJ/5cRzdpXHfkbY91LxBXeejL4kbZBrpR/nmgRrQvmz4l3OtttNVkz2Sg==}
+ '@next/swc-linux-x64-musl@14.2.17':
+ resolution: {integrity: sha512-HSyEiFaEY3ay5iATDqEup5WAfrhMATNJm8dYx3ZxL+e9eKv10XKZCwtZByDoLST7CyBmyDz+OFJL1wigyXeaoA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- '@next/swc-win32-arm64-msvc@14.2.16':
- resolution: {integrity: sha512-PwW8A1UC1Y0xIm83G3yFGPiOBftJK4zukTmk7DI1CebyMOoaVpd8aSy7K6GhobzhkjYvqS/QmzcfsWG2Dwizdg==}
+ '@next/swc-win32-arm64-msvc@14.2.17':
+ resolution: {integrity: sha512-h5qM9Btqv87eYH8ArrnLoAHLyi79oPTP2vlGNSg4CDvUiXgi7l0+5KuEGp5pJoMhjuv9ChRdm7mRlUUACeBt4w==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
- '@next/swc-win32-ia32-msvc@14.2.16':
- resolution: {integrity: sha512-jhPl3nN0oKEshJBNDAo0etGMzv0j3q3VYorTSFqH1o3rwv1MQRdor27u1zhkgsHPNeY1jxcgyx1ZsCkDD1IHgg==}
+ '@next/swc-win32-ia32-msvc@14.2.17':
+ resolution: {integrity: sha512-BD/G++GKSLexQjdyoEUgyo5nClU7er5rK0sE+HlEqnldJSm96CIr/+YOTT063LVTT/dUOeQsNgp5DXr86/K7/A==}
engines: {node: '>= 10'}
cpu: [ia32]
os: [win32]
- '@next/swc-win32-x64-msvc@14.2.16':
- resolution: {integrity: sha512-OA7NtfxgirCjfqt+02BqxC3MIgM/JaGjw9tOe4fyZgPsqfseNiMPnCRP44Pfs+Gpo9zPN+SXaFsgP6vk8d571A==}
+ '@next/swc-win32-x64-msvc@14.2.17':
+ resolution: {integrity: sha512-vkQfN1+4V4KqDibkW2q0sJ6CxQuXq5l2ma3z0BRcfIqkAMZiiW67T9yCpwqJKP68QghBtPEFjPAlaqe38O6frw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
@@ -3185,6 +3224,9 @@ packages:
'@rtsao/scc@1.1.0':
resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
+ '@scarf/scarf@1.4.0':
+ resolution: {integrity: sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==}
+
'@socket.io/component-emitter@3.1.2':
resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==}
@@ -3308,27 +3350,27 @@ packages:
resolution: {integrity: sha512-Wo1iKt2b9OT7d+YGhvEPD3DXvPv2etTusIMhMUoG7fbhmxcXCtIjJDEygy91Y2JFlwGyjqiBPRozme7UD8hoqg==}
engines: {node: '>=12'}
- '@tanstack/query-core@5.59.17':
- resolution: {integrity: sha512-jWdDiif8kaqnRGHNXAa9CnudtxY5v9DUxXhodgqX2Rwzj+1UwStDHEbBd9IA5C7VYAaJ2s+BxFR6PUBs8ERorA==}
+ '@tanstack/query-core@5.59.20':
+ resolution: {integrity: sha512-e8vw0lf7KwfGe1if4uPFhvZRWULqHjFcz3K8AebtieXvnMOz5FSzlZe3mTLlPuUBcydCnBRqYs2YJ5ys68wwLg==}
- '@tanstack/query-devtools@5.59.19':
- resolution: {integrity: sha512-Gw+3zsADpqiYgx/6MMr9bP1+x2LR8vOuGjo5Un/89qwwP3z7WAHPWFagLFDYkLq68NX7ekUpW/EOYlUMugMXGA==}
+ '@tanstack/query-devtools@5.59.20':
+ resolution: {integrity: sha512-vxhuQ+8VV4YWQSFxQLsuM+dnEKRY7VeRzpNabFXdhEwsBYLrjXlF1pM38A8WyKNLqZy8JjyRO8oP4Wd/oKHwuQ==}
- '@tanstack/react-query-devtools@5.59.19':
- resolution: {integrity: sha512-mYFWTHLtJr2HdyYPZPzzvQ2ksCsSL6L04fCtusPFD3waskXrtmvWvyuDIGeEGdVAYS0Urwxw/0sYvcTVQZH+zQ==}
+ '@tanstack/react-query-devtools@5.59.20':
+ resolution: {integrity: sha512-AL/eQS1NFZhwwzq2Bq9Gd8wTTH+XhPNOJlDFpzPMu9NC5CQVgA0J8lWrte/sXpdWNo5KA4hgHnEdImZsF4h6Lw==}
peerDependencies:
- '@tanstack/react-query': ^5.59.19
+ '@tanstack/react-query': ^5.59.20
react: ^18 || ^19
- '@tanstack/react-query-next-experimental@5.59.19':
- resolution: {integrity: sha512-OVZBHQ/Cx8aKVY6Q1hNevAZJg4qbNyL74smN/UPG0eLDHjvLdBCMSh4G946fkYzeEJ/AWwmxMF4v35UE81kbZg==}
+ '@tanstack/react-query-next-experimental@5.59.20':
+ resolution: {integrity: sha512-rcD9H+MqZ8HPbmTWiPpoTtkv3UBWlgRvpWFfEa2rATav5vV8ic2M6Jx9dHRuWVw4IPqHakAAKp/kPzAnpT/gaA==}
peerDependencies:
- '@tanstack/react-query': ^5.59.19
+ '@tanstack/react-query': ^5.59.20
next: ^13 || ^14 || ^15
react: ^18 || ^19
- '@tanstack/react-query@5.59.19':
- resolution: {integrity: sha512-xLRfyFyQOFcLltKCds0LijfC6/HQJrrTTnZB8ciyn74LIkVAm++vZJ6eUVG20RmJtdP8REdy7vSOYW4M3//XLA==}
+ '@tanstack/react-query@5.59.20':
+ resolution: {integrity: sha512-Zly0egsK0tFdfSbh5/mapSa+Zfc3Et0Zkar7Wo5sQkFzWyB3p3uZWOHR2wrlAEEV2L953eLuDBtbgFvMYiLvUw==}
peerDependencies:
react: ^18 || ^19
@@ -3352,8 +3394,8 @@ packages:
'@tanstack/virtual-core@3.10.8':
resolution: {integrity: sha512-PBu00mtt95jbKFi6Llk9aik8bnR3tR/oQP1o3TSi+iG//+Q2RTIzCEgKkHG8BB86kxMNW6O8wku+Lmi+QFR6jA==}
- '@testcontainers/mysql@10.13.2':
- resolution: {integrity: sha512-O9lcWOxKL15a6NqpQpi8WrgEyYVvlYCHZU03vMtLoRBS0HsJyAZnH1NocDnnBMeRsghwURJPtUrFFMrwMumHMA==}
+ '@testcontainers/mysql@10.14.0':
+ resolution: {integrity: sha512-6OzI1a7jRn+JvuDHv4v7hbMHg9A6ID7/svKiKXS3m8xNkfbOvyznNi06O7pBMLlfRugqfZE0o9WdRIRXxWTkKw==}
'@tiptap/core@2.9.1':
resolution: {integrity: sha512-tifnLL/ARzQ6/FGEJjVwj9UT3v+pENdWHdk9x6F3X0mB1y0SeCjV21wpFLYESzwNdBPAj8NMp8Behv7dBnhIfw==}
@@ -3702,8 +3744,8 @@ packages:
'@types/node@18.19.50':
resolution: {integrity: sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==}
- '@types/node@22.8.7':
- resolution: {integrity: sha512-LidcG+2UeYIWcMuMUpBKOnryBWG/rnmOHQR5apjn8myTQcx3rinFRn7DcIFhMnS0PPFSC6OafdIKEad0lj6U0Q==}
+ '@types/node@22.9.0':
+ resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==}
'@types/prismjs@1.26.5':
resolution: {integrity: sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==}
@@ -4503,6 +4545,10 @@ packages:
resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==}
engines: {node: '>= 0.6'}
+ cookie@0.7.2:
+ resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
+ engines: {node: '>= 0.6'}
+
cookie@1.0.1:
resolution: {integrity: sha512-Xd8lFX4LM9QEEwxQpF9J9NTUh8pmdJO0cyRJhFiDoLTk2eH8FXlRv2IFGYVadZpqI3j8fhNrSdKCeYPxiAhLXw==}
engines: {node: '>=18'}
@@ -4738,8 +4784,8 @@ packages:
dom-walk@0.1.2:
resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==}
- dompurify@3.1.4:
- resolution: {integrity: sha512-2gnshi6OshmuKil8rMZuQCGiUF3cUxHY3NGDzUAdUx/NPEe5DVnO8BDoAQouvgwnx0R/+a6jUn36Z0FSdq8vww==}
+ dompurify@3.1.6:
+ resolution: {integrity: sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==}
dot-case@2.1.1:
resolution: {integrity: sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==}
@@ -4768,12 +4814,12 @@ packages:
resolution: {integrity: sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==}
engines: {node: '>=4'}
- drizzle-kit@0.27.1:
- resolution: {integrity: sha512-4BNA0T2blN+jW5wSwhtc+FIlCMuxYSMWCnYYdOBi5rttwq8aVXRUid0d0NCzcBKtZQSPZGAUxy+TXr7Q1OgEug==}
+ drizzle-kit@0.28.0:
+ resolution: {integrity: sha512-KqI+CS2Ga9GYIrXpxpCDUJJrH/AT/k4UY0Pb4oRgQEGkgN1EdCnqp664cXgwPWjDr5RBtTsjZipw8+8C//K63A==}
hasBin: true
- drizzle-orm@0.36.0:
- resolution: {integrity: sha512-6BETYPdKSR7cDHC0ZfqZk2VrKJ8n/Rfd3ajFPsAbc69gi87nwZ6oBA2wUGMELHA0tQE4kUKN0Ds00LUZQ6Z69A==}
+ drizzle-orm@0.36.1:
+ resolution: {integrity: sha512-F4hbimnMEhyWzDowQB4xEuVJJWXLHZYD7FYwvo8RImY+N7pStGqsbfmT95jDbec1s4qKmQbiuxEDZY90LRrfIw==}
peerDependencies:
'@aws-sdk/client-rds-data': '>=3'
'@cloudflare/workers-types': '>=3'
@@ -5862,6 +5908,11 @@ packages:
engines: {node: '>=4'}
hasBin: true
+ jsesc@3.0.2:
+ resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==}
+ engines: {node: '>=6'}
+ hasBin: true
+
json-buffer@3.0.1:
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
@@ -6176,8 +6227,8 @@ packages:
engines: {node: '>=8', npm: '>=5'}
hasBin: true
- mysql2@3.11.3:
- resolution: {integrity: sha512-Qpu2ADfbKzyLdwC/5d4W7+5Yz7yBzCU05YWt5npWzACST37wJsB23wgOSo00qi043urkiRwXtEvJc9UnuLX/MQ==}
+ mysql2@3.11.4:
+ resolution: {integrity: sha512-Z2o3tY4Z8EvSRDwknaC40MdZ3+m0sKbpnXrShQLdxPrAvcNli7jLrD2Zd2IzsRMw4eK9Yle500FDmlkIqp+krg==}
engines: {node: '>= 8.0'}
named-placeholders@1.1.3:
@@ -6238,14 +6289,14 @@ packages:
nodemailer:
optional: true
- next-intl@3.24.0:
- resolution: {integrity: sha512-48X68QsI92grir2dH1W15yhyVnEjW4c9qmwNt+du+k6mI1QtlE6GyANWHoL4/leTixHv8knZ1y9B/Ys06gmKLg==}
+ next-intl@3.25.0:
+ resolution: {integrity: sha512-xjHNqYyW6LS2Mwmld4Q7tBhyv6g2zO7BtclOAQXe6Fgl5hEsWCv8KNZc0jumud1qnNr8erzmYz8KepJZtXPA4Q==}
peerDependencies:
next: ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0
- next@14.2.16:
- resolution: {integrity: sha512-LcO7WnFu6lYSvCzZoo1dB+IO0xXz5uEv52HF1IUN0IqVTUIZGHuuR10I5efiLadGt+4oZqTcNZyVVEem/TM5nA==}
+ next@14.2.17:
+ resolution: {integrity: sha512-hNo/Zy701DDO3nzKkPmsLRlDfNCtb1OJxFUvjGEl04u7SFa3zwC6hqsOUzMajcaEOEV8ey1GjvByvrg0Qr5AiQ==}
engines: {node: '>=18.17.0'}
hasBin: true
peerDependencies:
@@ -6882,8 +6933,8 @@ packages:
peerDependencies:
react: '>= 0.14.0'
- react-textarea-autosize@8.5.3:
- resolution: {integrity: sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==}
+ react-textarea-autosize@8.5.4:
+ resolution: {integrity: sha512-eSSjVtRLcLfFwFcariT77t9hcbVJHQV76b51QjQGarQIHml2+gM2lms0n3XrhnDmgK5B+/Z7TmQk5OHNzqYm/A==}
engines: {node: '>=10'}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -7387,11 +7438,11 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
- swagger-client@3.29.3:
- resolution: {integrity: sha512-OhhMAO2dwDEaxtUNDxwaqzw75uiZY5lX/2vx+U6eKCYZYhXWQ5mylU/0qfk/xMR20VyitsnzRc6KcFFjRoCS7A==}
+ swagger-client@3.31.0:
+ resolution: {integrity: sha512-hVYift5XB8nOgNJVl6cbNtVTVPT2Fdx2wCOcIvuAFcyq0Mwe6+70ezoZ5WfiaIAzzwWfq72jyaLeg8TViGNSmw==}
- swagger-ui-react@5.17.14:
- resolution: {integrity: sha512-mCXerZrbcn4ftPYifUF0+iKIRTHoVCv0HcJc/sXl9nCe3oeWdsjmOWVqKabzzAkAa0NwsbKNJFv2UL/Ivnf6VQ==}
+ swagger-ui-react@5.18.2:
+ resolution: {integrity: sha512-vpW7AmkRYdz578iq7C5WrPsg6reBgRzj5xL/fIYR6KTfvY3lvBchpzegFaqg09LWDoL3U2MZvIgOS/1Q9kSJ9g==}
peerDependencies:
react: '>=16.8.0 <19'
react-dom: '>=16.8.0 <19'
@@ -7454,8 +7505,8 @@ packages:
resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==}
engines: {node: '>=18'}
- testcontainers@10.13.2:
- resolution: {integrity: sha512-LfEll+AG/1Ks3n4+IA5lpyBHLiYh/hSfI4+ERa6urwfQscbDU+M2iW1qPQrHQi+xJXQRYy4whyK1IEHdmxWa3Q==}
+ testcontainers@10.14.0:
+ resolution: {integrity: sha512-8fReFeQ4bk17T2vHHzcFavBG8UHuHwsdVj+48TchtsCSklwmSUTkg/b57hVjxZdxN1ed/GfF63WZ39I4syV5tQ==}
text-decoder@1.2.0:
resolution: {integrity: sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg==}
@@ -7506,11 +7557,11 @@ packages:
title-case@2.1.1:
resolution: {integrity: sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==}
- tldts-core@6.1.58:
- resolution: {integrity: sha512-dR936xmhBm7AeqHIhCWwK765gZ7dFyL+IqLSFAjJbFlUXGMLCb8i2PzlzaOuWBuplBTaBYseSb565nk/ZEM0Bg==}
+ tldts-core@6.1.59:
+ resolution: {integrity: sha512-EiYgNf275AQyVORl8HQYYe7rTVnmLb4hkWK7wAk/12Ksy5EiHpmUmTICa4GojookBPC8qkLMBKKwCmzNA47ZPQ==}
- tldts@6.1.58:
- resolution: {integrity: sha512-MQJrJhjHOYGYb8DobR6Y4AdDbd4TYkyQ+KBDVc5ODzs1cbrvPpfN1IemYi9jfipJ/vR1YWvrDli0hg1y19VRoA==}
+ tldts@6.1.59:
+ resolution: {integrity: sha512-472ilPxsRuqBBpn+KuRBHJvZhk6tTo4yTVsmODrLBNLwRYJPkDfMEHivgNwp5iEl+cbrZzzRtLKRxZs7+QKkRg==}
hasBin: true
tmp@0.0.33:
@@ -7838,8 +7889,8 @@ packages:
peerDependencies:
react: '>=16.13'
- use-intl@3.24.0:
- resolution: {integrity: sha512-lmrARod7yjMYehbyY9xBLjjgnlNcJsl1UAltAPlgspRG7RH6H0JYaGo4C3PZW/BTy0Dgmcvcl8rH/VemzGIhgQ==}
+ use-intl@3.25.0:
+ resolution: {integrity: sha512-e9nfJm18rM+naT14oZZYR3FNWd2mRDmNFQJC4R9qh4vhfabDwl0Kd/B6PodYst7U/0oT3qeKKjlz7qG3BvXAaQ==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0
@@ -8267,6 +8318,12 @@ snapshots:
'@babel/highlight': 7.24.7
picocolors: 1.1.0
+ '@babel/code-frame@7.26.2':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.25.9
+ js-tokens: 4.0.0
+ picocolors: 1.1.0
+
'@babel/compat-data@7.25.4': {}
'@babel/core@7.25.2':
@@ -8291,11 +8348,19 @@ snapshots:
'@babel/generator@7.25.6':
dependencies:
- '@babel/types': 7.25.6
+ '@babel/types': 7.26.0
'@jridgewell/gen-mapping': 0.3.5
'@jridgewell/trace-mapping': 0.3.25
jsesc: 2.5.2
+ '@babel/generator@7.26.2':
+ dependencies:
+ '@babel/parser': 7.26.2
+ '@babel/types': 7.26.0
+ '@jridgewell/gen-mapping': 0.3.5
+ '@jridgewell/trace-mapping': 0.3.25
+ jsesc: 3.0.2
+
'@babel/helper-compilation-targets@7.25.2':
dependencies:
'@babel/compat-data': 7.25.4
@@ -8307,7 +8372,7 @@ snapshots:
'@babel/helper-module-imports@7.24.7':
dependencies:
'@babel/traverse': 7.25.6
- '@babel/types': 7.25.6
+ '@babel/types': 7.26.0
transitivePeerDependencies:
- supports-color
@@ -8326,20 +8391,24 @@ snapshots:
'@babel/helper-simple-access@7.24.7':
dependencies:
'@babel/traverse': 7.25.6
- '@babel/types': 7.25.6
+ '@babel/types': 7.26.0
transitivePeerDependencies:
- supports-color
'@babel/helper-string-parser@7.24.8': {}
+ '@babel/helper-string-parser@7.25.9': {}
+
'@babel/helper-validator-identifier@7.24.7': {}
+ '@babel/helper-validator-identifier@7.25.9': {}
+
'@babel/helper-validator-option@7.24.8': {}
'@babel/helpers@7.25.6':
dependencies:
'@babel/template': 7.25.0
- '@babel/types': 7.25.6
+ '@babel/types': 7.26.0
'@babel/highlight@7.24.7':
dependencies:
@@ -8350,7 +8419,11 @@ snapshots:
'@babel/parser@7.25.6':
dependencies:
- '@babel/types': 7.25.6
+ '@babel/types': 7.26.0
+
+ '@babel/parser@7.26.2':
+ dependencies:
+ '@babel/types': 7.26.0
'@babel/plugin-transform-react-jsx-self@7.24.7(@babel/core@7.25.2)':
dependencies:
@@ -8374,16 +8447,34 @@ snapshots:
'@babel/template@7.25.0':
dependencies:
'@babel/code-frame': 7.24.7
- '@babel/parser': 7.25.6
- '@babel/types': 7.25.6
+ '@babel/parser': 7.26.2
+ '@babel/types': 7.26.0
+
+ '@babel/template@7.25.9':
+ dependencies:
+ '@babel/code-frame': 7.26.2
+ '@babel/parser': 7.26.2
+ '@babel/types': 7.26.0
'@babel/traverse@7.25.6':
dependencies:
'@babel/code-frame': 7.24.7
'@babel/generator': 7.25.6
- '@babel/parser': 7.25.6
+ '@babel/parser': 7.26.2
'@babel/template': 7.25.0
- '@babel/types': 7.25.6
+ '@babel/types': 7.26.0
+ debug: 4.3.7
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/traverse@7.25.9':
+ dependencies:
+ '@babel/code-frame': 7.26.2
+ '@babel/generator': 7.26.2
+ '@babel/parser': 7.26.2
+ '@babel/template': 7.25.9
+ '@babel/types': 7.26.0
debug: 4.3.7
globals: 11.12.0
transitivePeerDependencies:
@@ -8401,11 +8492,16 @@ snapshots:
'@babel/helper-validator-identifier': 7.24.7
to-fast-properties: 2.0.0
+ '@babel/types@7.26.0':
+ dependencies:
+ '@babel/helper-string-parser': 7.25.9
+ '@babel/helper-validator-identifier': 7.25.9
+
'@balena/dockerignore@1.0.2': {}
'@bcoe/v8-coverage@0.2.3': {}
- '@braintree/sanitize-url@7.0.2': {}
+ '@braintree/sanitize-url@7.0.4': {}
'@clack/core@0.3.4':
dependencies:
@@ -8497,6 +8593,8 @@ snapshots:
'@drizzle-team/brocli@0.10.2': {}
+ '@drizzle-team/brocli@0.11.0': {}
+
'@esbuild-kit/core-utils@3.3.2':
dependencies:
esbuild: 0.18.20
@@ -8917,7 +9015,7 @@ snapshots:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
- '@floating-ui/react@0.26.24(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@floating-ui/react@0.26.27(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@floating-ui/utils': 0.2.8
@@ -8973,13 +9071,12 @@ snapshots:
'@humanwhocodes/retry@0.4.0': {}
- '@ianvs/prettier-plugin-sort-imports@4.3.1(prettier@3.3.3)':
+ '@ianvs/prettier-plugin-sort-imports@4.4.0(prettier@3.3.3)':
dependencies:
- '@babel/core': 7.25.2
- '@babel/generator': 7.25.6
- '@babel/parser': 7.25.6
- '@babel/traverse': 7.25.6
- '@babel/types': 7.25.6
+ '@babel/generator': 7.26.2
+ '@babel/parser': 7.26.2
+ '@babel/traverse': 7.25.9
+ '@babel/types': 7.26.0
prettier: 3.3.3
semver: 7.6.3
transitivePeerDependencies:
@@ -9040,75 +9137,75 @@ snapshots:
js-base64: 3.7.7
optional: true
- '@mantine/colors-generator@7.13.4(chroma-js@3.1.2)':
+ '@mantine/colors-generator@7.13.5(chroma-js@3.1.2)':
dependencies:
chroma-js: 3.1.2
- '@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@mantine/core@7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@floating-ui/react': 0.26.24(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@mantine/hooks': 7.13.4(react@18.3.1)
+ '@floating-ui/react': 0.26.27(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@mantine/hooks': 7.13.5(react@18.3.1)
clsx: 2.1.1
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
react-number-format: 5.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react-remove-scroll: 2.6.0(@types/react@18.3.12)(react@18.3.1)
- react-textarea-autosize: 8.5.3(@types/react@18.3.12)(react@18.3.1)
+ react-textarea-autosize: 8.5.4(@types/react@18.3.12)(react@18.3.1)
type-fest: 4.26.1
transitivePeerDependencies:
- '@types/react'
- '@mantine/dates@7.13.4(@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.4(react@18.3.1))(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@mantine/dates@7.13.5(@mantine/core@7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.5(react@18.3.1))(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@mantine/core': 7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@mantine/hooks': 7.13.4(react@18.3.1)
+ '@mantine/core': 7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@mantine/hooks': 7.13.5(react@18.3.1)
clsx: 2.1.1
dayjs: 1.11.13
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
- '@mantine/form@7.13.4(react@18.3.1)':
+ '@mantine/form@7.13.5(react@18.3.1)':
dependencies:
fast-deep-equal: 3.1.3
klona: 2.0.6
react: 18.3.1
- '@mantine/hooks@7.13.4(react@18.3.1)':
+ '@mantine/hooks@7.13.5(react@18.3.1)':
dependencies:
react: 18.3.1
- '@mantine/modals@7.13.4(@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.4(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@mantine/modals@7.13.5(@mantine/core@7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.5(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@mantine/core': 7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@mantine/hooks': 7.13.4(react@18.3.1)
+ '@mantine/core': 7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@mantine/hooks': 7.13.5(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
- '@mantine/notifications@7.13.4(@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.4(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@mantine/notifications@7.13.5(@mantine/core@7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.5(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@mantine/core': 7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@mantine/hooks': 7.13.4(react@18.3.1)
- '@mantine/store': 7.13.4(react@18.3.1)
+ '@mantine/core': 7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@mantine/hooks': 7.13.5(react@18.3.1)
+ '@mantine/store': 7.13.5(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@mantine/spotlight@7.13.4(@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.4(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@mantine/spotlight@7.13.5(@mantine/core@7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.5(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@mantine/core': 7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@mantine/hooks': 7.13.4(react@18.3.1)
- '@mantine/store': 7.13.4(react@18.3.1)
+ '@mantine/core': 7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@mantine/hooks': 7.13.5(react@18.3.1)
+ '@mantine/store': 7.13.5(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
- '@mantine/store@7.13.4(react@18.3.1)':
+ '@mantine/store@7.13.5(react@18.3.1)':
dependencies:
react: 18.3.1
- '@mantine/tiptap@7.13.4(@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.4(react@18.3.1))(@tiptap/extension-link@2.9.1(@tiptap/core@2.9.1(@tiptap/pm@2.9.1))(@tiptap/pm@2.9.1))(@tiptap/react@2.9.1(@tiptap/core@2.9.1(@tiptap/pm@2.9.1))(@tiptap/pm@2.9.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@mantine/tiptap@7.13.5(@mantine/core@7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.5(react@18.3.1))(@tiptap/extension-link@2.9.1(@tiptap/core@2.9.1(@tiptap/pm@2.9.1))(@tiptap/pm@2.9.1))(@tiptap/react@2.9.1(@tiptap/core@2.9.1(@tiptap/pm@2.9.1))(@tiptap/pm@2.9.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@mantine/core': 7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@mantine/hooks': 7.13.4(react@18.3.1)
+ '@mantine/core': 7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@mantine/hooks': 7.13.5(react@18.3.1)
'@tiptap/extension-link': 2.9.1(@tiptap/core@2.9.1(@tiptap/pm@2.9.1))(@tiptap/pm@2.9.1)
'@tiptap/react': 2.9.1(@tiptap/core@2.9.1(@tiptap/pm@2.9.1))(@tiptap/pm@2.9.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1
@@ -9133,7 +9230,7 @@ snapshots:
dependencies:
'@antfu/ni': 0.21.12
'@axiomhq/js': 1.0.0-rc.3
- '@babel/parser': 7.25.6
+ '@babel/parser': 7.26.2
'@babel/types': 7.25.2
'@clack/prompts': 0.7.0
ast-types: 0.14.2
@@ -9179,37 +9276,37 @@ snapshots:
- utf-8-validate
- webpack-sources
- '@next/env@14.2.16': {}
+ '@next/env@14.2.17': {}
- '@next/eslint-plugin-next@14.2.16':
+ '@next/eslint-plugin-next@14.2.17':
dependencies:
glob: 10.3.10
- '@next/swc-darwin-arm64@14.2.16':
+ '@next/swc-darwin-arm64@14.2.17':
optional: true
- '@next/swc-darwin-x64@14.2.16':
+ '@next/swc-darwin-x64@14.2.17':
optional: true
- '@next/swc-linux-arm64-gnu@14.2.16':
+ '@next/swc-linux-arm64-gnu@14.2.17':
optional: true
- '@next/swc-linux-arm64-musl@14.2.16':
+ '@next/swc-linux-arm64-musl@14.2.17':
optional: true
- '@next/swc-linux-x64-gnu@14.2.16':
+ '@next/swc-linux-x64-gnu@14.2.17':
optional: true
- '@next/swc-linux-x64-musl@14.2.16':
+ '@next/swc-linux-x64-musl@14.2.17':
optional: true
- '@next/swc-win32-arm64-msvc@14.2.16':
+ '@next/swc-win32-arm64-msvc@14.2.17':
optional: true
- '@next/swc-win32-ia32-msvc@14.2.16':
+ '@next/swc-win32-ia32-msvc@14.2.17':
optional: true
- '@next/swc-win32-x64-msvc@14.2.16':
+ '@next/swc-win32-x64-msvc@14.2.17':
optional: true
'@noble/hashes@1.5.0': {}
@@ -9372,6 +9469,8 @@ snapshots:
'@rtsao/scc@1.1.0': {}
+ '@scarf/scarf@1.4.0': {}
+
'@socket.io/component-emitter@3.1.2': {}
'@swagger-api/apidom-ast@1.0.0-alpha.9':
@@ -9737,25 +9836,25 @@ snapshots:
dependencies:
remove-accents: 0.5.0
- '@tanstack/query-core@5.59.17': {}
+ '@tanstack/query-core@5.59.20': {}
- '@tanstack/query-devtools@5.59.19': {}
+ '@tanstack/query-devtools@5.59.20': {}
- '@tanstack/react-query-devtools@5.59.19(@tanstack/react-query@5.59.19(react@18.3.1))(react@18.3.1)':
+ '@tanstack/react-query-devtools@5.59.20(@tanstack/react-query@5.59.20(react@18.3.1))(react@18.3.1)':
dependencies:
- '@tanstack/query-devtools': 5.59.19
- '@tanstack/react-query': 5.59.19(react@18.3.1)
+ '@tanstack/query-devtools': 5.59.20
+ '@tanstack/react-query': 5.59.20(react@18.3.1)
react: 18.3.1
- '@tanstack/react-query-next-experimental@5.59.19(@tanstack/react-query@5.59.19(react@18.3.1))(next@14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6))(react@18.3.1)':
+ '@tanstack/react-query-next-experimental@5.59.20(@tanstack/react-query@5.59.20(react@18.3.1))(next@14.2.17(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6))(react@18.3.1)':
dependencies:
- '@tanstack/react-query': 5.59.19(react@18.3.1)
- next: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6)
+ '@tanstack/react-query': 5.59.20(react@18.3.1)
+ next: 14.2.17(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6)
react: 18.3.1
- '@tanstack/react-query@5.59.19(react@18.3.1)':
+ '@tanstack/react-query@5.59.20(react@18.3.1)':
dependencies:
- '@tanstack/query-core': 5.59.17
+ '@tanstack/query-core': 5.59.20
react: 18.3.1
'@tanstack/react-table@8.20.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
@@ -9774,9 +9873,9 @@ snapshots:
'@tanstack/virtual-core@3.10.8': {}
- '@testcontainers/mysql@10.13.2':
+ '@testcontainers/mysql@10.14.0':
dependencies:
- testcontainers: 10.13.2
+ testcontainers: 10.14.0
transitivePeerDependencies:
- supports-color
@@ -9993,20 +10092,20 @@ snapshots:
dependencies:
'@trpc/server': 11.0.0-rc.608
- '@trpc/next@11.0.0-rc.608(@tanstack/react-query@5.59.19(react@18.3.1))(@trpc/client@11.0.0-rc.608(@trpc/server@11.0.0-rc.608))(@trpc/react-query@11.0.0-rc.608(@tanstack/react-query@5.59.19(react@18.3.1))(@trpc/client@11.0.0-rc.608(@trpc/server@11.0.0-rc.608))(@trpc/server@11.0.0-rc.608)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@11.0.0-rc.608)(next@14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@trpc/next@11.0.0-rc.608(@tanstack/react-query@5.59.20(react@18.3.1))(@trpc/client@11.0.0-rc.608(@trpc/server@11.0.0-rc.608))(@trpc/react-query@11.0.0-rc.608(@tanstack/react-query@5.59.20(react@18.3.1))(@trpc/client@11.0.0-rc.608(@trpc/server@11.0.0-rc.608))(@trpc/server@11.0.0-rc.608)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@11.0.0-rc.608)(next@14.2.17(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@trpc/client': 11.0.0-rc.608(@trpc/server@11.0.0-rc.608)
'@trpc/server': 11.0.0-rc.608
- next: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6)
+ next: 14.2.17(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
- '@tanstack/react-query': 5.59.19(react@18.3.1)
- '@trpc/react-query': 11.0.0-rc.608(@tanstack/react-query@5.59.19(react@18.3.1))(@trpc/client@11.0.0-rc.608(@trpc/server@11.0.0-rc.608))(@trpc/server@11.0.0-rc.608)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tanstack/react-query': 5.59.20(react@18.3.1)
+ '@trpc/react-query': 11.0.0-rc.608(@tanstack/react-query@5.59.20(react@18.3.1))(@trpc/client@11.0.0-rc.608(@trpc/server@11.0.0-rc.608))(@trpc/server@11.0.0-rc.608)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@trpc/react-query@11.0.0-rc.608(@tanstack/react-query@5.59.19(react@18.3.1))(@trpc/client@11.0.0-rc.608(@trpc/server@11.0.0-rc.608))(@trpc/server@11.0.0-rc.608)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@trpc/react-query@11.0.0-rc.608(@tanstack/react-query@5.59.20(react@18.3.1))(@trpc/client@11.0.0-rc.608(@trpc/server@11.0.0-rc.608))(@trpc/server@11.0.0-rc.608)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@tanstack/react-query': 5.59.19(react@18.3.1)
+ '@tanstack/react-query': 5.59.20(react@18.3.1)
'@trpc/client': 11.0.0-rc.608(@trpc/server@11.0.0-rc.608)
'@trpc/server': 11.0.0-rc.608
react: 18.3.1
@@ -10024,7 +10123,7 @@ snapshots:
'@tsconfig/svelte@1.0.13': {}
- '@turbo/gen@2.2.3(@types/node@22.8.7)(typescript@5.6.3)':
+ '@turbo/gen@2.2.3(@types/node@22.9.0)(typescript@5.6.3)':
dependencies:
'@turbo/workspaces': 2.2.3
commander: 10.0.1
@@ -10034,7 +10133,7 @@ snapshots:
node-plop: 0.26.3
picocolors: 1.0.1
proxy-agent: 6.4.0
- ts-node: 10.9.2(@types/node@22.8.7)(typescript@5.6.3)
+ ts-node: 10.9.2(@types/node@22.9.0)(typescript@5.6.3)
update-check: 1.5.4
validate-npm-package-name: 5.0.1
transitivePeerDependencies:
@@ -10061,7 +10160,7 @@ snapshots:
'@types/asn1@0.2.4':
dependencies:
- '@types/node': 22.8.7
+ '@types/node': 22.9.0
'@types/babel__core@7.20.5':
dependencies:
@@ -10073,35 +10172,35 @@ snapshots:
'@types/babel__generator@7.6.8':
dependencies:
- '@babel/types': 7.25.6
+ '@babel/types': 7.26.0
'@types/babel__template@7.4.4':
dependencies:
- '@babel/parser': 7.25.6
- '@babel/types': 7.25.6
+ '@babel/parser': 7.26.2
+ '@babel/types': 7.26.0
'@types/babel__traverse@7.20.6':
dependencies:
- '@babel/types': 7.25.6
+ '@babel/types': 7.26.0
'@types/bcrypt@5.0.2':
dependencies:
- '@types/node': 22.8.7
+ '@types/node': 22.9.0
'@types/better-sqlite3@7.6.11':
dependencies:
- '@types/node': 22.8.7
+ '@types/node': 22.9.0
'@types/body-parser@1.19.5':
dependencies:
'@types/connect': 3.4.38
- '@types/node': 22.8.7
+ '@types/node': 22.9.0
'@types/chroma-js@2.4.4': {}
'@types/connect@3.4.38':
dependencies:
- '@types/node': 22.8.7
+ '@types/node': 22.9.0
'@types/cookie@0.6.0': {}
@@ -10110,7 +10209,7 @@ snapshots:
'@types/connect': 3.4.38
'@types/express': 4.17.21
'@types/keygrip': 1.0.6
- '@types/node': 22.8.7
+ '@types/node': 22.9.0
'@types/css-font-loading-module@0.0.7': {}
@@ -10118,13 +10217,13 @@ snapshots:
'@types/docker-modem@3.0.6':
dependencies:
- '@types/node': 22.8.7
+ '@types/node': 22.9.0
'@types/ssh2': 1.15.1
'@types/dockerode@3.3.31':
dependencies:
'@types/docker-modem': 3.0.6
- '@types/node': 22.8.7
+ '@types/node': 22.9.0
'@types/ssh2': 1.15.1
'@types/estree@1.0.5': {}
@@ -10133,7 +10232,7 @@ snapshots:
'@types/express-serve-static-core@4.19.5':
dependencies:
- '@types/node': 22.8.7
+ '@types/node': 22.9.0
'@types/qs': 6.9.16
'@types/range-parser': 1.2.7
'@types/send': 0.17.4
@@ -10148,7 +10247,7 @@ snapshots:
'@types/glob@7.2.0':
dependencies:
'@types/minimatch': 5.1.2
- '@types/node': 22.8.7
+ '@types/node': 22.9.0
'@types/hast@2.3.10':
dependencies:
@@ -10177,7 +10276,7 @@ snapshots:
dependencies:
undici-types: 5.26.5
- '@types/node@22.8.7':
+ '@types/node@22.9.0':
dependencies:
undici-types: 6.19.8
@@ -10205,21 +10304,21 @@ snapshots:
'@types/send@0.17.4':
dependencies:
'@types/mime': 1.3.5
- '@types/node': 22.8.7
+ '@types/node': 22.9.0
'@types/serve-static@1.15.7':
dependencies:
'@types/http-errors': 2.0.4
- '@types/node': 22.8.7
+ '@types/node': 22.9.0
'@types/send': 0.17.4
'@types/ssh2-streams@0.1.12':
dependencies:
- '@types/node': 22.8.7
+ '@types/node': 22.9.0
'@types/ssh2@0.5.52':
dependencies:
- '@types/node': 22.8.7
+ '@types/node': 22.9.0
'@types/ssh2-streams': 0.1.12
'@types/ssh2@1.15.1':
@@ -10232,7 +10331,7 @@ snapshots:
'@types/through@0.0.33':
dependencies:
- '@types/node': 22.8.7
+ '@types/node': 22.9.0
'@types/tinycolor2@1.4.6': {}
@@ -10248,11 +10347,11 @@ snapshots:
'@types/ws@8.5.13':
dependencies:
- '@types/node': 22.8.7
+ '@types/node': 22.9.0
'@types/xml2js@0.4.14':
dependencies:
- '@types/node': 22.8.7
+ '@types/node': 22.9.0
'@typescript-eslint/eslint-plugin@8.13.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0)(typescript@5.6.3)':
dependencies:
@@ -10365,14 +10464,14 @@ snapshots:
global: 4.4.0
is-function: 1.0.2
- '@vitejs/plugin-react@4.3.3(vite@5.4.5(@types/node@22.8.7)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0))':
+ '@vitejs/plugin-react@4.3.3(vite@5.4.5(@types/node@22.9.0)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0))':
dependencies:
'@babel/core': 7.25.2
'@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2)
'@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.25.2)
'@types/babel__core': 7.20.5
react-refresh: 0.14.2
- vite: 5.4.5(@types/node@22.8.7)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)
+ vite: 5.4.5(@types/node@22.9.0)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)
transitivePeerDependencies:
- supports-color
@@ -10390,7 +10489,7 @@ snapshots:
std-env: 3.7.0
test-exclude: 7.0.1
tinyrainbow: 1.2.0
- vitest: 2.1.4(@types/node@22.8.7)(@vitest/ui@2.1.4)(jsdom@25.0.1)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)
+ vitest: 2.1.4(@types/node@22.9.0)(@vitest/ui@2.1.4)(jsdom@25.0.1)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)
transitivePeerDependencies:
- supports-color
@@ -10401,13 +10500,13 @@ snapshots:
chai: 5.1.2
tinyrainbow: 1.2.0
- '@vitest/mocker@2.1.4(vite@5.4.5(@types/node@22.8.7)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0))':
+ '@vitest/mocker@2.1.4(vite@5.4.5(@types/node@22.9.0)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0))':
dependencies:
'@vitest/spy': 2.1.4
estree-walker: 3.0.3
magic-string: 0.30.12
optionalDependencies:
- vite: 5.4.5(@types/node@22.8.7)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)
+ vite: 5.4.5(@types/node@22.9.0)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)
'@vitest/pretty-format@2.1.4':
dependencies:
@@ -10437,7 +10536,7 @@ snapshots:
sirv: 3.0.0
tinyglobby: 0.2.10
tinyrainbow: 1.2.0
- vitest: 2.1.4(@types/node@22.8.7)(@vitest/ui@2.1.4)(jsdom@25.0.1)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)
+ vitest: 2.1.4(@types/node@22.9.0)(@vitest/ui@2.1.4)(jsdom@25.0.1)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)
'@vitest/utils@2.1.4':
dependencies:
@@ -11137,6 +11236,8 @@ snapshots:
cookie@0.7.1: {}
+ cookie@0.7.2: {}
+
cookie@1.0.1: {}
cookies@0.9.1:
@@ -11363,7 +11464,7 @@ snapshots:
dom-walk@0.1.2: {}
- dompurify@3.1.4: {}
+ dompurify@3.1.6: {}
dot-case@2.1.1:
dependencies:
@@ -11388,7 +11489,7 @@ snapshots:
drange@1.1.1: {}
- drizzle-kit@0.27.1:
+ drizzle-kit@0.28.0:
dependencies:
'@drizzle-team/brocli': 0.10.2
'@esbuild-kit/esm-loader': 2.6.5
@@ -11397,13 +11498,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
- drizzle-orm@0.36.0(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.11)(@types/react@18.3.12)(better-sqlite3@11.5.0)(mysql2@3.11.3)(react@18.3.1):
+ drizzle-orm@0.36.1(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.11)(@types/react@18.3.12)(better-sqlite3@11.5.0)(mysql2@3.11.4)(react@18.3.1):
optionalDependencies:
'@libsql/client-wasm': 0.14.0
'@types/better-sqlite3': 7.6.11
'@types/react': 18.3.12
better-sqlite3: 11.5.0
- mysql2: 3.11.3
+ mysql2: 3.11.4
react: 18.3.1
eastasianwidth@0.2.0: {}
@@ -12606,7 +12707,7 @@ snapshots:
jest-worker@27.5.1:
dependencies:
- '@types/node': 22.8.7
+ '@types/node': 22.9.0
merge-stream: 2.0.0
supports-color: 8.1.1
@@ -12662,6 +12763,8 @@ snapshots:
jsesc@2.5.2: {}
+ jsesc@3.0.2: {}
+
json-buffer@3.0.1: {}
json-parse-even-better-errors@2.3.1: {}
@@ -12838,11 +12941,11 @@ snapshots:
make-error@1.3.6: {}
- mantine-react-table@2.0.0-beta.7(@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/dates@7.13.4(@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.4(react@18.3.1))(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.4(react@18.3.1))(@tabler/icons-react@3.21.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):
+ mantine-react-table@2.0.0-beta.7(@mantine/core@7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/dates@7.13.5(@mantine/core@7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.5(react@18.3.1))(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.5(react@18.3.1))(@tabler/icons-react@3.21.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):
dependencies:
- '@mantine/core': 7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@mantine/dates': 7.13.4(@mantine/core@7.13.4(@mantine/hooks@7.13.4(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.4(react@18.3.1))(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@mantine/hooks': 7.13.4(react@18.3.1)
+ '@mantine/core': 7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@mantine/dates': 7.13.5(@mantine/core@7.13.5(@mantine/hooks@7.13.5(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@7.13.5(react@18.3.1))(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@mantine/hooks': 7.13.5(react@18.3.1)
'@tabler/icons-react': 3.21.0(react@18.3.1)
'@tanstack/match-sorter-utils': 8.19.4
'@tanstack/react-table': 8.20.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -12961,7 +13064,7 @@ snapshots:
'@babel/runtime': 7.25.6
global: 4.4.0
- mysql2@3.11.3:
+ mysql2@3.11.4:
dependencies:
aws-ssl-profiles: 1.1.2
denque: 2.1.0
@@ -12998,23 +13101,23 @@ snapshots:
netmask@2.0.2: {}
- next-auth@5.0.0-beta.25(next@14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6))(react@18.3.1):
+ next-auth@5.0.0-beta.25(next@14.2.17(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6))(react@18.3.1):
dependencies:
'@auth/core': 0.37.2
- next: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6)
+ next: 14.2.17(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6)
react: 18.3.1
- next-intl@3.24.0(next@14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6))(react@18.3.1):
+ next-intl@3.25.0(next@14.2.17(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6))(react@18.3.1):
dependencies:
'@formatjs/intl-localematcher': 0.5.5
negotiator: 1.0.0
- next: 14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6)
+ next: 14.2.17(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6)
react: 18.3.1
- use-intl: 3.24.0(react@18.3.1)
+ use-intl: 3.25.0(react@18.3.1)
- next@14.2.16(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6):
+ next@14.2.17(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.80.6):
dependencies:
- '@next/env': 14.2.16
+ '@next/env': 14.2.17
'@swc/helpers': 0.5.5
busboy: 1.6.0
caniuse-lite: 1.0.30001660
@@ -13024,15 +13127,15 @@ snapshots:
react-dom: 18.3.1(react@18.3.1)
styled-jsx: 5.1.1(@babel/core@7.25.2)(react@18.3.1)
optionalDependencies:
- '@next/swc-darwin-arm64': 14.2.16
- '@next/swc-darwin-x64': 14.2.16
- '@next/swc-linux-arm64-gnu': 14.2.16
- '@next/swc-linux-arm64-musl': 14.2.16
- '@next/swc-linux-x64-gnu': 14.2.16
- '@next/swc-linux-x64-musl': 14.2.16
- '@next/swc-win32-arm64-msvc': 14.2.16
- '@next/swc-win32-ia32-msvc': 14.2.16
- '@next/swc-win32-x64-msvc': 14.2.16
+ '@next/swc-darwin-arm64': 14.2.17
+ '@next/swc-darwin-x64': 14.2.17
+ '@next/swc-linux-arm64-gnu': 14.2.17
+ '@next/swc-linux-arm64-musl': 14.2.17
+ '@next/swc-linux-x64-gnu': 14.2.17
+ '@next/swc-linux-x64-musl': 14.2.17
+ '@next/swc-win32-arm64-msvc': 14.2.17
+ '@next/swc-win32-ia32-msvc': 14.2.17
+ '@next/swc-win32-x64-msvc': 14.2.17
sass: 1.80.6
transitivePeerDependencies:
- '@babel/core'
@@ -13090,7 +13193,7 @@ snapshots:
node-mocks-http@1.16.0:
dependencies:
'@types/express': 4.17.21
- '@types/node': 22.8.7
+ '@types/node': 22.9.0
accepts: 1.3.8
content-disposition: 0.5.4
depd: 1.1.2
@@ -13739,7 +13842,7 @@ snapshots:
react: 18.3.1
refractor: 3.6.0
- react-textarea-autosize@8.5.3(@types/react@18.3.12)(react@18.3.1):
+ react-textarea-autosize@8.5.4(@types/react@18.3.12)(react@18.3.1):
dependencies:
'@babel/runtime': 7.25.6
react: 18.3.1
@@ -14310,15 +14413,16 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {}
- swagger-client@3.29.3:
+ swagger-client@3.31.0:
dependencies:
'@babel/runtime-corejs3': 7.25.6
+ '@scarf/scarf': 1.4.0
'@swagger-api/apidom-core': 1.0.0-alpha.9
'@swagger-api/apidom-error': 1.0.0-alpha.9
'@swagger-api/apidom-json-pointer': 1.0.0-alpha.9
'@swagger-api/apidom-ns-openapi-3-1': 1.0.0-alpha.9
'@swagger-api/apidom-reference': 1.0.0-alpha.9
- cookie: 0.6.0
+ cookie: 0.7.2
deepmerge: 4.3.1
fast-json-patch: 3.1.1
js-yaml: 4.1.0
@@ -14332,15 +14436,16 @@ snapshots:
transitivePeerDependencies:
- debug
- swagger-ui-react@5.17.14(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ swagger-ui-react@5.18.2(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
'@babel/runtime-corejs3': 7.25.6
- '@braintree/sanitize-url': 7.0.2
+ '@braintree/sanitize-url': 7.0.4
+ '@scarf/scarf': 1.4.0
base64-js: 1.5.1
classnames: 2.5.1
css.escape: 1.5.1
deep-extend: 0.6.0
- dompurify: 3.1.4
+ dompurify: 3.1.6
ieee754: 1.2.1
immutable: 3.8.2
js-file-download: 0.4.12
@@ -14364,7 +14469,7 @@ snapshots:
reselect: 5.1.1
serialize-error: 8.1.0
sha.js: 2.4.11
- swagger-client: 3.29.3
+ swagger-client: 3.31.0
url-parse: 1.5.10
xml: 1.0.1
xml-but-prettier: 1.0.1
@@ -14451,7 +14556,7 @@ snapshots:
glob: 10.4.5
minimatch: 9.0.5
- testcontainers@10.13.2:
+ testcontainers@10.14.0:
dependencies:
'@balena/dockerignore': 1.0.2
'@types/dockerode': 3.3.31
@@ -14514,11 +14619,11 @@ snapshots:
no-case: 2.3.2
upper-case: 1.1.3
- tldts-core@6.1.58: {}
+ tldts-core@6.1.59: {}
- tldts@6.1.58:
+ tldts@6.1.59:
dependencies:
- tldts-core: 6.1.58
+ tldts-core: 6.1.59
tmp@0.0.33:
dependencies:
@@ -14547,7 +14652,7 @@ snapshots:
tough-cookie@5.0.0:
dependencies:
- tldts: 6.1.58
+ tldts: 6.1.59
tr46@0.0.3: {}
@@ -14593,14 +14698,14 @@ snapshots:
ts-mixer@6.0.4: {}
- ts-node@10.9.2(@types/node@22.8.7)(typescript@5.6.3):
+ ts-node@10.9.2(@types/node@22.9.0)(typescript@5.6.3):
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': 22.8.7
+ '@types/node': 22.9.0
acorn: 8.12.1
acorn-walk: 8.3.4
arg: 4.1.3
@@ -14849,7 +14954,7 @@ snapshots:
dequal: 2.0.3
react: 18.3.1
- use-intl@3.24.0(react@18.3.1):
+ use-intl@3.25.0(react@18.3.1):
dependencies:
'@formatjs/fast-memoize': 2.2.1
intl-messageformat: 10.7.1
@@ -14918,12 +15023,12 @@ snapshots:
dependencies:
global: 4.4.0
- vite-node@2.1.4(@types/node@22.8.7)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0):
+ vite-node@2.1.4(@types/node@22.9.0)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0):
dependencies:
cac: 6.7.14
debug: 4.3.7
pathe: 1.1.2
- vite: 5.4.5(@types/node@22.8.7)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)
+ vite: 5.4.5(@types/node@22.9.0)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)
transitivePeerDependencies:
- '@types/node'
- less
@@ -14935,33 +15040,33 @@ snapshots:
- supports-color
- terser
- vite-tsconfig-paths@5.1.0(typescript@5.6.3)(vite@5.4.5(@types/node@22.8.7)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)):
+ vite-tsconfig-paths@5.1.0(typescript@5.6.3)(vite@5.4.5(@types/node@22.9.0)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)):
dependencies:
debug: 4.3.7
globrex: 0.1.2
tsconfck: 3.1.3(typescript@5.6.3)
optionalDependencies:
- vite: 5.4.5(@types/node@22.8.7)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)
+ vite: 5.4.5(@types/node@22.9.0)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)
transitivePeerDependencies:
- supports-color
- typescript
- vite@5.4.5(@types/node@22.8.7)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0):
+ vite@5.4.5(@types/node@22.9.0)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0):
dependencies:
esbuild: 0.21.5
postcss: 8.4.47
rollup: 4.21.3
optionalDependencies:
- '@types/node': 22.8.7
+ '@types/node': 22.9.0
fsevents: 2.3.3
sass: 1.80.6
sugarss: 4.0.1(postcss@8.4.47)
terser: 5.32.0
- vitest@2.1.4(@types/node@22.8.7)(@vitest/ui@2.1.4)(jsdom@25.0.1)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0):
+ vitest@2.1.4(@types/node@22.9.0)(@vitest/ui@2.1.4)(jsdom@25.0.1)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0):
dependencies:
'@vitest/expect': 2.1.4
- '@vitest/mocker': 2.1.4(vite@5.4.5(@types/node@22.8.7)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0))
+ '@vitest/mocker': 2.1.4(vite@5.4.5(@types/node@22.9.0)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0))
'@vitest/pretty-format': 2.1.4
'@vitest/runner': 2.1.4
'@vitest/snapshot': 2.1.4
@@ -14977,11 +15082,11 @@ snapshots:
tinyexec: 0.3.1
tinypool: 1.0.1
tinyrainbow: 1.2.0
- vite: 5.4.5(@types/node@22.8.7)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)
- vite-node: 2.1.4(@types/node@22.8.7)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)
+ vite: 5.4.5(@types/node@22.9.0)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)
+ vite-node: 2.1.4(@types/node@22.9.0)(sass@1.80.6)(sugarss@4.0.1(postcss@8.4.47))(terser@5.32.0)
why-is-node-running: 2.3.0
optionalDependencies:
- '@types/node': 22.8.7
+ '@types/node': 22.9.0
'@vitest/ui': 2.1.4(vitest@2.1.4)
jsdom: 25.0.1
transitivePeerDependencies:
diff --git a/scripts/run.sh b/scripts/run.sh
index f53752502..bc4d9c9b1 100644
--- a/scripts/run.sh
+++ b/scripts/run.sh
@@ -1,3 +1,7 @@
+# Creating folders in volume
+mkdir -p /appdata/db
+mkdir -p /appdata/redis
+
# Run migrations
if [ $DB_MIGRATIONS_DISABLED = "true" ]; then
echo "DB migrations are disabled, skipping"
diff --git a/tooling/eslint/package.json b/tooling/eslint/package.json
index f83fd3f8a..889e07969 100644
--- a/tooling/eslint/package.json
+++ b/tooling/eslint/package.json
@@ -16,7 +16,7 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
- "@next/eslint-plugin-next": "^14.2.16",
+ "@next/eslint-plugin-next": "^14.2.17",
"eslint-config-prettier": "^9.1.0",
"eslint-config-turbo": "^2.2.3",
"eslint-plugin-import": "^2.31.0",
diff --git a/tooling/github/setup/action.yml b/tooling/github/setup/action.yml
index 6e29909be..e5a50b4ce 100644
--- a/tooling/github/setup/action.yml
+++ b/tooling/github/setup/action.yml
@@ -7,7 +7,7 @@ runs:
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
- node-version: 20
+ node-version: 22
cache: "pnpm"
- shell: bash
diff --git a/tooling/prettier/package.json b/tooling/prettier/package.json
index 619a59f82..92af0de78 100644
--- a/tooling/prettier/package.json
+++ b/tooling/prettier/package.json
@@ -9,7 +9,7 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
- "@ianvs/prettier-plugin-sort-imports": "^4.3.1",
+ "@ianvs/prettier-plugin-sort-imports": "^4.4.0",
"prettier": "^3.3.3"
},
"devDependencies": {
diff --git a/tsconfig.e2e.json b/tsconfig.e2e.json
new file mode 100644
index 000000000..a579361f9
--- /dev/null
+++ b/tsconfig.e2e.json
@@ -0,0 +1,8 @@
+{
+ "extends": "@homarr/tsconfig/base.json",
+ "compilerOptions": {
+ "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json"
+ },
+ "include": ["e2e"],
+ "exclude": ["node_modules"]
+}