mirror of
https://github.com/supermemoryai/supermemory.git
synced 2026-05-19 07:42:43 +00:00
150 lines
4.1 KiB
TypeScript
150 lines
4.1 KiB
TypeScript
"use client";
|
|
|
|
import { authClient } from "@lib/auth";
|
|
import { useRouter } from "next/navigation";
|
|
import { useEffect } from "react";
|
|
|
|
export const AnonymousAuth = ({
|
|
dashboardPath = "/dashboard",
|
|
loginPath = "/login",
|
|
}) => {
|
|
const router = useRouter();
|
|
|
|
useEffect(() => {
|
|
const createAnonymousSession = async () => {
|
|
const session = await authClient.getSession();
|
|
|
|
if (!session?.session) {
|
|
console.debug(
|
|
"[ANONYMOUS_AUTH] No session found, creating anonymous session...",
|
|
);
|
|
|
|
try {
|
|
// Create anonymous session
|
|
console.debug("[ANONYMOUS_AUTH] Calling signIn.anonymous()...");
|
|
const res = await authClient.signIn.anonymous();
|
|
|
|
if (!res.token) {
|
|
throw new Error("Failed to get anonymous token");
|
|
}
|
|
|
|
// Get the new session
|
|
console.debug(
|
|
"[ANONYMOUS_AUTH] Getting new session with anonymous token...",
|
|
);
|
|
const newSession = await authClient.getSession();
|
|
|
|
console.debug("[ANONYMOUS_AUTH] New session retrieved:", newSession);
|
|
|
|
if (!newSession?.session || !newSession?.user) {
|
|
console.error(
|
|
"[ANONYMOUS_AUTH] Failed to create anonymous session - missing session or user",
|
|
);
|
|
throw new Error("Failed to create anonymous session");
|
|
}
|
|
|
|
// Get the user's organization
|
|
console.debug(
|
|
"[ANONYMOUS_AUTH] Fetching organizations for anonymous user...",
|
|
);
|
|
const orgs = await authClient.organization.list();
|
|
|
|
console.debug("[ANONYMOUS_AUTH] Organizations retrieved:", {
|
|
count: orgs?.length || 0,
|
|
orgs: orgs?.map((o) => ({
|
|
id: o.id,
|
|
name: o.name,
|
|
slug: o.slug,
|
|
})),
|
|
});
|
|
|
|
const org = orgs?.[0];
|
|
if (!org) {
|
|
console.error(
|
|
"[ANONYMOUS_AUTH] No organization found for anonymous user",
|
|
);
|
|
throw new Error("Failed to get organization for anonymous user");
|
|
}
|
|
|
|
// Redirect to the organization dashboard
|
|
console.debug(
|
|
`[ANONYMOUS_AUTH] Redirecting anonymous user to /${org.slug}${dashboardPath}`,
|
|
);
|
|
router.push(dashboardPath);
|
|
} catch (error) {
|
|
console.error(
|
|
"[ANONYMOUS_AUTH] Anonymous session creation error:",
|
|
error,
|
|
);
|
|
console.error("[ANONYMOUS_AUTH] Error details:", {
|
|
message: error instanceof Error ? error.message : "Unknown error",
|
|
stack: error instanceof Error ? error.stack : undefined,
|
|
});
|
|
router.push(loginPath);
|
|
}
|
|
} else if (session.session) {
|
|
// Session exists, handle organization routing
|
|
console.debug(
|
|
"[ANONYMOUS_AUTH] Session exists, checking organization...",
|
|
);
|
|
|
|
if (!session.session.activeOrganizationId) {
|
|
console.debug(
|
|
"[ANONYMOUS_AUTH] No active organization ID, fetching organizations...",
|
|
);
|
|
const orgs = await authClient.organization.list();
|
|
|
|
console.debug("[ANONYMOUS_AUTH] Organizations for existing user:", {
|
|
count: orgs?.length || 0,
|
|
orgs: orgs?.map((o) => ({
|
|
id: o.id,
|
|
name: o.name,
|
|
slug: o.slug,
|
|
})),
|
|
});
|
|
|
|
if (orgs?.[0]) {
|
|
console.debug(
|
|
`[ANONYMOUS_AUTH] Setting active organization to ${orgs[0].id}`,
|
|
);
|
|
await authClient.organization.setActive({
|
|
organizationId: orgs[0].id,
|
|
});
|
|
console.debug(
|
|
`[ANONYMOUS_AUTH] Redirecting to /${orgs[0].slug}${dashboardPath}`,
|
|
);
|
|
router.push(dashboardPath);
|
|
}
|
|
} else {
|
|
console.debug(
|
|
`[ANONYMOUS_AUTH] Active organization ID: ${session.session.activeOrganizationId}`,
|
|
);
|
|
console.debug(
|
|
"[ANONYMOUS_AUTH] Fetching full organization details...",
|
|
);
|
|
const org = await authClient.organization.getFullOrganization({
|
|
query: {
|
|
organizationId: session.session.activeOrganizationId,
|
|
},
|
|
});
|
|
|
|
console.debug("[ANONYMOUS_AUTH] Full organization retrieved:", {
|
|
id: org.id,
|
|
name: org.name,
|
|
slug: org.slug,
|
|
});
|
|
|
|
console.debug(
|
|
`[ANONYMOUS_AUTH] Redirecting to /${org.slug}${dashboardPath}`,
|
|
);
|
|
router.push(dashboardPath);
|
|
}
|
|
}
|
|
};
|
|
|
|
createAnonymousSession();
|
|
}, [router.push]);
|
|
|
|
// Return null as this component only handles the redirect logic
|
|
return null;
|
|
};
|