Files
developer-roadmap/src/lib/jwt.ts
T
Arik ChakmaandKamran Ahmed 85202507e6 feat: course ai roadmap (#8352)
* feat: course ai roadmap

* wip

* fix: error

* refactor: remove open ai key

* wip: view switch

* feat: add roadmap progress

* fix: simplify module

* wip

* Update outline generation

* Update course limits popup

* fix: module done

* Updates to AI usage

* UI and error handling

* Map and outline view to share header

* Outline switcher

* Responsive AI generation

* Update header for course

* Roadmap switch

---------

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2025-03-25 22:21:39 +00:00

112 lines
2.5 KiB
TypeScript

import * as jose from 'jose';
import Cookies from 'js-cookie';
import type { AllowedOnboardingStatus } from '../api/user';
export const TOKEN_COOKIE_NAME = '__roadmapsh_jt__';
export const FIRST_LOGIN_PARAM = 'fl' as const;
export const COURSE_PURCHASE_PARAM = 't';
export const COURSE_PURCHASE_SUCCESS_PARAM = 'success';
export type TokenPayload = {
id: string;
email: string;
name: string;
avatar: string;
onboardingStatus?: AllowedOnboardingStatus;
};
export function decodeToken(token: string): TokenPayload {
const claims = jose.decodeJwt(token);
return claims as TokenPayload;
}
export function isLoggedIn() {
const token = Cookies.get(TOKEN_COOKIE_NAME);
return !!token;
}
export function getUser() {
const token = Cookies.get(TOKEN_COOKIE_NAME);
if (!token) {
return null;
}
return decodeToken(token);
}
export function setAuthToken(token: string) {
Cookies.set(TOKEN_COOKIE_NAME, token, {
path: '/',
expires: 30,
sameSite: 'lax',
secure: true,
domain: import.meta.env.DEV ? 'localhost' : '.roadmap.sh',
});
removeAIReferralCode();
}
export function removeAuthToken() {
Cookies.remove(TOKEN_COOKIE_NAME, {
path: '/',
domain: import.meta.env.DEV ? 'localhost' : '.roadmap.sh',
});
}
export function visitAIRoadmap(roadmapId: string) {
const isAlreadyVisited = Number(Cookies.get(`crv-${roadmapId}`) || 0) === 1;
if (isAlreadyVisited) {
return;
}
Cookies.set(`crv-${roadmapId}`, '1', {
path: '/',
expires: 1 / 24, // 1 hour
sameSite: 'lax',
secure: !import.meta.env.DEV,
domain: import.meta.env.DEV ? 'localhost' : '.roadmap.sh',
});
}
const AI_REFERRAL_COOKIE_NAME = 'referral_code';
export function setAIReferralCode(code: string) {
const alreadyExist = Cookies.get(AI_REFERRAL_COOKIE_NAME);
if (alreadyExist) {
return;
}
Cookies.set(AI_REFERRAL_COOKIE_NAME, code, {
path: '/',
expires: 365,
sameSite: 'lax',
secure: true,
domain: import.meta.env.DEV ? 'localhost' : '.roadmap.sh',
});
}
export function removeAIReferralCode() {
Cookies.remove(AI_REFERRAL_COOKIE_NAME, {
path: '/',
domain: import.meta.env.DEV ? 'localhost' : '.roadmap.sh',
});
}
export function setViewSponsorCookie(sponsorId: string) {
const key = `vsc-${sponsorId}`;
const alreadyExist = Cookies.get(key);
if (alreadyExist) {
return;
}
Cookies.set(key, '1', {
path: '/',
expires: 1,
sameSite: 'lax',
secure: true,
domain: import.meta.env.DEV ? 'localhost' : '.roadmap.sh',
});
}