@heymarco/next-auth
Version:
A complete authentication solution for web applications.
146 lines (145 loc) • 4.3 kB
TypeScript
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'>;
}