mirror of
https://github.com/better-auth/better-auth.git
synced 2026-05-22 14:21:55 -05:00
253 lines
6.0 KiB
TypeScript
253 lines
6.0 KiB
TypeScript
import { communityPlugins } from "@/lib/community-plugins-data";
|
|
import { source } from "@/lib/source";
|
|
|
|
export interface Plugin {
|
|
name: string;
|
|
slug: string;
|
|
description: string;
|
|
tagline: string;
|
|
category: string;
|
|
type: "official" | "community";
|
|
href: string;
|
|
author?: string;
|
|
icon: string;
|
|
}
|
|
|
|
const pluginMeta: Record<
|
|
string,
|
|
{ category: string; icon: string; tagline: string }
|
|
> = {
|
|
// Authentication
|
|
"2fa": {
|
|
category: "Authentication",
|
|
icon: "ScanFace",
|
|
tagline: "Two-factor authentication with TOTP and backup codes",
|
|
},
|
|
username: {
|
|
category: "Authentication",
|
|
icon: "UserSquare2",
|
|
tagline: "Classic username and password authentication",
|
|
},
|
|
anonymous: {
|
|
category: "Authentication",
|
|
icon: "UserCircle",
|
|
tagline: "Let users try your app without creating an account",
|
|
},
|
|
"phone-number": {
|
|
category: "Authentication",
|
|
icon: "Phone",
|
|
tagline: "Authenticate users with their phone number via SMS",
|
|
},
|
|
"magic-link": {
|
|
category: "Authentication",
|
|
icon: "Mailbox",
|
|
tagline: "Passwordless sign-in with email magic links",
|
|
},
|
|
"email-otp": {
|
|
category: "Authentication",
|
|
icon: "Mail",
|
|
tagline: "One-time passcode verification delivered via email",
|
|
},
|
|
passkey: {
|
|
category: "Authentication",
|
|
icon: "Fingerprint",
|
|
tagline: "Passwordless login with biometrics and hardware keys",
|
|
},
|
|
"generic-oauth": {
|
|
category: "Authentication",
|
|
icon: "Globe",
|
|
tagline: "Connect any OAuth 2.0 provider with minimal config",
|
|
},
|
|
"one-tap": {
|
|
category: "Authentication",
|
|
icon: "MousePointerClick",
|
|
tagline: "Google One Tap sign-in for frictionless login",
|
|
},
|
|
siwe: {
|
|
category: "Authentication",
|
|
icon: "Wallet",
|
|
tagline: "Sign in with Ethereum wallet for Web3 apps",
|
|
},
|
|
// Authorization
|
|
admin: {
|
|
category: "Authorization",
|
|
icon: "ShieldCheck",
|
|
tagline: "Admin dashboard APIs to manage users and sessions",
|
|
},
|
|
"api-key": {
|
|
category: "Authorization",
|
|
icon: "KeyRound",
|
|
tagline: "Issue and manage API keys for programmatic access",
|
|
},
|
|
mcp: {
|
|
category: "Authorization",
|
|
icon: "Cpu",
|
|
tagline: "Model Context Protocol server for AI agent auth",
|
|
},
|
|
organization: {
|
|
category: "Authorization",
|
|
icon: "Users2",
|
|
tagline: "Multi-tenant organizations with roles and invitations",
|
|
},
|
|
// Enterprise
|
|
"oidc-provider": {
|
|
category: "Enterprise",
|
|
icon: "Globe",
|
|
tagline: "OpenID Connect provider for federated identity",
|
|
},
|
|
"oauth-provider": {
|
|
category: "Enterprise",
|
|
icon: "Server",
|
|
tagline: "Turn your app into a full OAuth 2.0 provider",
|
|
},
|
|
sso: {
|
|
category: "Enterprise",
|
|
icon: "Building2",
|
|
tagline: "Enterprise SSO with SAML and OIDC providers",
|
|
},
|
|
scim: {
|
|
category: "Enterprise",
|
|
icon: "ArrowLeftRight",
|
|
tagline: "Automated user provisioning with SCIM 2.0",
|
|
},
|
|
// Utility
|
|
bearer: {
|
|
category: "Utility",
|
|
icon: "Key",
|
|
tagline: "Bearer token authentication for API access",
|
|
},
|
|
"device-authorization": {
|
|
category: "Utility",
|
|
icon: "Monitor",
|
|
tagline: "OAuth device flow for TVs and CLI tools",
|
|
},
|
|
captcha: {
|
|
category: "Utility",
|
|
icon: "ShieldAlert",
|
|
tagline: "Protect forms from bots with CAPTCHA verification",
|
|
},
|
|
"have-i-been-pwned": {
|
|
category: "Utility",
|
|
icon: "ShieldAlert",
|
|
tagline: "Check passwords against known data breaches",
|
|
},
|
|
"last-login-method": {
|
|
category: "Utility",
|
|
icon: "LogIn",
|
|
tagline: "Track and display the user's last login method",
|
|
},
|
|
"multi-session": {
|
|
category: "Utility",
|
|
icon: "Users",
|
|
tagline: "Support multiple active sessions per user",
|
|
},
|
|
"oauth-proxy": {
|
|
category: "Utility",
|
|
icon: "ArrowLeftRight",
|
|
tagline: "Proxy OAuth requests through your own server",
|
|
},
|
|
"one-time-token": {
|
|
category: "Utility",
|
|
icon: "Timer",
|
|
tagline: "Generate single-use tokens for secure actions",
|
|
},
|
|
"open-api": {
|
|
category: "Utility",
|
|
icon: "FileCode",
|
|
tagline: "Auto-generate OpenAPI spec from your auth endpoints",
|
|
},
|
|
jwt: {
|
|
category: "Utility",
|
|
icon: "FileKey",
|
|
tagline: "JWT session tokens for stateless authentication",
|
|
},
|
|
dub: {
|
|
category: "Utility",
|
|
icon: "Link2",
|
|
tagline: "Dub referral and link tracking integration",
|
|
},
|
|
// Payments
|
|
stripe: {
|
|
category: "Payments",
|
|
icon: "StripeIcon",
|
|
tagline: "Stripe subscriptions and payments tied to auth",
|
|
},
|
|
polar: {
|
|
category: "Payments",
|
|
icon: "PolarIcon",
|
|
tagline: "Polar payments and subscriptions integration",
|
|
},
|
|
autumn: {
|
|
category: "Payments",
|
|
icon: "AutumnIcon",
|
|
tagline: "Autumn billing and subscription management",
|
|
},
|
|
dodopayments: {
|
|
category: "Payments",
|
|
icon: "DodoPaymentsIcon",
|
|
tagline: "DodoPayments integration for global payments",
|
|
},
|
|
creem: {
|
|
category: "Payments",
|
|
icon: "CreemIcon",
|
|
tagline: "Creem payment processing for your app",
|
|
},
|
|
chargebee: {
|
|
category: "Payments",
|
|
icon: "ChargebeeIcon",
|
|
tagline: "Chargebee subscription and billing management",
|
|
},
|
|
};
|
|
|
|
export const categories = [
|
|
"Authentication",
|
|
"Authorization",
|
|
"Enterprise",
|
|
"Utility",
|
|
"Payments",
|
|
"Community",
|
|
] as const;
|
|
|
|
export function getOfficialPlugins(): Plugin[] {
|
|
const pages = source.getPages();
|
|
return pages
|
|
.filter(
|
|
(page) =>
|
|
page.slugs[0] === "plugins" &&
|
|
page.slugs.length === 2 &&
|
|
page.slugs[1] !== "community-plugins",
|
|
)
|
|
.map((page) => {
|
|
const slug = page.slugs[1];
|
|
const meta = pluginMeta[slug];
|
|
return {
|
|
name: page.data.title,
|
|
slug,
|
|
description: page.data.description ?? "",
|
|
tagline: meta?.tagline ?? page.data.description ?? "",
|
|
category: meta?.category ?? "Utility",
|
|
type: "official" as const,
|
|
href: `/docs/plugins/${slug}`,
|
|
icon: meta?.icon ?? "Puzzle",
|
|
};
|
|
});
|
|
}
|
|
|
|
export function getCommunityPlugins(): Plugin[] {
|
|
return communityPlugins.map((p) => ({
|
|
name: p.name,
|
|
slug: p.name.toLowerCase().replace(/[^a-z0-9]+/g, "-"),
|
|
description: p.description,
|
|
tagline: p.description,
|
|
category: "Community",
|
|
type: "community" as const,
|
|
href: p.url,
|
|
author: p.author.name,
|
|
icon: "Package",
|
|
}));
|
|
}
|
|
|
|
export function getAllPlugins(): Plugin[] {
|
|
return [...getOfficialPlugins(), ...getCommunityPlugins()];
|
|
}
|