Bind domain access to registered node type

This commit is contained in:
冰朔 2026-08-10 06:28:47 +08:00
commit 8807b99d98
15 changed files with 168 additions and 63 deletions

View file

@ -47,6 +47,7 @@ interface DomainAccessStatus {
blockers: string[];
domainId?: string;
nodeId?: string;
nodeType?: DomainNodeType;
runtimeReady: boolean;
stage: 'checking' | 'login-required' | 'identity-verified' | 'runtime-ready';
trustSource?: {
@ -179,18 +180,18 @@ export default function App() {
}
}, []);
const refreshDomainAccess = useCallback(async (domainId = 'DOM-FIFTH-0001') => {
const refreshDomainAccess = useCallback(async (domainId = 'DOM-FIFTH-0001', nodeType: DomainNodeType = 'local-terminal') => {
const request = ++domainAccessRequest.current;
const server = (window as any).hololake?.server;
if (!server?.domainAccess) {
if (request === domainAccessRequest.current) setDomainAccess({ blockers: ['desktop_runtime_required'], domainId, runtimeReady: false, stage: 'login-required' });
if (request === domainAccessRequest.current) setDomainAccess({ blockers: ['desktop_runtime_required'], domainId, nodeType, runtimeReady: false, stage: 'login-required' });
return;
}
try {
const result = await server.domainAccess(domainId);
const result = await server.domainAccess(domainId, nodeType);
if (request === domainAccessRequest.current) setDomainAccess(result);
} catch {
if (request === domainAccessRequest.current) setDomainAccess({ blockers: ['domain_access_probe_failed'], domainId, runtimeReady: false, stage: 'login-required' });
if (request === domainAccessRequest.current) setDomainAccess({ blockers: ['domain_access_probe_failed'], domainId, nodeType, runtimeReady: false, stage: 'login-required' });
}
}, []);
@ -200,13 +201,17 @@ export default function App() {
setDomainConnectionOpen(true);
if (target) {
setDomainAccess({ blockers: [], domainId: target.domain.stableDomainId, runtimeReady: false, stage: 'checking' });
void refreshDomainAccess(target.domain.stableDomainId);
void refreshDomainAccess(target.domain.stableDomainId, target.nodeType);
}
}, [refreshDomainAccess]);
const selectDomainNodeType = useCallback((nodeType: DomainNodeType) => {
setDomainEntryTarget(current => current ? createDomainEntryTarget(current.domain.routeId, nodeType) : null);
}, []);
if (!domainEntryTarget) return;
const target = createDomainEntryTarget(domainEntryTarget.domain.routeId, nodeType);
setDomainEntryTarget(target);
setDomainAccess({ blockers: [], domainId: target.domain.stableDomainId, nodeType, runtimeReady: false, stage: 'checking' });
void refreshDomainAccess(target.domain.stableDomainId, nodeType);
}, [domainEntryTarget, refreshDomainAccess]);
const refreshChannel = useCallback(async () => {
try {