nativescript-plugin-firebase-ssi
Version:
932 lines • 123 kB
JavaScript
"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