Spaces:
Runtime error
Runtime error
| "use client"; | |
| import { useState } from "react"; | |
| import { useTranslations } from "next-intl"; | |
| /** | |
| * Shown when OmniRoute was started with auto-generated secrets (zero-config mode). | |
| * The banner is dismissable and persists only for the current session. | |
| */ | |
| export default function BootstrapBanner() { | |
| const t = useTranslations("common"); | |
| const [dismissed, setDismissed] = useState(false); | |
| if (dismissed) return null; | |
| // Determine default data dir hint based on platform hint from user-agent | |
| const dataDir = | |
| typeof navigator !== "undefined" && navigator.platform?.startsWith("Win") | |
| ? "%APPDATA%\\omniroute\\server.env" | |
| : "~/.omniroute/server.env"; | |
| return ( | |
| <div | |
| role="alert" | |
| className="flex items-start gap-3 rounded-lg border border-amber-300 dark:border-amber-500/30 bg-amber-50 dark:bg-amber-500/10 px-4 py-3 text-sm text-amber-900 dark:text-amber-200 mb-4" | |
| > | |
| <span className="text-amber-500 dark:text-amber-400 text-base shrink-0 mt-0.5">⚠️</span> | |
| <div className="flex-1 min-w-0"> | |
| <p className="font-semibold text-amber-900 dark:text-amber-300"> | |
| Running in zero-config mode | |
| </p> | |
| <p className="mt-0.5 text-amber-800/80 dark:text-amber-200/80"> | |
| OmniRoute auto-generated secure encryption keys on first launch. They are persisted to{" "} | |
| <code className="font-mono bg-amber-200/50 dark:bg-amber-500/20 px-1 rounded text-xs"> | |
| {dataDir} | |
| </code> | |
| . No action is required — your data is encrypted and safe. To use custom keys, add{" "} | |
| <code className="font-mono bg-amber-200/50 dark:bg-amber-500/20 px-1 rounded text-xs"> | |
| JWT_SECRET | |
| </code>{" "} | |
| and{" "} | |
| <code className="font-mono bg-amber-200/50 dark:bg-amber-500/20 px-1 rounded text-xs"> | |
| STORAGE_ENCRYPTION_KEY | |
| </code>{" "} | |
| to that file. | |
| </p> | |
| </div> | |
| <button | |
| onClick={() => setDismissed(true)} | |
| className="shrink-0 text-amber-600/60 hover:text-amber-700 dark:text-amber-400/60 dark:hover:text-amber-300 transition-colors ml-1" | |
| aria-label={t("bootstrapBannerDismiss")} | |
| > | |
| ✕ | |
| </button> | |
| </div> | |
| ); | |
| } | |