import type { TypeORMAdapterOptions } from 'typeorm-adapter';
import type { BaseMemberEntity } from '../models/base-member.entity';
import type { ReflectableDecorator } from '@nestjs/core';
import type { OAuth2Provider } from './oauth2-provider.interface';
import type { CasbinDomainResolver, CasbinPermissionCheckerParams, CasbinPermissionCheckerResult } from './casbin-permission';
export interface MemberBaseModuleOptionsDTO<MemberEntity extends BaseMemberEntity = BaseMemberEntity, TokenPayload extends {
    id: string;
    account?: string;
    domain?: string;
} = Pick<MemberEntity, 'id' | 'account'> & {
    domain?: string;
}> {
    loginFailedBanThreshold?: number;
    resetPasswordTokenExpiration?: number;
    resetPasswordTokenSecret?: string;
    cookieMode?: boolean;
    loginFailedAutoUnlockSeconds?: number;
    accessTokenSecret?: string;
    accessTokenExpiration?: number;
    refreshTokenSecret?: string;
    refreshTokenExpiration?: number;
    onlyResetRefreshTokenExpirationByPassword?: boolean;
    enableGlobalGuard?: boolean;
    casbinAdapterOptions?: TypeORMAdapterOptions;
    casbinModelString?: string;
    casbinPermissionDecorator?: ReflectableDecorator<[string, string][]>;
    casbinPermissionChecker?: (params: CasbinPermissionCheckerParams<TokenPayload>) => CasbinPermissionCheckerResult;
    casbinDomainResolver?: CasbinDomainResolver<TokenPayload>;
    memberEntity?: new () => MemberEntity;
    passwordShouldIncludeUppercase?: boolean;
    passwordShouldIncludeLowercase?: boolean;
    passwordShouldIncludeDigit?: boolean;
    passwordShouldIncludeSpecialCharacters?: boolean;
    passwordMinLength?: number;
    passwordPolicyRegExp?: RegExp;
    passwordHistoryLimit?: number;
    passwordAgeLimitInDays?: number;
    forceRejectLoginOnPasswordExpired?: boolean;
    customizedJwtPayload?: (member: MemberEntity) => TokenPayload;
    oauth2Providers?: OAuth2Provider[];
    oauth2ClientDestUrl?: string;
}
export type MemberBaseModuleOptions<MemberEntity extends BaseMemberEntity = BaseMemberEntity, TokenPayload extends {
    id: string;
    account?: string;
    domain?: string;
} = Pick<MemberEntity, 'id' | 'account'> & {
    domain?: string;
}> = MemberBaseModuleOptionsDTO<MemberEntity, TokenPayload>;
