import { AuthorizationCode } from './authorization-code.interface'; import { Client } from './client.interface'; import { RefreshToken } from './refresh-token.interface'; import { Token } from './token.interface'; import { User } from './user.interface'; export interface BaseModel { generateAccessToken?(client: Client, user: User, scope: string | string[]): Promise; getClient(clientId: string, clientSecret?: string): Promise; saveToken(token: Token, client: Client, user: User): Promise; } export interface RequestAuthenticationModel { getAccessToken(accessToken: string): Promise; verifyScope(token: Token, scope: string | string[]): Promise; } export interface AuthorizationCodeModel extends BaseModel, RequestAuthenticationModel { generateRefreshToken?(client: Client, user: User, scope: string | string[]): Promise; generateAuthorizationCode?(client: Client, user: User, scope: string | string[]): Promise; getAuthorizationCode(authorizationCode: string): Promise; saveAuthorizationCode(code: AuthorizationCode, client: Client, user: User): Promise; revokeAuthorizationCode(code: AuthorizationCode): Promise; validateScope?(user: User, client: Client, scope: string | string[]): Promise; } export interface PasswordModel extends BaseModel, RequestAuthenticationModel { generateRefreshToken?(client: Client, user: User, scope: string | string[]): Promise; getUser(username: string, password: string): Promise; validateScope?(user: User, client: Client, scope: string | string[]): Promise; } export interface RefreshTokenModel extends BaseModel, RequestAuthenticationModel { generateRefreshToken?(client: Client, user: User, scope: string | string[]): Promise; getRefreshToken(refreshToken: string): Promise; revokeToken(token: RefreshToken | Token): Promise; } export interface ClientCredentialsModel extends BaseModel, RequestAuthenticationModel { getUserFromClient(client: Client): Promise; validateScope?(user: User, client: Client, scope: string | string[]): Promise; } export interface ExtensionModel extends BaseModel, RequestAuthenticationModel { } export interface Model extends BaseModel, RequestAuthenticationModel, AuthorizationCodeModel, PasswordModel, RefreshTokenModel, ClientCredentialsModel { }