/** * This file is the entry point for the React app, it sets up the root * element and renders the App component to the DOM. * * It is included in `src/index.html`. * * Before loading the app tree it pulls the RUNTIME shared-wallet config (dev * server + `bun run start`, which serve from src/ and so miss build.ts's * compile-time `define`), sets the global, then dynamically imports `App` so * `sharedWallet.ts` reads the value on evaluation. In a build.ts bundle the * password is already inlined via `define`, so this step is skipped (NODE_ENV). */ import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; /** Fetch the runtime shared-wallet config and set the global (dev/start only). */ async function loadRuntimeConfig(): Promise { if (process.env.NODE_ENV === "production") return; // build.ts define provides it try { const res = await fetch("/festipod-config.json"); if (!res.ok) return; const cfg = (await res.json()) as { sharedWalletPassword?: string }; // Bracket access so build.ts's `define` (which matches the dotted global) // never rewrites this assignment. Only set when the env actually carries one. const g = globalThis as Record; if (cfg.sharedWalletPassword && g["__FESTIPOD_SHARED_WALLET_PASSWORD__"] == null) { g["__FESTIPOD_SHARED_WALLET_PASSWORD__"] = cfg.sharedWalletPassword; } } catch { // No runtime config endpoint (static build) → rely on the compile-time define. } } async function main(): Promise { await loadRuntimeConfig(); // Dynamic import AFTER the global is set, so sharedWallet.ts reads it on eval. const { App } = await import("./App"); const elem = document.getElementById("root")!; const app = ( ); if (import.meta.hot) { // With hot module reloading, `import.meta.hot.data` is persisted. const root = (import.meta.hot.data.root ??= createRoot(elem)); root.render(app); } else { // The hot module reloading API is not available in production. createRoot(elem).render(app); } } void main();