import type { OAuthProviderIconSpec } from '../../../types/auth'; export const DEFAULT_OAUTH_PROVIDER_ICONS = { apple: { provider: 'FontAwesome', name: 'apple' }, azure: { provider: 'FontAwesome5', name: 'microsoft', variant: 'brand' }, bitbucket: { provider: 'FontAwesome', name: 'bitbucket' }, discord: { provider: 'FontAwesome5', name: 'discord', variant: 'brand' }, facebook: { provider: 'FontAwesome', name: 'facebook' }, figma: { provider: 'FontAwesome5', name: 'figma', variant: 'brand' }, github: { provider: 'FontAwesome', name: 'github' }, gitlab: { provider: 'FontAwesome5', name: 'gitlab', variant: 'brand' }, google: { provider: 'FontAwesome', name: 'google' }, linkedin: { provider: 'FontAwesome', name: 'linkedin' }, microsoft: { provider: 'FontAwesome5', name: 'microsoft', variant: 'brand' }, slack: { provider: 'FontAwesome5', name: 'slack', variant: 'brand' }, spotify: { provider: 'FontAwesome', name: 'spotify' }, twitch: { provider: 'FontAwesome5', name: 'twitch', variant: 'brand' }, twitter: { provider: 'FontAwesome', name: 'twitter' }, x: { provider: 'FontAwesome6', name: 'x-twitter', variant: 'brand' }, zoom: { provider: 'FontAwesome5', name: 'video', variant: 'solid' }, } as const satisfies Record; const DEFAULT_OAUTH_PROVIDER_LABELS = { apple: 'Apple', azure: 'Microsoft', bitbucket: 'Bitbucket', discord: 'Discord', facebook: 'Facebook', figma: 'Figma', github: 'GitHub', gitlab: 'GitLab', google: 'Google', kakao: 'Kakao', keycloak: 'Keycloak', linkedin: 'LinkedIn', microsoft: 'Microsoft', notion: 'Notion', slack: 'Slack', spotify: 'Spotify', twitch: 'Twitch', twitter: 'Twitter', workos: 'WorkOS', x: 'X', zoom: 'Zoom', } as const satisfies Record; const oauthProviderIcons = new Map( Object.entries(DEFAULT_OAUTH_PROVIDER_ICONS), ); const oauthProviderLabels = new Map(Object.entries(DEFAULT_OAUTH_PROVIDER_LABELS)); export function resolveOAuthProviderIcon(providerId: string): OAuthProviderIconSpec | undefined { return oauthProviderIcons.get(normalizeOAuthProviderId(providerId)); } export function resolveOAuthProviderLabel(providerId: string): string { const normalizedProviderId = normalizeOAuthProviderId(providerId); const knownLabel = oauthProviderLabels.get(normalizedProviderId); return knownLabel ?? titleCaseProviderId(normalizedProviderId); } function normalizeOAuthProviderId(providerId: string): string { return providerId.trim().toLowerCase(); } function titleCaseProviderId(providerId: string): string { const words = providerId .split(/[-_\s]+/u) .map((word) => word.trim()) .filter((word) => word.length > 0); if (words.length === 0) { return 'Provider'; } return words.map((word) => `${word.charAt(0).toUpperCase()}${word.slice(1)}`).join(' '); }