From 671425f800364b2c5943622c0773e09eab1b2c65 Mon Sep 17 00:00:00 2001 From: Limerio <44976231+Limerio@users.noreply.github.com> Date: Tue, 21 Jan 2025 19:53:23 +0100 Subject: [PATCH 1/2] chore: remove better-auth --- apps/api/package.json | 4 -- apps/api/src/lib/auth.ts | 84 ---------------------------- apps/api/src/routes/auth.ts | 5 +- bun.lockb | Bin 438912 -> 379360 bytes packages/common/package.json | 1 - packages/components/package.json | 1 - packages/components/src/lib/auth.ts | 24 -------- 7 files changed, 1 insertion(+), 118 deletions(-) delete mode 100644 apps/api/src/lib/auth.ts delete mode 100644 packages/components/src/lib/auth.ts diff --git a/apps/api/package.json b/apps/api/package.json index 71b6714..89413b0 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -6,19 +6,15 @@ "dev:db": "bun -b kysely", "dev": "bun run --watch src/index.ts", "dev:email": "email dev", - "dev:auth:generate": "bunx -b @better-auth/cli generate", - "dev:auth:migrate": "bunx -b @better-auth/cli migrate", "lint": "eslint src/** && tsc", "lint:fix": "eslint src/** --fix && tsc" }, "dependencies": { - "@better-auth/cli": "^0.8.7-beta.3", "@faker-js/faker": "^9.0.3", "@grpc/grpc-js": "^1.12.2", "@grpc/proto-loader": "^0.7.13", "@hono/zod-validator": "^0.4.1", "@react-email/components": "0.0.25", - "better-auth": "^1.1.10", "dotenv": "^16.4.5", "hono": "^4.6.3", "kysely": "^0.27.4", diff --git a/apps/api/src/lib/auth.ts b/apps/api/src/lib/auth.ts deleted file mode 100644 index 01bb5fa..0000000 --- a/apps/api/src/lib/auth.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { apiConfig } from "@alittlebyte/api/config" -import { dialect } from "@alittlebyte/api/database" -import { sendEmail } from "@alittlebyte/api/grpc/emails/emailClient" -import { - firstNameValidator, - lastNameValidator, -} from "@alittlebyte/common/validators" -import { forgotPasswordTemplate } from "@alittlebyte/components/templates/ForgotPasswordTemplate" -import { verifyEmailTemplate } from "@alittlebyte/components/templates/VerifyEmailTemplate" -import { betterAuth } from "better-auth" -import { twoFactor } from "better-auth/plugins" - -const { - trustedOrigins, - totp: { issuer }, -} = apiConfig.services.auth - -export const auth = betterAuth({ - onAPIError: { - throw: true, - }, - trustedOrigins, - emailVerification: { - sendVerificationEmail: async ({ user, url }) => { - await sendEmail( - user.email, - "Verify your email address", - await verifyEmailTemplate(url), - ) - }, - }, - emailAndPassword: { - enabled: true, - sendResetPassword: async ({ url, user }) => { - await sendEmail( - user.email, - "Reset Your Password", - await forgotPasswordTemplate(url), - ) - }, - requireEmailVerification: true, - }, - user: { - modelName: "users", - additionalFields: { - firstName: { - type: "string", - required: true, - validator: { - input: firstNameValidator, - output: firstNameValidator, - }, - }, - lastName: { - type: "string", - required: true, - validator: { - input: lastNameValidator, - output: lastNameValidator, - }, - }, - }, - }, - account: { - modelName: "accounts", - }, - session: { - modelName: "sessions", - }, - database: { - dialect, - type: "postgres", - generateId: () => crypto.randomUUID(), - }, - plugins: [ - twoFactor({ - issuer, - }), - ], -}) - -export type Session = typeof auth.$Infer.Session.session - -export type User = typeof auth.$Infer.Session.user diff --git a/apps/api/src/routes/auth.ts b/apps/api/src/routes/auth.ts index 22219f5..9d5c6c5 100644 --- a/apps/api/src/routes/auth.ts +++ b/apps/api/src/routes/auth.ts @@ -1,6 +1,3 @@ -import { auth } from "@alittlebyte/api/lib/auth" import { Hono } from "hono" -export const authRouter = new Hono().on(["POST", "GET"], "/**", (c) => - auth.handler(c.req.raw), -) +export const authRouter = new Hono() diff --git a/bun.lockb b/bun.lockb index 6284eb67029f351e28997d13234acda3580ce51b..744ffe4556dcb9c515331b6c5881a4c9abeec7ef 100755 GIT binary patch delta 76860 zcmeFad0bW1{{O$vIUG6L8Ar$wO$8Jcr-Pygal|oaF|$HA%0UL1OezH{O;bzV=|as+ z%K{9|%+$=%(!!~-vamAKG65sQwA8YGuh(AdpxsZO`?>e?xsUJfANRw>YrUUq9`;)6 z>;v1}b9a1WG+x#*WKZu;o3H5m$@IHMtom%o%xR5JA7AwP7bzpUJ<_eRu^yRJYt$jT z#%rT(c}(-1HNs|E@`sYLSfjtGv zgmv(PItF$P=yDkKpdG4fS|ey?Mv`YL3ak#h73`LX)C~F);@tr~54$PUh4id&0cyp3 zETMss=ITEyl?X9^3HVbTn+OdZMplo3cC|i`6;m(Ldx?f;4 zguN2o$A-*>HirJ}BY8d&vm$3cMbVs(9({jMSuAZmm5g2FV zJQzOHGcB71Z->pE_%=snSOR4Wjw$tIgicRNovKZ1E)%{B&J0RnGsCUQ&OqsG(bV+V zICqAomBVJd&Mjp{9)U7^lZx-{0RuL9PO>|Fy1R>}c?+H&D0^gDY({1pYMSoO%3!4j zVTQ2_eOt@19}DFeXQ}vc38^zY@v-UCGTgJ=DVZ59?vxcMfO4!cgz@p7^qH|K*~zh) zaS0h&ap|!c?i|h5R(8cqPkL-7nvnb;O2u^ooIR46;7(x$4lDao8=0ZmJ%~3UNKVc{ zP!47NV42RLbPbdhy$EH`&5X@V2%X{1ejvdUmw@@Fc{1Fy-N+~c8L+?+?Pb>_dr~|z zV>2?kfa~D44l<({D91Qh@k-b%_&X>II29`6zXIh@EbJ(C4(yt+13Jk`S{qse<>y8r z0t>cwmKltOGU5M}(V{R}5i_G(@+m_PvBDoic{k`?MmQS=?#A5F)~Ncl z?kz{)N!aY+_h2`Ij_4yh7I$=J_Dr|72b>-4T~3lx<6|=tG;JQzVdU=4jZ4ay&6dB} zP-e6p$^zFzdAqjkD_7WhP&VLkaDS*bT_$YaB-f&31#iK+=r6}L2^$4V z84R1%!R>+paA(A)CTC@Ok}?(yknv_iSxQgDqjrX}HVvRyS8~sy6sAu}oteq}Vy8|` zchAx^-@!88Z-ZnjGTh0t-07I=-kI#3AbPZ%a2HiXOnBy_4H_aVFa^!wL>V(oHZuZB zduF;PBRMfcYXh78To;O{xxWpSs*jMjXmV`&40pVyod<7#@^e2iJzDPDN?(Suzg8<< z2<2k&fYND7$15G6w5!tAP~Lj=mHI$AAqT07PadObST=G4#$rR`t=0o0O9P)X-GgG27~s%$#PF`rYc(Z9$C>}!Ff;rjM_8b zC#J}Xx4T!)jhRqZpz*!ve|D7>fEhk=pPVGwN-rQGE0_bV0gZ#QC!(R))N(s0yD60U ze2oH`Pq8ZaRi&$-Og9J0ij9qv=@WU>VV8POIa_?>B+Hbyoc0kW3UA(~Sc_SJJ7a2= zCn;Xb!CJ(Md7y0JSfzcGwo~e-^!I79Vx>^jA@@_I`*M`$WuS?9DGGt4=x3zbJx&wJvN4$9V)GTz0mW+6~rfS}d-#`YedA`yl_pB7g z_$W&zd{1c}!s{a5npu)hON!0R#0`zz69ntT19Gk`RPnwvEHxVkdcv}a4biX|1R zYp!90)ofvzWsI)bIA_d5ayq-9Y?61O%u4r!Vqwu{W~F4urN+Cnk#ik{&wz3o-wS14 zW1uW!kW&A-vW9h_Tq1iZ-U-Ut+y=@nX(DxK?o*hJY}x`S6U4jSGjYJw{8Yqgo|O2| zteM)eT$#Z;N@s>9rN-f$0`(+&GPQS%uv#s03LcTw!?7~XlM!KBbRCt;p zU?VbM#Jgd$Sv(}gCS_>t!C7EERlw!P

{iiM+WwFO?OHTqY~D7Fq}KUw=~a>8Ueu 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%0DV5bfLDD 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 diff --git a/packages/common/package.json b/packages/common/package.json index 8e3b9e2..6b0eb73 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -19,7 +19,6 @@ "typescript": "^5.5.3" }, "dependencies": { - "better-auth": "^1.1.10", "hono": "^4.6.3", "i18next": "^23.15.1", "i18next-browser-languagedetector": "^8.0.0", diff --git a/packages/components/package.json b/packages/components/package.json index c7aaa93..afc95ca 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -24,7 +24,6 @@ "@radix-ui/react-tooltip": "^1.1.2", "@react-email/components": "0.0.28", "@react-email/render": "1.0.2", - "better-auth": "^1.1.10", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", "embla-carousel-react": "^8.3.0", diff --git a/packages/components/src/lib/auth.ts b/packages/components/src/lib/auth.ts deleted file mode 100644 index 4f084f3..0000000 --- a/packages/components/src/lib/auth.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { auth } from "@alittlebyte/api/lib/auth" -import { - inferAdditionalFields, - twoFactorClient, -} from "better-auth/client/plugins" -import { createAuthClient } from "better-auth/react" - -export const authClient = ({ - baseURL, -}: { - baseURL: string - twoFactorPage: string -}) => - createAuthClient({ - baseURL, - plugins: [inferAdditionalFields(), twoFactorClient({})], - fetchOptions: { - onError(e) { - if (e.error.status === 429) { - throw new Error("") - } - }, - }, - }) From 588a548f6dcbf7b247f72e672e747543e980896a Mon Sep 17 00:00:00 2001 From: Limerio <44976231+Limerio@users.noreply.github.com> Date: Mon, 3 Feb 2025 10:46:41 +0100 Subject: [PATCH 2/2] chore: rewrite auth --- apps/api/package.json | 2 + apps/api/src/config.ts | 2 + .../database/migrations/1737488390410_auth.ts | 21 ++++ apps/api/src/database/repositories/user.ts | 26 ++++- apps/api/src/database/types.ts | 17 +--- apps/api/src/index.ts | 9 +- apps/api/src/middlewares/auth.ts | 19 ---- apps/api/src/routes/auth.ts | 90 +++++++++++++++++- apps/api/src/utils/constants.ts | 7 ++ apps/api/src/utils/hashPassword.ts | 15 +++ apps/api/src/utils/types.ts | 8 +- apps/landing/src/config.ts | 2 + apps/landing/src/hooks/useAuthClient.ts | 23 ----- .../src/routes/forgot-password.lazy.tsx | 13 +-- .../src/routes/reset-password.lazy.tsx | 17 +--- apps/landing/src/routes/sign-in.lazy.tsx | 14 +-- apps/landing/src/routes/sign-up.lazy.tsx | 24 ++--- bun.lockb | Bin 379360 -> 389640 bytes 18 files changed, 198 insertions(+), 111 deletions(-) create mode 100644 apps/api/src/database/migrations/1737488390410_auth.ts delete mode 100644 apps/api/src/middlewares/auth.ts create mode 100644 apps/api/src/utils/constants.ts create mode 100644 apps/api/src/utils/hashPassword.ts delete mode 100644 apps/landing/src/hooks/useAuthClient.ts diff --git a/apps/api/package.json b/apps/api/package.json index 89413b0..5b4e350 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -15,6 +15,8 @@ "@grpc/proto-loader": "^0.7.13", "@hono/zod-validator": "^0.4.1", "@react-email/components": "0.0.25", + "@types/bcrypt": "^5.0.2", + "bcrypt": "^5.1.1", "dotenv": "^16.4.5", "hono": "^4.6.3", "kysely": "^0.27.4", diff --git a/apps/api/src/config.ts b/apps/api/src/config.ts index 3e8d5ed..7153f8a 100644 --- a/apps/api/src/config.ts +++ b/apps/api/src/config.ts @@ -9,6 +9,7 @@ const apiConfigSchema = z.object({ }), services: z.object({ auth: z.object({ + jwtSecret: z.string(), totp: z.object({ issuer: z.string(), }), @@ -39,6 +40,7 @@ const data = { }, services: { auth: { + jwtSecret: "its-a-secret", totp: { issuer: "a-little-byte", }, diff --git a/apps/api/src/database/migrations/1737488390410_auth.ts b/apps/api/src/database/migrations/1737488390410_auth.ts new file mode 100644 index 0000000..a4669a9 --- /dev/null +++ b/apps/api/src/database/migrations/1737488390410_auth.ts @@ -0,0 +1,21 @@ +import { Database } from "@alittlebyte/api/database/types" +import { baseTable } from "@alittlebyte/api/database/utils/baseTable" +import { notNullColumn } from "@alittlebyte/api/database/utils/notNullColumn" +import type { Kysely } from "kysely" + +export const up = async (db: Kysely): Promise => { + await db.schema + .createTable("users") + .$call(baseTable) + .$call(notNullColumn("firstName")) + .$call(notNullColumn("lastName")) + .addColumn("email", "text", (col) => col.notNull().unique()) + .$call(notNullColumn("passwordHash")) + .$call(notNullColumn("passwordSalt")) + .addColumn("emailVerifiedAt", "timestamptz") + .execute() +} + +export const down = async (db: Kysely): Promise => { + await db.schema.dropTable("users").execute() +} diff --git a/apps/api/src/database/repositories/user.ts b/apps/api/src/database/repositories/user.ts index d0cdb83..fceb353 100644 --- a/apps/api/src/database/repositories/user.ts +++ b/apps/api/src/database/repositories/user.ts @@ -2,7 +2,7 @@ import { db } from "@alittlebyte/api/database" import { NewUser, User, UserUpdate } from "@alittlebyte/api/database/types" import { UUID } from "node:crypto" -const findAll = async (criteria: Partial) => { +const findAll = (criteria: Partial) => { let query = db.selectFrom("users") if (criteria.id) { @@ -21,7 +21,28 @@ const findAll = async (criteria: Partial) => { query = query.where("createdAt", "=", criteria.createdAt) } - return await query.selectAll().execute() + return query.selectAll().execute() +} +const findOne = (criteria: Partial) => { + let query = db.selectFrom("users") + + if (criteria.id) { + query = query.where("id", "=", criteria.id) + } + + if (criteria.firstName) { + query = query.where("firstName", "=", criteria.firstName) + } + + if (criteria.lastName) { + query = query.where("lastName", "=", criteria.lastName) + } + + if (criteria.createdAt) { + query = query.where("createdAt", "=", criteria.createdAt) + } + + return query.selectAll().executeTakeFirst() } const findById = (id: UUID) => db.selectFrom("users").where("id", "=", id).selectAll().executeTakeFirst() @@ -47,4 +68,5 @@ export const usersRepository = { update, updateReturn, delete: deleteUser, + findOne, } as const diff --git a/apps/api/src/database/types.ts b/apps/api/src/database/types.ts index da3ce7d..33d50e0 100644 --- a/apps/api/src/database/types.ts +++ b/apps/api/src/database/types.ts @@ -9,20 +9,10 @@ import type { UUID } from "node:crypto" export type Database = { accounts: AccountTable - "accounts.user": UserTable creditCards: CreditCardTable - "creditCards.user": UserTable services: ServiceTable translations: TranslationTable - sessions: SessionTable - twoFactors: TwoFactorTable - "twoFactors.user": UserTable users: UserTable - "users.accounts": AccountTable - "users.creditCards": CreditCardTable - "users.sessions": SessionTable - "users.twoFactors": TwoFactorTable - verifications: VerificationTable } export type ServiceTable = { @@ -74,14 +64,11 @@ export type CreditCardUpdate = Updateable export type UserTable = { id: Generated - name: string firstName: string lastName: string email: string - emailVerified: boolean - image?: string - twoFactorEnabled?: boolean - creditCards: CreditCard[] + passwordHash: string + passwordSalt: string createdAt: ColumnType updatedAt: ColumnType } diff --git a/apps/api/src/index.ts b/apps/api/src/index.ts index 13fb11a..ab2a219 100644 --- a/apps/api/src/index.ts +++ b/apps/api/src/index.ts @@ -1,5 +1,4 @@ import { apiConfig } from "@alittlebyte/api/config" -import { authMiddleware } from "@alittlebyte/api/middlewares/auth" import { corsMiddleware } from "@alittlebyte/api/middlewares/cors" import { dbMiddleware } from "@alittlebyte/api/middlewares/db" import { authRouter } from "@alittlebyte/api/routes/auth" @@ -10,6 +9,7 @@ import { usersRouter } from "@alittlebyte/api/routes/users" import type { PublicContextVariables } from "@alittlebyte/api/utils/types" import { HTTP_STATUS_CODES } from "@alittlebyte/common/constants" import { Hono } from "hono" +import { jwt } from "hono/jwt" const { port } = apiConfig.server const app = new Hono<{ Variables: PublicContextVariables }>() @@ -26,7 +26,12 @@ const router = app .route("/auth", authRouter) .route("/services", servicesRouter) .route("/example", backofficeExample) - .use(authMiddleware) + .use( + jwt({ + secret: apiConfig.services.auth.jwtSecret, + alg: "RS512", + }), + ) .route("/users", usersRouter) .route("/checkout", checkoutRouter) diff --git a/apps/api/src/middlewares/auth.ts b/apps/api/src/middlewares/auth.ts deleted file mode 100644 index fdbcc79..0000000 --- a/apps/api/src/middlewares/auth.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { auth } from "@alittlebyte/api/lib/auth" -import type { PrivateContextVariables } from "@alittlebyte/api/utils/types" -import type { Context, Next } from "hono" - -export const authMiddleware = async ( - c: Context<{ Variables: PrivateContextVariables }>, - next: Next, -) => { - const session = await auth.api.getSession({ headers: c.req.raw.headers }) - - if (!session) { - return c.json({ error: "Unauthorized" }, 403) - } - - c.set("user", session.user) - c.set("session", session.session) - - return next() -} diff --git a/apps/api/src/routes/auth.ts b/apps/api/src/routes/auth.ts index 9d5c6c5..b16c1f3 100644 --- a/apps/api/src/routes/auth.ts +++ b/apps/api/src/routes/auth.ts @@ -1,3 +1,91 @@ +import { apiConfig } from "@alittlebyte/api/config" +import { + hashPassword, + validatePassword, +} from "@alittlebyte/api/utils/hashPassword" +import { PrivateContextVariables } from "@alittlebyte/api/utils/types" +import { + emailValidator, + firstNameValidator, + lastNameValidator, + passwordValidator, +} from "@alittlebyte/common/validators" +import { zValidator } from "@hono/zod-validator" import { Hono } from "hono" +import { sign } from "hono/jwt" +import { UUID } from "node:crypto" +import { z } from "zod" -export const authRouter = new Hono() +const createToken = (id: UUID, email: string) => + sign({ id, email }, apiConfig.services.auth.jwtSecret) + +export const authRouter = new Hono<{ Variables: PrivateContextVariables }>() + .post( + "/sign-in", + zValidator( + "json", + z.object({ + email: emailValidator, + password: passwordValidator, + }), + ), + async ({ req, var: { repositories }, json }) => { + const { email, password } = req.valid("json") + const user = await repositories.users.findOne({ email }) + + if (!user) { + return json({}, 404) + } + + const matches = await validatePassword(password, user.passwordHash) + + if (!matches) { + throw new Error("Invalid credentials") + } + + const token = await createToken(user.id, user.email) + + return json({ token }, 201) + }, + ) + .post( + "/sign-up", + zValidator( + "json", + z.object({ + email: emailValidator, + password: passwordValidator, + firstName: firstNameValidator, + lastName: lastNameValidator, + }), + ), + async ({ req, var: { repositories }, json }) => { + const { password, email, ...body } = req.valid("json") + + try { + const usersExists = await repositories.users.findOne({ email }) + + if (usersExists) { + throw new Error("An error occurred during signup") + } + + const hashedPassword = await hashPassword(password) + const user = await repositories.users.create({ + email, + ...body, + ...hashedPassword, + }) + + return json(user, 201) + } catch (error) { + return json( + { + message: error, + }, + 401, + ) + } + }, + ) + .post("/forgot-password") + .post("/reset-password") diff --git a/apps/api/src/utils/constants.ts b/apps/api/src/utils/constants.ts new file mode 100644 index 0000000..aaace22 --- /dev/null +++ b/apps/api/src/utils/constants.ts @@ -0,0 +1,7 @@ +export const AUTH_CONSTANTS = { + SALT_ROUNDS: 12, + TOKEN_EXPIRY: "30 days", + MIN_PASSWORD_LENGTH: 8, + MAX_USERNAME_LENGTH: 30, + DEFAULT_SKIN_NAME: "default", +} as const diff --git a/apps/api/src/utils/hashPassword.ts b/apps/api/src/utils/hashPassword.ts new file mode 100644 index 0000000..ecd241c --- /dev/null +++ b/apps/api/src/utils/hashPassword.ts @@ -0,0 +1,15 @@ +import bcrypt from "bcrypt" + +export const hashPassword = async (password: string) => { + const salt = await bcrypt.genSalt(12) + + return { + passwordSalt: salt, + passwordHash: await bcrypt.hash(password, salt), + } +} + +export const validatePassword = ( + plainPassword: string, + hashedPassword: string, +): Promise => bcrypt.compare(plainPassword, hashedPassword) diff --git a/apps/api/src/utils/types.ts b/apps/api/src/utils/types.ts index 78ce387..7cd50e6 100644 --- a/apps/api/src/utils/types.ts +++ b/apps/api/src/utils/types.ts @@ -1,6 +1,6 @@ import { repositories } from "@alittlebyte/api/database" import { Database } from "@alittlebyte/api/database/types" -import type { Session, User } from "@alittlebyte/api/lib/auth" +import { UUID } from "crypto" import { Kysely } from "kysely" export interface PublicContextVariables { @@ -9,6 +9,8 @@ export interface PublicContextVariables { } export type PrivateContextVariables = PublicContextVariables & { - user: User - session: Session + user: { + id: UUID + email: string + } } diff --git a/apps/landing/src/config.ts b/apps/landing/src/config.ts index 3f6a55b..bd6389f 100644 --- a/apps/landing/src/config.ts +++ b/apps/landing/src/config.ts @@ -6,6 +6,7 @@ const landingConfigSchema = z.object({ auth: z.object({ baseURL: urlValidator, twoFactorPage: z.string(), + sessionKey: z.string(), }), }), }) @@ -14,6 +15,7 @@ const data = { auth: { baseURL: import.meta.env.VITE_SERVICES_AUTH_BASEURL, twoFactorPage: "", + sessionKey: "SESSION_KEY", }, }, } satisfies z.input diff --git a/apps/landing/src/hooks/useAuthClient.ts b/apps/landing/src/hooks/useAuthClient.ts deleted file mode 100644 index c44ad25..0000000 --- a/apps/landing/src/hooks/useAuthClient.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { authClient } from "@alittlebyte/components/lib/auth" -import { landingConfig } from "@alittlebyte/landing/config" - -const { - useSession, - sendVerificationEmail, - signIn, - signOut, - signUp, - forgetPassword, - resetPassword, -} = authClient(landingConfig.services.auth) - -export const useAuthClient = () => ({ - signIn, - signOut, - signUp, - forgetPassword, - sendVerificationEmail, - resetPassword, -}) - -export { useSession } diff --git a/apps/landing/src/routes/forgot-password.lazy.tsx b/apps/landing/src/routes/forgot-password.lazy.tsx index ddfdb90..eb209ca 100644 --- a/apps/landing/src/routes/forgot-password.lazy.tsx +++ b/apps/landing/src/routes/forgot-password.lazy.tsx @@ -3,13 +3,11 @@ import { ForgotPasswordValidatorOutput, } from "@alittlebyte/components/forms/ForgotPasswordForm" import { useToast } from "@alittlebyte/components/hooks/use-toast" -import { useAuthClient } from "@alittlebyte/landing/hooks/useAuthClient" import { useMutation } from "@tanstack/react-query" import { createLazyFileRoute, useNavigate } from "@tanstack/react-router" import { SubmitHandler } from "react-hook-form" const ForgotPassword = () => { - const { forgetPassword } = useAuthClient() const { toast } = useToast() const navigate = useNavigate() const { mutateAsync } = useMutation< @@ -17,15 +15,8 @@ const ForgotPassword = () => { Error, ForgotPasswordValidatorOutput >({ - mutationFn: async ({ email }) => { - const res = await forgetPassword({ - email, - redirectTo: `${window.location.origin}/reset-password`, - }) - - if (res.error) { - throw new Error(res.error.message) - } + mutationFn: async () => { + // }, onSuccess: async () => { toast({ diff --git a/apps/landing/src/routes/reset-password.lazy.tsx b/apps/landing/src/routes/reset-password.lazy.tsx index a792316..509f9e9 100644 --- a/apps/landing/src/routes/reset-password.lazy.tsx +++ b/apps/landing/src/routes/reset-password.lazy.tsx @@ -6,10 +6,8 @@ import { useToast } from "@alittlebyte/components/hooks/use-toast" import { useMutation } from "@tanstack/react-query" import { createLazyFileRoute, useNavigate } from "@tanstack/react-router" import { SubmitHandler } from "react-hook-form" -import { useAuthClient } from "../hooks/useAuthClient" const ResetPassword = () => { - const { resetPassword } = useAuthClient() const navigate = useNavigate() const queryParams = new URLSearchParams(window.location.search) const token = queryParams.get("token") @@ -20,19 +18,8 @@ const ResetPassword = () => { } const { mutate } = useMutation({ - mutationFn: async ({ password }) => { - const res = await resetPassword({ - newPassword: password, - fetchOptions: { - query: { - token, - }, - }, - }) - - if (res.error) { - throw new Error(res.error.message) - } + mutationFn: async () => { + // }, onSuccess: async () => { toast({ diff --git a/apps/landing/src/routes/sign-in.lazy.tsx b/apps/landing/src/routes/sign-in.lazy.tsx index 17358bc..d810f5c 100644 --- a/apps/landing/src/routes/sign-in.lazy.tsx +++ b/apps/landing/src/routes/sign-in.lazy.tsx @@ -1,8 +1,9 @@ +import { apiClient } from "@alittlebyte/common/lib/apiClient" import { SignInForm, SignInValidatorOutput, } from "@alittlebyte/components/forms/SignInForm" -import { useAuthClient } from "@alittlebyte/landing/hooks/useAuthClient" +import { landingConfig } from "@alittlebyte/landing/config" import { useMutation } from "@tanstack/react-query" import { createLazyFileRoute, useNavigate } from "@tanstack/react-router" import { useState } from "react" @@ -11,15 +12,16 @@ import { SubmitHandler } from "react-hook-form" const SignIn = () => { const [invalidEmailOrPassword, setInvalidEmailOrPassword] = useState(false) const navigate = useNavigate() - const { signIn } = useAuthClient() const { mutate } = useMutation({ mutationFn: async (data) => { setInvalidEmailOrPassword(false) - const res = await signIn.email(data) - if (res.error) { - throw new Error(res.error.message) - } + const res = await apiClient.auth["sign-in"].$post({ + json: data, + }) + const { token } = await res.json() + + localStorage.setItem(landingConfig.services.auth.sessionKey, token) }, onSuccess: () => { void navigate({ diff --git a/apps/landing/src/routes/sign-up.lazy.tsx b/apps/landing/src/routes/sign-up.lazy.tsx index 6d5ded1..d079fa3 100644 --- a/apps/landing/src/routes/sign-up.lazy.tsx +++ b/apps/landing/src/routes/sign-up.lazy.tsx @@ -1,35 +1,31 @@ -import { FULL_NAME_SEPARATOR } from "@alittlebyte/common/constants" +import { apiClient } from "@alittlebyte/common/lib/apiClient" import { SignUpForm, SignUpValidatorOutput, } from "@alittlebyte/components/forms/SignUpForm" import { toast } from "@alittlebyte/components/hooks/use-toast" -import { useAuthClient } from "@alittlebyte/landing/hooks/useAuthClient" import { useMutation } from "@tanstack/react-query" import { createLazyFileRoute, useNavigate } from "@tanstack/react-router" import { SubmitHandler } from "react-hook-form" const SignUp = () => { const navigate = useNavigate() - const { signUp, sendVerificationEmail } = useAuthClient() const { mutateAsync } = useMutation({ mutationFn: (data) => - signUp.email({ - name: `${data.firstName}${FULL_NAME_SEPARATOR}${data.lastName}`, - firstName: data.firstName, - lastName: data.lastName, - email: data.email, - password: data.password, + apiClient.auth["sign-up"].$post({ + json: { + firstName: data.firstName, + lastName: data.lastName, + email: data.email, + password: data.password, + }, }), - onSuccess: async (_data, { email }) => { + onSuccess: async () => { toast({ title: "Please check your email", description: "An email has been sent in order to verify your email", }) - await sendVerificationEmail({ - email, - callbackURL: `${window.location.origin}/sign-in`, - }) + await navigate({ to: "/" }) }, }) diff --git a/bun.lockb b/bun.lockb index 744ffe4556dcb9c515331b6c5881a4c9abeec7ef..bf45add32a34408f6f4306512b5321ddf78cea18 100755 GIT binary patch delta 19999 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 OxAfBD8z+=Tvi}0G?h@Ys delta 14041 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