// Settings — pulls live user profile + active sessions + vault summary
// from the backend. No hardcoded names, emails, or addresses.
const Settings = () => {
const [tab, setTab] = React.useState('account');
const ctx = (window.useChData && window.useChData()) || { phase: 'loading' };
const me = ctx && ctx.phase === 'ready' ? ctx.bundle.me : null;
const [vault, setVault] = React.useState(null);
const [sessions, setSessions] = React.useState(null);
React.useEffect(() => {
let dead = false;
(async () => {
try {
const r = await fetch(window.CHVault.apiRoot + '/api/v1/vault/summary', { credentials: 'include', headers: { 'Accept': 'application/json' } });
if (r.ok) { const j = await r.json(); if (!dead) setVault(j); }
} catch {}
try {
const r2 = await fetch(window.CHVault.apiRoot + '/api/v1/auth/sessions', { credentials: 'include', headers: { 'Accept': 'application/json' } });
if (r2.ok) { const j = await r2.json(); if (!dead) setSessions(Array.isArray(j) ? j : (j.sessions || [])); }
} catch {}
})();
return () => { dead = true; };
}, []);
const tabs = [];
const Row = ({ label, value, action, onAction }) => (
{label}
{value || —}
{action &&
}
);
const renderAccount = () => (
);
const renderSecurity = () => (
0 ? 'View' : null} />
);
const renderData = () => {
const entryCount = vault && (vault.total_entries || vault.entry_count || vault.entries);
const totalBytes = vault && (vault.total_bytes || vault.size_bytes);
const grantsActive = vault && (vault.active_grants || vault.shares_active);
return (
Datavault
Everything Conceptual Health® touches lives here.
Exports
Take it with you, any time.
window.location.href = window.CHVault.apiRoot + '/api/v1/vault/export'} />
window.open('/ui_kits/master-equation/spec.html', '_blank')} />
window.open('/ui_kits/master-equation/validators/README.md', '_blank')} />
);
};
return (
Settings
Your account. Your keys. Your rules.
{tabs.map(t => (
))}
{tab === 'account' && renderAccount()}
{tab === 'security' && renderSecurity()}
{tab === 'data' && renderData()}
);
};
window.Settings = Settings;