feat(frontend): add guild join flow, members panel, and channel-create member modal
This commit is contained in:
@@ -2,7 +2,7 @@ import { useMemo, useState } from 'react'
|
||||
import type { PropsWithChildren } from 'react'
|
||||
import { clearAuthSession, getAuthSession, isAccessTokenStale, setAuthSession } from '../lib/auth-storage'
|
||||
import type { AuthSession } from '../lib/auth-storage'
|
||||
import { loginCenter, logoutCenter, refreshCenter } from '../lib/center-auth-client'
|
||||
import { loginCenter, logoutCenter, meGuildsCenter, refreshCenter } from '../lib/center-auth-client'
|
||||
import { AuthContext } from './auth-context'
|
||||
import type { AuthContextValue } from './auth-context'
|
||||
|
||||
@@ -45,6 +45,33 @@ export function AuthProvider({ children }: PropsWithChildren) {
|
||||
setSession(next)
|
||||
return next.accessToken
|
||||
},
|
||||
refreshGuilds: async () => {
|
||||
if (!session) return
|
||||
let accessToken = session.accessToken
|
||||
let refreshToken = session.refreshToken
|
||||
let tokenType = session.tokenType
|
||||
let expiresIn = session.expiresIn
|
||||
if (isAccessTokenStale(session.accessToken)) {
|
||||
const refreshed = await refreshCenter(session.centerApiBase, session.refreshToken)
|
||||
accessToken = refreshed.accessToken
|
||||
refreshToken = refreshed.refreshToken
|
||||
tokenType = refreshed.tokenType
|
||||
expiresIn = refreshed.expiresIn
|
||||
}
|
||||
|
||||
const guildData = await meGuildsCenter(session.centerApiBase, accessToken)
|
||||
const next: AuthSession = {
|
||||
...session,
|
||||
accessToken,
|
||||
refreshToken,
|
||||
tokenType,
|
||||
expiresIn,
|
||||
guilds: guildData.guilds,
|
||||
guildAccessTokens: guildData.guildAccessTokens,
|
||||
}
|
||||
setAuthSession(next)
|
||||
setSession(next)
|
||||
},
|
||||
}),
|
||||
[session],
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user