@auth0/ul-context-inspector
v1.1.3
Published
Universal Login Inspector tool to inspect Auth0 ACUL context data.
Maintainers
Readme
Auth0 Universal Login Context Inspector
Developer panel for inspecting and previewing the Universal Login JSON context (window.universal_login_context) for the Advanced Customizations for Universal Login (ACUL) feature.
✅ What It Does
- Detects if a real tenant context exists ("connected" mode).
- If not, lets you preview screens & variants using a local or CDN manifest ("disconnected" mode).
- Lets you inspect & live-edit mock context JSON (broadcasts a custom event).
- Persists your selections (screen / variant / data source / version) in
sessionStoragebetween reloads.
📦 1. Install
npm install @auth0/ul-context-inspectorPeer dependencies (install if you don’t already have them):
npm install react react-dom🗂 2. Local Manifest & Variant Files
When the panel runs in disconnected mode it attempts to fetch a local manifest at GET /manifest.json:
- If the request succeeds (HTTP 200), the data source switches to "Local development" automatically.
- If it fails, the panel defaults to the Auth0 CDN manifest.
Place your manifest and variant JSON under public/ so Vite (or your bundler) serves them from the root:
public/
manifest.json
screens/
login/
login/
default.json
with-errors.json
login-id/
login-id/
default.json
with-errors.jsonManifest Shape
manifest.json contains an array screens with objects mapping prompt → screen → variant node:
{
"screens": [
{
"login": {
"login": { "path": "/screens/login/login", "variants": ["default", "with-errors"] }
}
},
{
"login-id": {
"login-id": { "path": "/screens/login-id/login-id", "variants": ["default", "with-errors"] }
}
}
]
}Each variant file is loaded at: <path>/<variant>.json (e.g. /screens/login/login/default.json).
If a node omits variants, the panel assumes a single default variant.
🧪 3. Mount the Panel
import { UniversalLoginContextPanel } from '@auth0/ul-context-inspector';
export function App() {
return <UniversalLoginContextPanel defaultScreen="login:login" />;
}defaultScreen uses prompt:screen format. If omitted and CDN mode is active, the panel may auto-select a common screen (e.g. login-id:login-id).
� 4. Subscribe to Context Updates (Optional)
Use the subscription hook if your host needs to re-render on context changes:
import { useUniversalLoginContextSubscription } from '@auth0/ul-context-inspector';
function Host() {
const context = useUniversalLoginContextSubscription();
return <pre>{JSON.stringify(context?.screen, null, 2)}</pre>;
}�🕹 5. Interactive Behavior
- Connected mode: If
window.universal_login_contextexisted at mount, selections do not override real tenant context screen/variant. - Disconnected mode: Screen & variant selection reloads the page to simulate host SDK remount.
- Persistence: Values stored in
sessionStoragewith prefixulci:. - Local manifest auto-detection runs once at startup; if found, data source switches to Local.
- Editing JSON: Writes directly to
window.universal_login_context(even in mock mode) and triggers a broadcast event.
🧩 Panel Props
| Prop | Type | Default | Description |
|------|------|---------|-------------|
| defaultScreen | string | undefined | Initial preview screen (prompt:screen) if no prior session selection. |
🎨 Styling Notes
Tailwind classes are prefixed with uci-. If you purge CSS, safelist with a regex like /uci-/.
🛠 Development
npm install
npm run dev # Start dev server
npm run build # Produce dist (JS, types, CSS)🧾 License
Apache-2.0
❓ FAQ
Why is my local manifest ignored?
Ensure public/manifest.json returns 200 and matches the shape above; check dev tools Network panel.
How do I force CDN mode?
Delete/rename local manifest.json or manually switch data source in the panel.
