online-tracker.tsx 578 B

1234567891011121314151617181920212223
  1. 'use client'
  2. import { useEffect } from 'react'
  3. export function OnlineTracker() {
  4. useEffect(() => {
  5. const ping = () => {
  6. if (document.visibilityState === 'visible') {
  7. fetch('/api/protected/ping', { method: 'POST' })
  8. }
  9. }
  10. ping() // ping immediately on mount
  11. const interval = setInterval(ping, 60_000) // every 60 seconds
  12. document.addEventListener('visibilitychange', ping) // ping on tab focus
  13. return () => {
  14. clearInterval(interval)
  15. document.removeEventListener('visibilitychange', ping)
  16. }
  17. }, [])
  18. return null
  19. }