feat: migrate auth from supabase to better auth (#596)

* feat: add README for @cio/db package and remove existingAccounts.json

* load session, load profile and organization, add create profile hook

* chore: cache session request

The trick was passing all the cookies to the backend. Previously I was only passing the better-auth.session_token and not better-auth.session_data. Read about the difference here https://www.better-auth.com/docs/concepts/cookies#custom-cookies

* feat: login, logout, onboarding, verify email, reset password.

* feat: complete change email and email verification

* feat: standardise how we make rpc calls and create org endpoints

* fix ui errors

* fix: handle potential undefined customerId and standardize avatar URL property

* refactor: standardize custom domain handling and update telegram chat ID references

* chore: add tailwind prefix to @cio/ui

this fixed the media query issues because  @cio/ui classes were overriding this dashboard tailwind build

* chore: clean up org sidebar

* chore: persist mode state

* feat: implement order breadcrumbs

* chore: upgrade to better auth 1.4

* chore: address common auth flow bugs and setup app for others to setup locally.
This commit is contained in:
Rotimi Best
2025-11-24 01:00:50 +01:00
committed by GitHub
parent 24741644d6
commit a3924100dd
567 changed files with 22364 additions and 13437 deletions
@@ -5,16 +5,7 @@ export const SIGNUP_FIELDS = {
confirmPassword: ''
};
export const RESET_FIELDS = {
password: '',
confirmPassword: ''
};
export const LOGIN_FIELDS = {
email: '',
password: ''
};
export const FORGOT_PASSWORD_FIELDS = {
email: ''
};
@@ -1,8 +1,4 @@
export const ROLE = {
ADMIN: 1,
TUTOR: 2,
STUDENT: 3
};
import { ROLE } from '@cio/utils/constants';
export const ROLE_LABEL = {
[ROLE.ADMIN]: 'course.navItem.people.roles.admin',
@@ -15,11 +15,12 @@ export const ROUTE = {
DISCUSSIONS: '/discussions',
ASK: '/ask',
FORGOT: '/forgot',
RESET: '/reset'
RESET: '/reset',
LOGOUT: '/logout'
};
export const PUBLIC_ROUTES = [
`^${ROUTE.HOME}$`,
// `^${ROUTE.HOME}$`,
ROUTE.LOGIN,
ROUTE.SIGN_UP,
`^${ROUTE.INVITE_TEACHER}/.*`,
@@ -30,6 +31,15 @@ export const PUBLIC_ROUTES = [
'/404'
];
export const PUBLIC_API_ROUTES = [
'/api/completion',
'student_prove_payment',
'teacher_student_buycourse',
'/api/polar',
'/api/lmz',
'/api/verify'
];
export const ROUTES_TO_HIDE_NAV = [
`^${ROUTE.LOGIN}$`,
`^${ROUTE.SIGN_UP}$`,
@@ -1,16 +1,16 @@
import { LOCALE } from '../types';
import type { TLocale } from '@cio/db/types';
export const LANGUAGE = {
[LOCALE.DE]: 'German',
[LOCALE.EN]: 'English',
[LOCALE.ES]: 'Spanish',
[LOCALE.FR]: 'French',
[LOCALE.HI]: 'Hindi',
[LOCALE.PL]: 'Polish',
[LOCALE.PT]: 'Portuguese',
[LOCALE.RU]: 'Russian',
[LOCALE.VI]: 'Vietnamese',
[LOCALE.DA]: 'Danish'
export const LANGUAGE: Record<TLocale, string> = {
da: 'Danish',
de: 'German',
en: 'English',
es: 'Spanish',
fr: 'French',
hi: 'Hindi',
pl: 'Polish',
pt: 'Portuguese',
ru: 'Russian',
vi: 'Vietnamese'
};
export const LANGUAGES = Object.keys(LANGUAGE).map((lang) => ({