UNPKG

nativescript-ssoauth

Version:

An advanced webview using Chrome CustomTabs on Android and SFSafariViewController on iOS.

123 lines (122 loc) 4.97 kB
"use strict"; 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;