diff options
Diffstat (limited to 'src/state/session/util.ts')
-rw-r--r-- | src/state/session/util.ts | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/state/session/util.ts b/src/state/session/util.ts new file mode 100644 index 000000000..8948ecd6b --- /dev/null +++ b/src/state/session/util.ts @@ -0,0 +1,36 @@ +import {jwtDecode} from 'jwt-decode' + +import {hasProp} from '#/lib/type-guards' +import {logger} from '#/logger' +import * as persisted from '#/state/persisted' +import {SessionAccount} from './types' + +export function readLastActiveAccount() { + const {currentAccount, accounts} = persisted.get('session') + return accounts.find(a => a.did === currentAccount?.did) +} + +export function isSessionDeactivated(accessJwt: string | undefined) { + if (accessJwt) { + const sessData = jwtDecode(accessJwt) + return ( + hasProp(sessData, 'scope') && sessData.scope === 'com.atproto.deactivated' + ) + } + return false +} + +export function isSessionExpired(account: SessionAccount) { + try { + if (account.accessJwt) { + const decoded = jwtDecode(account.accessJwt) + if (decoded.exp) { + const didExpire = Date.now() >= decoded.exp * 1000 + return didExpire + } + } + } catch (e) { + logger.error(`session: could not decode jwt`) + } + return true +} |