///
import { Request, Response, NextFunction } from 'express';
import { PasswordTokenRequest, RefreshTokenRequest } from '../utils/auth-requests';
export declare type Success = {
isSuccess: true;
value: T;
};
export declare type Failure = {
isSuccess: false;
type: string;
error: T;
};
export declare function success(value?: T): Success;
export declare function failure(type: string, error?: T): Failure;
export declare type ModelError = {
type: 'ModelError';
message: string;
translationKey?: string;
translationObject?: any;
fieldErrors?: FieldError[];
};
export declare type FieldError = {
field: string;
message: string;
translationKey: string;
translationObject?: any;
};
export declare type Token = {
jti: string;
iss: string;
sub: string;
exp: number;
iat: number;
name: string;
permissions: string;
};
export declare type IdentityUser = {
_id: string;
email: string;
permissions: string;
};
export declare type TokenRequest = PasswordTokenRequest | RefreshTokenRequest;
export declare type IdentityConfig = {
issuer: string;
secretKey: string;
tokenExpiration: number;
refreshTokenExpiration: number;
};
export declare type TokenData = {
token: Token;
signedToken: string;
refreshToken: string;
refreshTokenExpiration: Date;
identity: IdentityUser;
clientId: string;
};
export declare type RefreshToken = {
refreshToken: string;
expires: Date;
userId: string;
clientId: string;
};
export declare const ensureToken: (req: Request & {
token: string;
}, res: Response, next: NextFunction) => void;
export declare class Identity {
private configuration;
constructor(configuration: IdentityConfig);
grant(): (req: Request, res: Response, next: NextFunction) => Promise;
decodeToken(): (req: any, _: any, next: NextFunction) => void;
private renderResponse(_, res, next);
private grantRefreshToken();
private grantPassword();
private generateToken(identity, clientId);
private generateAccessToken(user);
private signToken(token);
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;
saveRefreshToken(refreshToken: string, clientId: string, expires: Date, user: IdentityUser): Promise;
loadRefreshToken(refreshToken: string, clientId: string): Promise;
removeTokens(identity: IdentityUser, clientId: string): Promise;
removeRefreshToken(token: string): Promise;
removeAccessToken(accessToken: string): Promise;
validateRefreshToken(refreshToken: RefreshToken): Success | Failure | Failure | Failure;
}