Bluesky app fork with some witchin' additions 馃挮
at feat/tealfm 40 lines 1.2 kB view raw
1import {useEffect, useState} from 'react' 2import uuid from 'react-native-uuid' 3 4import {onAppStateChange} from '#/lib/appState' 5import {isSessionIdExpired} from '#/analytics/identifiers/util' 6import {device} from '#/storage' 7 8let sessionId = (() => { 9 const existing = device.get(['nativeSessionId']) 10 const lastEvent = device.get(['nativeSessionIdLastEventAt']) 11 const id = existing && !isSessionIdExpired(lastEvent) ? existing : uuid.v4() 12 device.set(['nativeSessionId'], id) 13 device.set(['nativeSessionIdLastEventAt'], Date.now()) 14 return id 15})() 16 17export function getInitialSessionId() { 18 return sessionId 19} 20 21export function useSessionId() { 22 const [id, setId] = useState(() => sessionId) 23 24 useEffect(() => { 25 const sub = onAppStateChange(state => { 26 if (state === 'active') { 27 const lastEvent = device.get(['nativeSessionIdLastEventAt']) 28 if (isSessionIdExpired(lastEvent)) { 29 sessionId = uuid.v4() 30 device.set(['nativeSessionId'], sessionId) 31 setId(sessionId) 32 } 33 } 34 device.set(['nativeSessionIdLastEventAt'], Date.now()) 35 }) 36 return () => sub.remove() 37 }, []) 38 39 return id 40}