UNPKG

@nativescript/firebase-ui

Version:
616 lines 19.5 kB
import { Application, Utils } from '@nativescript/core'; import { FirebaseApp, FirebaseError, firebase } from '@nativescript/firebase-core'; import { ProviderBase } from './common'; let defaultUI; const fb = firebase(); Object.defineProperty(fb, 'ui', { value: (auth) => { if (!auth) { if (!defaultUI) { defaultUI = new UI(); } return defaultUI; } return new UI(auth); }, writable: false, }); export class GoogleProvider extends ProviderBase { constructor() { super(); this._scopes = []; this._builder = new com.firebase.ui.auth.AuthUI.IdpConfig.GoogleBuilder(); } get scopes() { return this._scopes; } set scopes(values) { if (Array.isArray(values)) { this._scopes = values; const scopes = new java.util.ArrayList(); this._scopes.forEach((scope) => { scopes.add(scope); }); this._builder.setScopes(scopes); } } getNative(ui) { return this._builder.build(); } } export class FacebookProvider extends ProviderBase { constructor() { super(); this._permissions = []; this._builder = new com.firebase.ui.auth.AuthUI.IdpConfig.FacebookBuilder(); } get permissions() { return this._permissions; } set permissions(values) { if (Array.isArray(values)) { this._permissions = values; const permissions = new java.util.ArrayList(); this._permissions.forEach((scope) => { permissions.add(scope); }); this._builder.setPermissions(permissions); } } getNative(ui) { return this._builder.build(); } } export class TwitterProvider extends ProviderBase { constructor() { super(); this._scopes = []; this._builder = new com.firebase.ui.auth.AuthUI.IdpConfig.TwitterBuilder(); } get scopes() { return this._scopes; } set scopes(values) { if (Array.isArray(values)) { this._scopes = values; const scopes = new java.util.ArrayList(); this._scopes.forEach((scope) => { scopes.add(scope); }); this._builder.setScopes(scopes); } } setCustomParameters(params) { if (typeof params === 'object') { const parameters = new java.util.HashMap(); Object.keys(params).forEach((key) => { const value = params[key]; parameters.put(key, value); }); this._builder.setCustomParameters(parameters); } return this; } getNative(ui) { return this._builder.build(); } } export class GithubProvider extends ProviderBase { constructor() { super(); this._scopes = []; this._builder = new com.firebase.ui.auth.AuthUI.IdpConfig.GitHubBuilder(); } get scopes() { return this._scopes; } set scopes(values) { if (Array.isArray(values)) { this._scopes = values; const scopes = new java.util.ArrayList(); this._scopes.forEach((scope) => { scopes.add(scope); }); this._builder.setScopes(scopes); } } setCustomParameters(params) { if (typeof params === 'object') { const parameters = new java.util.HashMap(); Object.keys(params).forEach((key) => { const value = params[key]; parameters.put(key, value); }); this._builder.setCustomParameters(parameters); } return this; } getNative(ui) { return this._builder.build(); } } export class ActionCodeSettings { constructor() { this._native = new com.google.firebase.auth.ActionCodeSettings.Builder(); } get native() { return this._native .setUrl(this.url || '') .setIOSBundleId(this.iOSBundleId || '') .setHandleCodeInApp(this.handleCodeInApp || false) .setDynamicLinkDomain(this.dynamicLinkDomain || '') .setAndroidPackageName(this.androidPackageName || '', this.androidInstallIfNotAvailable || false, this.androidMinimumVersion || '') .build(); } get android() { return this.native; } } export class EmailProvider extends ProviderBase { constructor() { super(); this._actionCodeSettings = null; this._requireName = true; this._defaultEmail = ''; this._allowNewAccounts = true; this._builder = new com.firebase.ui.auth.AuthUI.IdpConfig.EmailBuilder(); } set actionCodeSettings(value) { this._actionCodeSettings = value; this._builder.setActionCodeSettings(value?.native); } get actionCodeSettings() { return this._actionCodeSettings; } get requireName() { return this._requireName; } set requireName(isRequired) { this._requireName = isRequired; this._builder.setRequireName(isRequired); } forceSameDevice() { this._builder.setForceSameDevice(); return this; } enableEmailLinkSignIn() { this._builder.enableEmailLinkSignIn(); return this; } get defaultEmail() { return this._defaultEmail; } set defaultEmail(value) { this._defaultEmail = value; this._builder.setDefaultEmail(value); } set allowNewAccounts(allow) { this._allowNewAccounts = allow; this._builder.setAllowNewAccounts(allow); } get allowNewAccounts() { return this._allowNewAccounts; } getNative(ui) { return this._builder.build(); } } export class PhoneProvider extends ProviderBase { constructor() { super(); this._defaultNumber = ''; this._defaultCountryIso = ''; this._blacklistedCountries = []; this._whitelistedCountries = []; this._builder = new com.firebase.ui.auth.AuthUI.IdpConfig.PhoneBuilder(); this._builder.setDefaultNumber; } get defaultNumber() { return this._defaultNumber; } set defaultNumber(value) { this._defaultNumber = value; this._builder.setDefaultNumber(value); } get defaultCountryIso() { return this._defaultCountryIso; } set defaultCountryIso(value) { this._defaultCountryIso = value; this._builder.setDefaultCountryIso(value); } get blacklistedCountries() { return this._blacklistedCountries; } set blacklistedCountries(values) { if (Array.isArray(values)) { this._blacklistedCountries = values; const countries = new java.util.ArrayList(); this._blacklistedCountries.forEach((country) => { countries.add(country); }); this._builder.setBlacklistedCountries(countries); } } get whitelistedCountries() { return this._whitelistedCountries; } set whitelistedCountries(values) { if (Array.isArray(values)) { this._whitelistedCountries = values; const countries = new java.util.ArrayList(); this._whitelistedCountries.forEach((country) => { countries.add(country); }); this._builder.setWhitelistedCountries(countries); } } getNative(ui) { return this._builder.build(); } } export class AnonymousProvider extends ProviderBase { constructor() { super(); this._builder = new com.firebase.ui.auth.AuthUI.IdpConfig.AnonymousBuilder(); } getNative(ui) { return this._builder.build(); } } export class MicrosoftProvider extends ProviderBase { constructor() { super(); this._scopes = []; this._builder = new com.firebase.ui.auth.AuthUI.IdpConfig.MicrosoftBuilder(); } get scopes() { return this._scopes; } set scopes(values) { if (Array.isArray(values)) { this._scopes = values; const scopes = new java.util.ArrayList(); this._scopes.forEach((scope) => { scopes.add(scope); }); this._builder.setScopes(scopes); } } setCustomParameters(params) { if (typeof params === 'object') { const parameters = new java.util.HashMap(); Object.keys(params).forEach((key) => { const value = params[key]; parameters.put(key, value); }); this._builder.setCustomParameters(parameters); } return this; } getNative(ui) { return this._builder.build(); } } export class YahooProvider extends ProviderBase { constructor() { super(); this._scopes = []; this._builder = new com.firebase.ui.auth.AuthUI.IdpConfig.YahooBuilder(); } get scopes() { return this._scopes; } set scopes(values) { if (Array.isArray(values)) { this._scopes = values; const scopes = new java.util.ArrayList(); this._scopes.forEach((scope) => { scopes.add(scope); }); this._builder.setScopes(scopes); } } setCustomParameters(params) { if (typeof params === 'object') { const parameters = new java.util.HashMap(); Object.keys(params).forEach((key) => { const value = params[key]; parameters.put(key, value); }); this._builder.setCustomParameters(parameters); } return this; } getNative(ui) { return this._builder.build(); } } export class AppleProvider extends ProviderBase { constructor() { super(); this._scopes = []; this._builder = new com.firebase.ui.auth.AuthUI.IdpConfig.AppleBuilder(); } get scopes() { return this._scopes; } set scopes(values) { if (Array.isArray(values)) { this._scopes = values; const scopes = new java.util.ArrayList(); this._scopes.forEach((scope) => { scopes.add(scope); }); this._builder.setScopes(scopes); } } setCustomParameters(params) { if (typeof params === 'object') { const parameters = new java.util.HashMap(); Object.keys(params).forEach((key) => { const value = params[key]; parameters.put(key, value); }); this._builder.setCustomParameters(parameters); } return this; } getNative(ui) { return this._builder.build(); } } export class User { static fromNative(user) { if (user instanceof com.firebase.ui.auth.data.model.User) { const ret = new User(); ret._native = user; return ret; } return null; } get native() { return this._native; } get android() { return this.native; } get name() { return this.native.getName(); } get email() { return this.native.getEmail(); } get phoneNumber() { return this.native.getPhoneNumber(); } get photoUri() { return this.native.getPhotoUri()?.toString?.(); } get providerId() { return this.native.getProviderId(); } toJSON() { return { name: this.name, email: this.email, phoneNumber: this.phoneNumber, photoUri: this.photoUri, }; } } export class IdpResponse { static fromNative(response) { if (response instanceof com.firebase.ui.auth.IdpResponse) { const ret = new IdpResponse(); ret._native = response; return ret; } return null; } get native() { return this._native; } get android() { return this.native; } get isNewUser() { return this.native.isNewUser(); } get hasCredentialForLinking() { return this.native.hasCredentialForLinking(); } get email() { return this.native.getEmail(); } get idpSecret() { return this.native.getIdpSecret(); } get idpToken() { return this.native.getIdpToken(); } get phoneNumber() { return this.native.getPhoneNumber(); } get providerType() { return this.native.getProviderType(); } get user() { if (!this._user) { this._user = User.fromNative(this.native.getUser()); } return this._user; } } let lastActivity; let signInLauncher; let _launcherResolve; let _launcherReject; function register(args) { if (!lastActivity) { // Some activities do not implement activity result API if (args.activity.registerForActivityResult) { lastActivity = new WeakRef(args.activity); signInLauncher = args.activity.registerForActivityResult(new com.firebase.ui.auth.FirebaseAuthUIActivityResultContract(), new androidx.activity.result.ActivityResultCallback({ onActivityResult(result) { const code = result.getResultCode(); if ((code?.intValue() || code === java.lang.Integer.valueOf(android.app.Activity.RESULT_OK)) === android.app.Activity.RESULT_OK) { const response = result.getIdpResponse(); if (response.isSuccessful()) { _launcherResolve(IdpResponse.fromNative(response)); } else { _launcherReject(FirebaseError.fromNative(response.getError())); } } else { _launcherReject(FirebaseError.fromNative(null, 'User Cancelled')); } _launcherResolve = null; _launcherReject = null; }, })); } else { Application.android.once('activityCreated', register); } } } Application.android.once('activityCreated', register); Application.android.on('activityDestroyed', (args) => { const activity = lastActivity?.get?.(); if (activity && args.activity === activity) { signInLauncher?.unregister?.(); lastActivity = undefined; Application.android.once('activityCreated', register); } }); function getResourceId(res = '') { const context = Utils.android.getApplicationContext(); if (!context) return java.lang.Integer.valueOf(0); if (typeof res === 'string' && res.startsWith('res://')) { const packageName = context.getPackageName(); try { const className = java.lang.Class.forName(`${packageName}.R$drawable`); return java.lang.Integer.valueOf(parseInt(String(className.getDeclaredField(res.replace('res://', '')).get(null)))); } catch (e) { return java.lang.Integer.valueOf(0); } } return java.lang.Integer.valueOf(0); } export class UI { constructor(auth) { if (auth?.app) { this._native = com.firebase.ui.auth.AuthUI.getInstance(auth.app.native); this._auth = auth; } else { if (defaultUI) { return defaultUI; } defaultUI = this; this._native = com.firebase.ui.auth.AuthUI.getInstance(); } } static fromNative(ui) { if (ui instanceof com.firebase.ui.auth.AuthUI) { const ret = new UI(); ret._native = ui; return ret; } return null; } get native() { return this._native; } get android() { return this.native; } get app() { if (this._auth) { return this._auth.app; } if (!this._app) { // @ts-ignore this._app = FirebaseApp.fromNative(this.native.getApp()); } return this._app; } useEmulator(host, port) { this.native.useEmulator(host === 'localhost' || host === '127.0.0.1' ? '10.0.2.2' : host, port); } show(config) { return new Promise((resolve, reject) => { try { const builder = this.native.createSignInIntentBuilder(); if (config.providers.length > 0) { const providers = new java.util.ArrayList(); config.providers.forEach((provider) => { providers.add(provider.getNative(this)); }); builder.setAvailableProviders(providers); } if (config.anonymousUsersAutoUpgrade) { builder.enableAnonymousUsersAutoUpgrade(); } if (config.emailLink) { builder.setEmailLink(config.emailLink); } if (config.resetPasswordSettings) { builder.setResetPasswordSettings(config.resetPasswordSettings.native); } if (typeof config.theme === 'number') { builder.setTheme(config.theme); } if (typeof config.lockOrientation === 'boolean') { builder.setLockOrientation(config.lockOrientation); } if (config.tosAndPrivacyPolicy?.tos && config.tosAndPrivacyPolicy?.privacyPolicy) { builder.setTosAndPrivacyPolicyUrls(config.tosAndPrivacyPolicy?.tos, config.tosAndPrivacyPolicy?.privacyPolicy); } if (config.alwaysShowSignInMethodScreen) { builder.setAlwaysShowSignInMethodScreen(config.alwaysShowSignInMethodScreen); } const intent = builder.build(); _launcherResolve = resolve; _launcherReject = reject; signInLauncher.launch(intent); } catch (error) { reject(new FirebaseError(error?.message || 'Failed to show UI')); _launcherResolve = null; _launcherReject = null; } }); } delete() { return new Promise((resolve, reject) => { org.nativescript.firebase.ui.FirebaseUI.delete(this.native, lastActivity.get(), new org.nativescript.firebase.ui.FirebaseUI.Callback({ onSuccess() { resolve(); }, onError(error) { const err = FirebaseError.fromNative(error); reject(err); }, })); }); } signOut() { return new Promise((resolve, reject) => { org.nativescript.firebase.ui.FirebaseUI.signOut(this.native, lastActivity.get(), new org.nativescript.firebase.ui.FirebaseUI.Callback({ onSuccess() { resolve(); }, onError(error) { const err = FirebaseError.fromNative(error); reject(err); }, })); }); } } //# sourceMappingURL=index.android.js.map