diff --git a/packages/api/src/trpc.ts b/packages/api/src/trpc.ts index ca842ca6..22b45a96 100644 --- a/packages/api/src/trpc.ts +++ b/packages/api/src/trpc.ts @@ -7,7 +7,7 @@ import superjson from "superjson"; import { ZodError } from "zod"; import type { dbClient } from "@kan/db/client"; -// import { auth } from "@kan/auth"; +import { initAuth } from "@kan/auth"; import { createDrizzleClient } from "@kan/db/client"; export interface User { @@ -26,16 +26,6 @@ interface CreateContextOptions { db: dbClient; } -// dummy user for testing edge speed -const user = { - id: "2b97d1f4-82db-415c-8be8-b6b1c1c13cbf", - name: "John Doe", - email: "john.doe@example.com", - emailVerified: true, - createdAt: new Date(), - updatedAt: new Date(), -}; - export const createInnerTRPCContext = (opts: CreateContextOptions) => { return { user: opts.user, @@ -46,23 +36,25 @@ export const createInnerTRPCContext = (opts: CreateContextOptions) => { export const createTRPCContext = async ({ req, }: FetchCreateContextFnOptions) => { - // const session = await auth.api.getSession({ - // headers: req.headers, - // }); - const db = createDrizzleClient(); + const auth = initAuth(db); - return createInnerTRPCContext({ db, user }); + const session = await auth.api.getSession({ + headers: req.headers, + }); + + return createInnerTRPCContext({ db, user: session?.user }); }; export const createNextApiContext = async (req: NextRequest) => { - // const session = await auth.api.getSession({ - // headers: req.headers, - // }); - const db = createDrizzleClient(); + const auth = initAuth(db); - return createInnerTRPCContext({ db, user: user }); + const session = await auth.api.getSession({ + headers: req.headers, + }); + + return createInnerTRPCContext({ db, user: session?.user }); }; export const createRESTContext = async ({ req }: CreateNextContextOptions) => { @@ -72,17 +64,18 @@ export const createRESTContext = async ({ req }: CreateNextContextOptions) => { : null; const db = createDrizzleClient(); + const auth = initAuth(db); if (!accessToken) { return createInnerTRPCContext({ db, user: null }); } - // const session = await auth.api.getSession({ - // // @ts-expect-error - // headers: new Headers(req.headers), - // }); + const session = await auth.api.getSession({ + // @ts-expect-error + headers: new Headers(req.headers), + }); - return createInnerTRPCContext({ db, user }); + return createInnerTRPCContext({ db, user: session?.user }); }; const t = initTRPC diff --git a/packages/auth/src/auth.ts b/packages/auth/src/auth.ts index 93b33102..58364575 100644 --- a/packages/auth/src/auth.ts +++ b/packages/auth/src/auth.ts @@ -4,79 +4,80 @@ import { createAuthMiddleware } from "better-auth/api"; import { apiKey } from "better-auth/plugins"; import { magicLink } from "better-auth/plugins/magic-link"; -import { createDrizzleClient } from "@kan/db/client"; +import type { dbClient } from "@kan/db/client"; import * as userRepo from "@kan/db/repository/user.repo"; import * as schema from "@kan/db/schema"; import { sendEmail } from "@kan/email"; import { createStripeClient } from "@kan/stripe"; -const db = createDrizzleClient(); -export const auth = betterAuth({ - secret: process.env.BETTER_AUTH_SECRET!, - baseURL: process.env.BETTER_AUTH_BASE_URL!, - trustedOrigins: process.env.BETTER_AUTH_TRUSTED_ORIGINS - ? process.env.BETTER_AUTH_TRUSTED_ORIGINS.split(",") - : [], - database: drizzleAdapter(db, { - provider: "pg", - schema: { - ...schema, - user: schema.users, - }, - }), - socialProviders: { - google: { - clientId: process.env.GOOGLE_CLIENT_ID!, - clientSecret: process.env.GOOGLE_CLIENT_SECRET!, - }, - }, - user: { - additionalFields: { - stripeCustomerId: { - type: "string", - required: false, - defaultValue: null, - input: false, - }, - }, - }, - plugins: [ - apiKey(), - magicLink({ - sendMagicLink: async ({ email, url }) => { - await sendEmail(email, "Sign in to kan.bn", "MAGIC_LINK", { - magicLoginUrl: url, - }); +export const initAuth = (db: dbClient) => { + return betterAuth({ + secret: process.env.BETTER_AUTH_SECRET!, + baseURL: process.env.BETTER_AUTH_BASE_URL!, + trustedOrigins: process.env.BETTER_AUTH_TRUSTED_ORIGINS + ? process.env.BETTER_AUTH_TRUSTED_ORIGINS.split(",") + : [], + database: drizzleAdapter(db, { + provider: "pg", + schema: { + ...schema, + user: schema.users, }, }), - ], - hooks: { - // after: createAuthMiddleware(async (ctx) => { - // if (ctx.path.startsWith("/sign-up") || ctx.path.startsWith("/sign-in")) { - // const session = ctx.context.session; - // if ( - // session && - // process.env.NEXT_PUBLIC_KAN_ENV === "cloud" && - // !session.user.stripeCustomerId - // ) { - // const stripe = createStripeClient(); - // const stripeCustomer = await stripe.customers.create({ - // email: session.user.email, - // metadata: { - // userId: session.user.id, - // }, - // }); - // await userRepo.update(db, session.user.id, { - // stripeCustomerId: stripeCustomer.id, - // }); - // } - // } - // }), - }, - advanced: { - cookiePrefix: "kan", - database: { - generateId: false, + socialProviders: { + google: { + clientId: process.env.GOOGLE_CLIENT_ID!, + clientSecret: process.env.GOOGLE_CLIENT_SECRET!, + }, }, - }, -}); + user: { + additionalFields: { + stripeCustomerId: { + type: "string", + required: false, + defaultValue: null, + input: false, + }, + }, + }, + plugins: [ + apiKey(), + magicLink({ + sendMagicLink: async ({ email, url }) => { + await sendEmail(email, "Sign in to kan.bn", "MAGIC_LINK", { + magicLoginUrl: url, + }); + }, + }), + ], + hooks: { + // after: createAuthMiddleware(async (ctx) => { + // if (ctx.path.startsWith("/sign-up") || ctx.path.startsWith("/sign-in")) { + // const session = ctx.context.session; + // if ( + // session && + // process.env.NEXT_PUBLIC_KAN_ENV === "cloud" && + // !session.user.stripeCustomerId + // ) { + // const stripe = createStripeClient(); + // const stripeCustomer = await stripe.customers.create({ + // email: session.user.email, + // metadata: { + // userId: session.user.id, + // }, + // }); + // await userRepo.update(db, session.user.id, { + // stripeCustomerId: stripeCustomer.id, + // }); + // } + // } + // }), + }, + advanced: { + cookiePrefix: "kan", + database: { + generateId: false, + }, + }, + }); +}; diff --git a/packages/auth/src/index.ts b/packages/auth/src/index.ts index 0579b148..d1cb6aa5 100644 --- a/packages/auth/src/index.ts +++ b/packages/auth/src/index.ts @@ -1,6 +1,6 @@ -import { auth } from "./auth"; +import { initAuth } from "./auth"; import { authClient } from "./clients"; export const name = "auth"; -export { auth, authClient }; +export { initAuth, authClient };