Initial commit from monorepo
This commit is contained in:
74
server/middleware/me.ts
Normal file
74
server/middleware/me.ts
Normal file
@@ -0,0 +1,74 @@
|
||||
import type LogtoClient from '@logto/node'
|
||||
import { print } from 'graphql'
|
||||
|
||||
type SelectedLocation = {
|
||||
type: string
|
||||
uuid: string
|
||||
name: string
|
||||
latitude: number
|
||||
longitude: number
|
||||
} | null
|
||||
|
||||
type MePayload = {
|
||||
id?: string | null
|
||||
firstName?: string | null
|
||||
lastName?: string | null
|
||||
phone?: string | null
|
||||
avatarId?: string | null
|
||||
activeTeamId?: string | null
|
||||
activeTeam?: {
|
||||
name?: string | null
|
||||
teamType?: string | null
|
||||
logtoOrgId?: string | null
|
||||
selectedLocation?: SelectedLocation
|
||||
} | null
|
||||
teams?: Array<{ id?: string | null; name?: string | null; logtoOrgId?: string | null; teamType?: string | null } | null> | null
|
||||
} | null
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
if (event.context.meLoaded) return
|
||||
event.context.meLoaded = true
|
||||
|
||||
const client = event.context.logtoClient as LogtoClient | undefined
|
||||
if (!client) return
|
||||
|
||||
let idToken: string | null = null
|
||||
try {
|
||||
idToken = await client.getIdToken()
|
||||
} catch {
|
||||
return
|
||||
}
|
||||
|
||||
if (!idToken) return
|
||||
|
||||
try {
|
||||
const { GetMeDocument, GetMeProfileDocument } = await import('~/composables/graphql/user/teams-generated')
|
||||
const endpoint = process.env.NUXT_PUBLIC_TEAMS_GRAPHQL_USER || 'https://teams.optovia.ru/graphql/user/'
|
||||
|
||||
const [meResponse, profileResponse] = await Promise.all([
|
||||
$fetch<{ data?: { me?: MePayload } }>(endpoint, {
|
||||
method: 'POST',
|
||||
headers: { Authorization: `Bearer ${idToken}` },
|
||||
body: { query: print(GetMeDocument) }
|
||||
}),
|
||||
$fetch<{ data?: { me?: MePayload } }>(endpoint, {
|
||||
method: 'POST',
|
||||
headers: { Authorization: `Bearer ${idToken}` },
|
||||
body: { query: print(GetMeProfileDocument) }
|
||||
})
|
||||
])
|
||||
|
||||
const baseMe = meResponse?.data?.me ?? null
|
||||
const profileMe = profileResponse?.data?.me ?? null
|
||||
if (baseMe || profileMe) {
|
||||
event.context.me = {
|
||||
...(baseMe || {}),
|
||||
...(profileMe || {}),
|
||||
activeTeam: baseMe?.activeTeam || profileMe?.activeTeam || null,
|
||||
teams: baseMe?.teams || null
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
// Ignore if user context can't be fetched
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user