about summary refs log tree commit diff
path: root/src/state/session/util.ts
diff options
context:
space:
mode:
authordan <dan.abramov@gmail.com>2024-05-08 03:30:55 +0100
committerGitHub <noreply@github.com>2024-05-08 03:30:55 +0100
commit0910525e2efe124c63c1c8147a98450e43110681 (patch)
tree58162303b6c224e9ad90c552f66e29c7415bece4 /src/state/session/util.ts
parent4fe5a869c32c696862308cb8ff4537f34f43f06a (diff)
downloadvoidsky-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.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
+}