@frank-auth/react
Version:
Flexible and customizable React UI components for Frank Authentication
1 lines • 10.4 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sources":["../../../src/provider/index.tsx"],"sourcesContent":["/**\n * @frank-auth/react - Provider Index\n *\n * Main entry point for all authentication providers. Exports all provider\n * components, hooks, and types for easy importing.\n */\n\n\"use client\";\n\n// ============================================================================\n// Provider Components\n// ============================================================================\n\nimport type { Theme, ThemeMode } from \"@/theme/theme\";\n\nexport { AuthProvider, useAuth, useAuthGuard } from \"./auth-provider\";\nimport { HeroUIProvider } from \"@heroui/react\";\nimport React from \"react\";\nimport type { FrankAuthUIConfig } from \"../config\";\nimport { ThemeProvider as UIProvider } from \"../theme/provider\";\nimport { AuthProvider, useAuth } from \"./auth-provider\";\nimport { ConfigProvider, useConfig } from \"./config-provider\";\nimport { ThemeProvider, useTheme } from \"./theme-provider\";\nimport type {\n\tAuthProviderProps,\n\tConfigProviderProps,\n\tThemeProviderProps,\n} from \"./types\";\n\nexport {\n\tConfigProvider,\n\tuseConfig,\n\tuseFeatures,\n\tuseOrganizationConfig,\n\tuseComponentOverrides,\n\twithConfig,\n} from \"./config-provider\";\nexport {\n\tThemeProvider,\n\tuseTheme,\n\tuseThemeMode,\n\tuseOrganizationBranding,\n\tuseThemeVariables,\n\twithTheme,\n\tThemeSwitcher,\n} from \"./theme-provider\";\n\n// ============================================================================\n// Provider Types\n// ============================================================================\n\nexport type {\n\t// Auth types\n\tAuthState,\n\tAuthContextValue,\n\tAuthProviderProps,\n\tAuthError,\n\tAuthFeatures,\n\tOrganizationMembership,\n\tSignInParams,\n\tSignInResult,\n\tSignUpParams,\n\tSignUpResult,\n\tSetActiveParams,\n\tUpdateUserParams,\n\t// Config types\n\tConfigState,\n\tConfigContextValue,\n\tConfigProviderProps,\n\t// Theme types\n\tThemeState,\n\tThemeContextValue,\n\tThemeProviderProps,\n\tOrganizationBranding,\n\t// Session types\n\tSessionState,\n\tSessionContextMethods,\n\tSessionContextValue,\n\t// Organization types\n\tOrganizationState,\n\tOrganizationInvitation,\n\tOrganizationContextMethods,\n\tOrganizationContextValue,\n\tCreateOrganizationParams,\n\tUpdateOrganizationParams,\n\tInviteMemberParams,\n\t// Permission types\n\tPermissionState,\n\tPermissionContext,\n\tPermissionContextMethods,\n\tPermissionContextValue,\n\t// Common types\n\tAuthContextMethods,\n\tConfigContextMethods,\n\tThemeContextMethods,\n} from \"./types\";\n\n// ============================================================================\n// Combined Provider Component\n// ============================================================================\n\n/**\n * Combined provider props for convenience\n */\nexport interface FrankAuthProviderProps {\n\tchildren: React.ReactNode;\n\tconfig: Partial<FrankAuthUIConfig>;\n\tonError?: (error: any) => void;\n\tonSignIn?: (user: any) => void;\n\tonSignOut?: () => void;\n\tonConfigChange?: (config: FrankAuthUIConfig) => void;\n\tonThemeChange?: (theme: any) => void;\n\n\tdefaultMode?: ThemeMode;\n\tcustomTheme?: Partial<Theme>;\n\tenableSystemTheme?: boolean;\n\tenableLocalStorage?: boolean;\n\tstorageKey?: string;\n}\n\n/**\n * Combined Frank Auth provider that wraps all necessary providers\n *\n * @example\n * ```tsx\n * import { FrankAuthProvider } from '@frank-auth/react';\n *\n * function App() {\n * return (\n * <FrankAuthProvider config={{\n * publishableKey: 'pk_test_...',\n * userType: 'external',\n * theme: { mode: 'dark' }\n * }}>\n * <YourApp />\n * </FrankAuthProvider>\n * );\n * }\n * ```\n */\nexport function FrankAuthProvider({\n\tchildren,\n\tconfig,\n\tonError,\n\tonSignIn,\n\tonSignOut,\n\tonConfigChange,\n\tonThemeChange,\n\tcustomTheme,\n\tenableSystemTheme = true,\n\tenableLocalStorage,\n\tdefaultMode = \"light\",\n\tstorageKey,\n}: FrankAuthProviderProps) {\n\t// Validate required config\n\tif (!config.publishableKey) {\n\t\tthrow new Error(\"publishableKey is required in FrankAuthProvider config\");\n\t}\n\n\tif (!config.userType) {\n\t\tthrow new Error(\"userType is required in FrankAuthProvider config\");\n\t}\n\n\treturn (\n\t\t<HeroUIProvider>\n\t\t\t<ConfigProvider config={config} onConfigChange={onConfigChange}>\n\t\t\t\t<UIProvider\n\t\t\t\t\tcustomTheme={customTheme}\n\t\t\t\t\tenableSystem={enableSystemTheme}\n\t\t\t\t\tenableLocalStorage={enableLocalStorage}\n\t\t\t\t\tdefaultMode={defaultMode}\n\t\t\t\t\tstorageKey={storageKey}\n\t\t\t\t>\n\t\t\t\t\t<ThemeProvider\n\t\t\t\t\t\ttheme={config.theme}\n\t\t\t\t\t\tmode={config.theme?.mode}\n\t\t\t\t\t\torganizationBranding={\n\t\t\t\t\t\t\tconfig.organization?.settings?.branding\n\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\tprimaryColor:\n\t\t\t\t\t\t\t\t\t\t\tconfig.organization.settings.branding.primaryColor,\n\t\t\t\t\t\t\t\t\t\tsecondaryColor:\n\t\t\t\t\t\t\t\t\t\t\tconfig.organization.settings.branding.secondaryColor,\n\t\t\t\t\t\t\t\t\t\tlogo: config.organization.settings.branding.logo,\n\t\t\t\t\t\t\t\t\t\tcustomCSS: config.organization.settings.branding.customCSS,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonThemeChange={onThemeChange}\n\t\t\t\t\t>\n\t\t\t\t\t\t<AuthProvider\n\t\t\t\t\t\t\tpublishableKey={config.publishableKey}\n\t\t\t\t\t\t\tsecretKey={config.secretKey}\n\t\t\t\t\t\t\tuserType={config.userType}\n\t\t\t\t\t\t\tapiUrl={config.apiUrl}\n\t\t\t\t\t\t\tprojectId={config.projectId}\n\t\t\t\t\t\t\tonError={onError}\n\t\t\t\t\t\t\tonSignIn={onSignIn}\n\t\t\t\t\t\t\tonSignOut={onSignOut}\n\t\t\t\t\t\t\tdebug={config.debug}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</AuthProvider>\n\t\t\t\t\t</ThemeProvider>\n\t\t\t\t</UIProvider>\n\t\t\t</ConfigProvider>\n\t\t</HeroUIProvider>\n\t);\n}\n\n// ============================================================================\n// Provider Utility Functions\n// ============================================================================\n\n/**\n * Check if all required providers are available\n */\nexport function useProviderStatus() {\n\tconst [authAvailable, setAuthAvailable] = React.useState(false);\n\tconst [configAvailable, setConfigAvailable] = React.useState(false);\n\tconst [themeAvailable, setThemeAvailable] = React.useState(false);\n\n\tReact.useEffect(() => {\n\t\ttry {\n\t\t\tuseAuth();\n\t\t\tsetAuthAvailable(true);\n\t\t} catch {\n\t\t\tsetAuthAvailable(false);\n\t\t}\n\n\t\ttry {\n\t\t\tuseConfig();\n\t\t\tsetConfigAvailable(true);\n\t\t} catch {\n\t\t\tsetConfigAvailable(false);\n\t\t}\n\n\t\ttry {\n\t\t\tuseTheme();\n\t\t\tsetThemeAvailable(true);\n\t\t} catch {\n\t\t\tsetThemeAvailable(false);\n\t\t}\n\t}, []);\n\n\treturn {\n\t\tauth: authAvailable,\n\t\tconfig: configAvailable,\n\t\ttheme: themeAvailable,\n\t\tallAvailable: authAvailable && configAvailable && themeAvailable,\n\t};\n}\n\n/**\n * Higher-order component that ensures all providers are available\n */\nexport function withProviders<T extends object>(\n\tComponent: React.ComponentType<T>,\n) {\n\tconst WithProvidersComponent = (props: T) => {\n\t\tconst auth = useAuth();\n\t\tconst config = useConfig();\n\t\tconst theme = useTheme();\n\n\t\treturn <Component {...props} auth={auth} config={config} theme={theme} />;\n\t};\n\n\tWithProvidersComponent.displayName = `withProviders(${Component.displayName || Component.name})`;\n\n\treturn WithProvidersComponent;\n}\n\n/**\n * Hook that provides all provider contexts\n */\nexport function useAllProviders() {\n\tconst auth = useAuth();\n\tconst config = useConfig();\n\tconst theme = useTheme();\n\n\treturn {\n\t\tauth,\n\t\tconfig,\n\t\ttheme,\n\t};\n}\n\n// ============================================================================\n// Default Export\n// ============================================================================\n\nexport default FrankAuthProvider;\n"],"names":["FrankAuthProvider","children","config","onError","onSignIn","onSignOut","onConfigChange","onThemeChange","customTheme","enableSystemTheme","enableLocalStorage","defaultMode","storageKey","jsx","HeroUIProvider","ConfigProvider","UIProvider","ThemeProvider","AuthProvider","useProviderStatus","authAvailable","setAuthAvailable","React","configAvailable","setConfigAvailable","themeAvailable","setThemeAvailable","useAuth","useConfig","useTheme","withProviders","Component","WithProvidersComponent","props","auth","theme","useAllProviders"],"mappings":"sVA4IO,SAASA,EAAkB,CACjC,SAAAC,EACA,OAAAC,EACA,QAAAC,EACA,SAAAC,EACA,UAAAC,EACA,eAAAC,EACA,cAAAC,EACA,YAAAC,EACA,kBAAAC,EAAoB,GACpB,mBAAAC,EACA,YAAAC,EAAc,QACd,WAAAC,CACD,EAA2B,CAEtB,GAAA,CAACV,EAAO,eACL,MAAA,IAAI,MAAM,wDAAwD,EAGrE,GAAA,CAACA,EAAO,SACL,MAAA,IAAI,MAAM,kDAAkD,EAGnE,OACEW,EAAA,IAAAC,iBAAA,CACA,SAACD,EAAAA,IAAAE,EAAA,eAAA,CAAe,OAAAb,EAAgB,eAAAI,EAC/B,SAAAO,EAAA,IAACG,EAAA,cAAA,CACA,YAAAR,EACA,aAAcC,EACd,mBAAAC,EACA,YAAAC,EACA,WAAAC,EAEA,SAAAC,EAAA,IAACI,EAAA,cAAA,CACA,MAAOf,EAAO,MACd,KAAMA,EAAO,OAAO,KACpB,qBACCA,EAAO,cAAc,UAAU,SAC5B,CACA,aACCA,EAAO,aAAa,SAAS,SAAS,aACvC,eACCA,EAAO,aAAa,SAAS,SAAS,eACvC,KAAMA,EAAO,aAAa,SAAS,SAAS,KAC5C,UAAWA,EAAO,aAAa,SAAS,SAAS,SAAA,EAEjD,OAEJ,cAAAK,EAEA,SAAAM,EAAA,IAACK,EAAAA,aAAA,CACA,eAAgBhB,EAAO,eACvB,UAAWA,EAAO,UAClB,SAAUA,EAAO,SACjB,OAAQA,EAAO,OACf,UAAWA,EAAO,UAClB,QAAAC,EACA,SAAAC,EACA,UAAAC,EACA,MAAOH,EAAO,MAEb,SAAAD,CAAA,CAAA,CACF,CAAA,CACD,GAEF,CACD,CAAA,CAEF,CASO,SAASkB,GAAoB,CACnC,KAAM,CAACC,EAAeC,CAAgB,EAAIC,EAAAA,QAAM,SAAS,EAAK,EACxD,CAACC,EAAiBC,CAAkB,EAAIF,EAAAA,QAAM,SAAS,EAAK,EAC5D,CAACG,EAAgBC,CAAiB,EAAIJ,EAAAA,QAAM,SAAS,EAAK,EAEhEA,OAAAA,EAAA,QAAM,UAAU,IAAM,CACjB,GAAA,CACHK,UAAQ,EACRN,EAAiB,EAAI,CAAA,MACd,CACPA,EAAiB,EAAK,CAAA,CAGnB,GAAA,CACOO,YAAA,EACVJ,EAAmB,EAAI,CAAA,MAChB,CACPA,EAAmB,EAAK,CAAA,CAGrB,GAAA,CACMK,WAAA,EACTH,EAAkB,EAAI,CAAA,MACf,CACPA,EAAkB,EAAK,CAAA,CAEzB,EAAG,EAAE,EAEE,CACN,KAAMN,EACN,OAAQG,EACR,MAAOE,EACP,aAAcL,GAAiBG,GAAmBE,CACnD,CACD,CAKO,SAASK,EACfC,EACC,CACK,MAAAC,EAA0BC,GAAa,CAC5C,MAAMC,EAAOP,EAAAA,QAAQ,EACfzB,EAAS0B,EAAAA,UAAU,EACnBO,EAAQN,EAAAA,SAAS,EAEvB,aAAQE,EAAW,CAAA,GAAGE,EAAO,KAAAC,EAAY,OAAAhC,EAAgB,MAAAiC,EAAc,CACxE,EAEA,OAAAH,EAAuB,YAAc,iBAAiBD,EAAU,aAAeA,EAAU,IAAI,IAEtFC,CACR,CAKO,SAASI,GAAkB,CACjC,MAAMF,EAAOP,EAAAA,QAAQ,EACfzB,EAAS0B,EAAAA,UAAU,EACnBO,EAAQN,EAAAA,SAAS,EAEhB,MAAA,CACN,KAAAK,EACA,OAAAhC,EACA,MAAAiC,CACD,CACD"}