import { auth } from 'firebase-admin';
import IdentityProvider from "../../entities/identity-provider.js";
import Profile from "../../entities/profile.js";
import User from "../../entities/user.js";
import Abstract from "./abstract.js";
import { ISingInReturn, TSingInParams } from "./abstract.js";
type UserRecord = auth.UserRecord;
/**
 * Firebase identity provider
 */
declare class Firebase extends Abstract {
    /**
     * Return user by identity token
     */
    /**
     * Return user by identity token
     */
    getUserByToken(): Promise<User>;
    /**
     * @inheritDoc
     */
    /**
     * @inheritDoc
     */
    signIn({ isDenyRegister, isDenyAuthViaRegister, isShouldAttachUserPhoto, isShouldApproveProvider, }?: TSingInParams): Promise<ISingInReturn>;
    /**
     * @inheritDoc
     */
    /**
     * @inheritDoc
     */
    attachProvider(userId: string): Promise<User>;
    /**
     * Sign up user
     * NOTE: type - (google or facebook)
     * @protected
     */
    /**
     * Sign up user
     * NOTE: type - (google or facebook)
     * @protected
     */
    protected register(firebaseUser: UserRecord, type: string): Promise<User>;
    /**
     * Approve firebase user identity
     * NOTE: Set emailVerified to true for preventing override
     * non-trusted providers
     */
    /**
     * Approve firebase user identity
     * NOTE: Set emailVerified to true for preventing override
     * non-trusted providers
     */
    protected approveFirebaseUserProvider(firebaseUser: UserRecord): Promise<void>;
    /**
     * Returns user photo if it should be attached
     * NOTE: Uses while user on split sign up want to upload own photo,
     * in this case we don't need to set photo from user provider result
     */
    /**
     * Returns user photo if it should be attached
     * NOTE: Uses while user on split sign up want to upload own photo,
     * in this case we don't need to set photo from user provider result
     */
    protected getUserPhoto(firebaseUser: UserRecord): string | null;
    /**
     * Make or update user profile
     * @protected
     */
    /**
     * Make or update user profile
     * @protected
     */
    protected getProfile(firebaseUser: UserRecord, profile?: Profile): Profile;
    /**
     * Get current identity provider
     * @protected
     */
    /**
     * Get current identity provider
     * @protected
     */
    protected getIdentityProvider(firebaseUser: UserRecord, type: string): IdentityProvider;
    /**
     * Get provider uid for facebook, google, etc...
     * @protected
     */
    /**
     * Get provider uid for facebook, google, etc...
     * @protected
     */
    protected static getTypeUid(firebaseUser: UserRecord, type: string): string | undefined;
    /**
     * Get firebase user photo with large size
     * @protected
     */
    /**
     * Get firebase user photo with large size
     * @protected
     */
    protected static getUserPhoto(firebaseUser: UserRecord): string | undefined;
    /**
     * Get firebase user by token
     * @protected
     */
    /**
     * Get firebase user by token
     * @protected
     */
    protected getFirebaseUser(): Promise<[UserRecord, string]>;
}
export { Firebase as default };
