about summary refs log tree commit diff
path: root/src/state/session/util.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/state/session/util.ts')
-rw-r--r--src/state/session/util.ts36
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
+}