Interface for an auth service.

interface AuthServiceInterface {
    belongsTo: <TargetEntity extends Newable<BaseEntity>>(
        request: HttpRequest,
        allowedStrategies: AuthStrategies,
        targetEntity: TargetEntity,
        targetUserIdKey: keyof InstanceType<TargetEntity>,
        targetIdParamKey: string,
    ) => Promise<boolean>;
    checkAccess: (
        controllerClass: Newable<unknown>,
        controllerMethod: string,
        request: HttpRequest | WebsocketRequest,
    ) => Promise<void>;
    confirmPasswordReset: <
        Role extends string,
        UserType extends BaseUser<Role>,
        AuthDataType,
        CredentialsType,
        RequestPasswordResetDataType,
        ConfirmPasswordResetDataType,
        RefreshLoginDataType,
        LogoutDataType,
    >(
        strategy: Newable<
            AuthStrategyInterface<
                Role,
                UserType,
                AuthDataType,
                CredentialsType,
                RequestPasswordResetDataType,
                ConfirmPasswordResetDataType,
                RefreshLoginDataType,
                LogoutDataType,
            >,
        >,
        data: ConfirmPasswordResetDataType,
    ) => void | Promise<void>;
    getCurrentUser: <
        Role extends string,
        UserType extends BaseUser<Role>,
        B extends boolean = true,
    >(
        request: HttpRequest | WebsocketRequest,
        allowedStrategies: AuthStrategies,
        required: B,
    ) => Promise<B extends false ? undefined | UserType : UserType>;
    hasRole: (
        request: HttpRequest | WebsocketRequest,
        allowedStrategies: AuthStrategies,
        allowedRoles: string[],
    ) => Promise<boolean>;
    init: (strategies: AuthStrategies) => void | Promise<void>;
    isLoggedIn: (
        request: HttpRequest | WebsocketRequest,
        allowedStrategies: AuthStrategies,
    ) => Promise<boolean>;
    login: <
        Role extends string,
        UserType extends BaseUser<Role>,
        AuthDataType,
        CredentialsType,
        RequestPasswordResetDataType,
        ConfirmPasswordResetDataType,
        RefreshLoginDataType,
        LogoutDataType,
    >(
        strategy: Newable<
            AuthStrategyInterface<
                Role,
                UserType,
                AuthDataType,
                CredentialsType,
                RequestPasswordResetDataType,
                ConfirmPasswordResetDataType,
                RefreshLoginDataType,
                LogoutDataType,
            >,
        >,
        credentials: CredentialsType,
    ) => Promise<AuthDataType>;
    logout: <
        Role extends string,
        UserType extends BaseUser<Role>,
        AuthDataType,
        CredentialsType,
        RequestPasswordResetDataType,
        ConfirmPasswordResetDataType,
        RefreshLoginDataType,
        LogoutDataType,
    >(
        strategy: Newable<
            AuthStrategyInterface<
                Role,
                UserType,
                AuthDataType,
                CredentialsType,
                RequestPasswordResetDataType,
                ConfirmPasswordResetDataType,
                RefreshLoginDataType,
                LogoutDataType,
            >,
        >,
        data: LogoutDataType,
    ) => void | Promise<void>;
    refreshLogin: <
        Role extends string,
        UserType extends BaseUser<Role>,
        AuthDataType,
        CredentialsType,
        RequestPasswordResetDataType,
        ConfirmPasswordResetDataType,
        RefreshLoginDataType,
        LogoutDataType,
    >(
        strategy: Newable<
            AuthStrategyInterface<
                Role,
                UserType,
                AuthDataType,
                CredentialsType,
                RequestPasswordResetDataType,
                ConfirmPasswordResetDataType,
                RefreshLoginDataType,
                LogoutDataType,
            >,
        >,
        data: RefreshLoginDataType,
    ) => Promise<AuthDataType>;
    requestPasswordReset: <
        Role extends string,
        UserType extends BaseUser<Role>,
        AuthDataType,
        CredentialsType,
        RequestPasswordResetDataType,
        ConfirmPasswordResetDataType,
        RefreshLoginDataType,
        LogoutDataType,
    >(
        strategy: Newable<
            AuthStrategyInterface<
                Role,
                UserType,
                AuthDataType,
                CredentialsType,
                RequestPasswordResetDataType,
                ConfirmPasswordResetDataType,
                RefreshLoginDataType,
                LogoutDataType,
            >,
        >,
        data: RequestPasswordResetDataType,
    ) => void | Promise<void>;
    resolveBelongsToMetadata: (
        controllerClass: Newable<unknown>,
        controllerMethod: string,
    ) =>
        | undefined
        | BelongsToMetadata<Newable<BaseEntity>>
        | Promise<undefined | BelongsToMetadata<Newable<BaseEntity>>>;
    resolveHasRoleMetadata: (
        controllerClass: Newable<unknown>,
        controllerMethod: string,
    ) => undefined | HasRoleMetadata | Promise<undefined | HasRoleMetadata>;
    resolveIsLoggedInMetadata: (
        controllerClass: Newable<unknown>,
        controllerMethod: string,
    ) =>
        | undefined
        | IsLoggedInMetadata
        | Promise<undefined | IsLoggedInMetadata>;
    resolveIsNotLoggedInMetadata: (
        controllerClass: Newable<unknown>,
        controllerMethod: string,
    ) =>
        | undefined
        | IsNotLoggedInMetadata
        | Promise<undefined | IsNotLoggedInMetadata>;
    strategies: AuthStrategies;
}

