diff options
author | dan <dan.abramov@gmail.com> | 2024-05-08 03:30:55 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-08 03:30:55 +0100 |
commit | 0910525e2efe124c63c1c8147a98450e43110681 (patch) | |
tree | 58162303b6c224e9ad90c552f66e29c7415bece4 /src/state/session/util.ts | |
parent | 4fe5a869c32c696862308cb8ff4537f34f43f06a (diff) | |
download | voidsky-0910525e2efe124c63c1c8147a98450e43110681.tar.zst |
[Session] Code cleanup (#3854)
* Split utils into files * Move reducer to another file * Write types explicitly * Remove unnnecessary check * Move things around a bit * Move more stuff into agent factories * Move more stuff into agent * Fix gates await * Clarify comments * Enforce more via types * Nit * initSession -> resumeSession * Protect against races * Make agent opaque to reducer * Check using plain condition
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 +} |