UNPKG

nativescript-plugin-firebase-ssi

Version:
932 lines 123 kB
"use strict"; var _this = this; Object.defineProperty(exports, "__esModule", { value: true }); var appModule = require("tns-core-modules/application"); var lazy_1 = require("tns-core-modules/utils/lazy"); var utils_1 = require("tns-core-modules/utils/utils"); var firebase_common_1 = require("./firebase-common"); var firebaseFunctions = require("./functions/functions"); var firebaseMessaging = require("./messaging/messaging"); var gmsAds = com.google.android.gms.ads; var gmsTasks = com.google.android.gms.tasks; var DocumentSnapshot = (function (_super) { __extends(DocumentSnapshot, _super); function DocumentSnapshot(snapshot) { var _this = _super.call(this, snapshot ? snapshot.getId() : null, snapshot.exists(), firebase_common_1.firebase.toJsObject(snapshot.getData()), firebase_common_1.firebase.firestore._getDocumentReference(snapshot.getReference())) || this; _this.snapshot = snapshot; _this.metadata = { fromCache: _this.snapshot.getMetadata().isFromCache(), hasPendingWrites: _this.snapshot.getMetadata().hasPendingWrites() }; _this.android = snapshot; return _this; } return DocumentSnapshot; }(firebase_common_1.DocumentSnapshot)); firebase_common_1.firebase._launchNotification = null; firebase_common_1.firebase._cachedDynamicLink = null; firebase_common_1.firebase._googleSignInIdToken = null; firebase_common_1.firebase._facebookAccessToken = null; firebase_common_1.firebase._appleSignInIdToken = null; var fbCallbackManager = null; var initializeArguments; var GOOGLE_SIGNIN_INTENT_ID = 123; var authEnabled = lazy_1.default(function () { return typeof (com.google.firebase.auth) !== "undefined" && typeof (com.google.firebase.auth.FirebaseAuth) !== "undefined"; }); var messagingEnabled = lazy_1.default(function () { return typeof (com.google.firebase.messaging) !== "undefined"; }); var dynamicLinksEnabled = lazy_1.default(function () { return typeof (com.google.firebase.dynamiclinks) !== "undefined"; }); (function () { appModule.on(appModule.launchEvent, function (args) { if (messagingEnabled()) { firebaseMessaging.onAppModuleLaunchEvent(args); } if (dynamicLinksEnabled()) { var emailLink = "" + args.android.getData(); if (authEnabled() && com.google.firebase.auth.FirebaseAuth.getInstance().isSignInWithEmailLink(emailLink)) { var rememberedEmail = firebase_common_1.firebase.getRememberedEmailForEmailLinkLogin(); if (rememberedEmail !== undefined) { var emailLinkOnCompleteListener = new gmsTasks.OnCompleteListener({ onComplete: function (task) { if (task.isSuccessful()) { var authResult = task.getResult(); firebase_common_1.firebase.notifyAuthStateListeners({ loggedIn: true, user: toLoginResult(authResult.getUser(), authResult.getAdditionalUserInfo()) }); } } }); var user = com.google.firebase.auth.FirebaseAuth.getInstance().getCurrentUser(); if (user) { var authCredential = com.google.firebase.auth.EmailAuthProvider.getCredentialWithLink(rememberedEmail, emailLink); user.linkWithCredential(authCredential).addOnCompleteListener(emailLinkOnCompleteListener); } else { com.google.firebase.auth.FirebaseAuth.getInstance().signInWithEmailLink(rememberedEmail, emailLink).addOnCompleteListener(emailLinkOnCompleteListener); } } } else { var getDynamicLinksCallback = new gmsTasks.OnSuccessListener({ onSuccess: function (pendingDynamicLinkData) { if (pendingDynamicLinkData != null) { var deepLink_1 = pendingDynamicLinkData.getLink().toString(); var minimumAppVersion_1 = pendingDynamicLinkData.getMinimumAppVersion(); if (firebase_common_1.firebase._dynamicLinkCallback === null) { firebase_common_1.firebase._cachedDynamicLink = { url: deepLink_1, minimumAppVersion: minimumAppVersion_1 }; } else { setTimeout(function () { firebase_common_1.firebase._dynamicLinkCallback({ url: deepLink_1, minimumAppVersion: minimumAppVersion_1 }); }); } } } }); var firebaseDynamicLinks = com.google.firebase.dynamiclinks.FirebaseDynamicLinks.getInstance(); firebaseDynamicLinks.getDynamicLink(args.android).addOnSuccessListener(getDynamicLinksCallback); } } }); appModule.on(appModule.resumeEvent, function (args) { if (messagingEnabled()) { firebaseMessaging.onAppModuleResumeEvent(args); } }); })(); firebase_common_1.firebase.toHashMap = function (obj) { var node = new java.util.HashMap(); for (var property in obj) { if (obj.hasOwnProperty(property)) { if (obj[property] === null) { node.put(property, null); } else { if (obj[property] === "SERVER_TIMESTAMP") { node.put(property, com.google.firebase.firestore.FieldValue.serverTimestamp()); } else if (obj[property] === "DELETE_FIELD") { node.put(property, com.google.firebase.firestore.FieldValue.delete()); } else if (obj[property] instanceof firebase_common_1.FieldValue) { var fieldValue = obj[property]; if (fieldValue.type === "ARRAY_UNION") { var values = Array.isArray(fieldValue.value[0]) ? fieldValue.value[0] : fieldValue.value; values = values.map(function (v) { return typeof (v) === "object" ? firebase_common_1.firebase.toHashMap(v) : v; }); node.put(property, com.google.firebase.firestore.FieldValue.arrayUnion(values)); } else if (fieldValue.type === "ARRAY_REMOVE") { var values = Array.isArray(fieldValue.value[0]) ? fieldValue.value[0] : fieldValue.value; values = values.map(function (v) { return typeof (v) === "object" ? firebase_common_1.firebase.toHashMap(v) : v; }); node.put(property, com.google.firebase.firestore.FieldValue.arrayRemove(values)); } else if (fieldValue.type === "INCREMENT") { node.put(property, com.google.firebase.firestore.FieldValue.increment(fieldValue.value)); } else { console.log("You found a bug! Please report an issue at https://github.com/EddyVerbruggen/nativescript-plugin-firebase/issues, mention fieldValue.type = '" + fieldValue.type + "'. Thanks!"); } } else if (obj[property] instanceof Date) { node.put(property, new java.util.Date(obj[property].getTime())); } else if (obj[property] instanceof firebase_common_1.GeoPoint) { var geo = obj[property]; node.put(property, new com.google.firebase.firestore.GeoPoint(geo.latitude, geo.longitude)); } else if (firebase_common_1.isDocumentReference(obj[property])) { node.put(property, obj[property].android); } else if (Array.isArray(obj[property])) { node.put(property, firebase_common_1.firebase.toJavaArray(obj[property])); } else { switch (typeof obj[property]) { case 'object': node.put(property, firebase_common_1.firebase.toHashMap(obj[property], node)); break; case 'boolean': node.put(property, java.lang.Boolean.valueOf(String(obj[property]))); break; case 'number': if (Number(obj[property]) === obj[property] && obj[property] % 1 === 0) node.put(property, java.lang.Long.valueOf(String(obj[property]))); else node.put(property, java.lang.Double.valueOf(String(obj[property]))); break; case 'string': node.put(property, String(obj[property])); break; } } } } } return node; }; firebase_common_1.firebase.toJavaArray = function (val) { var javaArray = new java.util.ArrayList(); for (var i = 0; i < val.length; i++) { javaArray.add(firebase_common_1.firebase.toValue(val[i])); } return javaArray; }; firebase_common_1.firebase.toValue = function (val) { var returnVal = null; if (val !== null) { if (val instanceof Date) { returnVal = new java.util.Date(val.getTime()); } else if (Array.isArray(val)) { returnVal = firebase_common_1.firebase.toJavaArray(val); } else if (val instanceof firebase_common_1.GeoPoint) { returnVal = new com.google.firebase.firestore.GeoPoint(val.latitude, val.longitude); } else if (firebase_common_1.isDocumentReference(val)) { returnVal = val.android; } else { switch (typeof val) { case 'object': returnVal = firebase_common_1.firebase.toHashMap(val); break; case 'boolean': returnVal = java.lang.Boolean.valueOf(String(val)); break; case 'number': if (Number(val) === val && val % 1 === 0) returnVal = java.lang.Long.valueOf(String(val)); else returnVal = java.lang.Double.valueOf(String(val)); break; case 'string': returnVal = String(val); break; } } } return returnVal; }; firebase_common_1.firebase.toJsObject = function (javaObj) { if (javaObj === null || typeof javaObj !== "object") { return javaObj; } var node; switch (javaObj.getClass().getName()) { case 'java.lang.Boolean': var str = String(javaObj); return Boolean(!!(str === "True" || str === "true")); case 'java.lang.String': return String(javaObj); case 'java.lang.Integer': case 'java.lang.Long': case 'java.lang.Double': return Number(String(javaObj)); case 'java.util.Date': return new Date(javaObj.getTime()); case 'com.google.firebase.Timestamp': return new Date(javaObj.toDate().getTime()); case 'com.google.firebase.firestore.GeoPoint': return { "latitude": javaObj.getLatitude(), "longitude": javaObj.getLongitude() }; case 'com.google.firebase.firestore.DocumentReference': var path = javaObj.getPath(); var lastSlashIndex = path.lastIndexOf("/"); return firebase_common_1.firebase.firestore._getDocumentReference(javaObj, path.substring(0, lastSlashIndex), path.substring(lastSlashIndex + 1)); case 'java.util.ArrayList': node = []; for (var i = 0; i < javaObj.size(); i++) { node[i] = firebase_common_1.firebase.toJsObject(javaObj.get(i)); } break; case 'android.util.ArrayMap': case 'android.support.v4.util.ArrayMap': case 'androidx.collection.ArrayMap': node = {}; for (var i = 0; i < javaObj.size(); i++) { node[javaObj.keyAt(i)] = firebase_common_1.firebase.toJsObject(javaObj.valueAt(i)); } break; default: try { node = {}; var iterator = javaObj.entrySet().iterator(); while (iterator.hasNext()) { var item = iterator.next(); node[item.getKey()] = firebase_common_1.firebase.toJsObject(item.getValue()); } } catch (e) { if (JSON.stringify(e).includes("Attempt to use cleared object reference")) { console.log("Error while transforming Java to Js: " + e); } else { console.log("PLEASE REPORT THIS AT https://github.com/EddyVerbruggen/nativescript-plugin-firebase/issues: Tried to serialize an unsupported type: " + javaObj.getClass().getName() + ", error: " + e); } } } return node; }; firebase_common_1.firebase.getCallbackData = function (type, snapshot) { return { type: type, key: snapshot.getKey(), value: firebase_common_1.firebase.toJsObject(snapshot.getValue()) }; }; firebase_common_1.firebase.authStateListener = null; firebase_common_1.firebase.init = function (arg) { return new Promise(function (resolve, reject) { if (firebase_common_1.firebase.initialized) { reject("Firebase already initialized"); return; } firebase_common_1.firebase.initialized = true; var runInit = function () { arg = arg || {}; initializeArguments = arg; if (typeof (com.google.firebase.analytics) !== "undefined" && typeof (com.google.firebase.analytics.FirebaseAnalytics) !== "undefined") { com.google.firebase.analytics.FirebaseAnalytics.getInstance(appModule.android.context || appModule.getNativeApplication()).setAnalyticsCollectionEnabled(arg.analyticsCollectionEnabled !== false); } if (arg.crashlyticsCollectionEnabled && typeof (com.crashlytics) !== "undefined" && typeof (com.crashlytics.android.Crashlytics) !== "undefined") { io.fabric.sdk.android.Fabric.with(appModule.android.context || appModule.getNativeApplication(), [new com.crashlytics.android.Crashlytics()]); } if (typeof (com.google.firebase.database) !== "undefined" && typeof (com.google.firebase.database.ServerValue) !== "undefined") { firebase_common_1.firebase.ServerValue = { TIMESTAMP: firebase_common_1.firebase.toJsObject(com.google.firebase.database.ServerValue.TIMESTAMP) }; var fDatabase = com.google.firebase.database.FirebaseDatabase; if (arg.persist) { try { fDatabase.getInstance().setPersistenceEnabled(true); } catch (ignore) { } } firebase_common_1.firebase.instance = fDatabase.getInstance().getReference(); } if (arg.persist === false && typeof (com.google.firebase.firestore) !== "undefined") { try { com.google.firebase.firestore.FirebaseFirestore.getInstance().setFirestoreSettings(new com.google.firebase.firestore.FirebaseFirestoreSettings.Builder() .setPersistenceEnabled(false) .build()); } catch (ignore) { } } if (authEnabled()) { var firebaseAuth = com.google.firebase.auth.FirebaseAuth.getInstance(); if (arg.onAuthStateChanged) { firebase_common_1.firebase.addAuthStateListener(arg.onAuthStateChanged); } if (!firebase_common_1.firebase.authStateListener) { firebase_common_1.firebase.authStateListener = new com.google.firebase.auth.FirebaseAuth.AuthStateListener({ onAuthStateChanged: function (fbAuth) { var user = fbAuth.getCurrentUser(); firebase_common_1.firebase.notifyAuthStateListeners({ loggedIn: user !== null, user: toLoginResult(user) }); } }); firebaseAuth.addAuthStateListener(firebase_common_1.firebase.authStateListener); } } if (messagingEnabled()) { firebaseMessaging.initFirebaseMessaging(arg); } if (arg.onDynamicLinkCallback !== undefined) { firebase_common_1.firebase.addOnDynamicLinkReceivedCallback(arg.onDynamicLinkCallback); } if (arg.storageBucket) { if (typeof (com.google.firebase.storage) === "undefined") { reject("Uncomment firebase-storage in the plugin's include.gradle first"); return; } firebase_common_1.firebase.storageBucket = com.google.firebase.storage.FirebaseStorage.getInstance().getReferenceFromUrl(arg.storageBucket); } if (typeof (gmsAds) !== "undefined" && typeof (gmsAds.MobileAds) !== "undefined") { gmsAds.MobileAds.initialize(appModule.android.context); } resolve(firebase_common_1.firebase.instance); }; try { if (appModule.android.startActivity) { runInit(); } else { appModule.on(appModule.launchEvent, runInit); } } catch (ex) { console.log("Error in firebase.init: " + ex); reject(ex); } }); }; firebase_common_1.firebase.fetchSignInMethodsForEmail = function (email) { return new Promise(function (resolve, reject) { try { if (typeof (email) !== "string") { reject("A parameter representing an email address is required."); return; } var onCompleteListener = new gmsTasks.OnCompleteListener({ onComplete: function (task) { if (!task.isSuccessful()) { reject((task.getException() && task.getException().getReason ? task.getException().getReason() : task.getException())); } else { var signInMethods = task.getResult().getSignInMethods(); resolve(firebase_common_1.firebase.toJsObject(signInMethods)); } } }); com.google.firebase.auth.FirebaseAuth.getInstance().fetchSignInMethodsForEmail(email).addOnCompleteListener(onCompleteListener); } catch (ex) { console.log("Error in firebase.fetchSignInMethodsForEmail: " + ex); reject(ex); } }); }; firebase_common_1.firebase.getCurrentPushToken = firebaseMessaging.getCurrentPushToken; firebase_common_1.firebase.addOnMessageReceivedCallback = firebaseMessaging.addOnMessageReceivedCallback; firebase_common_1.firebase.addOnPushTokenReceivedCallback = firebaseMessaging.addOnPushTokenReceivedCallback; firebase_common_1.firebase.registerForPushNotifications = firebaseMessaging.registerForPushNotifications; firebase_common_1.firebase.unregisterForPushNotifications = firebaseMessaging.unregisterForPushNotifications; firebase_common_1.firebase.subscribeToTopic = firebaseMessaging.subscribeToTopic; firebase_common_1.firebase.unsubscribeFromTopic = firebaseMessaging.unsubscribeFromTopic; firebase_common_1.firebase.areNotificationsEnabled = firebaseMessaging.areNotificationsEnabled; firebase_common_1.firebase.functions = firebaseFunctions; firebase_common_1.firebase.addOnDynamicLinkReceivedCallback = function (callback) { return new Promise(function (resolve, reject) { try { if (typeof (com.google.firebase.dynamiclinks) === "undefined") { reject("Uncomment dynamic links in the plugin's include.gradle first"); return; } firebase_common_1.firebase._dynamicLinkCallback = callback; if (firebase_common_1.firebase._cachedDynamicLink !== null) { callback(firebase_common_1.firebase._cachedDynamicLink); firebase_common_1.firebase._cachedDynamicLink = null; } resolve(); } catch (ex) { console.log("Error in firebase.addOnDynamicLinkReceivedCallback: " + ex); reject(ex); } }); }; firebase_common_1.firebase.getRemoteConfigDefaults = function (properties) { var defaults = {}; for (var p in properties) { var prop = properties[p]; if (prop.default !== undefined) { defaults[prop.key] = prop.default; } } return defaults; }; firebase_common_1.firebase._isGooglePlayServicesAvailable = function () { var ctx = appModule.android.foregroundActivity || appModule.android.startActivity || appModule.getNativeApplication(); var googleApiAvailability = com.google.android.gms.common.GoogleApiAvailability.getInstance(); var playServiceStatusSuccess = 0; var playServicesStatus = googleApiAvailability.isGooglePlayServicesAvailable(ctx); var available = playServicesStatus === playServiceStatusSuccess; if (!available && googleApiAvailability.isUserResolvableError(playServicesStatus)) { googleApiAvailability.showErrorDialogFragment(ctx, playServicesStatus, 1, new android.content.DialogInterface.OnCancelListener({ onCancel: function (dialogInterface) { console.log("Canceled"); } })); } return available; }; firebase_common_1.firebase.getRemoteConfig = function (arg) { return new Promise(function (resolve, reject) { if (typeof (com.google.firebase.remoteconfig) === "undefined") { reject("Uncomment firebase-config in the plugin's include.gradle first"); return; } if (arg.properties === undefined) { reject("Argument 'properties' is missing"); return; } var runGetRemoteConfig = function () { if (!firebase_common_1.firebase._isGooglePlayServicesAvailable()) { reject("Google Play services is required for this feature, but not available on this device"); return; } var firebaseRemoteConfig = com.google.firebase.remoteconfig.FirebaseRemoteConfig.getInstance(); var remoteConfigSettingsBuilder = new com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings.Builder(); if (arg.developerMode === true) { remoteConfigSettingsBuilder.setFetchTimeoutInSeconds(0); } var onSetConfigSettingsCompleteListener = new gmsTasks.OnCompleteListener({ onComplete: function (task) { if (!task.isSuccessful()) { reject((task.getException() && task.getException().getReason ? task.getException().getReason() : task.getException())); } else { var defaults = firebase_common_1.firebase.getRemoteConfigDefaults(arg.properties); firebaseRemoteConfig.setDefaultsAsync(firebase_common_1.firebase.toHashMap(defaults)) .addOnCompleteListener(new gmsTasks.OnCompleteListener({ onComplete: function (task) { if (!task.isSuccessful()) { reject((task.getException() && task.getException().getReason ? task.getException().getReason() : task.getException())); } else { var returnMethod_1 = function (throttled) { var addOnCompleteActivateListener = new gmsTasks.OnCompleteListener({ onComplete: function (task) { if (!task.isSuccessful()) { reject((task.getException() && task.getException().getReason ? task.getException().getReason() : task.getException())); } else { var lastFetchTime = firebaseRemoteConfig.getInfo().getFetchTimeMillis(); var lastFetch = new Date(lastFetchTime); var result = { lastFetch: lastFetch, throttled: throttled, properties: {} }; for (var p in arg.properties) { var prop = arg.properties[p]; var key = prop.key; var value = firebaseRemoteConfig.getString(key); result.properties[key] = firebase_common_1.firebase.strongTypeify(value); } resolve(result); } } }); firebaseRemoteConfig.activate().addOnCompleteListener(addOnCompleteActivateListener); }; var onSuccessListener = new gmsTasks.OnSuccessListener({ onSuccess: function () { return returnMethod_1(false); } }); var onFailureListener = new gmsTasks.OnFailureListener({ onFailure: function (exception) { if (exception.getMessage() === "com.google.firebase.remoteconfig.FirebaseRemoteConfigFetchThrottledException") { returnMethod_1(true); } else { reject("Retrieving remote config data failed. " + exception); } } }); var expirationDuration = arg.cacheExpirationSeconds || 43200; firebaseRemoteConfig.fetch(expirationDuration) .addOnSuccessListener(onSuccessListener) .addOnFailureListener(onFailureListener); } } })); } } }); firebaseRemoteConfig.setConfigSettingsAsync(remoteConfigSettingsBuilder.build()) .addOnCompleteListener(onSetConfigSettingsCompleteListener); }; try { if (appModule.android.foregroundActivity) { runGetRemoteConfig(); } else { var callback_1 = function () { runGetRemoteConfig(); appModule.off(appModule.resumeEvent, callback_1); }; appModule.on(appModule.resumeEvent, callback_1); } } catch (ex) { console.log("Error in firebase.getRemoteConfig: " + ex); reject(ex); } }); }; firebase_common_1.firebase.getCurrentUser = function (arg) { return new Promise(function (resolve, reject) { try { var firebaseAuth = com.google.firebase.auth.FirebaseAuth.getInstance(); var user = firebaseAuth.getCurrentUser(); if (user !== null) { resolve(toLoginResult(user)); } else { reject(); } } catch (ex) { console.log("Error in firebase.getCurrentUser: " + ex); reject(ex); } }); }; firebase_common_1.firebase.sendEmailVerification = function (actionCodeSettings) { return new Promise(function (resolve, reject) { try { var firebaseAuth = com.google.firebase.auth.FirebaseAuth.getInstance(); var user = firebaseAuth.getCurrentUser(); if (user !== null) { var addOnCompleteListener = new gmsTasks.OnCompleteListener({ onComplete: function (task) { if (!task.isSuccessful()) { reject((task.getException() && task.getException().getReason ? task.getException().getReason() : task.getException())); } else { resolve(); } } }); if (actionCodeSettings) { var settingsBuilder = new com.google.firebase.auth.ActionCodeSettings.newBuilder(); if (actionCodeSettings.handleCodeInApp !== undefined) { settingsBuilder.setHandleCodeInApp(actionCodeSettings.handleCodeInApp); } if (actionCodeSettings.url) { settingsBuilder.setUrl(actionCodeSettings.url); } if (actionCodeSettings.iOS && actionCodeSettings.iOS.bundleId) { settingsBuilder.setIOSBundleId(actionCodeSettings.iOS.bundleId); } if (actionCodeSettings.android && actionCodeSettings.android.packageName) { settingsBuilder.setAndroidPackageName(actionCodeSettings.android.packageName, actionCodeSettings.android.installApp, actionCodeSettings.android.minimumVersion || null); } user.sendEmailVerification(settingsBuilder.build()).addOnCompleteListener(addOnCompleteListener); } else { user.sendEmailVerification().addOnCompleteListener(addOnCompleteListener); } } else { reject("Log in first"); } } catch (ex) { console.log("Error in firebase.sendEmailVerification: " + ex); reject(ex); } }); }; firebase_common_1.firebase.logout = function (arg) { return new Promise(function (resolve, reject) { try { com.google.firebase.auth.FirebaseAuth.getInstance().signOut(); firebase_common_1.firebase.currentAdditionalUserInfo = null; if (firebase_common_1.firebase._mGoogleApiClient && firebase_common_1.firebase._mGoogleApiClient.isConnected()) { com.google.android.gms.auth.api.Auth.GoogleSignInApi.revokeAccess(firebase_common_1.firebase._mGoogleApiClient); } if (typeof (com.facebook) !== "undefined" && typeof (com.facebook.login) !== "undefined") { com.facebook.login.LoginManager.getInstance().logOut(); } resolve(); } catch (ex) { console.log("Error in firebase.logout: " + ex); reject(ex); } }); }; firebase_common_1.firebase.unlink = function (providerId) { return new Promise(function (resolve, reject) { try { var user = com.google.firebase.auth.FirebaseAuth.getInstance().getCurrentUser(); if (!user) { reject("Not logged in"); return; } user.unlink(providerId) .addOnCompleteListener(new gmsTasks.OnCompleteListener({ onComplete: function (task) { if (task.isSuccessful()) { resolve(); } else { reject((task.getException() && task.getException().getReason ? task.getException().getReason() : task.getException())); } } })); } catch (ex) { console.log("Error in firebase.unlink: " + ex); reject(ex); } }); }; firebase_common_1.firebase.getAuthToken = function (arg) { return new Promise(function (resolve, reject) { try { var firebaseAuth = com.google.firebase.auth.FirebaseAuth.getInstance(); var user = firebaseAuth.getCurrentUser(); if (user !== null) { var onSuccessListener = new gmsTasks.OnSuccessListener({ onSuccess: function (tokenResult) { resolve({ token: tokenResult.getToken(), claims: firebase_common_1.firebase.toJsObject(tokenResult.getClaims()), signInProvider: tokenResult.getSignInProvider(), expirationTime: tokenResult.getExpirationTimestamp(), issuedAtTime: tokenResult.getIssuedAtTimestamp(), authTime: tokenResult.getAuthTimestamp() }); } }); var onFailureListener = new gmsTasks.OnFailureListener({ onFailure: function (exception) { reject(exception); } }); user.getIdToken(arg.forceRefresh) .addOnSuccessListener(onSuccessListener) .addOnFailureListener(onFailureListener); } else { reject("Log in first"); } } catch (ex) { console.log("Error in firebase.getAuthToken: " + ex); reject(ex); } }); }; function toLoginResult(user, additionalUserInfo) { if (user === null) { return null; } if (additionalUserInfo) { firebase_common_1.firebase.currentAdditionalUserInfo = additionalUserInfo; } var providers = []; var providerData = user.getProviderData(); for (var i = 0; i < providerData.size(); i++) { var pid = providerData.get(i).getProviderId(); if (pid === 'facebook.com') { providers.push({ id: pid, token: firebase_common_1.firebase._facebookAccessToken }); } else if (pid === 'google.com') { providers.push({ id: pid, token: firebase_common_1.firebase._googleSignInIdToken }); } else if (pid === 'apple.com') { providers.push({ id: pid, token: firebase_common_1.firebase._appleSignInIdToken }); } else { providers.push({ id: pid }); } } var loginResult = { uid: user.getUid(), displayName: user.getDisplayName(), email: user.getEmail(), emailVerified: user.isEmailVerified(), providers: providers, anonymous: user.isAnonymous(), isAnonymous: user.isAnonymous(), phoneNumber: user.getPhoneNumber(), photoURL: user.getPhotoUrl() ? user.getPhotoUrl().toString() : null, metadata: { creationTimestamp: user.getMetadata() ? new Date(user.getMetadata().getCreationTimestamp()) : null, lastSignInTimestamp: user.getMetadata() ? new Date(user.getMetadata().getLastSignInTimestamp()) : null }, getIdToken: function (forceRefresh) { return new Promise(function (resolve, reject) { firebase_common_1.firebase.getAuthToken({ forceRefresh: forceRefresh }) .then(function (result) { return resolve(result.token); }) .catch(reject); }); }, getIdTokenResult: function (forceRefresh) { return new Promise(function (resolve, reject) { firebase_common_1.firebase.getAuthToken({ forceRefresh: forceRefresh }) .then(function (result) { return resolve(result); }) .catch(reject); }); }, sendEmailVerification: function (actionCodeSettings) { return firebase_common_1.firebase.sendEmailVerification(actionCodeSettings); } }; if (firebase_common_1.firebase.currentAdditionalUserInfo) { loginResult.additionalUserInfo = { providerId: firebase_common_1.firebase.currentAdditionalUserInfo.getProviderId(), username: firebase_common_1.firebase.currentAdditionalUserInfo.getUsername(), isNewUser: firebase_common_1.firebase.currentAdditionalUserInfo.isNewUser(), profile: firebase_common_1.firebase.toJsObject(firebase_common_1.firebase.currentAdditionalUserInfo.getProfile()) }; } return loginResult; } firebase_common_1.firebase.login = function (arg) { return new Promise(function (resolve, reject) { try { _this.resolve = resolve; _this.reject = reject; if (!firebase_common_1.firebase._isGooglePlayServicesAvailable()) { reject("Google Play services is required for this feature, but not available on this device"); return; } firebase_common_1.firebase.moveLoginOptionsToObjects(arg); var firebaseAuth_1 = com.google.firebase.auth.FirebaseAuth.getInstance(); var onCompleteListener_1 = new gmsTasks.OnCompleteListener({ onComplete: function (task) { if (!task.isSuccessful()) { console.log("Logging in the user failed. " + (task.getException() && task.getException().getReason ? task.getException().getReason() : task.getException())); if (firebase_common_1.firebase._mGoogleApiClient) { com.google.android.gms.auth.api.Auth.GoogleSignInApi.revokeAccess(firebase_common_1.firebase._mGoogleApiClient); } _this.reject("Logging in the user failed. " + (task.getException() && task.getException().getReason ? task.getException().getReason() : task.getException())); } else { var user = task.getResult().getUser(); var additionalUserInfo = task.getResult().getAdditionalUserInfo(); _this.resolve(toLoginResult(user, additionalUserInfo)); } } }); if (arg.type === firebase_common_1.firebase.LoginType.ANONYMOUS) { firebaseAuth_1.signInAnonymously().addOnCompleteListener(onCompleteListener_1); } else if (arg.type === firebase_common_1.firebase.LoginType.PASSWORD) { if (!arg.passwordOptions || !arg.passwordOptions.email || !arg.passwordOptions.password) { reject("Auth type PASSWORD requires an 'passwordOptions.email' and 'passwordOptions.password' argument"); return; } var user = com.google.firebase.auth.FirebaseAuth.getInstance().getCurrentUser(); if (user) { if (firebase_common_1.firebase._alreadyLinkedToAuthProvider(user, "password")) { firebaseAuth_1.signInWithEmailAndPassword(arg.passwordOptions.email, arg.passwordOptions.password).addOnCompleteListener(onCompleteListener_1); } else { var authCredential = com.google.firebase.auth.EmailAuthProvider.getCredential(arg.passwordOptions.email, arg.passwordOptions.password); user.linkWithCredential(authCredential).addOnCompleteListener(onCompleteListener_1); } } else { firebaseAuth_1.signInWithEmailAndPassword(arg.passwordOptions.email, arg.passwordOptions.password).addOnCompleteListener(onCompleteListener_1); } } else if (arg.type === firebase_common_1.firebase.LoginType.EMAIL_LINK) { if (!arg.emailLinkOptions || !arg.emailLinkOptions.email) { reject("Auth type EMAIL_LINK requires an 'emailLinkOptions.email' argument"); return; } if (!arg.emailLinkOptions.url) { reject("Auth type EMAIL_LINK requires an 'emailLinkOptions.url' argument"); return; } var actionCodeSettings = com.google.firebase.auth.ActionCodeSettings.newBuilder() .setUrl(arg.emailLinkOptions.url) .setHandleCodeInApp(true) .setIOSBundleId(arg.emailLinkOptions.iOS ? arg.emailLinkOptions.iOS.bundleId : appModule.android.context.getPackageName()) .setAndroidPackageName(arg.emailLinkOptions.android ? arg.emailLinkOptions.android.packageName : appModule.android.context.getPackageName(), arg.emailLinkOptions.android ? arg.emailLinkOptions.android.installApp || false : false, arg.emailLinkOptions.android ? arg.emailLinkOptions.android.minimumVersion || "1" : "1") .build(); var onEmailLinkCompleteListener = new gmsTasks.OnCompleteListener({ onComplete: function (task) { if (!task.isSuccessful()) { reject((task.getException() && task.getException().getReason ? task.getException().getReason() : task.getException())); } else { firebase_common_1.firebase.rememberEmailForEmailLinkLogin(arg.emailLinkOptions.email); resolve(); } } }); firebaseAuth_1.sendSignInLinkToEmail(arg.emailLinkOptions.email, actionCodeSettings).addOnCompleteListener(onEmailLinkCompleteListener); } else if (arg.type === firebase_common_1.firebase.LoginType.PHONE) { if (!arg.phoneOptions || !arg.phoneOptions.phoneNumber) { reject("Auth type PHONE requires a 'phoneOptions.phoneNumber' argument"); return; } var user = com.google.firebase.auth.FirebaseAuth.getInstance().getCurrentUser(); if (user && firebase_common_1.firebase._alreadyLinkedToAuthProvider(user, "phone")) { resolve(toLoginResult(user)); return; } var OnVerificationStateChangedCallbacks = com.google.firebase.auth.PhoneAuthProvider.OnVerificationStateChangedCallbacks.extend({ onVerificationCompleted: function (phoneAuthCredential) { firebase_common_1.firebase._verifyPhoneNumberInProgress = false; var user = com.google.firebase.auth.FirebaseAuth.getInstance().getCurrentUser(); if (!user || firebase_common_1.firebase._alreadyLinkedToAuthProvider(user, "phone")) { firebaseAuth_1.signInWithCredential(phoneAuthCredential).addOnCompleteListener(onCompleteListener_1); } else { user.linkWithCredential(phoneAuthCredential).addOnCompleteListener(onCompleteListener_1); } }, onVerificationFailed: function (firebaseException) { firebase_common_1.firebase._verifyPhoneNumberInProgress = false; var errorMessage = firebaseException.getMessage(); if (errorMessage.includes("INVALID_APP_CREDENTIAL")) { _this.reject("Please upload the SHA1 fingerprint of your debug and release keystores to the Firebase console, see https://github.com/EddyVerbruggen/nativescript-plugin-firebase/blob/master/docs/AUTHENTICATION.md#phone-verification"); } else { _this.reject(errorMessage); } }, onCodeSent: function (verificationId, forceResendingToken) { setTimeout(function () { if (firebase_common_1.firebase._verifyPhoneNumberInProgress) { firebase_common_1.firebase._verifyPhoneNumberInProgress = false; firebase_common_1.firebase.requestPhoneAuthVerificationCode(function (userResponse) { if (userResponse === undefined && _this.reject) { _this.reject("Prompt was canceled"); return; } var authCredential = com.google.firebase.auth.PhoneAuthProvider.getCredential(verificationId, userResponse); var user = com.google.firebase.auth.FirebaseAuth.getInstance().getCurrentUser(); if (!user || firebase_common_1.firebase._alreadyLinkedToAuthProvider(user, "phone")) { firebaseAuth_1.signInWithCredential(authCredential).addOnCompleteListener(onCompleteListener_1); } else { user.linkWithCredential(authCredential).addOnCompleteListener(onCompleteListener_1); } }, arg.phoneOptions.verificationPrompt); } }, 3000); } }); firebase_common_1.firebase._verifyPhoneNumberInProgress = true; var timeout = arg.phoneOptions.android ? arg.phoneOptions.android.timeout : 60; com.google.firebase.auth.PhoneAuthProvider.getInstance().verifyPhoneNumber(arg.phoneOptions.phoneNumber, timeout, java.util.concurrent.TimeUnit.SECONDS, appModule.android.foregroundActivity, new OnVerificationStateChangedCallbacks()); } else if (arg.type === firebase_common_1.firebase.LoginType.CUSTOM) { if (!arg.customOptions || (!arg.customOptions.token && !arg.customOptions.tokenProviderFn)) { reject("Auth type CUSTOM requires a 'customOptions.token' or 'customOptions.tokenProviderFn' argument"); return; } if (arg.customOptions.token) { firebaseAuth_1.signInWithCustomToken(arg.customOptions.token).addOnCompleteListener(onCompleteListener_1); } else if (arg.customOptions.tokenProviderFn) { arg.customOptions.tokenProviderFn() .then(function (token) { firebaseAuth_1.signInWithCustomToken(token).addOnCompleteListener(onCompleteListener_1); }, function (error) { reject(error); }); } } else if (arg.type === firebase_common_1.firebase.LoginType.FACEBOOK) { if (typeof (com.facebook) === "undefined" || typeof (com.facebook.FacebookSdk) === "undefined") { reject("Facebook SDK not installed - see gradle config"); return; } if (!fbCallbackManager) { com.facebook.FacebookSdk.sdkInitialize(appModule.getNativeApplication()); fbCallbackManager = com.facebook.CallbackManager.Factory.create(); } var callback_2 = function (eventData) { appModule.android.off(appModule.AndroidApplication.activityResultEvent, callback_2); fbCallbackManager.onActivityResult(eventData.requestCode, eventData.resultCode, eventData.intent); }; appModule.android.on(appModule.AndroidApplication.activityResultEvent, callback_2); var fbLoginManager = com.facebook.login.LoginManager.getInstance(); fbLoginManager.registerCallback(fbCallbackManager, new com.facebook.FacebookCallback({ onSuccess: functio