page.tsx48 lines · main
1import { Suspense } from 'react';
2
3import { fetchAuthCoreInfo } from '../../lib/auth-api';
4import { loadAuthV2Workspace } from '../../lib/load-workspace';
5import { AuthProvidersClient } from '../../providers/providers-client';
6
7export const metadata = { title: 'Auth · providers' };
8export const dynamic = 'force-dynamic';
9
10export default async function AuthProjectProvidersPage({
11 params,
12}: {
13 params: Promise<{ projectId: string }>;
14}) {
15 const { projectId } = await params;
16 const [projects, info] = await Promise.all([
17 loadAuthV2Workspace(),
18 fetchAuthCoreInfo(),
19 ]);
20 const project = projects.find((p) => p.id === projectId);
21 const list = project ? [project] : [];
22
23 return (
24 <section>
25 <header className="mb-6">
26 <h2 className="font-mono text-lg tracking-tight text-[var(--color-text)]">
27 providers
28 </h2>
29 <p className="mt-1 font-mono text-sm text-[var(--color-text-muted)]">
30 methods, SMS (Twilio), and OAuth — this project only
31 </p>
32 </header>
33 <Suspense
34 fallback={
35 <p className="font-mono text-xs text-[var(--color-text-muted)]">
36 loading…
37 </p>
38 }
39 >
40 <AuthProvidersClient
41 projects={list.length ? list : projects}
42 platformMethods={info?.loginMethods ?? []}
43 lockProjectId={projectId}
44 />
45 </Suspense>
46 </section>
47 );
48}