File size: 891 Bytes
c09f67c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
import { type JWTPayload, jwtVerify } from "jose";
export type Session = {
user: {
id: string;
email?: string;
full_name?: string;
};
teamId?: string;
};
type SupabaseJWTPayload = JWTPayload & {
user_metadata?: {
email?: string;
full_name?: string;
[key: string]: string | undefined;
};
};
export async function verifyAccessToken(
accessToken?: string,
): Promise<Session | null> {
if (!accessToken) return null;
try {
const { payload } = await jwtVerify(
accessToken,
new TextEncoder().encode(process.env.SUPABASE_JWT_SECRET),
);
const supabasePayload = payload as SupabaseJWTPayload;
return {
user: {
id: supabasePayload.sub!,
email: supabasePayload.user_metadata?.email,
full_name: supabasePayload.user_metadata?.full_name,
},
};
} catch (_error) {
return null;
}
}
|