wzee1

@/actions/get-user-sessions.action.ts

Jul 18th, 2025
1,019
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. "use server"
  2.  
  3. import { cookies } from "next/headers"
  4.  
  5. import { WebSessionType, PersonalAccessTokenType } from "@/types/auth"
  6. import { fetchBackend } from "@/lib/utils"
  7.  
  8. /**
  9.  * Fetches the current user's active web sessions and personal access tokens from the backend.
  10.  *
  11.  * @returns {Promise<{ webSessions: WebSessionType[] | null; personalAccessTokens: PersonalAccessTokenType[] | null }>} the web sessions and personal access tokens related to the given user.
  12.  */
  13. export async function getUserSessions(): Promise<{
  14.   webSessions: WebSessionType[] | null
  15.   personalAccessTokens: PersonalAccessTokenType[] | null
  16. }> {
  17.   const cookieList = await cookies()
  18.   const laravelSessionCookie = cookieList.get('laravel_session')?.value
  19.   const xsrfToken = cookieList.get('XSRF-TOKEN')?.value
  20.  
  21.   if (!laravelSessionCookie) {
  22.     console.warn("No Laravel session cookie found. Cannot fetch user sessions.")
  23.     return { webSessions: null, personalAccessTokens: null }
  24.   }
  25.  
  26.   let webSessions: WebSessionType[] | null = null
  27.   let personalAccessTokens: PersonalAccessTokenType[] | null = null
  28.  
  29.   // Fetch and convert web sessions to camelCase
  30.   /* try {
  31.     const webSessionsRes = await fetchBackend(
  32.       "/api/user/web-sessions", "GET",
  33.       {}, undefined, xsrfToken
  34.     )
  35.  
  36.     if (!webSessionsRes || !webSessionsRes.ok) {
  37.       const errorBody = await webSessionsRes?.text()
  38.       console.error(`Failed to fetch web sessions: ${webSessionsRes?.status} ${webSessionsRes?.statusText}`)
  39.       console.error("Error response body:", errorBody)
  40.     } else {
  41.       const rawWebSessionsData: any[] = await webSessionsRes.json()
  42.  
  43.       webSessions = rawWebSessionsData.map(rawSession => ({
  44.         _id: rawSession._id,
  45.         payload: rawSession.payload,
  46.         lastActivity: new Date(rawSession.last_activity * 1000),
  47.         userId: rawSession.user_id,
  48.         ipAddress: rawSession.ip_address,
  49.         userAgent: rawSession.user_agent,
  50.         expiresAt: rawSession.expires_at ? new Date(rawSession.expires_at) : null,
  51.       }))
  52.     }
  53.   } catch (error) {
  54.     console.error("Error fetching web sessions:", error)
  55.   }
  56.  */
  57.   // Fetch and convert pats to camelCase
  58.   try {
  59.     const patRes = await fetchBackend(
  60.       "/api/user/personal-access-tokens", "GET",
  61.       {}, undefined, xsrfToken
  62.     )
  63.  
  64.     if (!patRes || !patRes.ok) {
  65.       const errorBody = await patRes?.text()
  66.       console.error(`Failed to fetch personal access tokens: ${patRes?.status} ${patRes?.statusText}`)
  67.       console.error("Error response body:", errorBody)
  68.     } else {
  69.       const rawPatData: any[] = await patRes.json()
  70.  
  71.       personalAccessTokens = rawPatData.map(rawToken => ({
  72.         _id: rawToken._id.$oid,
  73.         name: rawToken.name,
  74.         abilities: JSON.parse(rawToken.abilities) as string[],
  75.         expiresAt: rawToken.expires_at ? new Date(rawToken.expires_at) : null,
  76.         updatedAt: new Date(rawToken.updated_at),
  77.         createdAt: new Date(rawToken.created_at),
  78.         lastUsedAt: rawToken.last_used_at ? new Date(rawToken.last_used_at) : null,
  79.         tokenableId: rawToken.tokenable_id.$oid,
  80.         tokenableType: rawToken.tokenable_type
  81.       }))
  82.     }
  83.   } catch (error) {
  84.     console.error("Error fetching personal access tokens:", error)
  85.   }
  86.  
  87.   return { webSessions, personalAccessTokens }
  88. }
Advertisement
Add Comment
Please, Sign In to add comment