@katalysttech/auth
Version:
A flexible authentication module for NestJS applications with JWT and refresh token support
63 lines (62 loc) • 2.29 kB
TypeScript
import { Type } from '@nestjs/common';
import { DataSource } from 'typeorm';
import { IRefreshToken } from './refresh-token.interface';
export interface JwtConfig {
secret: string;
expiresIn: string | number;
}
export interface RefreshTokenConfig {
secret: string;
expiresIn: string | number;
storage: {
type: 'typeorm' | 'redis';
entity?: Type<IRefreshToken>;
dataSource?: DataSource;
redis?: {
host: string;
port: number;
password?: string;
db?: number;
};
};
options?: {
maxActiveSessions?: number;
singleSession?: boolean;
deviceTracking?: boolean;
cleanupInterval?: number;
revokeOnLogin?: boolean;
};
maxActiveSessions?: number;
}
export interface SessionConfig {
enabled: boolean;
maxAge?: number;
}
export interface UserFields {
passwordField: string;
tokenFields: string[];
usernameField?: string;
idField?: string;
uuidField?: string;
}
export interface PasswordResetPayload {
[key: string]: string;
}
export interface AuthOptions {
jwt: JwtConfig;
refreshToken: RefreshTokenConfig;
session?: SessionConfig;
userFields: UserFields;
findUserByUsername: (username: string) => Promise<any | null>;
findUserById: (id: string | number) => Promise<any | null>;
storeRefreshToken?: (userId: string | number, tokenId: string, expiresAt: Date) => Promise<void>;
validateRefreshToken?: (userId: string | number, tokenId: string) => Promise<boolean>;
revokeRefreshToken?: (userId: string | number, tokenId: string) => Promise<void>;
updateUserPassword?: (userId: string | number, hashedPassword: string) => Promise<any | void>;
storeResetToken?: (userId: string | number, resetToken: string, expiresAt: Date) => Promise<any | void>;
validateResetToken?: (userId: string | number, resetToken: string) => Promise<any>;
clearResetToken?: (userId: string | number) => Promise<any>;
findUserByResetToken?: (resetToken: string) => Promise<any | null>;
findUserByLinkedinIdAndEmail?: (linkedInId: string, email: string) => Promise<any | null>;
findUserByGoogleIdAndEmail?: (googleId: string, email: string) => Promise<any | null>;
}