forked from
jollywhoppers.com/witchsky.app
Bluesky app fork with some witchin' additions 馃挮
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}