import { FirebaseApp } from '@nativescript/firebase-core';
import { Auth } from '@nativescript/firebase-auth';
import { ProviderBase } from './common';
import { Config, IActionCodeSettings, IIdpResponse, IUI } from '.';
export declare class GoogleProvider extends ProviderBase {
    constructor();
    scopes: string[];
    getNative(ui: UI): FUIGoogleAuth;
}
export declare class FacebookProvider extends ProviderBase {
    constructor();
    permissions: string[];
    getNative(ui: UI): FUIFacebookAuth;
}
export declare class TwitterProvider extends ProviderBase {
    constructor();
    scopes: string[];
    _setCustomParameters: Record<string, string>;
    setCustomParameters(params: Record<string, string>): this;
    getNative(ui: UI): FUIOAuth;
}
export declare class GithubProvider extends ProviderBase {
    constructor();
    scopes: string[];
    _setCustomParameters: Record<string, string>;
    setCustomParameters(params: Record<string, string>): this;
    getNative(ui: UI): FUIOAuth;
}
export declare class ActionCodeSettings implements IActionCodeSettings {
    _native: FIRActionCodeSettings;
    static fromNative(settings: FIRActionCodeSettings): ActionCodeSettings;
    get androidInstallIfNotAvailable(): boolean;
    set androidInstallIfNotAvailable(value: boolean);
    get androidMinimumVersion(): string;
    set androidMinimumVersion(value: string);
    get androidPackageName(): string;
    set androidPackageName(value: string);
    get dynamicLinkDomain(): string;
    set dynamicLinkDomain(value: string);
    get handleCodeInApp(): boolean;
    set handleCodeInApp(handle: boolean);
    get native(): FIRActionCodeSettings;
    get ios(): FIRActionCodeSettings;
    get url(): string;
    get iOSBundleId(): string;
    set iOSBundleId(id: string);
}
export declare class EmailProvider extends ProviderBase {
    constructor();
    actionCodeSettings: ActionCodeSettings;
    requireName: boolean;
    _forceSameDevice: boolean;
    forceSameDevice(): this;
    _enableEmailLinkSignIn: boolean;
    enableEmailLinkSignIn(): this;
    defaultEmail: string;
    allowNewAccounts: boolean;
    getNative(ui: UI): FUIEmailAuth;
}
export declare class PhoneProvider extends ProviderBase {
    constructor();
    defaultNumber: string;
    defaultCountryIso: string;
    blacklistedCountries: string[];
    whitelistedCountries: string[];
    getNative(ui: UI): FUIPhoneAuth;
}
export declare class AnonymousProvider extends ProviderBase {
    constructor();
    getNative(ui: UI): FUIAnonymousAuth;
}
export declare class MicrosoftProvider extends ProviderBase {
    constructor();
    scopes: string[];
    _setCustomParameters: Record<string, string>;
    setCustomParameters(params: Record<string, string>): this;
    getNative(ui: UI): FUIOAuth;
}
export declare class YahooProvider extends ProviderBase {
    constructor();
    scopes: string[];
    _setCustomParameters: Record<string, string>;
    setCustomParameters(params: Record<string, string>): this;
    getNative(ui: UI): FUIOAuth;
}
export declare class AppleProvider extends ProviderBase {
    constructor();
    scopes: string[];
    _setCustomParameters: Record<string, string>;
    setCustomParameters(params: Record<string, string>): this;
    getNative(ui: UI): FUIOAuth;
}
export declare class User {
    _native: FIRUser;
    static fromNative(user: FIRUser): User;
    get native(): FIRUser;
    get android(): FIRUser;
    get name(): string;
    get email(): string;
    get phoneNumber(): string;
    get photoUri(): string;
    get providerId(): string;
    toJSON(): {
        name: string;
        email: string;
        phoneNumber: string;
        photoUri: string;
    };
}
export declare class IdpResponse {
    _native: FIRAuthDataResult;
    _isOauthCred: boolean;
    static fromNative(response: FIRAuthDataResult): IdpResponse;
    get native(): FIRAuthDataResult;
    get android(): FIRAuthDataResult;
    get isNewUser(): boolean;
    get hasCredentialForLinking(): boolean;
    get email(): string;
    get idpSecret(): string;
    get idpToken(): string;
    get phoneNumber(): string;
    get providerType(): string;
    _user: User;
    get user(): User;
}
declare class FUIAuthDelegateImpl extends NSObject implements FUIAuthDelegate {
    _owner: WeakRef<UI>;
    _authDataResult: FIRAuthDataResult;
    static initWithOwner(owner: WeakRef<UI>): FUIAuthDelegateImpl;
    authUIDidSignInWithAuthDataResultError(authUI: FUIAuth, authDataResult: FIRAuthDataResult, error: NSError): void;
    authUIDidSignInWithAuthDataResultURLError(authUI: FUIAuth, authDataResult: FIRAuthDataResult, url: NSURL, error: NSError): void;
    _handleAuth(error: any): void;
}
export declare class UI implements IUI {
    _native: FUIAuth;
    _auth: Auth;
    _app: FirebaseApp;
    _delegate: FUIAuthDelegateImpl;
    _controller: any;
    _resolve: any;
    _reject: any;
    constructor(auth?: Auth);
    static fromNative(ui: FUIAuth): UI;
    get native(): FUIAuth;
    get android(): FUIAuth;
    get app(): FirebaseApp;
    useEmulator(host: string, port: number): void;
    show(config: Config): Promise<IIdpResponse>;
    delete(): Promise<void>;
    signOut(): Promise<void>;
}
export {};