Implemented by

Properties

belongsTo: <TargetEntity extends Newable<BaseEntity>>(
    request: HttpRequest,
    allowedStrategies: AuthStrategies,
    targetEntity: TargetEntity,
    targetUserIdKey: keyof InstanceType<TargetEntity>,
    targetIdParamKey: string,
) => Promise<boolean>

Checks whether the currently logged in user belongs to the target entity.

checkAccess: (
    controllerClass: Newable<unknown>,
    controllerMethod: string,
    request: HttpRequest | WebsocketRequest,
) => Promise<void>

Checks if the provided method on the provided controller can be accessed by the current user.

confirmPasswordReset: <
    Role extends string,
    UserType extends BaseUser<Role>,
    AuthDataType,
    CredentialsType,
    RequestPasswordResetDataType,
    ConfirmPasswordResetDataType,
    RefreshLoginDataType,
    LogoutDataType,
>(
    strategy: Newable<
        AuthStrategyInterface<
            Role,
            UserType,
            AuthDataType,
            CredentialsType,
            RequestPasswordResetDataType,
            ConfirmPasswordResetDataType,
            RefreshLoginDataType,
            LogoutDataType,
        >,
    >,
    data: ConfirmPasswordResetDataType,
) => void | Promise<void>

Confirms a new password for a user using the provided auth strategy and confirm password reset data.

getCurrentUser: <
    Role extends string,
    UserType extends BaseUser<Role>,
    B extends boolean = true,
>(
    request: HttpRequest | WebsocketRequest,
    allowedStrategies: AuthStrategies,
    required: B,
) => Promise<B extends false ? undefined | UserType : UserType>

Get's the currently logged in user. When required is set to false this can return undefined.

hasRole: (
    request: HttpRequest | WebsocketRequest,
    allowedStrategies: AuthStrategies,
    allowedRoles: string[],
) => Promise<boolean>

Checks whether the currently logged in user has one of the provided roles.

init: (strategies: AuthStrategies) => void | Promise<void>

Initializes the service.

isLoggedIn: (
    request: HttpRequest | WebsocketRequest,
    allowedStrategies: AuthStrategies,
) => Promise<boolean>

Checks whether there is a currently logged in user.

login: <
    Role extends string,
    UserType extends BaseUser<Role>,
    AuthDataType,
    CredentialsType,
    RequestPasswordResetDataType,
    ConfirmPasswordResetDataType,
    RefreshLoginDataType,
    LogoutDataType,
