import { Box, Paper, Typography } from "@exotel-npm-dev/signal-design-system"; import { useEffect, useRef, useState } from "react"; import { ensureAafSdkLoaded, getAafSdkScriptUrl } from "./aaf/loadAafSdkIfNeeded"; import { registerAafSdk } from "./aaf/registerAafSdk.generated"; import { EventLoggerView } from "./components/EventLoggerView"; import { GWT_USE_CASE_KEY } from "./generated/useCaseKey"; import { AppTheme } from "./theme/AppTheme"; function ShellApp() { const statusRef = useRef(null); const [sdkPhase, setSdkPhase] = useState<"boot" | "error">("boot"); useEffect(() => { const el = statusRef.current; let cancelled = false; void (async () => { try { if (el) el.textContent = "Checking AmeyoClient / aaf_sdk.js…"; await ensureAafSdkLoaded(); if (cancelled) return; await registerAafSdk(el); } catch (err: unknown) { if (cancelled) return; console.error("AAF bootstrap", err); setSdkPhase("error"); if (el) { el.textContent = err instanceof Error ? err.message : "AAF bootstrap failed — see console."; } } })(); return () => { cancelled = true; }; }, []); return ( <> GWT AAF slot If the parent did not inject AmeyoClient, this app loads the SDK script (same path as background-app): {getAafSdkScriptUrl()} — using query{" "} sdkBaseUrl or origin if set, otherwise location.origin{" "} (same order as Omni getSdkModuleUrl). Use ?sdkBaseUrl=… when the SDK lives under a webapp prefix (e.g. /ameyo40). {sdkPhase === "boot" && ( Bootstrapping SDK… )} SDK status ); } export function App() { return ( {GWT_USE_CASE_KEY === "global-events-logger" ? : } ); }