diff --git a/packages/auth/src/plugins.ts b/packages/auth/src/plugins.ts index a8ef6203..5f2627b0 100644 --- a/packages/auth/src/plugins.ts +++ b/packages/auth/src/plugins.ts @@ -7,8 +7,8 @@ import * as memberRepo from "@kan/db/repository/member.repo"; import * as subscriptionRepo from "@kan/db/repository/subscription.repo"; import * as userRepo from "@kan/db/repository/user.repo"; import * as workspaceRepo from "@kan/db/repository/workspace.repo"; -import { generateUID } from "@kan/shared/utils"; import { sendEmail } from "@kan/email"; +import { generateUID } from "@kan/shared/utils"; import { createStripeClient } from "@kan/stripe"; import { socialProvidersPlugin } from "./providers"; @@ -139,10 +139,11 @@ export function createPlugins(db: dbClient) { let newSlug = workspace.publicId; if (workspace.slug !== workspace.publicId) { - const isPublicIdAvailable = await workspaceRepo.isWorkspaceSlugAvailable( - db, - workspace.publicId, - ); + const isPublicIdAvailable = + await workspaceRepo.isWorkspaceSlugAvailable( + db, + workspace.publicId, + ); if (!isPublicIdAvailable) { newSlug = generateUID(); } @@ -172,69 +173,77 @@ export function createPlugins(db: dbClient) { magicLink({ expiresIn: 60 * 60 * 24 * 7, // 7 days sendMagicLink: async ({ email, url }) => { - const decodedUrl = decodeURIComponent(url); - console.log("Sending magic link to:", email, "URL:", url); - console.log( - "Magic link contains invite:", - decodedUrl.includes("type=invite"), - ); - if (decodedUrl.includes("type=invite")) { - let inviterName = ""; - let workspaceName = ""; + try { + const decodedUrl = decodeURIComponent(url); + console.log("Sending magic link to:", email, "URL:", url); + console.log( + "Magic link contains invite:", + decodedUrl.includes("type=invite"), + ); + if (decodedUrl.includes("type=invite")) { + let inviterName = ""; + let workspaceName = ""; - try { - const urlObj = new URL(url); - const callbackUrl = urlObj.searchParams.get("callbackURL"); - if (callbackUrl) { - const callbackParams = new URL( - callbackUrl, - process.env.NEXT_PUBLIC_BASE_URL, - ).searchParams; - const memberPublicId = callbackParams.get("memberPublicId"); + try { + const urlObj = new URL(url); + const callbackUrl = urlObj.searchParams.get("callbackURL"); + if (callbackUrl) { + const callbackParams = new URL( + callbackUrl, + process.env.NEXT_PUBLIC_BASE_URL, + ).searchParams; + const memberPublicId = callbackParams.get("memberPublicId"); - if (memberPublicId) { - const member = await memberRepo.getByPublicId( - db, - memberPublicId, - ); - if (member) { - const [workspace, inviter] = await Promise.all([ - workspaceRepo.getById(db, member.workspaceId), - userRepo.getById(db, member.createdBy), - ]); + if (memberPublicId) { + const member = await memberRepo.getByPublicId( + db, + memberPublicId, + ); + if (member) { + const [workspace, inviter] = await Promise.all([ + workspaceRepo.getById(db, member.workspaceId), + userRepo.getById(db, member.createdBy), + ]); - if (workspace) workspaceName = workspace.name; - if (inviter) inviterName = inviter.name ?? ""; + if (workspace) workspaceName = workspace.name; + if (inviter) inviterName = inviter.name ?? ""; + } } } + } catch (error) { + console.error("Failed to fetch invite details:", error); } - } catch (error) { - console.error("Failed to fetch invite details:", error); - } - await sendEmail( + await sendEmail( + email, + workspaceName + ? `Invitation to join the workspace ${workspaceName}` + : "Invitation to join workspace", + "JOIN_WORKSPACE", + { + magicLoginUrl: url, + inviterName, + workspaceName, + }, + ); + } else { + await sendEmail( + email, + process.env.NEXT_PUBLIC_WHITE_LABEL_HIDE_POWERED_BY === "true" + ? "Sign in to your account" + : "Sign in to Kan", + "MAGIC_LINK", + { + magicLoginUrl: url, + }, + ); + } + } catch (error) { + console.error("Error sending magic link:", { email, - workspaceName - ? `Invitation to join the workspace ${workspaceName}` - : "Invitation to join workspace", - "JOIN_WORKSPACE", - { - magicLoginUrl: url, - inviterName, - workspaceName, - }, - ); - } else { - await sendEmail( - email, - process.env.NEXT_PUBLIC_WHITE_LABEL_HIDE_POWERED_BY === "true" - ? "Sign in to your account" - : "Sign in to Kan", - "MAGIC_LINK", - { - magicLoginUrl: url, - }, - ); + url, + error, + }); } }, }),