diff --git a/webapp/src/App.tsx b/webapp/src/App.tsx index f88c768..7bf7127 100644 --- a/webapp/src/App.tsx +++ b/webapp/src/App.tsx @@ -147,6 +147,8 @@ const SIGNALR_UPDATE_TYPE_LOG_OUT = 11; const SIGNALR_UPDATE_TYPE_SYNC_SEND_CREATE = 12; const SIGNALR_UPDATE_TYPE_SYNC_SEND_UPDATE = 13; const SIGNALR_UPDATE_TYPE_SYNC_SEND_DELETE = 14; +const SIGNALR_UPDATE_TYPE_AUTH_REQUEST = 15; +const SIGNALR_UPDATE_TYPE_AUTH_REQUEST_RESPONSE = 16; const SIGNALR_UPDATE_TYPE_DEVICE_STATUS = 101; const SIGNALR_UPDATE_TYPE_BACKUP_RESTORE_PROGRESS = 102; @@ -260,6 +262,7 @@ export default function App() { const sessionRef = useRef(initialBootstrap.session); const silentRefreshVaultRef = useRef<() => Promise>(async () => {}); const refreshAuthorizedDevicesRef = useRef<() => Promise>(async () => {}); + const refreshPendingAuthRequestsRef = useRef<() => Promise>(async () => {}); const repairAttemptRef = useRef(''); const uriChecksumRepairAttemptRef = useRef(''); const pendingVaultCoreQueryRefreshRef = useRef | null>(null); @@ -1083,8 +1086,9 @@ export default function App() { enabled: !IS_DEMO_MODE && phase === 'app' && !!session?.accessToken && vaultInitialDecryptDone, staleTime: 30_000, }); + const pendingAuthRequestsQueryKey = useMemo(() => ['auth-requests-pending', vaultCacheKey || session?.email] as const, [vaultCacheKey, session?.email]); const pendingAuthRequestsQuery = useQuery({ - queryKey: ['auth-requests-pending', vaultCacheKey || session?.email], + queryKey: pendingAuthRequestsQueryKey, queryFn: () => listPendingAuthRequests(authedFetch, profile?.email || session?.email || ''), enabled: !IS_DEMO_MODE && phase === 'app' && !!session?.accessToken && !!session?.symEncKey && !!session?.symMacKey && !!(profile?.email || session?.email), staleTime: 5_000, @@ -1621,6 +1625,10 @@ export default function App() { void refreshAuthorizedDevicesRef.current(); continue; } + if (updateType === SIGNALR_UPDATE_TYPE_AUTH_REQUEST || updateType === SIGNALR_UPDATE_TYPE_AUTH_REQUEST_RESPONSE) { + void refreshPendingAuthRequestsRef.current(); + continue; + } if (updateType === SIGNALR_UPDATE_TYPE_BACKUP_RESTORE_PROGRESS) { if (isBackupProgressDetail(payload)) dispatchBackupProgress(payload); continue; @@ -1775,6 +1783,11 @@ export default function App() { if (!vaultInitialDecryptDone) return; await authorizedDevicesQuery.refetch(); }; + refreshPendingAuthRequestsRef.current = async () => { + if (!vaultInitialDecryptDone || !(profile?.email || session?.email)) return; + setAuthRequestDialogDismissedId(null); + await pendingAuthRequestsQuery.refetch(); + }; const hashPathRaw = typeof window !== 'undefined' ? window.location.hash || '' : ''; const hashPath = hashPathRaw.startsWith('#') ? hashPathRaw.slice(1) : hashPathRaw;