/** * Keeps the request-path auth gate (`config/authGate`) in step with the store. * Mounted by both providers — `SublayStoreProvider` (store mode) and * `SublayIntegrationProvider` (integration mode) — because the gate has to work * regardless of whose store is underneath. * * Arming happens in the render body rather than an effect: React runs child * effects before parent effects, so a gate armed in the provider's effect would * already have let through the mount-time requests it exists to hold. * * State is mirrored via a raw `store.subscribe` instead of `useSelector` so * token rotations don't re-render the provider — and through it, every app that * mounts Sublay at its root. */ export default function useAuthGate(projectId: string): void;