nativescript-ssoauth
Version:
An advanced webview using Chrome CustomTabs on Android and SFSafariViewController on iOS.
123 lines (122 loc) • 4.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var color_1 = require("tns-core-modules/color");
var app = require("tns-core-modules/application");
var utils = require("tns-core-modules/utils/utils");
var ssoauth_common_1 = require("./ssoauth.common");
var REQUEST_CODE = 1868;
var NavigationEvent;
(function (NavigationEvent) {
NavigationEvent[NavigationEvent["Started"] = 1] = "Started";
NavigationEvent[NavigationEvent["Finished"] = 2] = "Finished";
NavigationEvent[NavigationEvent["Failed"] = 3] = "Failed";
NavigationEvent[NavigationEvent["Aborted"] = 4] = "Aborted";
NavigationEvent[NavigationEvent["TabShown"] = 5] = "TabShown";
NavigationEvent[NavigationEvent["TabHidden"] = 6] = "TabHidden";
})(NavigationEvent || (NavigationEvent = {}));
var URL_HANDLER_CALLBACK;
function getUrlHandleCallback() {
if (!URL_HANDLER_CALLBACK) {
URL_HANDLER_CALLBACK = function () {
console.error('No callback.');
};
}
return URL_HANDLER_CALLBACK;
}
function handleOpenURL(handler) {
URL_HANDLER_CALLBACK = handler;
}
function init() {
co.fitcom.fancywebview.AdvancedWebView.init(utils.ad.getApplicationContext(), true);
}
exports.init = init;
function SSOAuthExtractAppUrl(url) {
return ssoauth_common_1.extractAppURL(url);
}
exports.SSOAuthExtractAppUrl = SSOAuthExtractAppUrl;
function SSOAuthOpenUrl(options) {
if (!options.url) {
throw new Error('No url set in the Advanced WebView Options object.');
}
var activity = app.android.startActivity || app.android.foregroundActivity;
var isClosedManually = true;
var redirectionUrl = '';
app.android.on(app.AndroidApplication.activityResultEvent, function (args) {
var requestCode = args.requestCode;
var resultCode = args.resultCode;
if (requestCode === REQUEST_CODE) {
if (resultCode === android.app.Activity.RESULT_CANCELED) {
if (options.onManualClose && typeof options.onManualClose === 'function') {
options.onManualClose(true);
}
app.android.off(app.AndroidApplication.activityResultEvent);
}
}
});
var advancedWebViewListener = new co.fitcom.fancywebview.AdvancedWebViewListener({
onCustomTabsServiceConnected: function (componentName, client) { },
onServiceDisconnected: function (componentName) { },
onNavigationEvent: function (navigationEvent, extras) {
switch (navigationEvent) {
case NavigationEvent.TabShown:
if (options.isLogout) {
options.successCompletionHandler(null);
}
break;
case NavigationEvent.TabHidden:
if (!isClosedManually) {
options.successCompletionHandler(redirectionUrl);
return;
}
if (options.onManualClose && typeof options.onManualClose === 'function') {
options.onManualClose(true);
}
break;
}
}
});
var wv = new co.fitcom.fancywebview.AdvancedWebView(activity, advancedWebViewListener);
var intentBuilder = wv.getBuilder();
if (intentBuilder) {
if (options.toolbarColor) {
intentBuilder.setToolbarColor(new color_1.Color(options.toolbarColor).android);
}
if (options.showTitle) {
intentBuilder.setShowTitle(options.showTitle);
}
intentBuilder.addDefaultShareMenuItem();
intentBuilder.enableUrlBarHiding();
}
if (!options.isLogout) {
handleOpenURL(function (url) {
if (options.successCompletionHandler && typeof options.successCompletionHandler === 'function' && url) {
isClosedManually = false;
redirectionUrl = url;
}
});
}
wv.loadUrl(options.url);
}
exports.SSOAuthOpenUrl = SSOAuthOpenUrl;
function SSOAuthOpenUrlBroadcastRedirectionURL(intent) {
var data = intent.getData();
try {
var appURL_1 = data;
if (appURL_1 != null &&
(new String(intent.getAction()).valueOf() === new String(android.content.Intent.ACTION_MAIN).valueOf() ||
new String(intent.getAction()).valueOf() === new String(android.content.Intent.ACTION_VIEW).valueOf())) {
try {
getUrlHandleCallback()(appURL_1.toString());
}
catch (ignored) {
app.android.on(app.AndroidApplication.activityResultEvent, function () {
getUrlHandleCallback()(appURL_1.toString());
});
}
}
}
catch (e) {
console.error('Unknown error during getting App URL data', e);
}
}
exports.SSOAuthOpenUrlBroadcastRedirectionURL = SSOAuthOpenUrlBroadcastRedirectionURL;