@nativescript/firebase-ui
Version:
NativeScript Firebase - UI
616 lines • 19.5 kB
JavaScript
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