Compare commits

..
Author SHA1 Message Date
Manuel 4dbdfe8133 Revert "chore(deps): update pnpm to v11 (#5660)"
This reverts commit b8e0123893.
2026-05-08 15:11:13 +02:00
Manuel 51e6951b58 Revert "chore(deps): update pnpm to v11.0.4 (#5668)"
This reverts commit c4ec45a9d0.
2026-05-08 15:10:21 +02:00
21 changed files with 195 additions and 531 deletions

No files matched your search

-6
View File
@@ -45,12 +45,6 @@ DB_URL='FULL_PATH_TO_YOUR_SQLITE_DB_FILE'
TURBO_TELEMETRY_DISABLED=1
# Comma-separated paths to Docker-compatible Unix sockets.
# Useful for connecting to multiple runtimes (Docker + Podman) simultaneously.
# When unset and no TCP hosts configured, defaults to /var/run/docker.sock.
# Example: DOCKER_SOCKET_PATHS=/var/run/docker.sock,/run/user/1000/podman/podman.sock
# DOCKER_SOCKET_PATHS=
# Enable kubernetes tool
# ENABLE_KUBERNETES=true
-25
View File
@@ -1,28 +1,3 @@
## [1.61.0](https://github.com/homarr-labs/homarr/compare/v1.60.0...v1.61.0) (2026-05-08)
### Features
* add auto/system appearance mode + fix dark mode system resources charts ([#5492](https://github.com/homarr-labs/homarr/issues/5492)) ([831b622](https://github.com/homarr-labs/homarr/commit/831b6221fdf21fe4913b0f165ef551afeada4f33))
* add pwa support ([#5530](https://github.com/homarr-labs/homarr/issues/5530)) ([277a509](https://github.com/homarr-labs/homarr/commit/277a509f490d57bb6547c86c417c29c0e7af7e40))
* add Umami Analytics integration and widget ([#5362](https://github.com/homarr-labs/homarr/issues/5362)) ([43cc68b](https://github.com/homarr-labs/homarr/commit/43cc68bdd49c4877012e39e23355f6506aea7f4e))
* **docker:** Podman compatibility, multi-socket support, per-host error isolation ([#5425](https://github.com/homarr-labs/homarr/issues/5425)) ([56af6bc](https://github.com/homarr-labs/homarr/commit/56af6bcaf00e980e4c7a40d8e912901cd1395f5a))
* **entity-state:** add data attributes for custom-css styling ([#5655](https://github.com/homarr-labs/homarr/issues/5655)) ([0937555](https://github.com/homarr-labs/homarr/commit/0937555d49c29455bc33307ae5e50bf5b812c7c7))
* **installations:** support secrets file for all environment variables ([#5125](https://github.com/homarr-labs/homarr/issues/5125)) ([4d30a2e](https://github.com/homarr-labs/homarr/commit/4d30a2e8c48f818bb4947a651b0fec5f64cbf569))
* **qbittorrent:** add api-key support ([#5677](https://github.com/homarr-labs/homarr/issues/5677)) ([756e8d1](https://github.com/homarr-labs/homarr/commit/756e8d172455f91e40cd8fb5faff6953cc9778c5))
* **spotlight:** rework !bang search UX ([#4813](https://github.com/homarr-labs/homarr/issues/4813)) ([b5c316b](https://github.com/homarr-labs/homarr/commit/b5c316b825bdffa267fd173a3c39a12269142665))
### Bug Fixes
* **apps:** creation on the fly broken ([#5605](https://github.com/homarr-labs/homarr/issues/5605)) ([3183914](https://github.com/homarr-labs/homarr/commit/3183914a1502555681b73975062ed6ca8a48cb75))
* **calendar:** keep working integrations when one fails ([#5629](https://github.com/homarr-labs/homarr/issues/5629)) ([44bd16d](https://github.com/homarr-labs/homarr/commit/44bd16d6770d289054df6c7c93adff42d2243252))
* **lang:** portuguese is linked to brazilian portuguese on crowdin ([#5622](https://github.com/homarr-labs/homarr/issues/5622)) ([62be81e](https://github.com/homarr-labs/homarr/commit/62be81ea607a609a816157686700c54540e1568b))
* **qbittorrent:** support version 5.2 ([#5672](https://github.com/homarr-labs/homarr/issues/5672)) ([00a0552](https://github.com/homarr-labs/homarr/commit/00a055283e8848542b67d88a656a99fdd0bcb444))
* **update-checker:** hide prereleases on non-prerelease versions ([#5645](https://github.com/homarr-labs/homarr/issues/5645)) ([b07a4a0](https://github.com/homarr-labs/homarr/commit/b07a4a0f3e3af384ec477bf5c505a705b003de47))
### Reverts
* **deps:** downgrade pnpm to v10 ([#5673](https://github.com/homarr-labs/homarr/issues/5673)) ([44a2973](https://github.com/homarr-labs/homarr/commit/44a2973b1aba1e2c6bd818be022205f3cdb7c943))
## [1.60.0](https://github.com/homarr-labs/homarr/compare/v1.59.3...v1.60.0) (2026-05-01)
### Features
-4
View File
@@ -3,11 +3,7 @@
# Exempt Renovate‑managed files (no owners)
package.json
**/package.json
package-lock.json
**/package-lock.json
pnpm-lock.yaml
**/pnpm-lock.yaml
pnpm-workspace.yaml
Dockerfile
docker-compose.yml
@@ -58,18 +58,6 @@ const createColumns = (
return <ContainerStateBadge state={cell.row.original.state} />;
},
},
{
accessorKey: "host",
header: t("docker.field.host.label"),
size: 140,
Cell({ row }) {
return (
<Text truncate="end" title={row.original.host}>
{row.original.host}
</Text>
);
},
},
{
accessorKey: "image",
header: t("docker.field.containerImage.label"),
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "homarr",
"version": "1.61.0",
"version": "1.60.0",
"private": true,
"scripts": {
"build": "cross-env CI=true turbo build",
@@ -138,7 +138,6 @@ const getContainerOrThrowAsync = async (id: string) => {
interface DockerContainer {
name: string;
id: string;
host: string;
state: ContainerState;
image: string;
ports: Port[] | undefined;
+1 -1
View File
@@ -61,7 +61,7 @@ export const integrationDefs = {
},
qBittorrent: {
name: "qBittorrent",
secretKinds: [["apiKey"], ["username", "password"]],
secretKinds: [["username", "password"]],
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/qbittorrent.svg",
category: ["downloadClient", "torrent"],
documentationUrl: createDocumentationLink("/docs/integrations/q-bittorent"),
+1 -3
View File
@@ -4,11 +4,9 @@ import { createBooleanSchema, createEnv } from "@homarr/core/infrastructure/env"
export const env = createEnv({
server: {
// Comma separated list of docker hostnames that can be used to connect to query the docker endpoints (localhost,host.docker.internal, ...)
// Comma separated list of docker hostnames that can be used to connect to query the docker endpoints (localhost:2375,host.docker.internal:2375, ...)
DOCKER_HOSTNAMES: z.string().optional(),
DOCKER_PORTS: z.string().optional(),
// Comma separated paths to Docker-compatible Unix sockets (e.g., /var/run/docker.sock,/run/user/1000/podman/podman.sock)
DOCKER_SOCKET_PATHS: z.string().optional(),
ENABLE_DOCKER: createBooleanSchema(true),
ENABLE_KUBERNETES: createBooleanSchema(false),
},
+20 -32
View File
@@ -11,43 +11,31 @@ export class DockerSingleton {
private static instances: DockerInstance[] | null = null;
private createInstances() {
const socketPaths = env.DOCKER_SOCKET_PATHS;
const hostVariable = env.DOCKER_HOSTNAMES;
const portVariable = env.DOCKER_PORTS;
// Socket instances from DOCKER_SOCKET_PATHS
const socketInstances: DockerInstance[] = socketPaths
? socketPaths.split(",").map((socketPath) => ({
host: socketPath,
instance: new Docker({ socketPath }),
}))
: [];
// TCP instances from existing DOCKER_HOSTNAMES/DOCKER_PORTS
let tcpInstances: DockerInstance[] = [];
if (hostVariable !== undefined && portVariable !== undefined) {
const hostnames = hostVariable.split(",");
const ports = portVariable.split(",");
if (hostnames.length !== ports.length) {
throw new Error("The number of hosts and ports must match");
}
tcpInstances = hostnames.map((host, i) => ({
host: `${host}:${ports[i]}`,
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
instance: new Docker({ host, port: parseInt(ports[i]!, 10) }),
}));
}
const instances = [...socketInstances, ...tcpInstances];
// Default: local socket if nothing else configured
if (instances.length === 0) {
if (hostVariable === undefined || portVariable === undefined) {
return [{ host: "socket", instance: new Docker() }];
}
const hostnames = hostVariable.split(",");
const ports = portVariable.split(",");
return instances;
if (hostnames.length !== ports.length) {
throw new Error("The number of hosts and ports must match");
}
return hostnames.map((host, i) => {
// Check above ensures that ports[i] is not undefined
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const port = ports[i]!;
return {
host: `${host}:${port}`,
instance: new Docker({
host,
port: parseInt(port, 10),
}),
};
});
}
public static findInstance(host: string): DockerInstance | undefined {
-110
View File
@@ -1,110 +0,0 @@
import { beforeEach, describe, expect, test, vi } from "vitest";
import { DockerSingleton } from "../singleton";
const mockEnv = vi.hoisted(() => ({
DOCKER_SOCKET_PATHS: undefined as string | undefined,
DOCKER_HOSTNAMES: undefined as string | undefined,
DOCKER_PORTS: undefined as string | undefined,
ENABLE_DOCKER: true,
ENABLE_KUBERNETES: false,
}));
vi.mock("dockerode", () => {
return {
default: class MockDocker {
constructor(public opts?: Record<string, unknown>) {}
},
};
});
vi.mock("../env", () => ({
env: mockEnv,
}));
describe("DockerSingleton", () => {
beforeEach(() => {
// Reset singleton cache between tests
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access
(DockerSingleton as any).instances = null;
// Reset env to defaults
mockEnv.DOCKER_SOCKET_PATHS = undefined;
mockEnv.DOCKER_HOSTNAMES = undefined;
mockEnv.DOCKER_PORTS = undefined;
});
test("should return default socket when no env vars set", () => {
const instances = DockerSingleton.getInstances();
expect(instances).toHaveLength(1);
expect(instances[0]?.host).toBe("socket");
});
test("should return TCP instances only when DOCKER_HOSTNAMES and DOCKER_PORTS set", () => {
mockEnv.DOCKER_HOSTNAMES = "remote-host";
mockEnv.DOCKER_PORTS = "2375";
const instances = DockerSingleton.getInstances();
expect(instances).toHaveLength(1);
expect(instances[0]?.host).toBe("remote-host:2375");
});
test("should return multiple TCP instances", () => {
mockEnv.DOCKER_HOSTNAMES = "host1,host2";
mockEnv.DOCKER_PORTS = "2375,2376";
const instances = DockerSingleton.getInstances();
expect(instances).toHaveLength(2);
expect(instances[0]?.host).toBe("host1:2375");
expect(instances[1]?.host).toBe("host2:2376");
});
test("should throw when hostname and port counts do not match", () => {
mockEnv.DOCKER_HOSTNAMES = "host1,host2";
mockEnv.DOCKER_PORTS = "2375";
expect(() => DockerSingleton.getInstances()).toThrow("The number of hosts and ports must match");
});
test("should return socket instances when DOCKER_SOCKET_PATHS set", () => {
mockEnv.DOCKER_SOCKET_PATHS = "/var/run/docker.sock";
const instances = DockerSingleton.getInstances();
expect(instances).toHaveLength(1);
expect(instances[0]?.host).toBe("/var/run/docker.sock");
});
test("should return multiple socket instances", () => {
mockEnv.DOCKER_SOCKET_PATHS = "/var/run/docker.sock,/run/user/1000/podman/podman.sock";
const instances = DockerSingleton.getInstances();
expect(instances).toHaveLength(2);
expect(instances[0]?.host).toBe("/var/run/docker.sock");
expect(instances[1]?.host).toBe("/run/user/1000/podman/podman.sock");
});
test("should combine socket and TCP instances", () => {
mockEnv.DOCKER_SOCKET_PATHS = "/var/run/docker.sock,/run/user/1000/podman/podman.sock";
mockEnv.DOCKER_HOSTNAMES = "remote-host";
mockEnv.DOCKER_PORTS = "2375";
const instances = DockerSingleton.getInstances();
expect(instances).toHaveLength(3);
expect(instances[0]?.host).toBe("/var/run/docker.sock");
expect(instances[1]?.host).toBe("/run/user/1000/podman/podman.sock");
expect(instances[2]?.host).toBe("remote-host:2375");
});
test("should cache instances on subsequent calls", () => {
const first = DockerSingleton.getInstances();
const second = DockerSingleton.getInstances();
expect(first).toBe(second);
});
});
@@ -90,18 +90,10 @@ export class QBitTorrentIntegration extends Integration implements IDownloadClie
}
private async getClientAsync(dispatcher?: Dispatcher) {
const credentials = this.hasSecretValue("apiKey")
? {
apiKey: this.getSecretValue("apiKey"),
}
: {
username: this.getSecretValue("username"),
password: this.getSecretValue("password"),
};
return new QBittorrent({
...credentials,
baseUrl: this.url("/").toString(),
username: this.getSecretValue("username"),
password: this.getSecretValue("password"),
dispatcher: dispatcher ?? (await createCertificateAgentAsync()),
});
}
+12 -32
View File
@@ -2,8 +2,6 @@ import dayjs from "dayjs";
import type { ContainerInfo, ContainerStats } from "dockerode";
import type Dockerode from "dockerode";
import { createLogger } from "@homarr/core/infrastructure/logs";
import { ErrorWithMetadata } from "@homarr/core/infrastructure/logs/error";
import { db, like, or } from "@homarr/db";
import { icons } from "@homarr/db/schema";
import type { ContainerState } from "@homarr/docker";
@@ -11,8 +9,6 @@ import { dockerLabels, DockerSingleton } from "@homarr/docker";
import { createCachedWidgetRequestHandler } from "./lib/cached-widget-request-handler";
const logger = createLogger({ module: "dockerRequestHandler" });
export const dockerContainersRequestHandler = createCachedWidgetRequestHandler({
queryKey: "dockerContainersResult",
widgetKind: "dockerContainers",
@@ -22,34 +18,19 @@ export const dockerContainersRequestHandler = createCachedWidgetRequestHandler({
cacheDuration: dayjs.duration(20, "seconds"),
});
const dockerInstances = DockerSingleton.getInstances();
const extractImage = (container: ContainerInfo) => container.Image.split("/").at(-1)?.split(":").at(0) ?? "";
async function getContainersWithStatsAsync() {
const dockerInstances = DockerSingleton.getInstances();
const results = await Promise.allSettled(
const containers = await Promise.all(
dockerInstances.map(async ({ instance, host }) => {
const instanceContainers = await instance.listContainers({ all: true });
return instanceContainers
.filter((container) => !(dockerLabels.hide in container.Labels))
.map((container) => ({ ...container, instance: host }));
}),
);
const containers = results.flatMap((result, index) => {
if (result.status === "fulfilled") return result.value;
logger.warn(
new ErrorWithMetadata(
"Failed to list containers from Docker host",
{
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
host: dockerInstances[index]!.host,
},
{ cause: result.reason },
),
);
return [];
});
).then((res) => res.flat());
const likeQueries = containers.map((container) => like(icons.name, `%${extractImage(container)}%`));
const dbIcons =
@@ -63,6 +44,8 @@ async function getContainersWithStatsAsync() {
const instance = dockerInstances.find(({ host }) => host === container.instance)?.instance;
if (!instance) return null;
// Get stats, falling back to an empty stats object if fetch fails
// calculateCpuUsage and calculateMemoryUsage will return 0 for invalid/missing stats
const stats = await instance
.getContainer(container.Id)
.stats({ stream: false, "one-shot": true })
@@ -80,7 +63,6 @@ async function getContainersWithStatsAsync() {
return {
id: container.Id,
name: container.Names[0]?.split("/")[1] ?? "Unknown",
host: container.instance,
state: container.State as ContainerState,
iconUrl:
dbIcons.find((icon) => {
@@ -98,10 +80,9 @@ async function getContainersWithStatsAsync() {
return (await Promise.all(containerStatsPromises)).filter((container) => container !== null);
}
export function calculateCpuUsage(stats: ContainerStats): number {
// Handle containers with missing or invalid stats (e.g., exited, dead containers, Podman responses)
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
if (!stats.cpu_stats?.online_cpus || stats.cpu_stats.online_cpus === 0 || !stats.cpu_stats.cpu_usage?.total_usage) {
function calculateCpuUsage(stats: ContainerStats): number {
// Handle containers with missing or invalid stats (e.g., exited, dead containers)
if (!stats.cpu_stats.online_cpus || stats.cpu_stats.online_cpus === 0 || !stats.cpu_stats.cpu_usage.total_usage) {
return 0;
}
@@ -114,10 +95,9 @@ export function calculateCpuUsage(stats: ContainerStats): number {
return (stats.cpu_stats.cpu_usage.total_usage / usage) * numberOfCpus * 100;
}
export function calculateMemoryUsage(stats: ContainerStats): number {
// Handle containers with missing or invalid stats (e.g., exited, dead containers, Podman responses)
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
if (!stats.memory_stats?.usage) {
function calculateMemoryUsage(stats: ContainerStats): number {
// Handle containers with missing or invalid stats (e.g., exited, dead containers)
if (!stats.memory_stats.usage) {
return 0;
}
@@ -1,121 +0,0 @@
import type { ContainerStats } from "dockerode";
import { describe, expect, test, vi } from "vitest";
import { createDb } from "@homarr/db/test";
import { calculateCpuUsage, calculateMemoryUsage } from "../docker";
vi.mock("@homarr/db", async (importActual) => {
// eslint-disable-next-line @typescript-eslint/consistent-type-imports
const actual = await importActual<typeof import("@homarr/db")>();
return {
...actual,
db: createDb(),
};
});
// Helper to create a partial stats object, cast to ContainerStats.
// This mirrors what Podman and other Docker-compatible runtimes may return
// at runtime, even though @types/dockerode declares all fields as required.
const createStats = (overrides: Record<string, unknown> = {}) => overrides as unknown as ContainerStats;
describe("calculateCpuUsage", () => {
test("should return 0 when cpu_stats is undefined (Podman)", () => {
const stats = createStats({ cpu_stats: undefined });
expect(calculateCpuUsage(stats)).toBe(0);
});
test("should return 0 when online_cpus is 0", () => {
const stats = createStats({
cpu_stats: { online_cpus: 0, cpu_usage: { total_usage: 1000 }, system_cpu_usage: 5000 },
});
expect(calculateCpuUsage(stats)).toBe(0);
});
test("should return 0 when online_cpus is undefined", () => {
const stats = createStats({
cpu_stats: { cpu_usage: { total_usage: 1000 }, system_cpu_usage: 5000 },
});
expect(calculateCpuUsage(stats)).toBe(0);
});
test("should return 0 when cpu_usage is undefined", () => {
const stats = createStats({
cpu_stats: { online_cpus: 4, system_cpu_usage: 5000 },
});
expect(calculateCpuUsage(stats)).toBe(0);
});
test("should return 0 when total_usage is 0", () => {
const stats = createStats({
cpu_stats: { online_cpus: 4, cpu_usage: { total_usage: 0 }, system_cpu_usage: 5000 },
});
expect(calculateCpuUsage(stats)).toBe(0);
});
test("should return 0 when system_cpu_usage is 0", () => {
const stats = createStats({
cpu_stats: { online_cpus: 4, cpu_usage: { total_usage: 1000 }, system_cpu_usage: 0 },
});
expect(calculateCpuUsage(stats)).toBe(0);
});
test("should calculate correct CPU percentage for valid stats", () => {
const stats = createStats({
cpu_stats: { online_cpus: 4, cpu_usage: { total_usage: 2000 }, system_cpu_usage: 10000 },
});
// (2000 / 10000) * 4 * 100 = 80
expect(calculateCpuUsage(stats)).toBe(80);
});
test("should handle fractional CPU usage", () => {
const stats = createStats({
cpu_stats: { online_cpus: 2, cpu_usage: { total_usage: 500 }, system_cpu_usage: 100000 },
});
// (500 / 100000) * 2 * 100 = 1
expect(calculateCpuUsage(stats)).toBe(1);
});
});
describe("calculateMemoryUsage", () => {
test("should return 0 when memory_stats is undefined (Podman)", () => {
const stats = createStats({ memory_stats: undefined });
expect(calculateMemoryUsage(stats)).toBe(0);
});
test("should return 0 when memory_stats.usage is 0", () => {
const stats = createStats({ memory_stats: { usage: 0 } });
expect(calculateMemoryUsage(stats)).toBe(0);
});
test("should return 0 when memory_stats.usage is undefined", () => {
const stats = createStats({ memory_stats: {} });
expect(calculateMemoryUsage(stats)).toBe(0);
});
test("should subtract cache from usage", () => {
const stats = createStats({
memory_stats: { usage: 1000, stats: { cache: 200 } },
});
expect(calculateMemoryUsage(stats)).toBe(800);
});
test("should use total_inactive_file when cache is absent", () => {
const stats = createStats({
memory_stats: { usage: 1000, stats: { total_inactive_file: 300 } },
});
expect(calculateMemoryUsage(stats)).toBe(700);
});
test("should use inactive_file as last fallback", () => {
const stats = createStats({
memory_stats: { usage: 1000, stats: { inactive_file: 150 } },
});
expect(calculateMemoryUsage(stats)).toBe(850);
});
test("should return raw usage when memory_stats.stats is undefined", () => {
const stats = createStats({ memory_stats: { usage: 512 } });
expect(calculateMemoryUsage(stats)).toBe(512);
});
});
-3
View File
@@ -3970,9 +3970,6 @@
},
"ports": {
"label": "Ports"
},
"host": {
"label": "Host"
}
},
"action": {
-13
View File
@@ -79,19 +79,6 @@ const createColumns = (
return <ContainerStateBadge state={row.original.state} />;
},
},
{
id: "host",
accessorKey: "host",
size: 100,
header: t("field.host.label"),
Cell({ row }) {
return (
<Text size="xs" truncate="end">
{row.original.host}
</Text>
);
},
},
{
id: "cpuUsage",
sortingFn: (rowA, rowB) => {
+143 -133
View File
@@ -16,8 +16,8 @@ catalogs:
specifier: ^8.0.0
version: 8.0.0
'@ctrl/qbittorrent':
specifier: ^9.12.1
version: 9.12.1
specifier: ^9.11.2
version: 9.11.2
'@ctrl/transmission':
specifier: ^7.4.0
version: 7.4.0
@@ -40,8 +40,8 @@ catalogs:
specifier: 10.0.1
version: 10.0.1
'@extractus/feed-extractor':
specifier: 7.2.1
version: 7.2.1
specifier: 7.1.7
version: 7.1.7
'@gitbeaker/rest':
specifier: ^43.8.0
version: 43.8.0
@@ -133,14 +133,14 @@ catalogs:
specifier: ^3.41.1
version: 3.41.1
'@tanstack/react-query':
specifier: ^5.100.9
version: 5.100.9
specifier: ^5.100.8
version: 5.100.8
'@tanstack/react-query-devtools':
specifier: ^5.100.9
version: 5.100.9
specifier: ^5.100.8
version: 5.100.8
'@tanstack/react-query-next-experimental':
specifier: ^5.100.9
version: 5.100.9
specifier: ^5.100.8
version: 5.100.8
'@testcontainers/mysql':
specifier: ^11.14.0
version: 11.14.0
@@ -214,7 +214,7 @@ catalogs:
specifier: ^11.17.0
version: 11.17.0
'@turbo/gen':
specifier: ^2.9.8
specifier: ^2.9.7
version: 2.9.8
'@types/adm-zip':
specifier: 0.5.8
@@ -367,7 +367,7 @@ catalogs:
specifier: ^10.1.8
version: 10.1.8
eslint-config-turbo:
specifier: ^2.9.8
specifier: ^2.9.7
version: 2.9.8
eslint-plugin-import:
specifier: ^2.32.0
@@ -517,7 +517,7 @@ catalogs:
specifier: 4.20.4
version: 4.20.4
turbo:
specifier: ^2.9.8
specifier: ^2.9.7
version: 2.9.8
typescript:
specifier: ^5.9.3
@@ -553,8 +553,8 @@ catalogs:
specifier: 2.8.4
version: 2.8.4
zod:
specifier: ^4.4.3
version: 4.4.3
specifier: ^4.4.2
version: 4.4.2
zod-form-data:
specifier: ^3.0.1
version: 3.0.1
@@ -792,22 +792,22 @@ importers:
version: 3.41.1(react@19.2.5)
'@tanstack/react-query':
specifier: 'catalog:'
version: 5.100.9(react@19.2.5)
version: 5.100.8(react@19.2.5)
'@tanstack/react-query-devtools':
specifier: 'catalog:'
version: 5.100.9(@tanstack/react-query@5.100.9(react@19.2.5))(react@19.2.5)
version: 5.100.8(@tanstack/react-query@5.100.8(react@19.2.5))(react@19.2.5)
'@tanstack/react-query-next-experimental':
specifier: 'catalog:'
version: 5.100.9(@tanstack/react-query@5.100.9(react@19.2.5))(next@16.2.4(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0))(react@19.2.5)
version: 5.100.8(@tanstack/react-query@5.100.8(react@19.2.5))(next@16.2.4(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0))(react@19.2.5)
'@trpc/client':
specifier: 'catalog:'
version: 11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3)
'@trpc/next':
specifier: 'catalog:'
version: 11.17.0(@tanstack/react-query@5.100.9(react@19.2.5))(@trpc/client@11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/react-query@11.17.0(@tanstack/react-query@5.100.9(react@19.2.5))(@trpc/client@11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.17.0(typescript@5.9.3))(react@19.2.5)(typescript@5.9.3))(@trpc/server@11.17.0(typescript@5.9.3))(next@16.2.4(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3)
version: 11.17.0(@tanstack/react-query@5.100.8(react@19.2.5))(@trpc/client@11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/react-query@11.17.0(@tanstack/react-query@5.100.8(react@19.2.5))(@trpc/client@11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.17.0(typescript@5.9.3))(react@19.2.5)(typescript@5.9.3))(@trpc/server@11.17.0(typescript@5.9.3))(next@16.2.4(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3)
'@trpc/react-query':
specifier: 'catalog:'
version: 11.17.0(@tanstack/react-query@5.100.9(react@19.2.5))(@trpc/client@11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.17.0(typescript@5.9.3))(react@19.2.5)(typescript@5.9.3)
version: 11.17.0(@tanstack/react-query@5.100.8(react@19.2.5))(@trpc/client@11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.17.0(typescript@5.9.3))(react@19.2.5)(typescript@5.9.3)
'@trpc/server':
specifier: 'catalog:'
version: 11.17.0(typescript@5.9.3)
@@ -888,7 +888,7 @@ importers:
version: 2.8.4
zod:
specifier: 'catalog:'
version: 4.4.3
version: 4.4.2
devDependencies:
'@homarr/eslint-config':
specifier: workspace:^0.2.0
@@ -1204,19 +1204,19 @@ importers:
version: 1.4.0
'@tanstack/react-query':
specifier: 'catalog:'
version: 5.100.9(react@19.2.5)
version: 5.100.8(react@19.2.5)
'@trpc/client':
specifier: 'catalog:'
version: 11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3)
'@trpc/react-query':
specifier: 'catalog:'
version: 11.17.0(@tanstack/react-query@5.100.9(react@19.2.5))(@trpc/client@11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.17.0(typescript@5.9.3))(react@19.2.5)(typescript@5.9.3)
version: 11.17.0(@tanstack/react-query@5.100.8(react@19.2.5))(@trpc/client@11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.17.0(typescript@5.9.3))(react@19.2.5)(typescript@5.9.3)
'@trpc/server':
specifier: 'catalog:'
version: 11.17.0(typescript@5.9.3)
'@trpc/tanstack-react-query':
specifier: 'catalog:'
version: 11.17.0(@tanstack/react-query@5.100.9(react@19.2.5))(@trpc/client@11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.17.0(typescript@5.9.3))(react@19.2.5)(typescript@5.9.3)
version: 11.17.0(@tanstack/react-query@5.100.8(react@19.2.5))(@trpc/client@11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.17.0(typescript@5.9.3))(react@19.2.5)(typescript@5.9.3)
lodash.clonedeep:
specifier: 'catalog:'
version: 4.5.0
@@ -1234,10 +1234,10 @@ importers:
version: 2.2.6
trpc-to-openapi:
specifier: 'catalog:'
version: 3.2.0(patch_hash=2ca3c16af0fcca0c736697ad4fe553a14f794524fa9ce0d5c3e8ee4aea76090c)(@trpc/server@11.17.0(typescript@5.9.3))(zod-openapi@5.3.0(zod@4.4.3))(zod@4.4.3)
version: 3.2.0(patch_hash=2ca3c16af0fcca0c736697ad4fe553a14f794524fa9ce0d5c3e8ee4aea76090c)(@trpc/server@11.17.0(typescript@5.9.3))(zod-openapi@5.3.0(zod@4.4.2))(zod@4.4.2)
zod:
specifier: 'catalog:'
version: 4.4.3
version: 4.4.2
devDependencies:
'@homarr/eslint-config':
specifier: workspace:^0.2.0
@@ -1304,7 +1304,7 @@ importers:
version: 19.2.5(react@19.2.5)
zod:
specifier: 'catalog:'
version: 4.4.3
version: 4.4.2
devDependencies:
'@homarr/eslint-config':
specifier: workspace:^0.2.0
@@ -1430,10 +1430,10 @@ importers:
version: 7.24.6
zod:
specifier: 'catalog:'
version: 4.4.3
version: 4.4.2
zod-validation-error:
specifier: 'catalog:'
version: 5.0.0(zod@4.4.3)
version: 5.0.0(zod@4.4.2)
devDependencies:
'@homarr/eslint-config':
specifier: workspace:^0.2.0
@@ -1455,7 +1455,7 @@ importers:
dependencies:
'@t3-oss/env-nextjs':
specifier: 'catalog:'
version: 0.13.11(arktype@2.1.20)(typescript@5.9.3)(zod@4.4.3)
version: 0.13.11(arktype@2.1.20)(typescript@5.9.3)(zod@4.4.2)
better-sqlite3:
specifier: 'catalog:'
version: 12.9.0
@@ -1482,7 +1482,7 @@ importers:
version: 3.19.0
zod:
specifier: 'catalog:'
version: 4.4.3
version: 4.4.2
devDependencies:
'@homarr/eslint-config':
specifier: workspace:^0.2.0
@@ -1519,7 +1519,7 @@ importers:
version: link:../cron-jobs
'@tanstack/react-query':
specifier: 'catalog:'
version: 5.100.9(react@19.2.5)
version: 5.100.8(react@19.2.5)
'@trpc/client':
specifier: 'catalog:'
version: 11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3)
@@ -1528,13 +1528,13 @@ importers:
version: 11.17.0(typescript@5.9.3)
'@trpc/tanstack-react-query':
specifier: 'catalog:'
version: 11.17.0(@tanstack/react-query@5.100.9(react@19.2.5))(@trpc/client@11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.17.0(typescript@5.9.3))(react@19.2.5)(typescript@5.9.3)
version: 11.17.0(@tanstack/react-query@5.100.8(react@19.2.5))(@trpc/client@11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.17.0(typescript@5.9.3))(react@19.2.5)(typescript@5.9.3)
react:
specifier: 'catalog:'
version: 19.2.5
zod:
specifier: 'catalog:'
version: 4.4.3
version: 4.4.2
devDependencies:
'@homarr/eslint-config':
specifier: workspace:^0.2.0
@@ -1721,7 +1721,7 @@ importers:
version: 0.45.2(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.9.0)(gel@2.0.0)(mysql2@3.22.3(@types/node@24.12.2))(pg@8.20.0)
drizzle-zod:
specifier: 'catalog:'
version: 0.8.3(drizzle-orm@0.45.2(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.9.0)(gel@2.0.0)(mysql2@3.22.3(@types/node@24.12.2))(pg@8.20.0))(zod@4.4.3)
version: 0.8.3(drizzle-orm@0.45.2(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.9.0)(gel@2.0.0)(mysql2@3.22.3(@types/node@24.12.2))(pg@8.20.0))(zod@4.4.2)
mysql2:
specifier: 'catalog:'
version: 3.22.3(@types/node@24.12.2)
@@ -1776,7 +1776,7 @@ importers:
version: 5.7.2
zod:
specifier: 'catalog:'
version: 4.4.3
version: 4.4.2
devDependencies:
'@homarr/eslint-config':
specifier: workspace:^0.2.0
@@ -1844,10 +1844,10 @@ importers:
version: 8.3.18(react@19.2.5)
mantine-form-zod-resolver:
specifier: 'catalog:'
version: 1.3.0(@mantine/form@8.3.18(react@19.2.5))(zod@4.4.3)
version: 1.3.0(@mantine/form@8.3.18(react@19.2.5))(zod@4.4.2)
zod:
specifier: 'catalog:'
version: 4.4.3
version: 4.4.2
devDependencies:
'@homarr/eslint-config':
specifier: workspace:^0.2.0
@@ -1899,7 +1899,7 @@ importers:
version: 19.2.5
zod:
specifier: 'catalog:'
version: 4.4.3
version: 4.4.2
devDependencies:
'@homarr/eslint-config':
specifier: workspace:^0.2.0
@@ -1986,7 +1986,7 @@ importers:
version: 8.0.0
'@ctrl/qbittorrent':
specifier: 'catalog:'
version: 9.12.1
version: 9.11.2
'@ctrl/transmission':
specifier: 'catalog:'
version: 7.4.0
@@ -2055,7 +2055,7 @@ importers:
version: 0.6.2
zod:
specifier: 'catalog:'
version: 4.4.3
version: 4.4.2
devDependencies:
'@homarr/eslint-config':
specifier: workspace:^0.2.0
@@ -2168,7 +2168,7 @@ importers:
version: 19.2.5(react@19.2.5)
zod:
specifier: 'catalog:'
version: 4.4.3
version: 4.4.2
devDependencies:
'@homarr/eslint-config':
specifier: workspace:^0.2.0
@@ -2272,10 +2272,10 @@ importers:
version: 2.2.6
zod:
specifier: 'catalog:'
version: 4.4.3
version: 4.4.2
zod-form-data:
specifier: 'catalog:'
version: 3.0.1(zod@4.4.3)
version: 3.0.1(zod@4.4.2)
devDependencies:
'@homarr/eslint-config':
specifier: workspace:^0.2.0
@@ -2303,7 +2303,7 @@ importers:
version: link:../common
zod:
specifier: 'catalog:'
version: 4.4.3
version: 4.4.2
devDependencies:
'@homarr/eslint-config':
specifier: workspace:^0.2.0
@@ -2387,7 +2387,7 @@ importers:
dependencies:
'@extractus/feed-extractor':
specifier: 'catalog:'
version: 7.2.1
version: 7.1.7
'@homarr/common':
specifier: workspace:^0.1.0
version: link:../common
@@ -2423,7 +2423,7 @@ importers:
version: 7.24.6
zod:
specifier: 'catalog:'
version: 4.4.3
version: 4.4.2
devDependencies:
'@homarr/eslint-config':
specifier: workspace:^0.2.0
@@ -2705,10 +2705,10 @@ importers:
version: link:../translation
zod:
specifier: 'catalog:'
version: 4.4.3
version: 4.4.2
zod-form-data:
specifier: 'catalog:'
version: 3.0.1(zod@4.4.3)
version: 3.0.1(zod@4.4.2)
devDependencies:
'@homarr/eslint-config':
specifier: workspace:^0.2.0
@@ -2865,7 +2865,7 @@ importers:
version: 1.11.20
mantine-form-zod-resolver:
specifier: 'catalog:'
version: 1.3.0(@mantine/form@8.3.18(react@19.2.5))(zod@4.4.3)
version: 1.3.0(@mantine/form@8.3.18(react@19.2.5))(zod@4.4.2)
mantine-react-table:
specifier: 'catalog:'
version: 2.0.0-beta.9(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/dates@8.3.18(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(dayjs@1.11.20)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(@tabler/icons-react@3.41.1(react@19.2.5))(clsx@2.1.1)(dayjs@1.11.20)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
@@ -2892,7 +2892,7 @@ importers:
version: 8.23.7
zod:
specifier: 'catalog:'
version: 4.4.3
version: 4.4.2
devDependencies:
'@homarr/eslint-config':
specifier: workspace:^0.2.0
@@ -3216,8 +3216,8 @@ packages:
resolution: {integrity: sha512-fEfw3AeQ8XhVsNzogZrnyTNDD/Tpbfl3ybHsspBMvj0UKctabApv1JV3JJUQG/hoX6hiO+DtQS+acN7dMPX01g==}
engines: {node: '>20'}
'@ctrl/qbittorrent@9.12.1':
resolution: {integrity: sha512-6rSTWPV0UwehqLCyBLh9Avw5FPA1nh8SO+aTxrEXu6okZPjz+3tn7EGZdLhOfy+6poIc7miX/1g1VAOVo3JSTA==}
'@ctrl/qbittorrent@9.11.2':
resolution: {integrity: sha512-ZIayGA72R4rzXaCcEYrxBwOMYZ1iT0EABJPwjTkwaO3VYRBBltwHSAxNfMWaz4GVmqLA12/WCfx+IPXBN9Gtxg==}
engines: {node: '>=18'}
'@ctrl/shared-torrent@6.5.1':
@@ -3801,8 +3801,8 @@ packages:
'@noble/hashes':
optional: true
'@extractus/feed-extractor@7.2.1':
resolution: {integrity: sha512-vc84NZST31wLDTesAkmHL8GBxSB2zw2/h9ZKiQMB71az13sC65EeAcDeLJ2z3atsIhtxESnCMaKmQdOrFiFLcg==}
'@extractus/feed-extractor@7.1.7':
resolution: {integrity: sha512-eNeddvKK9rBxWSHj5zBo6ODihJqJtq+QzEQdVeadkOK48avmdela+c2JAfMcPEBMFaWcAYV4bUMhI9Tqi8mX2Q==}
engines: {node: '>= 20'}
'@fastify/ajv-compiler@4.0.5':
@@ -4385,9 +4385,11 @@ packages:
'@million/lint@1.0.14':
resolution: {integrity: sha512-u6/kglVwZRu5+GMmtkNlGLqJVkgTl0TtM+hLa9rBg7pldx+5NG5bk45NvL37uZmAr2Xfa1C6qHb7GrFwfP372g==}
deprecated: This package is no longer maintained
hasBin: true
'@ndaidong/bellajs@12.0.1':
resolution: {integrity: sha512-1iY42uiHz0cxNMbde7O3zVN+ZX1viOOUOBRt6ht6lkRZbSjwOnFV34Zv4URp3hGzEe6L9Byk7BOq/41H0PzAOQ==}
'@next/env@16.2.4':
resolution: {integrity: sha512-dKkkOzOSwFYe5RX6y26fZgkSpVAlIOJKQHIiydQcrWH6y/97+RceSOAdjZ14Qa3zLduVUy0TXcn+EiM6t4rPgw==}
@@ -4718,10 +4720,6 @@ packages:
'@protobufjs/utf8@1.1.0':
resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==}
'@pwshub/bellajs@13.0.2':
resolution: {integrity: sha512-OWOaE7Ieufo7VMv957iahOzv/w5oXyyXO28Jh2x6rLU96ZLqC508kAKTgdMJRXgVjda2s+/0C6Kno+k16OmJsQ==}
engines: {bun: '>=1.0.0', node: '>=20.0.0'}
'@reduxjs/toolkit@2.11.2':
resolution: {integrity: sha512-Kd6kAHTA6/nUpp8mySPqj3en3dm0tdMIgbttnQ1xFMVpufoj+ADi8pXLBsd4xzTRHQa7t/Jv8W5UnCuW4kuWMQ==}
peerDependencies:
@@ -5215,27 +5213,27 @@ packages:
resolution: {integrity: sha512-Wo1iKt2b9OT7d+YGhvEPD3DXvPv2etTusIMhMUoG7fbhmxcXCtIjJDEygy91Y2JFlwGyjqiBPRozme7UD8hoqg==}
engines: {node: '>=12'}
'@tanstack/query-core@5.100.9':
resolution: {integrity: sha512-SJSFw1S8+kQ0+knv/XGfrbocWoAlT7vDKsSImtLx3ZPQmEcR46hkDjLSvynSy25N8Ms4tIEini1FuBd5k7IscQ==}
'@tanstack/query-core@5.100.8':
resolution: {integrity: sha512-ceYwSFOqjPwET5TA6IOYxzxlGc0ekyH/gfOtWkP0PX43rzX9bxW48Iuw8KAduKCToi4rJAQ6nRy2kAe8gszdmg==}
'@tanstack/query-devtools@5.100.9':
resolution: {integrity: sha512-gqiptrTIhbK2PuCaPRHmWXfJG1NGYVFpAr0HqogEqiSBNB5xDz6fmesQt7w4WgMOqOQPnPHJ3ZDMuhDaXvNO8g==}
'@tanstack/query-devtools@5.100.8':
resolution: {integrity: sha512-29D6k564h7eudwNdfRcq6Je2VFUWGxHwADPg1xC2yHxrovYBwZiqzIv/DkPRsK/EMoOIPIvPq+IU0uCxiQXYPA==}
'@tanstack/react-query-devtools@5.100.9':
resolution: {integrity: sha512-mM3slaVGXJmz+pOLgXdANj75ikgQCyudyl3kmFvm6brI1JyVeY/+IeD17uDHIvZrD8hfoO2sdZ54RFsHdYAuhA==}
'@tanstack/react-query-devtools@5.100.8':
resolution: {integrity: sha512-BKpysWo1u3kVMtv92XOv/Gu6eCbE/IxBLJPs0GG/qyySUQvZI2h7mqRwyf8Aa6WfUoX8Yf2AAh0uugQLAr8KtQ==}
peerDependencies:
'@tanstack/react-query': ^5.100.9
'@tanstack/react-query': ^5.100.8
react: ^18 || ^19
'@tanstack/react-query-next-experimental@5.100.9':
resolution: {integrity: sha512-cXkeZW/lEQaVmB3l0eiej5lJUNix4xxWWxOzgIJYC8D4fwgl1Kwf/bb9Av92hm6MKjWyixNCJ1wmjWrhFtuCGA==}
'@tanstack/react-query-next-experimental@5.100.8':
resolution: {integrity: sha512-B1p5yeqWeLrWasZ0s2pG7b7do37XNXIlzHnj8RcEsoJ8DsGWXvAfSjXgnLvG0HdZUTPWjHrVRMIJ0Pgmy+bCtw==}
peerDependencies:
'@tanstack/react-query': ^5.100.9
'@tanstack/react-query': ^5.100.8
next: ^13 || ^14 || ^15 || ^16
react: ^18 || ^19
'@tanstack/react-query@5.100.9':
resolution: {integrity: sha512-Oa44XkaI3kCNN6ME0KByU3xT3SEUNOMfZpHxL6+wFoTm+OeUFYHKdeYVe0aOXlRDm/f15sgLwEt2HDorIdW8+A==}
'@tanstack/react-query@5.100.8':
resolution: {integrity: sha512-iNNEekixXU5vtAGKKZX2lx3jTooG5yNY+kv0wSgEdEYG0Mj0JM5bcuQtC35ZAP3nDopT6jciUK3xeX65U7AnfA==}
peerDependencies:
react: ^18 || ^19
@@ -6662,6 +6660,9 @@ packages:
engines: {node: '>=20'}
hasBin: true
cross-fetch@4.1.0:
resolution: {integrity: sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==}
cross-spawn@7.0.6:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
@@ -10552,8 +10553,8 @@ packages:
resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==}
engines: {node: '>=16'}
type-fest@5.6.0:
resolution: {integrity: sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==}
type-fest@5.5.0:
resolution: {integrity: sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==}
engines: {node: '>=20'}
type-is@1.6.18:
@@ -10594,8 +10595,8 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
ufo@1.6.4:
resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==}
ufo@1.6.3:
resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==}
uglify-js@3.19.3:
resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==}
@@ -11186,8 +11187,8 @@ packages:
peerDependencies:
zod: ^3.25.0 || ^4.0.0
zod@4.4.3:
resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==}
zod@4.4.2:
resolution: {integrity: sha512-IynmDyxsEsb9RKzO3J9+4SxXnl2FTFSzNBaKKaMV6tsSk0rw9gYw9gs+JFCq/qk2LCZ78KDwyj+Z289TijSkUw==}
zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
@@ -11479,8 +11480,8 @@ snapshots:
cookie-es: 3.0.1
node-fetch-native: 1.6.7
ofetch: 1.5.1
type-fest: 5.6.0
ufo: 1.6.4
type-fest: 5.5.0
ufo: 1.6.3
uint8array-extras: 1.5.0
'@ctrl/magnet-link@4.3.0':
@@ -11488,7 +11489,7 @@ snapshots:
rfc4648: 1.5.4
uint8array-extras: 1.5.0
'@ctrl/qbittorrent@9.12.1':
'@ctrl/qbittorrent@9.11.2':
dependencies:
'@ctrl/magnet-link': 4.3.0
'@ctrl/shared-torrent': 6.5.1(ofetch@1.5.1)
@@ -11496,8 +11497,8 @@ snapshots:
cookie: 1.1.1
node-fetch-native: 1.6.7
ofetch: 1.5.1
type-fest: 5.6.0
ufo: 1.6.4
type-fest: 5.5.0
ufo: 1.6.3
uint8array-extras: 1.5.0
'@ctrl/shared-torrent@6.5.1(ofetch@1.5.1)':
@@ -11512,7 +11513,7 @@ snapshots:
'@ctrl/shared-torrent': 6.5.1(ofetch@1.5.1)
ofetch: 1.5.1
type-fest: 4.41.0
ufo: 1.6.4
ufo: 1.6.3
uint8array-extras: 1.5.0
'@dabh/diagnostics@2.0.8':
@@ -11846,11 +11847,14 @@ snapshots:
optionalDependencies:
'@noble/hashes': 2.0.1
'@extractus/feed-extractor@7.2.1':
'@extractus/feed-extractor@7.1.7':
dependencies:
'@pwshub/bellajs': 13.0.2
'@ndaidong/bellajs': 12.0.1
cross-fetch: 4.1.0
fast-xml-parser: 5.7.2
html-entities: 2.6.0
transitivePeerDependencies:
- encoding
'@fastify/ajv-compiler@4.0.5':
dependencies:
@@ -12469,6 +12473,8 @@ snapshots:
- utf-8-validate
- webpack-sources
'@ndaidong/bellajs@12.0.1': {}
'@next/env@16.2.4': {}
'@next/eslint-plugin-next@16.2.4':
@@ -12773,8 +12779,6 @@ snapshots:
'@protobufjs/utf8@1.1.0': {}
'@pwshub/bellajs@13.0.2': {}
'@reduxjs/toolkit@2.11.2(react-redux@9.2.0(@types/react@19.2.14)(react@19.2.5)(redux@5.0.1))(react@19.2.5)':
dependencies:
'@standard-schema/spec': 1.1.0
@@ -13488,19 +13492,19 @@ snapshots:
dependencies:
'@swc/counter': 0.1.3
'@t3-oss/env-core@0.13.11(arktype@2.1.20)(typescript@5.9.3)(zod@4.4.3)':
'@t3-oss/env-core@0.13.11(arktype@2.1.20)(typescript@5.9.3)(zod@4.4.2)':
optionalDependencies:
arktype: 2.1.20
typescript: 5.9.3
zod: 4.4.3
zod: 4.4.2
'@t3-oss/env-nextjs@0.13.11(arktype@2.1.20)(typescript@5.9.3)(zod@4.4.3)':
'@t3-oss/env-nextjs@0.13.11(arktype@2.1.20)(typescript@5.9.3)(zod@4.4.2)':
dependencies:
'@t3-oss/env-core': 0.13.11(arktype@2.1.20)(typescript@5.9.3)(zod@4.4.3)
'@t3-oss/env-core': 0.13.11(arktype@2.1.20)(typescript@5.9.3)(zod@4.4.2)
optionalDependencies:
arktype: 2.1.20
typescript: 5.9.3
zod: 4.4.3
zod: 4.4.2
'@tabler/icons-react@3.41.1(react@19.2.5)':
dependencies:
@@ -13513,25 +13517,25 @@ snapshots:
dependencies:
remove-accents: 0.5.0
'@tanstack/query-core@5.100.9': {}
'@tanstack/query-core@5.100.8': {}
'@tanstack/query-devtools@5.100.9': {}
'@tanstack/query-devtools@5.100.8': {}
'@tanstack/react-query-devtools@5.100.9(@tanstack/react-query@5.100.9(react@19.2.5))(react@19.2.5)':
'@tanstack/react-query-devtools@5.100.8(@tanstack/react-query@5.100.8(react@19.2.5))(react@19.2.5)':
dependencies:
'@tanstack/query-devtools': 5.100.9
'@tanstack/react-query': 5.100.9(react@19.2.5)
'@tanstack/query-devtools': 5.100.8
'@tanstack/react-query': 5.100.8(react@19.2.5)
react: 19.2.5
'@tanstack/react-query-next-experimental@5.100.9(@tanstack/react-query@5.100.9(react@19.2.5))(next@16.2.4(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0))(react@19.2.5)':
'@tanstack/react-query-next-experimental@5.100.8(@tanstack/react-query@5.100.8(react@19.2.5))(next@16.2.4(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0))(react@19.2.5)':
dependencies:
'@tanstack/react-query': 5.100.9(react@19.2.5)
'@tanstack/react-query': 5.100.8(react@19.2.5)
next: 16.2.4(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0)
react: 19.2.5
'@tanstack/react-query@5.100.9(react@19.2.5)':
'@tanstack/react-query@5.100.8(react@19.2.5)':
dependencies:
'@tanstack/query-core': 5.100.9
'@tanstack/query-core': 5.100.8
react: 19.2.5
'@tanstack/react-table@8.20.5(react-dom@19.2.5(react@19.2.5))(react@19.2.5)':
@@ -13804,7 +13808,7 @@ snapshots:
'@trpc/server': 11.17.0(typescript@5.9.3)
typescript: 5.9.3
'@trpc/next@11.17.0(@tanstack/react-query@5.100.9(react@19.2.5))(@trpc/client@11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/react-query@11.17.0(@tanstack/react-query@5.100.9(react@19.2.5))(@trpc/client@11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.17.0(typescript@5.9.3))(react@19.2.5)(typescript@5.9.3))(@trpc/server@11.17.0(typescript@5.9.3))(next@16.2.4(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3)':
'@trpc/next@11.17.0(@tanstack/react-query@5.100.8(react@19.2.5))(@trpc/client@11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/react-query@11.17.0(@tanstack/react-query@5.100.8(react@19.2.5))(@trpc/client@11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.17.0(typescript@5.9.3))(react@19.2.5)(typescript@5.9.3))(@trpc/server@11.17.0(typescript@5.9.3))(next@16.2.4(@babel/core@7.26.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@5.9.3)':
dependencies:
'@trpc/client': 11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3)
'@trpc/server': 11.17.0(typescript@5.9.3)
@@ -13813,12 +13817,12 @@ snapshots:
react-dom: 19.2.5(react@19.2.5)
typescript: 5.9.3
optionalDependencies:
'@tanstack/react-query': 5.100.9(react@19.2.5)
'@trpc/react-query': 11.17.0(@tanstack/react-query@5.100.9(react@19.2.5))(@trpc/client@11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.17.0(typescript@5.9.3))(react@19.2.5)(typescript@5.9.3)
'@tanstack/react-query': 5.100.8(react@19.2.5)
'@trpc/react-query': 11.17.0(@tanstack/react-query@5.100.8(react@19.2.5))(@trpc/client@11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.17.0(typescript@5.9.3))(react@19.2.5)(typescript@5.9.3)
'@trpc/react-query@11.17.0(@tanstack/react-query@5.100.9(react@19.2.5))(@trpc/client@11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.17.0(typescript@5.9.3))(react@19.2.5)(typescript@5.9.3)':
'@trpc/react-query@11.17.0(@tanstack/react-query@5.100.8(react@19.2.5))(@trpc/client@11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.17.0(typescript@5.9.3))(react@19.2.5)(typescript@5.9.3)':
dependencies:
'@tanstack/react-query': 5.100.9(react@19.2.5)
'@tanstack/react-query': 5.100.8(react@19.2.5)
'@trpc/client': 11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3)
'@trpc/server': 11.17.0(typescript@5.9.3)
react: 19.2.5
@@ -13828,9 +13832,9 @@ snapshots:
dependencies:
typescript: 5.9.3
'@trpc/tanstack-react-query@11.17.0(@tanstack/react-query@5.100.9(react@19.2.5))(@trpc/client@11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.17.0(typescript@5.9.3))(react@19.2.5)(typescript@5.9.3)':
'@trpc/tanstack-react-query@11.17.0(@tanstack/react-query@5.100.8(react@19.2.5))(@trpc/client@11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3))(@trpc/server@11.17.0(typescript@5.9.3))(react@19.2.5)(typescript@5.9.3)':
dependencies:
'@tanstack/react-query': 5.100.9(react@19.2.5)
'@tanstack/react-query': 5.100.8(react@19.2.5)
'@trpc/client': 11.17.0(@trpc/server@11.17.0(typescript@5.9.3))(typescript@5.9.3)
'@trpc/server': 11.17.0(typescript@5.9.3)
react: 19.2.5
@@ -15104,6 +15108,12 @@ snapshots:
'@epic-web/invariant': 1.0.0
cross-spawn: 7.0.6
cross-fetch@4.1.0:
dependencies:
node-fetch: 2.7.0
transitivePeerDependencies:
- encoding
cross-spawn@7.0.6:
dependencies:
path-key: 3.1.1
@@ -15374,10 +15384,10 @@ snapshots:
mysql2: 3.22.3(@types/node@24.12.2)
pg: 8.20.0
drizzle-zod@0.8.3(drizzle-orm@0.45.2(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.9.0)(gel@2.0.0)(mysql2@3.22.3(@types/node@24.12.2))(pg@8.20.0))(zod@4.4.3):
drizzle-zod@0.8.3(drizzle-orm@0.45.2(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.9.0)(gel@2.0.0)(mysql2@3.22.3(@types/node@24.12.2))(pg@8.20.0))(zod@4.4.2):
dependencies:
drizzle-orm: 0.45.2(@libsql/client-wasm@0.14.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(better-sqlite3@12.9.0)(gel@2.0.0)(mysql2@3.22.3(@types/node@24.12.2))(pg@8.20.0)
zod: 4.4.3
zod: 4.4.2
dunder-proto@1.0.1:
dependencies:
@@ -15755,8 +15765,8 @@ snapshots:
'@babel/core': 7.29.0
'@babel/parser': 7.29.2
eslint: 10.3.0
zod: 4.4.3
zod-validation-error: 4.0.2(zod@4.4.3)
zod: 4.4.2
zod-validation-error: 4.0.2(zod@4.4.2)
transitivePeerDependencies:
- supports-color
@@ -16266,7 +16276,7 @@ snapshots:
iron-webcrypto: 1.2.1
node-mock-http: 1.0.2
radix3: 1.1.2
ufo: 1.6.4
ufo: 1.6.3
uncrypto: 0.1.3
handlebars@4.7.8:
@@ -17005,10 +17015,10 @@ snapshots:
dependencies:
semver: 7.7.4
mantine-form-zod-resolver@1.3.0(@mantine/form@8.3.18(react@19.2.5))(zod@4.4.3):
mantine-form-zod-resolver@1.3.0(@mantine/form@8.3.18(react@19.2.5))(zod@4.4.2):
dependencies:
'@mantine/form': 8.3.18(react@19.2.5)
zod: 4.4.3
zod: 4.4.2
mantine-react-table@2.0.0-beta.9(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/dates@8.3.18(@mantine/core@8.3.18(@mantine/hooks@8.3.18(react@19.2.5))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(dayjs@1.11.20)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@mantine/hooks@8.3.18(react@19.2.5))(@tabler/icons-react@3.41.1(react@19.2.5))(clsx@2.1.1)(dayjs@1.11.20)(react-dom@19.2.5(react@19.2.5))(react@19.2.5):
dependencies:
@@ -17611,7 +17621,7 @@ snapshots:
dependencies:
destr: 2.0.5
node-fetch-native: 1.6.7
ufo: 1.6.4
ufo: 1.6.3
ohash@1.1.4: {}
@@ -18328,14 +18338,14 @@ snapshots:
dependencies:
find-up-simple: 1.0.1
read-pkg: 10.0.0
type-fest: 5.6.0
type-fest: 5.5.0
read-pkg@10.0.0:
dependencies:
'@types/normalize-package-data': 2.4.4
normalize-package-data: 8.0.0
parse-json: 8.3.0
type-fest: 5.6.0
type-fest: 5.5.0
unicorn-magic: 0.3.0
read-pkg@9.0.1:
@@ -19423,14 +19433,14 @@ snapshots:
trough@2.2.0: {}
trpc-to-openapi@3.2.0(patch_hash=2ca3c16af0fcca0c736697ad4fe553a14f794524fa9ce0d5c3e8ee4aea76090c)(@trpc/server@11.17.0(typescript@5.9.3))(zod-openapi@5.3.0(zod@4.4.3))(zod@4.4.3):
trpc-to-openapi@3.2.0(patch_hash=2ca3c16af0fcca0c736697ad4fe553a14f794524fa9ce0d5c3e8ee4aea76090c)(@trpc/server@11.17.0(typescript@5.9.3))(zod-openapi@5.3.0(zod@4.4.2))(zod@4.4.2):
dependencies:
'@trpc/server': 11.17.0(typescript@5.9.3)
co-body: 6.2.0
h3: 1.15.1
openapi3-ts: 4.4.0
zod: 4.4.3
zod-openapi: 5.3.0(zod@4.4.3)
zod: 4.4.2
zod-openapi: 5.3.0(zod@4.4.2)
optionalDependencies:
'@rollup/rollup-linux-x64-gnu': 4.6.1
@@ -19508,7 +19518,7 @@ snapshots:
type-fest@4.41.0: {}
type-fest@5.6.0:
type-fest@5.5.0:
dependencies:
tagged-tag: 1.0.0
@@ -19571,7 +19581,7 @@ snapshots:
typescript@5.9.3: {}
ufo@1.6.4: {}
ufo@1.6.3: {}
uglify-js@3.19.3:
optional: true
@@ -20160,23 +20170,23 @@ snapshots:
compress-commons: 6.0.2
readable-stream: 4.5.2
zod-form-data@3.0.1(zod@4.4.3):
zod-form-data@3.0.1(zod@4.4.2):
dependencies:
'@rvf/set-get': 7.0.1
zod: 4.4.3
zod: 4.4.2
zod-openapi@5.3.0(zod@4.4.3):
zod-openapi@5.3.0(zod@4.4.2):
dependencies:
zod: 4.4.3
zod: 4.4.2
zod-validation-error@4.0.2(zod@4.4.3):
zod-validation-error@4.0.2(zod@4.4.2):
dependencies:
zod: 4.4.3
zod: 4.4.2
zod-validation-error@5.0.0(zod@4.4.3):
zod-validation-error@5.0.0(zod@4.4.2):
dependencies:
zod: 4.4.3
zod: 4.4.2
zod@4.4.3: {}
zod@4.4.2: {}
zwitch@2.0.4: {}
+9 -9
View File
@@ -6,7 +6,7 @@ catalog:
"@auth/core": ^0.41.2
"@auth/drizzle-adapter": ^1.11.2
"@ctrl/deluge": ^8.0.0
"@ctrl/qbittorrent": ^9.12.1
"@ctrl/qbittorrent": ^9.11.2
"@ctrl/transmission": ^7.4.0
"@dnd-kit/core": ^6.3.1
"@dnd-kit/modifiers": ^9.0.0
@@ -14,7 +14,7 @@ catalog:
"@dnd-kit/utilities": ^3.2.2
"@drizzle-team/brocli": ^0.12.0
'@eslint/js': 10.0.1
"@extractus/feed-extractor": 7.2.1
"@extractus/feed-extractor": 7.1.7
"@gitbeaker/rest": ^43.8.0
"@homarr/gridstack": ^1.12.0
"@homarr/node-unifi": ^2.6.0
@@ -45,9 +45,9 @@ catalog:
"@semantic-release/release-notes-generator": ^14.1.0
"@t3-oss/env-nextjs": ^0.13.11
"@tabler/icons-react": ^3.41.1
"@tanstack/react-query": ^5.100.9
"@tanstack/react-query-devtools": ^5.100.9
"@tanstack/react-query-next-experimental": ^5.100.9
"@tanstack/react-query": ^5.100.8
"@tanstack/react-query-devtools": ^5.100.8
"@tanstack/react-query-next-experimental": ^5.100.8
"@testcontainers/mysql": ^11.14.0
"@testcontainers/postgresql": ^11.14.0
"@testcontainers/redis": ^11.14.0
@@ -72,7 +72,7 @@ catalog:
"@trpc/react-query": ^11.17.0
"@trpc/server": ^11.17.0
"@trpc/tanstack-react-query": ^11.17.0
"@turbo/gen": ^2.9.8
"@turbo/gen": ^2.9.7
"@types/adm-zip": 0.5.8
"@types/bcrypt": 6.0.0
"@types/better-sqlite3": 7.6.13
@@ -123,7 +123,7 @@ catalog:
esbuild: ^0.28.0
eslint: ^10.3.0
eslint-config-prettier: ^10.1.8
eslint-config-turbo: ^2.9.8
eslint-config-turbo: ^2.9.7
eslint-plugin-import: ^2.32.0
eslint-plugin-jsx-a11y: ^6.10.2
eslint-plugin-react: ^7.37.5
@@ -173,7 +173,7 @@ catalog:
trpc-to-openapi: ^3.2.0
tsdav: ^2.2.0
tsx: 4.20.4
turbo: ^2.9.8
turbo: ^2.9.7
typescript: ^5.9.3
typescript-eslint: ^8.58.2
undici: 7.24.6
@@ -185,7 +185,7 @@ catalog:
ws: ^8.20.0
xml2js: ^0.6.2
yaml: 2.8.4
zod: ^4.4.3
zod: ^4.4.2
zod-form-data: ^3.0.1
zod-validation-error: ^5.0.0
catalogMode: strict
-13
View File
@@ -18,19 +18,6 @@ if [ "${PUID}" != "0" ] || [ "${PGID}" != "0" ]; then
echo "Changing owner to $PUID:$PGID, done."
fi
# support _FILE Suffix for environment variables
for file_var in $(env | cut -d '=' -f 1 | grep "_FILE$"); do
target_var=$(echo "$file_var" | cut -d'=' -f1 | sed 's/_FILE//')
file_path=$(printenv "$file_var")
if [ -f "$file_path" ]; then
export "$target_var"=$(cat "$file_path" | tr -d '\n\r')
echo "Info: Loaded secret for $target_var from $file_path"
else
echo "Warning: Secret file $file_path not found for $target_var"
fi
done
if [ "${PUID}" != "0" ]; then
exec su-exec $PUID:$PGID "$@"
else
+5
View File
@@ -19,6 +19,11 @@ export AUTH_SECRET=$(openssl rand -base64 32)
# Cron job API key is generated every time the container starts as it is required for communication between nextjs-api and tasks-api
export CRON_JOB_API_KEY=$(openssl rand -base64 32)
# Support secret file for encryption key (is not empty and file exists)
if [ -n "$SECRET_ENCRYPTION_KEY_FILE" ] && [ -f "$SECRET_ENCRYPTION_KEY_FILE" ]; then
export SECRET_ENCRYPTION_KEY=$(cat $SECRET_ENCRYPTION_KEY_FILE)
fi
# Start nginx proxy
# 1. Replace the HOSTNAME in the nginx template file
# 2. Create the nginx configuration file from the template
+1 -1
View File
@@ -1 +1 @@
[{"login":"ajnart","avatar_url":"https://avatars.githubusercontent.com/u/49837342?v=4"},{"login":"manuel-rw","avatar_url":"https://avatars.githubusercontent.com/u/30572287?v=4"},{"login":"Meierschlumpf","avatar_url":"https://avatars.githubusercontent.com/u/63781622?v=4"},{"login":"SeDemal","avatar_url":"https://avatars.githubusercontent.com/u/26098587?v=4"},{"login":"lammersbjorn","avatar_url":"https://avatars.githubusercontent.com/u/71191962?v=4"},{"login":"LarveyOfficial","avatar_url":"https://avatars.githubusercontent.com/u/39219859?v=4"},{"login":"c00ldude1oo","avatar_url":"https://avatars.githubusercontent.com/u/15677803?v=4"},{"login":"InterN0te","avatar_url":"https://avatars.githubusercontent.com/u/10882916?v=4"},{"login":"Aimsucks","avatar_url":"https://avatars.githubusercontent.com/u/1828486?v=4"},{"login":"JannesV","avatar_url":"https://avatars.githubusercontent.com/u/5984244?v=4"},{"login":"MauriceNino","avatar_url":"https://avatars.githubusercontent.com/u/18658092?v=4"},{"login":"hillaliy","avatar_url":"https://avatars.githubusercontent.com/u/950010?v=4"},{"login":"Skeeww","avatar_url":"https://avatars.githubusercontent.com/u/9639992?v=4"},{"login":"RichyHBM","avatar_url":"https://avatars.githubusercontent.com/u/5472275?v=4"},{"login":"Bonfire","avatar_url":"https://avatars.githubusercontent.com/u/5704760?v=4"},{"login":"wieli99","avatar_url":"https://avatars.githubusercontent.com/u/46794825?v=4"},{"login":"ishaanparlikar","avatar_url":"https://avatars.githubusercontent.com/u/43013132?v=4"},{"login":"Zareix","avatar_url":"https://avatars.githubusercontent.com/u/29818713?v=4"},{"login":"tuggan","avatar_url":"https://avatars.githubusercontent.com/u/4325608?v=4"},{"login":"Spillebulle","avatar_url":"https://avatars.githubusercontent.com/u/46653946?v=4"},{"login":"spkesDE","avatar_url":"https://avatars.githubusercontent.com/u/1682314?v=4"},{"login":"j3lte","avatar_url":"https://avatars.githubusercontent.com/u/2557568?v=4"},{"login":"dslatt","avatar_url":"https://avatars.githubusercontent.com/u/5211001?v=4"},{"login":"Malong11-007","avatar_url":"https://avatars.githubusercontent.com/u/40298510?v=4"},{"login":"StefanB7","avatar_url":"https://avatars.githubusercontent.com/u/22056509?v=4"},{"login":"souravghosh01","avatar_url":"https://avatars.githubusercontent.com/u/37548139?v=4"},{"login":"SR3u","avatar_url":"https://avatars.githubusercontent.com/u/2380522?v=4"},{"login":"Rikpat","avatar_url":"https://avatars.githubusercontent.com/u/33869814?v=4"},{"login":"NormanJS","avatar_url":"https://avatars.githubusercontent.com/u/83409549?v=4"},{"login":"No-Maines-Land","avatar_url":"https://avatars.githubusercontent.com/u/20687725?v=4"},{"login":"stark1tty","avatar_url":"https://avatars.githubusercontent.com/u/69326376?v=4"},{"login":"Momcilo42","avatar_url":"https://avatars.githubusercontent.com/u/10118137?v=4"},{"login":"marius-arch","avatar_url":"https://avatars.githubusercontent.com/u/72494359?v=4"},{"login":"Lumilias","avatar_url":"https://avatars.githubusercontent.com/u/10852161?v=4"},{"login":"Havock94","avatar_url":"https://avatars.githubusercontent.com/u/7635248?v=4"},{"login":"Lollyde","avatar_url":"https://avatars.githubusercontent.com/u/11347524?v=4"},{"login":"krishnamuppaneni","avatar_url":"https://avatars.githubusercontent.com/u/4703366?v=4"},{"login":"devtobi","avatar_url":"https://avatars.githubusercontent.com/u/28538704?v=4"},{"login":"TyxTang","avatar_url":"https://avatars.githubusercontent.com/u/90897955?v=4"},{"login":"alotlikebeans","avatar_url":"https://avatars.githubusercontent.com/u/19630511?v=4"},{"login":"WillyJL","avatar_url":"https://avatars.githubusercontent.com/u/49810075?v=4"},{"login":"anonysoul","avatar_url":"https://avatars.githubusercontent.com/u/105715150?v=4"},{"login":"cospeedster","avatar_url":"https://avatars.githubusercontent.com/u/52749645?v=4"},{"login":"diederbert","avatar_url":"https://avatars.githubusercontent.com/u/162878798?v=4"},{"login":"digdilem","avatar_url":"https://avatars.githubusercontent.com/u/4052275?v=4"},{"login":"dinghino","avatar_url":"https://avatars.githubusercontent.com/u/14729459?v=4"},{"login":"gfomichev","avatar_url":"https://avatars.githubusercontent.com/u/1596146?v=4"},{"login":"gnattu","avatar_url":"https://avatars.githubusercontent.com/u/12995396?v=4"},{"login":"tuxpizza","avatar_url":"https://avatars.githubusercontent.com/u/84710786?v=4"},{"login":"xmarkurion","avatar_url":"https://avatars.githubusercontent.com/u/46654687?v=4"},{"login":"huanga","avatar_url":"https://avatars.githubusercontent.com/u/732970?v=4"},{"login":"taos15","avatar_url":"https://avatars.githubusercontent.com/u/122130728?v=4"},{"login":"arghyadipchak","avatar_url":"https://avatars.githubusercontent.com/u/32430374?v=4"},{"login":"AuthorShin","avatar_url":"https://avatars.githubusercontent.com/u/4959043?v=4"},{"login":"benniblot","avatar_url":"https://avatars.githubusercontent.com/u/47495914?v=4"},{"login":"bebsworthy","avatar_url":"https://avatars.githubusercontent.cLine truncated
[{"login":"ajnart","avatar_url":"https://avatars.githubusercontent.com/u/49837342?v=4"},{"login":"manuel-rw","avatar_url":"https://avatars.githubusercontent.com/u/30572287?v=4"},{"login":"Meierschlumpf","avatar_url":"https://avatars.githubusercontent.com/u/63781622?v=4"},{"login":"SeDemal","avatar_url":"https://avatars.githubusercontent.com/u/26098587?v=4"},{"login":"lammersbjorn","avatar_url":"https://avatars.githubusercontent.com/u/71191962?v=4"},{"login":"LarveyOfficial","avatar_url":"https://avatars.githubusercontent.com/u/39219859?v=4"},{"login":"c00ldude1oo","avatar_url":"https://avatars.githubusercontent.com/u/15677803?v=4"},{"login":"InterN0te","avatar_url":"https://avatars.githubusercontent.com/u/10882916?v=4"},{"login":"Aimsucks","avatar_url":"https://avatars.githubusercontent.com/u/1828486?v=4"},{"login":"JannesV","avatar_url":"https://avatars.githubusercontent.com/u/5984244?v=4"},{"login":"MauriceNino","avatar_url":"https://avatars.githubusercontent.com/u/18658092?v=4"},{"login":"hillaliy","avatar_url":"https://avatars.githubusercontent.com/u/950010?v=4"},{"login":"Skeeww","avatar_url":"https://avatars.githubusercontent.com/u/9639992?v=4"},{"login":"RichyHBM","avatar_url":"https://avatars.githubusercontent.com/u/5472275?v=4"},{"login":"Bonfire","avatar_url":"https://avatars.githubusercontent.com/u/5704760?v=4"},{"login":"wieli99","avatar_url":"https://avatars.githubusercontent.com/u/46794825?v=4"},{"login":"ishaanparlikar","avatar_url":"https://avatars.githubusercontent.com/u/43013132?v=4"},{"login":"Zareix","avatar_url":"https://avatars.githubusercontent.com/u/29818713?v=4"},{"login":"tuggan","avatar_url":"https://avatars.githubusercontent.com/u/4325608?v=4"},{"login":"Spillebulle","avatar_url":"https://avatars.githubusercontent.com/u/46653946?v=4"},{"login":"spkesDE","avatar_url":"https://avatars.githubusercontent.com/u/1682314?v=4"},{"login":"j3lte","avatar_url":"https://avatars.githubusercontent.com/u/2557568?v=4"},{"login":"dslatt","avatar_url":"https://avatars.githubusercontent.com/u/5211001?v=4"},{"login":"Malong11-007","avatar_url":"https://avatars.githubusercontent.com/u/40298510?v=4"},{"login":"StefanB7","avatar_url":"https://avatars.githubusercontent.com/u/22056509?v=4"},{"login":"souravghosh01","avatar_url":"https://avatars.githubusercontent.com/u/37548139?v=4"},{"login":"SR3u","avatar_url":"https://avatars.githubusercontent.com/u/2380522?v=4"},{"login":"Rikpat","avatar_url":"https://avatars.githubusercontent.com/u/33869814?v=4"},{"login":"NormanJS","avatar_url":"https://avatars.githubusercontent.com/u/83409549?v=4"},{"login":"No-Maines-Land","avatar_url":"https://avatars.githubusercontent.com/u/20687725?v=4"},{"login":"stark1tty","avatar_url":"https://avatars.githubusercontent.com/u/69326376?v=4"},{"login":"Momcilo42","avatar_url":"https://avatars.githubusercontent.com/u/10118137?v=4"},{"login":"marius-arch","avatar_url":"https://avatars.githubusercontent.com/u/72494359?v=4"},{"login":"Lumilias","avatar_url":"https://avatars.githubusercontent.com/u/10852161?v=4"},{"login":"Havock94","avatar_url":"https://avatars.githubusercontent.com/u/7635248?v=4"},{"login":"Lollyde","avatar_url":"https://avatars.githubusercontent.com/u/11347524?v=4"},{"login":"krishnamuppaneni","avatar_url":"https://avatars.githubusercontent.com/u/4703366?v=4"},{"login":"devtobi","avatar_url":"https://avatars.githubusercontent.com/u/28538704?v=4"},{"login":"TyxTang","avatar_url":"https://avatars.githubusercontent.com/u/90897955?v=4"},{"login":"alotlikebeans","avatar_url":"https://avatars.githubusercontent.com/u/19630511?v=4"},{"login":"WillyJL","avatar_url":"https://avatars.githubusercontent.com/u/49810075?v=4"},{"login":"anonysoul","avatar_url":"https://avatars.githubusercontent.com/u/105715150?v=4"},{"login":"cospeedster","avatar_url":"https://avatars.githubusercontent.com/u/52749645?v=4"},{"login":"diederbert","avatar_url":"https://avatars.githubusercontent.com/u/162878798?v=4"},{"login":"digdilem","avatar_url":"https://avatars.githubusercontent.com/u/4052275?v=4"},{"login":"dinghino","avatar_url":"https://avatars.githubusercontent.com/u/14729459?v=4"},{"login":"gfomichev","avatar_url":"https://avatars.githubusercontent.com/u/1596146?v=4"},{"login":"gnattu","avatar_url":"https://avatars.githubusercontent.com/u/12995396?v=4"},{"login":"tuxpizza","avatar_url":"https://avatars.githubusercontent.com/u/84710786?v=4"},{"login":"xmarkurion","avatar_url":"https://avatars.githubusercontent.com/u/46654687?v=4"},{"login":"huanga","avatar_url":"https://avatars.githubusercontent.com/u/732970?v=4"},{"login":"taos15","avatar_url":"https://avatars.githubusercontent.com/u/122130728?v=4"},{"login":"arghyadipchak","avatar_url":"https://avatars.githubusercontent.com/u/32430374?v=4"},{"login":"AuthorShin","avatar_url":"https://avatars.githubusercontent.com/u/4959043?v=4"},{"login":"benniblot","avatar_url":"https://avatars.githubusercontent.com/u/47495914?v=4"},{"login":"bebsworthy","avatar_url":"https://avatars.githubusercontent.cLine truncated
-1
View File
@@ -37,7 +37,6 @@
"DB_DRIVER",
"DOCKER_HOSTNAMES",
"DOCKER_PORTS",
"DOCKER_SOCKET_PATHS",
"NODE_ENV",
"PORT",
"LOCAL_CERTIFICATE_PATH",