Improvements: remove dead config, fix ESM, add URL validation, unify types, add missing logging
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m52s

- Remove .prettierrc (dead config, Biome replaces Prettier)
- Rename lighthouserc.json to lighthouserc.cjs with module.exports for ESM compat
- Add logger.warn to empty catch blocks in auth, register, site-settings, prisma-cache, redis, security, rate-limit
- Unify ActionResult type: action-helper.ts uses 'ok' consistent with safe-action-shared.ts
- Add noUnusedLocals + noUnusedParameters to tsconfig + fix 25 pre-existing unused vars
- Replace barrel export src/types/index.ts with direct @/types/common imports
- Make trustHost conditional (development only) in auth.ts
- Add pre-flight URL validation to update-Nitrov3.sh to catch image.library.url misconfigurations
- Improve NITRO_IMAGE_LIBRARY_URL content validation in pre-flight & post-compute checks
This commit is contained in:
openhands committed 2026-07-26 20:28:11 +02:00
1 parent b922f6d49f
commit 17847545dd
292 files changed
+69195 -67915

No files matched your search

@@ -190,11 +190,10 @@ export function CommandocentrumControls() {
/>
<Button
type="button"
variant="destructive" className="w-full"
variant="destructive"
className="w-full"
disabled={
isPending ||
!disconnect.userId ||
!disconnect.username.trim()
isPending || !disconnect.userId || !disconnect.username.trim()
}
onClick={() =>
run(
@@ -249,10 +248,9 @@ export function CommandocentrumControls() {
/>
<Button
type="button"
variant="default" className="w-full"
disabled={
isPending || !alert.userId || !alert.message.trim()
}
variant="default"
className="w-full"
disabled={isPending || !alert.userId || !alert.message.trim()}
onClick={() =>
run(
() =>
@@ -305,7 +303,8 @@ export function CommandocentrumControls() {
/>
<Button
type="button"
variant="default" className="w-full"
variant="default"
className="w-full"
disabled={isPending || !forward.userId || !forward.roomId}
onClick={() =>
run(
@@ -317,8 +316,7 @@ export function CommandocentrumControls() {
{
successMessage: "User forwarded.",
errorMessage: RCON_ERROR,
onSuccess: () =>
setForward({ userId: "", roomId: "" }),
onSuccess: () => setForward({ userId: "", roomId: "" }),
},
)
}
@@ -362,7 +360,8 @@ export function CommandocentrumControls() {
/>
<Button
type="button"
variant="default" className="w-full"
variant="default"
className="w-full"
disabled={isPending || !credits.userId || !credits.credits}
onClick={() =>
run(
@@ -374,8 +373,7 @@ export function CommandocentrumControls() {
{
successMessage: "Credits sent.",
errorMessage: RCON_ERROR,
onSuccess: () =>
setCredits({ userId: "", credits: "" }),
onSuccess: () => setCredits({ userId: "", credits: "" }),
},
)
}
@@ -417,7 +415,8 @@ export function CommandocentrumControls() {
/>
<Button
type="button"
variant="default" className="w-full"
variant="default"
className="w-full"
disabled={isPending || !duckets.userId || !duckets.amount}
onClick={() =>
run(
@@ -429,8 +428,7 @@ export function CommandocentrumControls() {
{
successMessage: "Duckets sent.",
errorMessage: RCON_ERROR,
onSuccess: () =>
setDuckets({ userId: "", amount: "" }),
onSuccess: () => setDuckets({ userId: "", amount: "" }),
},
)
}
@@ -472,7 +470,8 @@ export function CommandocentrumControls() {
/>
<Button
type="button"
variant="default" className="w-full"
variant="default"
className="w-full"
disabled={isPending || !diamonds.userId || !diamonds.amount}
onClick={() =>
run(
@@ -484,8 +483,7 @@ export function CommandocentrumControls() {
{
successMessage: "Diamonds sent.",
errorMessage: RCON_ERROR,
onSuccess: () =>
setDiamonds({ userId: "", amount: "" }),
onSuccess: () => setDiamonds({ userId: "", amount: "" }),
},
)
}
@@ -529,7 +527,8 @@ export function CommandocentrumControls() {
/>
<Button
type="button"
variant="default" className="w-full"
variant="default"
className="w-full"
disabled={isPending || !badge.userId || !badge.badge.trim()}
onClick={() =>
run(
@@ -583,7 +582,8 @@ export function CommandocentrumControls() {
/>
<Button
type="button"
variant="default" className="w-full"
variant="default"
className="w-full"
disabled={isPending || !motto.userId || !motto.motto.trim()}
onClick={() =>
run(
@@ -595,8 +595,7 @@ export function CommandocentrumControls() {
{
successMessage: "Motto updated.",
errorMessage: RCON_ERROR,
onSuccess: () =>
setMottoForm({ userId: "", motto: "" }),
onSuccess: () => setMottoForm({ userId: "", motto: "" }),
},
)
}
@@ -639,7 +638,8 @@ export function CommandocentrumControls() {
/>
<Button
type="button"
variant="default" className="w-full"
variant="default"
className="w-full"
disabled={isPending || !rank.userId || rank.rank === ""}
onClick={() =>
run(
@@ -695,7 +695,8 @@ export function CommandocentrumControls() {
/>
<Button
type="button"
variant="default" className="w-full"
variant="default"
className="w-full"
disabled={
isPending || !command.userId || !command.command.trim()
}
@@ -709,8 +710,7 @@ export function CommandocentrumControls() {
{
successMessage: "Command executed.",
errorMessage: RCON_ERROR,
onSuccess: () =>
setCommand({ userId: "", command: "" }),
onSuccess: () => setCommand({ userId: "", command: "" }),
},
)
}
@@ -763,7 +763,8 @@ export function CommandocentrumControls() {
/>
<Button
type="button"
variant="default" className="w-full"
variant="default"
className="w-full"
disabled={isPending || !gift.userId || !gift.itemId}
onClick={() =>
run(
+5 -2
View File
@@ -7,9 +7,9 @@ import {
OnlineUsersWidget,
StatusCard,
} from "@/components/admin/dashboard";
import { formatDate } from "@/lib/format-date";
import { canAccess, getAdminContext, PERMS } from "@/lib/permissions";
import { prisma } from "@/lib/prisma";
import { formatDate } from "@/lib/format-date";
import { rcon } from "@/lib/services/rcon";
import { siteSettings } from "@/lib/services/site-settings";
import { CommandocentrumControls } from "./commandocentrum-controls";
@@ -268,7 +268,10 @@ export default async function CommandoCentrum() {
return (
<tr key={e.id}>
<td className="text-sm theme-text-muted dark:theme-text-muted whitespace-nowrap">
{formatDate(e.timestamp ? new Date(e.timestamp * 1000) : null, "datetime-seconds")}
{formatDate(
e.timestamp ? new Date(e.timestamp * 1000) : null,
"datetime-seconds",
)}
</td>
<td>{e.type}</td>
<td className="text-sm theme-text-muted dark:theme-text-muted whitespace-nowrap">