import { Observable } from "rxjs";
import { FirebaseApp as FirebaseAppType } from "firebase/app";
import { User } from "firebase/auth";
import { FirebaseApp } from "./FirebaseApp";
import { Credentials, EmailAndPassword, CustomToken } from "../../types/credentials";
import { UserClaims } from "../../types/user";
import { DeviceInfo } from "../../types/deviceInfo";
import { OAuthRemoveResponse } from "../../types/oauth";
import { Experiment } from "../../types/experiment";
import { TransferDeviceOptions } from "../../utils/transferDevice";
import { ApiKeyRecord, CreateApiKeyRequest, RemoveApiKeyResponse } from "../../types/apiKey";
export type UserWithMetadata = User & {
    selectedDevice: DeviceInfo | null;
};
export declare class FirebaseUser {
    app: FirebaseAppType;
    user: User | null;
    constructor(firebaseApp: FirebaseApp);
    auth(): import("@firebase/auth").Auth;
    createAccount(credentials: EmailAndPassword): Promise<any>;
    deleteAccount(): Promise<void>;
    onAuthStateChanged(): Observable<User | null>;
    onLogin(): Observable<User>;
    login(credentials: Credentials): Promise<import("@firebase/auth").UserCredential>;
    logout(): Promise<void>;
    createCustomToken(): Promise<CustomToken>;
    createApiKey(data: CreateApiKeyRequest): Promise<ApiKeyRecord>;
    removeApiKey(apiKeyId: string): Promise<RemoveApiKeyResponse>;
    private _createCustomTokenForApiKey;
    removeOAuthAccess(): Promise<OAuthRemoveResponse>;
    getDevices(): Promise<DeviceInfo[]>;
    addDevice(deviceId: string): Promise<void>;
    removeDevice(deviceId: string): Promise<void>;
    transferDevice(options: TransferDeviceOptions): Promise<void>;
    isDeviceIdValid(deviceId: string): Promise<boolean>;
    onUserDevicesChange(): Observable<DeviceInfo[]>;
    onUserClaimsChange(): Observable<UserClaims>;
    getIdToken(forceRefresh?: boolean): Promise<void>;
    getClaims(): Promise<UserClaims>;
    private userDevicesToDeviceInfoList;
    hasDevicePermission(deviceId: string): Promise<boolean>;
    private getDeviceClaimedByPath;
    private getUserClaimedDevicePath;
    private getUserDevicesPath;
    private getUserClaimsUpdatedOnPath;
    private getDeviceInfoPath;
    onUserExperiments(): Observable<Experiment[]>;
    deleteUserExperiment(experimentId: string): Promise<void>;
}
//# sourceMappingURL=FirebaseUser.d.ts.map