>(
    strategy: Newable<
        AuthStrategyInterface<
            Role,
            UserType,
            AuthDataType,
            CredentialsType,
            RequestPasswordResetDataType,
            ConfirmPasswordResetDataType,
            RefreshLoginDataType,
            LogoutDataType,
        >,
    >,
    credentials: CredentialsType,
) => Promise<AuthDataType>

Logs in a user using the provided auth strategy and credentials.

logout: <
    Role extends string,
    UserType extends BaseUser<Role>,
    AuthDataType,
    CredentialsType,
    RequestPasswordResetDataType,
    ConfirmPasswordResetDataType,
    RefreshLoginDataType,
    LogoutDataType,
>(
    strategy: Newable<
        AuthStrategyInterface<
            Role,
            UserType,
            AuthDataType,
            CredentialsType,
            RequestPasswordResetDataType,
            ConfirmPasswordResetDataType,
            RefreshLoginDataType,
            LogoutDataType,
        >,
    >,
    data: LogoutDataType,
) => void | Promise<void>

Logs out the current user.

refreshLogin: <
    Role extends string,
    UserType extends BaseUser<Role>,
    AuthDataType,
    CredentialsType,
    RequestPasswordResetDataType,
    ConfirmPasswordResetDataType,
    RefreshLoginDataType,
    LogoutDataType,
>(
    strategy: Newable<
        AuthStrategyInterface<
            Role,
            UserType,
            AuthDataType,
            CredentialsType,
            RequestPasswordResetDataType,
            ConfirmPasswordResetDataType,
            RefreshLoginDataType,
            LogoutDataType,
        >,
    >,
    data: RefreshLoginDataType,
) => Promise<AuthDataType>

Refreshes the login of a user using the provided auth strategy and refresh login data.

requestPasswordReset: <
    Role extends string,
    UserType extends BaseUser<Role>,
    AuthDataType,
    CredentialsType,
    RequestPasswordResetDataType,
    ConfirmPasswordResetDataType,
    RefreshLoginDataType,
    LogoutDataType,
>(
    strategy: Newable<
        AuthStrategyInterface<
            Role,
            UserType,
            AuthDataType,
            CredentialsType,
            RequestPasswordResetDataType,
            ConfirmPasswordResetDataType,
            RefreshLoginDataType,
            LogoutDataType,
        >,
    >,
    data: RequestPasswordResetDataType,
) => void | Promise<void>

Request a new password for a user using the provided auth strategy and request password reset data.

resolveBelongsToMetadata: (
    controllerClass: Newable<unknown>,
    controllerMethod: string,
) =>
    | undefined
    | BelongsToMetadata<Newable<BaseEntity>>
    | Promise<undefined | BelongsToMetadata<Newable<BaseEntity>>>

Resolves the belongs to metadata for the provided controller method. (Whether it's required for the user to somehow belong to the requested entity, etc.).

resolveHasRoleMetadata: (
    controllerClass: Newable<unknown>,
    controllerMethod: string,
) => undefined | HasRoleMetadata | Promise<undefined | HasRoleMetadata>

Resolves the has role metadata for the provided controller method. (Whether it's required for the user to have a certain role etc.).

resolveIsLoggedInMetadata: (
    controllerClass: Newable<unknown>,
    controllerMethod: string,
) =>
    | undefined
    | IsLoggedInMetadata
    | Promise<undefined | IsLoggedInMetadata>

Resolves the is logged in metadata for the provided controller method. (Whether it's required to be logged in, etc.).

resolveIsNotLoggedInMetadata: (
    controllerClass: Newable<unknown>,
    controllerMethod: string,
) =>
    | undefined
    | IsNotLoggedInMetadata
    | Promise<undefined | IsNotLoggedInMetadata>

Resolves the is not logged in metadata for the provided controller method. (Whether it's required to be logged out, etc.).

strategies: AuthStrategies

The different auth strategies provided.