import { Identity, Success, Failure, ModelError, IdentityUser, RefreshToken } from './identity-lib'; import { AuthToken, AuthUser } from './models'; import { ChestnutUser } from '../chestnut-user-type'; import { PasswordTokenRequest, RefreshTokenRequest } from '../utils/auth-requests'; export declare type Result = Success | Failure; export interface AuthUserRepository { getRegisteredUser(email: string): Promise; updateUser(user: AuthUser): Promise; getUser(email: string): Promise; createUser(chestnutUser: ChestnutUser): Promise; } export interface AuthTokenRepository { addToken(authToken: AuthToken): Promise; getRefreshToken(token: string, clientId: string): Promise; removeRefreshToken(token: string): Promise; removeTokenByUser(userId: string, clientId: string): Promise; removeAccessToken(accessToken: string): Promise; } export interface VerifyUserFunction { (loginUser: PasswordTokenRequest, user: AuthUser): Result; } export interface ComputeHashFunction { (source: string, salt: string): string; } export interface PasswordService { createSalt: () => string; computeHash: ComputeHashFunction; } export declare class ChestnutIdentity extends Identity { private authUserRepository; private authTokenRepository; private verifyUser; private internalConfiguration; constructor(authUserRepository: AuthUserRepository, authTokenRepository: AuthTokenRepository, verifyUser: VerifyUserFunction, internalConfiguration: { issuer: string; secretKey: string; tokenExpiration: number; refreshTokenExpiration: number; maxFailedLoginAttempts: number; waitTimeToUnlockUser: number; }); validatePasswordTokenRequest(request: PasswordTokenRequest): Success | Failure; validateRefreshTokenRequest(request: RefreshTokenRequest): Success | Failure; loadUser(request: PasswordTokenRequest): Promise | Failure | Failure>; loadUserForRefreshToken(request: RefreshToken): Promise | Failure | Failure>; saveAccessToken(signedAccessToken: string, clientId: string, expires: Date, user: IdentityUser): Promise; loadRefreshToken(refreshToken: string, clientId: string): Promise; saveRefreshToken(token: string, clientId: string, expires: Date, user: IdentityUser): Promise; removeAccessToken(accessToken: string): Promise; removeRefreshToken(token: string): Promise; removeTokens(identity: IdentityUser, clientId: string): Promise; validateRefreshToken(refreshToken: RefreshToken): Success | Failure | Failure | Failure; } export declare function generateAccessToken(userRepository: any, configuration: any, username: any, callback: any): void; export declare function valid(token: RefreshToken): boolean;