UNPKG

@heymarco/next-auth

Version:

A complete authentication solution for web applications.

146 lines (145 loc) 4.3 kB
import type { Awaitable, DefaultSession, DefaultSession as AuthDefaultSession, Session } from '@auth/core/types'; import type { Adapter, AdapterSession, AdapterAccount } from '@auth/core/adapters'; import type { OAuthConfig } from '@auth/core/providers'; import type { DefaultJWT, DefaultJWT as NextAuthDefaultJWT, JWT } from 'next-auth/jwt'; export type { Awaitable, }; export type { DefaultSession, DefaultJWT, Session, JWT, Adapter, AdapterSession, AdapterAccount, }; declare module 'next-auth' { interface DefaultUser extends HeyMarcoDefaultUser { } interface DefaultSession extends AuthDefaultSession { credentials?: Credentials; role?: Role; } } declare module 'next-auth/jwt' { interface DefaultJWT { userId?: string | null; } } declare module '@auth/core/types' { type DefaultUser = HeyMarcoDefaultUser; interface DefaultSession { user?: User; credentials?: Credentials; role?: Role; } type DefaultJWT = NextAuthDefaultJWT; } export interface DefaultUser { id: string; name: string; email: string; image: string | null; } type HeyMarcoDefaultUser = DefaultUser; export interface User extends DefaultUser { } export interface AdapterUser extends User { emailVerified: Date | null; } export interface DefaultCredentials { username: string; } export interface Credentials extends DefaultCredentials { } export interface AdapterCredentials extends Credentials { } export interface DefaultRole { id: string; name: string; } export interface Role extends DefaultRole { } export interface AdapterRole extends Role { } export interface BusinessConfig { name: string; url: string; } export interface SignUpConfig { enabled: boolean; } export interface SignInConfig { requireVerifiedEmail: boolean; failureMaxAttempts: number | null; failureLockDuration: number; path: string; } export interface ResetConfig { enabled: boolean; throttle: number; maxAge: number; } export interface SessionConfig { maxAge: number; updateAge: number; } export interface EmailConfig { host: string; port: number; secure: boolean; username: string; password: string; from: string; subject: React.ReactNode; message: React.ReactNode; } export interface AuthConfigServer { business: BusinessConfig; signUp: SignUpConfig; signIn: SignInConfig; reset: ResetConfig; session: SessionConfig; oAuthProviders: OAuthConfig<any>[]; emails: { signUp: EmailConfig; reset: EmailConfig; }; } export interface AuthConfigShared { business: BusinessConfig; signUp: Pick<SignUpConfig, 'enabled'>; signIn: Pick<SignInConfig, 'path'>; reset: Pick<ResetConfig, 'enabled'>; } export interface AuthConfigClient extends AuthConfigShared { } export interface FieldLengthConfig { minLength: number; maxLength: number; } export interface FieldFormatConfig { format: RegExp; formatHint: React.ReactNode; } export interface FieldProhibitedConfig { prohibited: (string | RegExp)[]; prohibitedHint: React.ReactNode; } export interface FieldCaseConfig { hasUppercase: boolean; hasLowercase: boolean; } export type FieldNameConfig = FieldLengthConfig; export type FieldEmailConfig = FieldLengthConfig & FieldFormatConfig; export type FieldUsernameConfig = FieldLengthConfig & FieldFormatConfig & FieldProhibitedConfig; export type FieldPasswordConfig = FieldLengthConfig & FieldCaseConfig & FieldProhibitedConfig; export interface CredentialsConfigServer { name: FieldNameConfig; email: Omit<FieldEmailConfig, 'formatHint'>; username: Omit<FieldUsernameConfig, 'prohibitedHint' | 'formatHint'>; password: Omit<FieldPasswordConfig, 'prohibitedHint'>; } export interface CredentialsConfigClient { name: FieldNameConfig; email: FieldEmailConfig; username: Omit<FieldUsernameConfig, 'prohibited'>; password: Omit<FieldPasswordConfig, 'prohibited'>; } export interface CredentialsConfigShared { name: FieldNameConfig; email: Omit<FieldEmailConfig, 'formatHint'>; username: Omit<FieldUsernameConfig, 'prohibited' | 'prohibitedHint' | 'formatHint'>; password: Omit<FieldPasswordConfig, 'prohibited' | 'prohibitedHint'>; }