diff --git a/dist/vue-authenticate.js b/dist/vue-authenticate.js new file mode 100644 index 0000000..245cba7 --- /dev/null +++ b/dist/vue-authenticate.js @@ -0,0 +1,1398 @@ +/** + * vue-authenticate 1.0.9 + * (c) 2016 Davor Grubelić + * License: MIT + */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (factory((global['vue-authenticate'] = global['vue-authenticate'] || {}))); +}(this, (function (exports) { 'use strict'; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; +} : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; +}; + + + + + + + + + + + +var classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +}; + +var createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; +}(); + +if (typeof Object.assign != 'function') { + Object.assign = function (target, varArgs) { + 'use strict'; + + if (target == null) { + throw new TypeError('Cannot convert undefined or null to object'); + } + + var to = Object(target); + + for (var index = 1; index < arguments.length; index++) { + var nextSource = arguments[index]; + + if (nextSource != null) { + // Skip over if undefined or null + for (var nextKey in nextSource) { + // Avoid bugs when hasOwnProperty is shadowed + if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { + to[nextKey] = nextSource[nextKey]; + } + } + } + } + return to; + }; +} + +function camelCase(name) { + return name.replace(/([\:\-\_]+(.))/g, function (_, separator, letter, offset) { + return offset ? letter.toUpperCase() : letter; + }); +} + + + + + +function isObject(value) { + return value !== null && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object'; +} + +function isString(value) { + return typeof value === 'string'; +} + + + +function isFunction(value) { + return typeof value === 'function'; +} + +function objectExtend(a, b) { + + // Don't touch 'null' or 'undefined' objects. + if (a == null || b == null) { + return a; + } + + Object.keys(b).forEach(function (key) { + if (Object.prototype.toString.call(b[key]) == '[object Object]') { + if (Object.prototype.toString.call(a[key]) != '[object Object]') { + a[key] = b[key]; + } else { + a[key] = objectExtend(a[key], b[key]); + } + } else { + a[key] = b[key]; + } + }); + + return a; +} + +/** + * Assemble url from two segments + * + * @author Sahat Yalkabov + * @copyright Method taken from https://github.com/sahat/satellizer + * + * @param {String} baseUrl Base url + * @param {String} url URI + * @return {String} + */ +function joinUrl(baseUrl, url) { + if (/^(?:[a-z]+:)?\/\//i.test(url)) { + return url; + } + var joined = [baseUrl, url].join('/'); + var normalize = function normalize(str) { + return str.replace(/[\/]+/g, '/').replace(/\/\?/g, '?').replace(/\/\#/g, '#').replace(/\:\//g, '://'); + }; + return normalize(joined); +} + +/** + * Get full path based on current location + * + * @author Sahat Yalkabov + * @copyright Method taken from https://github.com/sahat/satellizer + * + * @param {Location} location + * @return {String} + */ +function getFullUrlPath(location) { + var isHttps = location.protocol === 'https:'; + return location.protocol + '//' + location.hostname + ':' + (location.port || (isHttps ? '443' : '80')) + (/^\//.test(location.pathname) ? location.pathname : '/' + location.pathname); +} + +/** + * Parse query string variables + * + * @author Sahat Yalkabov + * @copyright Method taken from https://github.com/sahat/satellizer + * + * @param {String} Query string + * @return {String} + */ +function parseQueryString(str) { + var obj = {}; + var key = void 0; + var value = void 0; + (str || '').split('&').forEach(function (keyValue) { + if (keyValue) { + value = keyValue.split('='); + key = decodeURIComponent(value[0]); + obj[key] = !!value[1] ? decodeURIComponent(value[1]) : true; + } + }); + return obj; +} + +/** + * Decode base64 string + * @author Sahat Yalkabov + * @copyright Method taken from https://github.com/sahat/satellizer + * + * @param {String} str base64 encoded string + * @return {Object} + */ +function decodeBase64(str) { + var buffer = void 0; + if (typeof module !== 'undefined' && module.exports) { + try { + buffer = require('buffer').Buffer; + } catch (err) { + // noop + } + } + + var fromCharCode = String.fromCharCode; + + var re_btou = new RegExp(['[\xC0-\xDF][\x80-\xBF]', '[\xE0-\xEF][\x80-\xBF]{2}', '[\xF0-\xF7][\x80-\xBF]{3}'].join('|'), 'g'); + + var cb_btou = function cb_btou(cccc) { + switch (cccc.length) { + case 4: + var cp = (0x07 & cccc.charCodeAt(0)) << 18 | (0x3f & cccc.charCodeAt(1)) << 12 | (0x3f & cccc.charCodeAt(2)) << 6 | 0x3f & cccc.charCodeAt(3); + var offset = cp - 0x10000; + return fromCharCode((offset >>> 10) + 0xD800) + fromCharCode((offset & 0x3FF) + 0xDC00); + case 3: + return fromCharCode((0x0f & cccc.charCodeAt(0)) << 12 | (0x3f & cccc.charCodeAt(1)) << 6 | 0x3f & cccc.charCodeAt(2)); + default: + return fromCharCode((0x1f & cccc.charCodeAt(0)) << 6 | 0x3f & cccc.charCodeAt(1)); + } + }; + + var btou = function btou(b) { + return b.replace(re_btou, cb_btou); + }; + + var _decode = buffer ? function (a) { + return (a.constructor === buffer.constructor ? a : new buffer(a, 'base64')).toString(); + } : function (a) { + return btou(atob(a)); + }; + + return _decode(String(str).replace(/[-_]/g, function (m0) { + return m0 === '-' ? '+' : '/'; + }).replace(/[^A-Za-z0-9\+\/]/g, '')); +} + +// Store setTimeout reference so promise-polyfill will be unaffected by +// other code modifying setTimeout (like sinon.useFakeTimers()) +var setTimeoutFunc = setTimeout; + +function noop() {} + +// Polyfill for Function.prototype.bind +function bind(fn, thisArg) { + return function () { + fn.apply(thisArg, arguments); + }; +} + +function Promise$1(fn) { + if (_typeof(this) !== 'object') throw new TypeError('Promises must be constructed via new'); + if (typeof fn !== 'function') throw new TypeError('not a function'); + this._state = 0; + this._handled = false; + this._value = undefined; + this._deferreds = []; + + doResolve(fn, this); +} + +function handle(self, deferred) { + while (self._state === 3) { + self = self._value; + } + if (self._state === 0) { + self._deferreds.push(deferred); + return; + } + self._handled = true; + Promise$1._immediateFn(function () { + var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected; + if (cb === null) { + (self._state === 1 ? resolve : reject)(deferred.promise, self._value); + return; + } + var ret; + try { + ret = cb(self._value); + } catch (e) { + reject(deferred.promise, e); + return; + } + resolve(deferred.promise, ret); + }); +} + +function resolve(self, newValue) { + try { + // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure + if (newValue === self) throw new TypeError('A promise cannot be resolved with itself.'); + if (newValue && ((typeof newValue === 'undefined' ? 'undefined' : _typeof(newValue)) === 'object' || typeof newValue === 'function')) { + var then = newValue.then; + if (newValue instanceof Promise$1) { + self._state = 3; + self._value = newValue; + finale(self); + return; + } else if (typeof then === 'function') { + doResolve(bind(then, newValue), self); + return; + } + } + self._state = 1; + self._value = newValue; + finale(self); + } catch (e) { + reject(self, e); + } +} + +function reject(self, newValue) { + self._state = 2; + self._value = newValue; + finale(self); +} + +function finale(self) { + if (self._state === 2 && self._deferreds.length === 0) { + Promise$1._immediateFn(function () { + if (!self._handled) { + Promise$1._unhandledRejectionFn(self._value); + } + }); + } + + for (var i = 0, len = self._deferreds.length; i < len; i++) { + handle(self, self._deferreds[i]); + } + self._deferreds = null; +} + +function Handler(onFulfilled, onRejected, promise) { + this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; + this.onRejected = typeof onRejected === 'function' ? onRejected : null; + this.promise = promise; +} + +/** + * Take a potentially misbehaving resolver function and make sure + * onFulfilled and onRejected are only called once. + * + * Makes no guarantees about asynchrony. + */ +function doResolve(fn, self) { + var done = false; + try { + fn(function (value) { + if (done) return; + done = true; + resolve(self, value); + }, function (reason) { + if (done) return; + done = true; + reject(self, reason); + }); + } catch (ex) { + if (done) return; + done = true; + reject(self, ex); + } +} + +Promise$1.prototype['catch'] = function (onRejected) { + return this.then(null, onRejected); +}; + +Promise$1.prototype.then = function (onFulfilled, onRejected) { + var prom = new this.constructor(noop); + + handle(this, new Handler(onFulfilled, onRejected, prom)); + return prom; +}; + +Promise$1.all = function (arr) { + var args = Array.prototype.slice.call(arr); + + return new Promise$1(function (resolve, reject) { + if (args.length === 0) return resolve([]); + var remaining = args.length; + + function res(i, val) { + try { + if (val && ((typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object' || typeof val === 'function')) { + var then = val.then; + if (typeof then === 'function') { + then.call(val, function (val) { + res(i, val); + }, reject); + return; + } + } + args[i] = val; + if (--remaining === 0) { + resolve(args); + } + } catch (ex) { + reject(ex); + } + } + + for (var i = 0; i < args.length; i++) { + res(i, args[i]); + } + }); +}; + +Promise$1.resolve = function (value) { + if (value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.constructor === Promise$1) { + return value; + } + + return new Promise$1(function (resolve) { + resolve(value); + }); +}; + +Promise$1.reject = function (value) { + return new Promise$1(function (resolve, reject) { + reject(value); + }); +}; + +Promise$1.race = function (values) { + return new Promise$1(function (resolve, reject) { + for (var i = 0, len = values.length; i < len; i++) { + values[i].then(resolve, reject); + } + }); +}; + +// Use polyfill for setImmediate for performance gains +Promise$1._immediateFn = typeof setImmediate === 'function' && function (fn) { + setImmediate(fn); +} || function (fn) { + setTimeoutFunc(fn, 0); +}; + +Promise$1._unhandledRejectionFn = function _unhandledRejectionFn(err) { + if (typeof console !== 'undefined' && console) { + console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console + } +}; + +/** + * Set the immediate function to execute callbacks + * @param fn {function} Function to execute + * @deprecated + */ +Promise$1._setImmediateFn = function _setImmediateFn(fn) { + Promise$1._immediateFn = fn; +}; + +/** + * Change the function to execute on unhandled rejection + * @param {function} fn Function to execute on unhandled rejection + * @deprecated + */ +Promise$1._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) { + Promise$1._unhandledRejectionFn = fn; +}; + +/** + * Default configuration + */ +var defaultOptions = { + baseUrl: null, + tokenName: 'token', + tokenPrefix: 'vueauth', + tokenHeader: 'Authorization', + tokenType: 'Bearer', + loginUrl: '/auth/login', + registerUrl: '/auth/register', + logoutUrl: null, + storageType: 'localStorage', + storageNamespace: 'vue-authenticate', + requestDataKey: 'body', + responseDataKey: 'body', + bindRequestInterceptor: null, + bindResponseInterceptor: null, + + providers: { + facebook: { + name: 'facebook', + url: '/auth/facebook', + authorizationEndpoint: 'https://www.facebook.com/v2.5/dialog/oauth', + redirectUri: null, + requiredUrlParams: ['display', 'scope'], + scope: ['email'], + scopeDelimiter: ',', + display: 'popup', + oauthType: '2.0', + popupOptions: { width: 580, height: 400 } + }, + + google: { + name: 'google', + url: '/auth/google', + authorizationEndpoint: 'https://accounts.google.com/o/oauth2/auth', + redirectUri: null, + requiredUrlParams: ['scope'], + optionalUrlParams: ['display'], + scope: ['profile', 'email'], + scopePrefix: 'openid', + scopeDelimiter: ' ', + display: 'popup', + oauthType: '2.0', + popupOptions: { width: 452, height: 633 } + }, + + github: { + name: 'github', + url: '/auth/github', + authorizationEndpoint: 'https://github.com/login/oauth/authorize', + redirectUri: null, + optionalUrlParams: ['scope'], + scope: ['user:email'], + scopeDelimiter: ' ', + oauthType: '2.0', + popupOptions: { width: 1020, height: 618 } + }, + + instagram: { + name: 'instagram', + url: '/auth/instagram', + authorizationEndpoint: 'https://api.instagram.com/oauth/authorize', + redirectUri: null, + requiredUrlParams: ['scope'], + scope: ['basic'], + scopeDelimiter: '+', + oauthType: '2.0' + }, + + twitter: { + name: 'twitter', + url: '/auth/twitter', + authorizationEndpoint: 'https://api.twitter.com/oauth/authenticate', + redirectUri: null, + oauthType: '1.0', + popupOptions: { width: 495, height: 645 } + }, + + bitbucket: { + name: 'bitbucket', + url: '/auth/bitbucket', + authorizationEndpoint: 'https://bitbucket.org/site/oauth2/authorize', + redirectUri: null, + optionalUrlParams: ['scope'], + scope: ['email'], + scopeDelimiter: ' ', + oauthType: '2.0', + popupOptions: { width: 1020, height: 618 } + } + } +}; + +var LocalStorage = function () { + function LocalStorage(namespace) { + classCallCheck(this, LocalStorage); + + this.namespace = namespace || null; + } + + createClass(LocalStorage, [{ + key: 'setItem', + value: function setItem(key, value) { + window.localStorage.setItem(this._getStorageKey(key), value); + } + }, { + key: 'getItem', + value: function getItem(key) { + return window.localStorage.getItem(this._getStorageKey(key)); + } + }, { + key: 'removeItem', + value: function removeItem(key) { + window.localStorage.removeItem(this._getStorageKey(key)); + } + }, { + key: '_getStorageKey', + value: function _getStorageKey(key) { + if (this.namespace) { + return [this.namespace, key].join('.'); + } + return key; + } + }]); + return LocalStorage; +}(); + +var MemoryStorage = function () { + function MemoryStorage(namespace) { + classCallCheck(this, MemoryStorage); + + this.namespace = namespace || null; + this._storage = {}; + } + + createClass(MemoryStorage, [{ + key: 'setItem', + value: function setItem(key, value) { + this._storage[this._getStorageKey(key)] = value; + } + }, { + key: 'getItem', + value: function getItem(key) { + return this._storage[this._getStorageKey(key)]; + } + }, { + key: 'removeItem', + value: function removeItem(key) { + delete this._storage[this._getStorageKey(key)]; + } + }, { + key: '_getStorageKey', + value: function _getStorageKey(key) { + if (this.namespace) { + return [this.namespace, key].join('.'); + } + return key; + } + }]); + return MemoryStorage; +}(); + +var LocalStorage$2 = function () { + function LocalStorage(namespace) { + classCallCheck(this, LocalStorage); + + this.namespace = namespace || null; + } + + createClass(LocalStorage, [{ + key: 'setItem', + value: function setItem(key, value) { + window.sessionStorage.setItem(this._getStorageKey(key), value); + } + }, { + key: 'getItem', + value: function getItem(key) { + return window.sessionStorage.getItem(this._getStorageKey(key)); + } + }, { + key: 'removeItem', + value: function removeItem(key) { + window.sessionStorage.removeItem(this._getStorageKey(key)); + } + }, { + key: '_getStorageKey', + value: function _getStorageKey(key) { + if (this.namespace) { + return [this.namespace, key].join('.'); + } + return key; + } + }]); + return LocalStorage; +}(); + +function StorageFactory(options) { + switch (options.storageType) { + case 'localStorage': + try { + window.localStorage.setItem('testKey', 'test'); + window.localStorage.removeItem('testKey'); + return new LocalStorage(options.storageNamespace); + } catch (e) {} + + case 'sessionStorage': + try { + window.sessionStorage.setItem('testKey', 'test'); + window.sessionStorage.removeItem('testKey'); + return new LocalStorage$2(options.storageNamespace); + } catch (e) {} + + case 'memoryStorage': + default: + return new MemoryStorage(options.storageNamespace); + break; + } +} + +/** + * OAuth2 popup management class + * + * @author Sahat Yalkabov + * @copyright Class mostly taken from https://github.com/sahat/satellizer + * and adjusted to fit vue-authenticate library + */ + +var OAuthPopup = function () { + function OAuthPopup(url, name, popupOptions) { + classCallCheck(this, OAuthPopup); + + this.popup = null; + this.url = url; + this.name = name; + this.popupOptions = popupOptions; + } + + createClass(OAuthPopup, [{ + key: 'open', + value: function open(redirectUri, skipPooling) { + try { + this.popup = window.open(this.url, this.name, this._stringifyOptions()); + if (this.popup && this.popup.focus) { + this.popup.focus(); + } + + if (skipPooling) { + return Promise$1.resolve(); + } else { + return this.pooling(redirectUri); + } + } catch (e) { + return Promise$1.reject(new Error('OAuth popup error occurred')); + } + } + }, { + key: 'pooling', + value: function pooling(redirectUri) { + var _this = this; + + return new Promise$1(function (resolve, reject) { + var redirectUriParser = document.createElement('a'); + redirectUriParser.href = redirectUri; + var redirectUriPath = getFullUrlPath(redirectUriParser); + + var poolingInterval = setInterval(function () { + if (!_this.popup || _this.popup.closed || _this.popup.closed === undefined) { + clearInterval(poolingInterval); + poolingInterval = null; + reject(new Error('Auth popup window closed')); + } + + try { + var popupWindowPath = getFullUrlPath(_this.popup.location); + + if (popupWindowPath === redirectUriPath) { + if (_this.popup.location.search || _this.popup.location.hash) { + var query = parseQueryString(_this.popup.location.search.substring(1).replace(/\/$/, '')); + var hash = parseQueryString(_this.popup.location.hash.substring(1).replace(/[\/$]/, '')); + var params = objectExtend({}, query); + params = objectExtend(params, hash); + + if (params.error) { + reject(new Error(params.error)); + } else { + resolve(params); + } + } else { + reject(new Error('OAuth redirect has occurred but no query or hash parameters were found.')); + } + + clearInterval(poolingInterval); + poolingInterval = null; + _this.popup.close(); + } + } catch (e) { + // Ignore DOMException: Blocked a frame with origin from accessing a cross-origin frame. + } + }, 250); + }); + } + }, { + key: '_stringifyOptions', + value: function _stringifyOptions() { + var options = []; + for (var optionKey in this.popupOptions) { + options.push(optionKey + '=' + this.popupOptions[optionKey]); + } + return options.join(','); + } + }]); + return OAuthPopup; +}(); + +var defaultProviderConfig = { + name: null, + url: null, + authorizationEndpoint: null, + scope: null, + scopePrefix: null, + scopeDelimiter: null, + redirectUri: null, + requiredUrlParams: null, + defaultUrlParams: null, + oauthType: '1.0', + popupOptions: { width: null, height: null } +}; + +var OAuth = function () { + function OAuth($http, storage, providerConfig, options) { + classCallCheck(this, OAuth); + + this.$http = $http; + this.storage = storage; + this.providerConfig = objectExtend({}, defaultProviderConfig); + this.providerConfig = objectExtend(this.providerConfig, providerConfig); + this.options = options; + } + + /** + * Initialize OAuth1 process + * @param {Object} userData User data + * @return {Promise} + */ + + + createClass(OAuth, [{ + key: 'init', + value: function init(userData) { + var _this = this; + + this.oauthPopup = new OAuthPopup('about:blank', this.providerConfig.name, this.providerConfig.popupOptions); + + if (window && !window['cordova']) { + this.oauthPopup.open(this.providerConfig.redirectUri, true); + } + + return this.getRequestToken().then(function (response) { + return _this.openPopup(response).then(function (popupResponse) { + return _this.exchangeForToken(popupResponse, userData); + }); + }); + } + + /** + * Get OAuth1 request token + * @return {Promise} + */ + + }, { + key: 'getRequestToken', + value: function getRequestToken() { + var requestOptions = {}; + requestOptions.method = 'POST'; + requestOptions[this.options.requestDataKey] = objectExtend({}, this.providerConfig); + requestOptions.withCredentials = this.options.withCredentials; + if (this.options.baseUrl) { + requestOptions.url = joinUrl(this.options.baseUrl, this.providerConfig.url); + } else { + requestOptions.url = this.providerConfig.url; + } + + return this.$http(requestOptions); + } + + /** + * Open OAuth1 popup + * @param {Object} response Response object containing request token + * @return {Promise} + */ + + }, { + key: 'openPopup', + value: function openPopup(response) { + var url = [this.providerConfig.authorizationEndpoint, this.buildQueryString(response[this.options.responseDataKey])].join('?'); + + this.oauthPopup.popup.location = url; + if (window && window['cordova']) { + return this.oauthPopup.open(this.providerConfig.redirectUri); + } else { + return this.oauthPopup.pooling(this.providerConfig.redirectUri); + } + } + + /** + * Exchange token and token verifier for access token + * @param {Object} oauth OAuth data containing token and token verifier + * @param {Object} userData User data + * @return {Promise} + */ + + }, { + key: 'exchangeForToken', + value: function exchangeForToken(oauth, userData) { + var payload = objectExtend({}, userData); + payload = objectExtend(payload, oauth); + var requestOptions = {}; + requestOptions.method = 'POST'; + requestOptions[this.options.requestDataKey] = payload; + requestOptions.withCredentials = this.options.withCredentials; + if (this.options.baseUrl) { + requestOptions.url = joinUrl(this.options.baseUrl, this.providerConfig.url); + } else { + requestOptions.url = this.providerConfig.url; + } + return this.$http(requestOptions); + } + }, { + key: 'buildQueryString', + value: function buildQueryString(params) { + var parsedParams = []; + for (var key in params) { + var value = params[key]; + parsedParams.push(encodeURIComponent(key) + '=' + encodeURIComponent(value)); + } + return parsedParams.join('&'); + } + }]); + return OAuth; +}(); + +/** + * Default provider configuration + * @type {Object} + */ +var defaultProviderConfig$1 = { + name: null, + url: null, + clientId: null, + authorizationEndpoint: null, + redirectUri: null, + scope: null, + scopePrefix: null, + scopeDelimiter: null, + state: null, + requiredUrlParams: null, + defaultUrlParams: ['response_type', 'client_id', 'redirect_uri'], + responseType: 'code', + responseParams: { + code: 'code', + clientId: 'clientId', + redirectUri: 'redirectUri' + }, + oauthType: '2.0', + popupOptions: { width: null, height: null } +}; + +var OAuth2 = function () { + function OAuth2($http, storage, providerConfig, options) { + classCallCheck(this, OAuth2); + + this.$http = $http; + this.storage = storage; + this.providerConfig = objectExtend({}, defaultProviderConfig$1); + this.providerConfig = objectExtend(this.providerConfig, providerConfig); + this.options = options; + } + + createClass(OAuth2, [{ + key: 'init', + value: function init(userData) { + var _this = this; + + var stateName = this.providerConfig.name; + if (isFunction(this.providerConfig.state)) { + this.storage.setItem(stateName, this.providerConfig.state()); + } else if (isString(this.providerConfig.state)) { + this.storage.setItem(stateName, this.providerConfig.state); + } + + var url = [this.providerConfig.authorizationEndpoint, this._stringifyRequestParams()].join('?'); + + this.oauthPopup = new OAuthPopup(url, this.providerConfig.name, this.providerConfig.popupOptions); + + return new Promise(function (resolve, reject) { + _this.oauthPopup.open(_this.providerConfig.redirectUri).then(function (response) { + if (_this.providerConfig.responseType === 'token' || !_this.providerConfig.url) { + return resolve(response); + } + + if (response.state && response.state !== _this.storage.getItem(stateName)) { + return reject(new Error('State parameter value does not match original OAuth request state value')); + } + + resolve(_this.exchangeForToken(response, userData)); + }).catch(function (err) { + reject(err); + }); + }); + } + + /** + * Exchange temporary oauth data for access token + * @author Sahat Yalkabov + * @copyright Method taken from https://github.com/sahat/satellizer + * + * @param {[type]} oauth [description] + * @param {[type]} userData [description] + * @return {[type]} [description] + */ + + }, { + key: 'exchangeForToken', + value: function exchangeForToken(oauth, userData) { + var payload = objectExtend({}, userData); + + for (var key in defaultProviderConfig$1.responseParams) { + var value = defaultProviderConfig$1[key]; + + switch (key) { + case 'code': + payload[key] = oauth.code; + break; + case 'clientId': + payload[key] = this.providerConfig.clientId; + break; + case 'redirectUri': + payload[key] = this.providerConfig.redirectUri; + break; + default: + payload[key] = oauth[key]; + } + } + + if (oauth.state) { + payload.state = oauth.state; + } + + var exchangeTokenUrl = void 0; + if (this.options.baseUrl) { + exchangeTokenUrl = joinUrl(this.options.baseUrl, this.providerConfig.url); + } else { + exchangeTokenUrl = this.providerConfig.url; + } + + return this.$http.post(exchangeTokenUrl, payload, { + withCredentials: this.options.withCredentials + }); + } + + /** + * Stringify oauth params + * @author Sahat Yalkabov + * @copyright Method taken from https://github.com/sahat/satellizer + * + * @return {String} + */ + + }, { + key: '_stringifyRequestParams', + value: function _stringifyRequestParams() { + var _this2 = this; + + var keyValuePairs = []; + var paramCategories = ['defaultUrlParams', 'requiredUrlParams', 'optionalUrlParams']; + + paramCategories.forEach(function (categoryName) { + if (!_this2.providerConfig[categoryName]) return; + if (!Array.isArray(_this2.providerConfig[categoryName])) return; + + _this2.providerConfig[categoryName].forEach(function (paramName) { + var camelCaseParamName = camelCase(paramName); + var paramValue = isFunction(_this2.providerConfig[paramName]) ? _this2.providerConfig[paramName]() : _this2.providerConfig[camelCaseParamName]; + + if (paramName === 'redirect_uri' && !paramValue) return; + + if (paramName === 'state') { + var stateName = _this2.defaults.name + '_state'; + paramValue = encodeURIComponent(_this2.storage.getItem(stateName)); + } + if (paramName === 'scope' && Array.isArray(paramValue)) { + paramValue = paramValue.join(_this2.providerConfig.scopeDelimiter); + if (_this2.providerConfig.scopePrefix) { + paramValue = [_this2.providerConfig.scopePrefix, paramValue].join(_this2.providerConfig.scopeDelimiter); + } + } + + keyValuePairs.push([paramName, paramValue]); + }); + }); + + return keyValuePairs.map(function (param) { + return param.join('='); + }).join('&'); + } + }]); + return OAuth2; +}(); + +var VueAuthenticate = function () { + function VueAuthenticate($http, overrideOptions) { + var _this = this; + + classCallCheck(this, VueAuthenticate); + + var options = objectExtend({}, defaultOptions); + options = objectExtend(options, overrideOptions); + var storage = StorageFactory(options); + + Object.defineProperties(this, { + $http: { + get: function get$$1() { + return $http; + } + }, + + options: { + get: function get$$1() { + return options; + } + }, + + storage: { + get: function get$$1() { + return storage; + } + }, + + tokenName: { + get: function get$$1() { + if (this.options.tokenPrefix) { + return [this.options.tokenPrefix, this.options.tokenName].join('_'); + } else { + return this.options.tokenName; + } + } + } + }); + + // Setup request interceptors + if (this.options.bindRequestInterceptor && isFunction(this.options.bindRequestInterceptor)) { + this.options.bindRequestInterceptor.call(this); + + if (this.options.bindResponseInterceptor && isFunction(this.options.bindResponseInterceptor)) { + this.options.bindResponseInterceptor.call(this); + } + } else { + // By default, insert request interceptor for vue-resource + this.$http.interceptors.push(function (request, next) { + if (_this.isAuthenticated()) { + request.headers.set('Authorization', [_this.options.tokenType, _this.getToken()].join(' ')); + } else { + request.headers.delete('Authorization'); + } + + if (_this.options.bindResponseInterceptor && isFunction(_this.options.bindResponseInterceptor)) { + _this.options.bindResponseInterceptor.call(_this); + } else { + next(function (response) { + try { + var responseJson = JSON.parse(response[_this.options.responseDataKey]); + if (responseJson[_this.options.tokenName]) { + _this.setToken(responseJson); + delete responseJson[_this.options.tokenName]; + return responseJson; + } + } catch (e) {} + return response; + }); + } + }); + } + } + + /** + * Check if user is authenticated + * @author Sahat Yalkabov + * @copyright Method taken from https://github.com/sahat/satellizer + * @return {Boolean} + */ + + + createClass(VueAuthenticate, [{ + key: 'isAuthenticated', + value: function isAuthenticated() { + var token = this.storage.getItem(this.tokenName); + + if (token) { + // Token is present + if (token.split('.').length === 3) { + // Token with a valid JWT format XXX.YYY.ZZZ + try { + // Could be a valid JWT or an access token with the same format + var base64Url = token.split('.')[1]; + var base64 = base64Url.replace('-', '+').replace('_', '/'); + var exp = JSON.parse(window.atob(base64)).exp; + if (typeof exp === 'number') { + // JWT with an optonal expiration claims + return Math.round(new Date().getTime() / 1000) < exp; + } + } catch (e) { + return true; // Pass: Non-JWT token that looks like JWT + } + } + return true; // Pass: All other tokens + } + return false; + } + + /** + * Get token if user is authenticated + * @return {String} Authentication token + */ + + }, { + key: 'getToken', + value: function getToken() { + return this.storage.getItem(this.tokenName); + } + + /** + * Set new authentication token + * @param {String|Object} token + */ + + }, { + key: 'setToken', + value: function setToken(response) { + if (response[this.options.requestDataKey]) { + response = response[this.options.requestDataKey]; + } + + var token = void 0; + if (response.access_token) { + if (isObject(response.access_token) && isObject(response.access_token[this.options.requestDataKey])) { + response = response.access_token; + } else if (isString(response.access_token)) { + token = response.access_token; + } + } + + if (!token && response) { + token = response[this.options.tokenName]; + } + + if (token) { + this.storage.setItem(this.tokenName, token); + } + } + }, { + key: 'getPayload', + value: function getPayload() { + var token = this.storage.getItem(this.tokenName); + + if (token && token.split('.').length === 3) { + try { + var base64Url = token.split('.')[1]; + var base64 = base64Url.replace('-', '+').replace('_', '/'); + return JSON.parse(decodeBase64(base64)); + } catch (e) { + console.log(e); + } + } + } + + /** + * Login user using email and password + * @param {Object} user User data + * @param {Object} requestOptions Request options + * @return {Promise} Request promise + */ + + }, { + key: 'login', + value: function login(user, requestOptions) { + var _this2 = this; + + requestOptions = requestOptions || {}; + requestOptions.url = requestOptions.url ? requestOptions.url : joinUrl(this.options.baseUrl, this.options.loginUrl); + requestOptions[this.options.requestDataKey] = user || requestOptions[this.options.requestDataKey]; + requestOptions.method = requestOptions.method || 'POST'; + requestOptions.withCredentials = requestOptions.withCredentials || this.options.withCredentials; + + return this.$http(requestOptions).then(function (response) { + _this2.setToken(response); + return response; + }); + } + + /** + * Register new user + * @param {Object} user User data + * @param {Object} requestOptions Request options + * @return {Promise} Request promise + */ + + }, { + key: 'register', + value: function register(user, requestOptions) { + var _this3 = this; + + requestOptions = requestOptions || {}; + requestOptions.url = requestOptions.url ? requestOptions.url : joinUrl(this.options.baseUrl, this.options.registerUrl); + requestOptions[this.options.requestDataKey] = user || requestOptions[this.options.requestDataKey]; + requestOptions.method = requestOptions.method || 'POST'; + requestOptions.withCredentials = requestOptions.withCredentials || this.options.withCredentials; + + return this.$http(requestOptions).then(function (response) { + _this3.setToken(response); + return response; + }); + } + + /** + * Logout current user + * @param {Object} requestOptions Logout request options object + * @return {Promise} Request promise + */ + + }, { + key: 'logout', + value: function logout(requestOptions) { + var _this4 = this; + + if (!this.isAuthenticated()) { + return Promise$1.reject(new Error('There is no currently authenticated user')); + } + + requestOptions = requestOptions || {}; + requestOptions.url = requestOptions.logoutUrl || this.options.logoutUrl; + + if (requestOptions.url) { + requestOptions.method = requestOptions.method || 'POST'; + requestOptions.withCredentials = requestOptions.withCredentials || this.options.withCredentials; + + return this.$http(requestOptions).then(function (response) { + _this4.storage.removeItem(_this4.tokenName); + }); + } else { + this.storage.removeItem(this.tokenName); + return Promise$1.resolve(); + } + } + + /** + * Authenticate user using authentication provider + * + * @param {String} provider Provider name + * @param {Object} userData User data + * @param {Object} requestOptions Request options + * @return {Promise} Request promise + */ + + }, { + key: 'authenticate', + value: function authenticate(provider, userData, requestOptions) { + var _this5 = this; + + return new Promise$1(function (resolve, reject) { + var providerConfig = _this5.options.providers[provider]; + if (!providerConfig) { + return reject(new Error('Unknown provider')); + } + + var providerInstance = void 0; + switch (providerConfig.oauthType) { + case '1.0': + providerInstance = new OAuth(_this5.$http, _this5.storage, providerConfig, _this5.options); + break; + case '2.0': + providerInstance = new OAuth2(_this5.$http, _this5.storage, providerConfig, _this5.options); + break; + default: + return reject(new Error('Invalid OAuth type')); + break; + } + + return providerInstance.init(userData).then(function (response) { + _this5.setToken(response); + if (_this5.isAuthenticated()) { + return resolve(response); + } else { + return reject(new Error('Authentication failed')); + } + }).catch(function () { + reject(new Error('Authentication error occurred')); + }); + }); + } + }]); + return VueAuthenticate; +}(); + +/** + * VueAuthenticate plugin + * @param {Object} Vue + * @param {Object} options + */ +function plugin(Vue, options) { + if (plugin.installed) { + return; + } + plugin.installed = true; + + var vueAuthInstance = null; + Object.defineProperties(Vue.prototype, { + $auth: { + get: function get() { + if (!vueAuthInstance) { + // Request handler library not found, throw error + if (!this.$http) { + throw new Error('Request handler instance not found'); + } + + vueAuthInstance = new VueAuthenticate(this.$http, options); + } + return vueAuthInstance; + } + } + }); +} + +exports['default'] = plugin; +exports.VueAuthenticate = VueAuthenticate; + +Object.defineProperty(exports, '__esModule', { value: true }); + +}))); +//# sourceMappingURL=vue-authenticate.js.map diff --git a/dist/vue-authenticate.js.map b/dist/vue-authenticate.js.map new file mode 100644 index 0000000..ecedf8a --- /dev/null +++ b/dist/vue-authenticate.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vue-authenticate.js","sources":["../src/utils.js","../src/promise.js","../src/options.js","../src/storage/local-storage.js","../src/storage/memory-storage.js","../src/storage/session-storage.js","../src/storage.js","../src/oauth/popup.js","../src/oauth/oauth1.js","../src/oauth/oauth2.js","../src/authenticate.js","../src/index.js"],"sourcesContent":["if (typeof Object.assign != 'function') {\n Object.assign = function(target, varArgs) {\n 'use strict';\n if (target == null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) { // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n };\n}\n\nexport function camelCase(name) {\n return name.replace(/([\\:\\-\\_]+(.))/g, function (_, separator, letter, offset) {\n return offset ? letter.toUpperCase() : letter;\n });\n}\n\nexport function isUndefined(value) {\n return typeof value === 'undefined'\n}\n\nexport function isDefined(value) {\n return typeof value !== 'undefined'\n}\n\nexport function isObject(value) {\n return value !== null && typeof value === 'object'\n}\n\nexport function isString(value) {\n return typeof value === 'string'\n}\n\nexport function isNumber(value) {\n return typeof value === 'number'\n}\n\nexport function isFunction(value) {\n return typeof value === 'function'\n}\n\nexport function objectExtend(a, b) {\n\n // Don't touch 'null' or 'undefined' objects.\n if (a == null || b == null) {\n return a;\n }\n\n Object.keys(b).forEach(function (key) {\n if (Object.prototype.toString.call(b[key]) == '[object Object]') {\n if (Object.prototype.toString.call(a[key]) != '[object Object]') {\n a[key] = b[key];\n } else {\n a[key] = objectExtend(a[key], b[key]);\n }\n } else {\n a[key] = b[key];\n }\n });\n\n return a;\n};\n\n/**\n * Assemble url from two segments\n * \n * @author Sahat Yalkabov \n * @copyright Method taken from https://github.com/sahat/satellizer\n * \n * @param {String} baseUrl Base url\n * @param {String} url URI\n * @return {String}\n */\nexport function joinUrl(baseUrl, url) {\n if (/^(?:[a-z]+:)?\\/\\//i.test(url)) {\n return url;\n }\n let joined = [baseUrl, url].join('/');\n let normalize = function (str) {\n return str\n .replace(/[\\/]+/g, '/')\n .replace(/\\/\\?/g, '?')\n .replace(/\\/\\#/g, '#')\n .replace(/\\:\\//g, '://');\n };\n return normalize(joined);\n}\n\n/**\n * Get full path based on current location\n * \n * @author Sahat Yalkabov \n * @copyright Method taken from https://github.com/sahat/satellizer\n * \n * @param {Location} location\n * @return {String}\n */\nexport function getFullUrlPath(location) {\n const isHttps = location.protocol === 'https:';\n return location.protocol + '//' + location.hostname +\n ':' + (location.port || (isHttps ? '443' : '80')) +\n (/^\\//.test(location.pathname) ? location.pathname : '/' + location.pathname);\n}\n\n/**\n * Parse query string variables\n * \n * @author Sahat Yalkabov \n * @copyright Method taken from https://github.com/sahat/satellizer\n * \n * @param {String} Query string\n * @return {String}\n */\nexport function parseQueryString(str) {\n let obj = {};\n let key;\n let value;\n (str || '').split('&').forEach((keyValue) => {\n if (keyValue) {\n value = keyValue.split('=');\n key = decodeURIComponent(value[0]);\n obj[key] = (!!value[1]) ? decodeURIComponent(value[1]) : true;\n }\n });\n return obj;\n}\n\n/**\n * Decode base64 string\n * @author Sahat Yalkabov \n * @copyright Method taken from https://github.com/sahat/satellizer\n * \n * @param {String} str base64 encoded string\n * @return {Object}\n */\nexport function decodeBase64(str) {\n let buffer;\n if (typeof module !== 'undefined' && module.exports) {\n try {\n buffer = require('buffer').Buffer;\n } catch (err) {\n // noop\n }\n }\n\n let fromCharCode = String.fromCharCode;\n\n let re_btou = new RegExp([\n '[\\xC0-\\xDF][\\x80-\\xBF]',\n '[\\xE0-\\xEF][\\x80-\\xBF]{2}',\n '[\\xF0-\\xF7][\\x80-\\xBF]{3}'\n ].join('|'), 'g');\n\n let cb_btou = function (cccc) {\n switch (cccc.length) {\n case 4:\n let cp = ((0x07 & cccc.charCodeAt(0)) << 18)\n | ((0x3f & cccc.charCodeAt(1)) << 12)\n | ((0x3f & cccc.charCodeAt(2)) << 6)\n | (0x3f & cccc.charCodeAt(3));\n let offset = cp - 0x10000;\n return (fromCharCode((offset >>> 10) + 0xD800)\n + fromCharCode((offset & 0x3FF) + 0xDC00));\n case 3:\n return fromCharCode(\n ((0x0f & cccc.charCodeAt(0)) << 12)\n | ((0x3f & cccc.charCodeAt(1)) << 6)\n | (0x3f & cccc.charCodeAt(2))\n );\n default:\n return fromCharCode(\n ((0x1f & cccc.charCodeAt(0)) << 6)\n | (0x3f & cccc.charCodeAt(1))\n );\n }\n };\n\n let btou = function (b) {\n return b.replace(re_btou, cb_btou);\n };\n\n let _decode = buffer ? function (a) {\n return (a.constructor === buffer.constructor\n ? a : new buffer(a, 'base64')).toString();\n }\n : function (a) {\n return btou(atob(a));\n };\n\n return _decode(\n String(str).replace(/[-_]/g, function (m0) {\n return m0 === '-' ? '+' : '/';\n })\n .replace(/[^A-Za-z0-9\\+\\/]/g, '')\n );\n}","// Store setTimeout reference so promise-polyfill will be unaffected by\n// other code modifying setTimeout (like sinon.useFakeTimers())\nvar setTimeoutFunc = setTimeout;\n\nfunction noop() {}\n\n// Polyfill for Function.prototype.bind\nfunction bind(fn, thisArg) {\n return function () {\n fn.apply(thisArg, arguments);\n };\n}\n\nfunction Promise(fn) {\n if (typeof this !== 'object') throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function') throw new TypeError('not a function');\n this._state = 0;\n this._handled = false;\n this._value = undefined;\n this._deferreds = [];\n\n doResolve(fn, this);\n}\n\nfunction handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n if (self._state === 0) {\n self._deferreds.push(deferred);\n return;\n }\n self._handled = true;\n Promise._immediateFn(function () {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n var ret;\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n resolve(deferred.promise, ret);\n });\n}\n\nfunction resolve(self, newValue) {\n try {\n // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n if (newValue === self) throw new TypeError('A promise cannot be resolved with itself.');\n if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n var then = newValue.then;\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n}\n\nfunction reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n}\n\nfunction finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function() {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n self._deferreds = null;\n}\n\nfunction Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n}\n\n/**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\nfunction doResolve(fn, self) {\n var done = false;\n try {\n fn(function (value) {\n if (done) return;\n done = true;\n resolve(self, value);\n }, function (reason) {\n if (done) return;\n done = true;\n reject(self, reason);\n });\n } catch (ex) {\n if (done) return;\n done = true;\n reject(self, ex);\n }\n}\n\nPromise.prototype['catch'] = function (onRejected) {\n return this.then(null, onRejected);\n};\n\nPromise.prototype.then = function (onFulfilled, onRejected) {\n var prom = new (this.constructor)(noop);\n\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n};\n\nPromise.all = function (arr) {\n var args = Array.prototype.slice.call(arr);\n\n return new Promise(function (resolve, reject) {\n if (args.length === 0) return resolve([]);\n var remaining = args.length;\n\n function res(i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(val, function (val) {\n res(i, val);\n }, reject);\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n};\n\nPromise.resolve = function (value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n\n return new Promise(function (resolve) {\n resolve(value);\n });\n};\n\nPromise.reject = function (value) {\n return new Promise(function (resolve, reject) {\n reject(value);\n });\n};\n\nPromise.race = function (values) {\n return new Promise(function (resolve, reject) {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i].then(resolve, reject);\n }\n });\n};\n\n// Use polyfill for setImmediate for performance gains\nPromise._immediateFn = (typeof setImmediate === 'function' && function (fn) { setImmediate(fn); }) ||\n function (fn) {\n setTimeoutFunc(fn, 0);\n };\n\nPromise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console\n }\n};\n\n/**\n * Set the immediate function to execute callbacks\n * @param fn {function} Function to execute\n * @deprecated\n */\nPromise._setImmediateFn = function _setImmediateFn(fn) {\n Promise._immediateFn = fn;\n};\n\n/**\n * Change the function to execute on unhandled rejection\n * @param {function} fn Function to execute on unhandled rejection\n * @deprecated\n */\nPromise._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) {\n Promise._unhandledRejectionFn = fn;\n};\n\nexport default Promise;","/**\n * Default configuration\n */\nexport default {\n baseUrl: null,\n tokenName: 'token',\n tokenPrefix: 'vueauth',\n tokenHeader: 'Authorization',\n tokenType: 'Bearer',\n loginUrl: '/auth/login',\n registerUrl: '/auth/register',\n logoutUrl: null,\n storageType: 'localStorage',\n storageNamespace: 'vue-authenticate',\n requestDataKey: 'body',\n responseDataKey: 'body',\n bindRequestInterceptor: null,\n bindResponseInterceptor: null,\n\n providers: {\n facebook: {\n name: 'facebook',\n url: '/auth/facebook',\n authorizationEndpoint: 'https://www.facebook.com/v2.5/dialog/oauth',\n redirectUri: null,\n requiredUrlParams: ['display', 'scope'],\n scope: ['email'],\n scopeDelimiter: ',',\n display: 'popup',\n oauthType: '2.0',\n popupOptions: { width: 580, height: 400 }\n },\n\n google: {\n name: 'google',\n url: '/auth/google',\n authorizationEndpoint: 'https://accounts.google.com/o/oauth2/auth',\n redirectUri: null,\n requiredUrlParams: ['scope'],\n optionalUrlParams: ['display'],\n scope: ['profile', 'email'],\n scopePrefix: 'openid',\n scopeDelimiter: ' ',\n display: 'popup',\n oauthType: '2.0',\n popupOptions: { width: 452, height: 633 }\n },\n\n github: {\n name: 'github',\n url: '/auth/github',\n authorizationEndpoint: 'https://github.com/login/oauth/authorize',\n redirectUri: null,\n optionalUrlParams: ['scope'],\n scope: ['user:email'],\n scopeDelimiter: ' ',\n oauthType: '2.0',\n popupOptions: { width: 1020, height: 618 }\n },\n\n instagram: {\n name: 'instagram',\n url: '/auth/instagram',\n authorizationEndpoint: 'https://api.instagram.com/oauth/authorize',\n redirectUri: null,\n requiredUrlParams: ['scope'],\n scope: ['basic'],\n scopeDelimiter: '+',\n oauthType: '2.0'\n },\n\n twitter: {\n name: 'twitter',\n url: '/auth/twitter',\n authorizationEndpoint: 'https://api.twitter.com/oauth/authenticate',\n redirectUri: null,\n oauthType: '1.0',\n popupOptions: { width: 495, height: 645 }\n },\n\n bitbucket: {\n name: 'bitbucket',\n url: '/auth/bitbucket',\n authorizationEndpoint: 'https://bitbucket.org/site/oauth2/authorize',\n redirectUri: null,\n optionalUrlParams: ['scope'],\n scope: ['email'],\n scopeDelimiter: ' ',\n oauthType: '2.0',\n popupOptions: { width: 1020, height: 618 }\n }\n }\n}","class LocalStorage {\n constructor(namespace) {\n this.namespace = namespace || null\n }\n\n setItem(key, value) {\n window.localStorage.setItem(this._getStorageKey(key), value)\n }\n\n getItem(key) {\n return window.localStorage.getItem(this._getStorageKey(key))\n }\n\n removeItem(key) {\n window.localStorage.removeItem(this._getStorageKey(key))\n }\n\n _getStorageKey(key) {\n if (this.namespace) {\n return [this.namespace, key].join('.')\n }\n return key;\n }\n}\n\nexport default LocalStorage","class MemoryStorage {\n constructor(namespace) {\n this.namespace = namespace || null\n this._storage = {}\n }\n\n setItem(key, value) {\n this._storage[this._getStorageKey(key)] = value\n }\n\n getItem(key) {\n return this._storage[this._getStorageKey(key)]\n }\n\n removeItem(key) {\n delete this._storage[this._getStorageKey(key)]\n }\n\n _getStorageKey(key) {\n if (this.namespace) {\n return [this.namespace, key].join('.')\n }\n return key;\n }\n}\n\nexport default MemoryStorage","class LocalStorage {\n constructor(namespace) {\n this.namespace = namespace || null\n }\n\n setItem(key, value) {\n window.sessionStorage.setItem(this._getStorageKey(key), value)\n }\n\n getItem(key) {\n return window.sessionStorage.getItem(this._getStorageKey(key))\n }\n\n removeItem(key) {\n window.sessionStorage.removeItem(this._getStorageKey(key))\n }\n\n _getStorageKey(key) {\n if (this.namespace) {\n return [this.namespace, key].join('.')\n }\n return key;\n }\n}\n\nexport default LocalStorage","import LocalStorage from './storage/local-storage.js'\nimport MemoryStorage from './storage/memory-storage.js'\nimport SessionStorage from './storage/session-storage.js'\n\nexport default function StorageFactory(options) {\n switch (options.storageType) {\n case 'localStorage':\n try {\n window.localStorage.setItem('testKey', 'test')\n window.localStorage.removeItem('testKey')\n return new LocalStorage(options.storageNamespace)\n } catch(e) {}\n\n case 'sessionStorage':\n try {\n window.sessionStorage.setItem('testKey', 'test')\n window.sessionStorage.removeItem('testKey')\n return new SessionStorage(options.storageNamespace)\n } catch(e) {}\n\n case 'memoryStorage': \n default:\n return new MemoryStorage(options.storageNamespace)\n break;\n }\n}","import Promise from '../promise.js'\nimport { objectExtend, parseQueryString, getFullUrlPath } from '../utils.js'\n\n/**\n * OAuth2 popup management class\n * \n * @author Sahat Yalkabov \n * @copyright Class mostly taken from https://github.com/sahat/satellizer \n * and adjusted to fit vue-authenticate library\n */\nexport default class OAuthPopup {\n constructor(url, name, popupOptions) {\n this.popup = null\n this.url = url\n this.name = name\n this.popupOptions = popupOptions\n }\n\n open(redirectUri, skipPooling) {\n try {\n this.popup = window.open(this.url, this.name, this._stringifyOptions())\n if (this.popup && this.popup.focus) {\n this.popup.focus()\n }\n\n if (skipPooling) {\n return Promise.resolve()\n } else {\n return this.pooling(redirectUri)\n }\n } catch(e) {\n return Promise.reject(new Error('OAuth popup error occurred'))\n }\n }\n\n pooling(redirectUri) {\n return new Promise((resolve, reject) => {\n const redirectUriParser = document.createElement('a')\n redirectUriParser.href = redirectUri\n const redirectUriPath = getFullUrlPath(redirectUriParser)\n\n let poolingInterval = setInterval(() => {\n if (!this.popup || this.popup.closed || this.popup.closed === undefined) {\n clearInterval(poolingInterval)\n poolingInterval = null\n reject(new Error('Auth popup window closed'))\n }\n\n try {\n const popupWindowPath = getFullUrlPath(this.popup.location)\n\n if (popupWindowPath === redirectUriPath) {\n if (this.popup.location.search || this.popup.location.hash) {\n const query = parseQueryString(this.popup.location.search.substring(1).replace(/\\/$/, ''));\n const hash = parseQueryString(this.popup.location.hash.substring(1).replace(/[\\/$]/, ''));\n let params = objectExtend({}, query);\n params = objectExtend(params, hash)\n\n if (params.error) {\n reject(new Error(params.error));\n } else {\n resolve(params);\n }\n } else {\n reject(new Error('OAuth redirect has occurred but no query or hash parameters were found.'))\n }\n\n clearInterval(poolingInterval)\n poolingInterval = null\n this.popup.close()\n }\n } catch(e) {\n // Ignore DOMException: Blocked a frame with origin from accessing a cross-origin frame.\n }\n }, 250)\n })\n }\n\n _stringifyOptions() {\n let options = []\n for (var optionKey in this.popupOptions) {\n options.push(`${optionKey}=${this.popupOptions[optionKey]}`)\n }\n return options.join(',')\n }\n}","import OAuthPopup from './popup.js'\nimport { objectExtend, isString, isObject, isFunction, joinUrl } from '../utils.js'\n\nconst defaultProviderConfig = {\n name: null,\n url: null,\n authorizationEndpoint: null,\n scope: null,\n scopePrefix: null,\n scopeDelimiter: null,\n redirectUri: null,\n requiredUrlParams: null,\n defaultUrlParams: null,\n oauthType: '1.0',\n popupOptions: { width: null, height: null }\n}\n\nexport default class OAuth {\n constructor($http, storage, providerConfig, options) {\n this.$http = $http\n this.storage = storage\n this.providerConfig = objectExtend({}, defaultProviderConfig)\n this.providerConfig = objectExtend(this.providerConfig, providerConfig)\n this.options = options\n }\n\n /**\n * Initialize OAuth1 process \n * @param {Object} userData User data\n * @return {Promise}\n */\n init(userData) {\n this.oauthPopup = new OAuthPopup('about:blank', this.providerConfig.name, this.providerConfig.popupOptions)\n\n if (window && !window['cordova']) {\n this.oauthPopup.open(this.providerConfig.redirectUri, true)\n }\n\n return this.getRequestToken().then((response) => {\n return this.openPopup(response).then((popupResponse) => {\n return this.exchangeForToken(popupResponse, userData)\n })\n })\n }\n\n /**\n * Get OAuth1 request token\n * @return {Promise}\n */\n getRequestToken() {\n let requestOptions = {}\n requestOptions.method = 'POST'\n requestOptions[this.options.requestDataKey] = objectExtend({}, this.providerConfig)\n requestOptions.withCredentials = this.options.withCredentials\n if (this.options.baseUrl) {\n requestOptions.url = joinUrl(this.options.baseUrl, this.providerConfig.url)\n } else {\n requestOptions.url = this.providerConfig.url\n }\n\n return this.$http(requestOptions)\n }\n\n /**\n * Open OAuth1 popup\n * @param {Object} response Response object containing request token\n * @return {Promise}\n */\n openPopup(response) {\n const url = [this.providerConfig.authorizationEndpoint, this.buildQueryString(response[this.options.responseDataKey])].join('?');\n\n this.oauthPopup.popup.location = url\n if (window && window['cordova']) {\n return this.oauthPopup.open(this.providerConfig.redirectUri)\n } else {\n return this.oauthPopup.pooling(this.providerConfig.redirectUri)\n }\n }\n\n /**\n * Exchange token and token verifier for access token\n * @param {Object} oauth OAuth data containing token and token verifier\n * @param {Object} userData User data\n * @return {Promise}\n */\n exchangeForToken(oauth, userData) {\n let payload = objectExtend({}, userData)\n payload = objectExtend(payload, oauth)\n let requestOptions = {}\n requestOptions.method = 'POST'\n requestOptions[this.options.requestDataKey] = payload\n requestOptions.withCredentials = this.options.withCredentials\n if (this.options.baseUrl) {\n requestOptions.url = joinUrl(this.options.baseUrl, this.providerConfig.url)\n } else {\n requestOptions.url = this.providerConfig.url\n }\n return this.$http(requestOptions)\n }\n\n buildQueryString(params) {\n const parsedParams = [];\n for (var key in params) {\n let value = params[key]\n parsedParams.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n }\n return parsedParams.join('&');\n }\n}","import OAuthPopup from './popup.js'\nimport { camelCase, isFunction, isString, objectExtend, joinUrl } from '../utils.js'\n\n/**\n * Default provider configuration\n * @type {Object}\n */\nconst defaultProviderConfig = {\n name: null,\n url: null,\n clientId: null,\n authorizationEndpoint: null,\n redirectUri: null,\n scope: null,\n scopePrefix: null,\n scopeDelimiter: null,\n state: null,\n requiredUrlParams: null,\n defaultUrlParams: ['response_type', 'client_id', 'redirect_uri'],\n responseType: 'code',\n responseParams: {\n code: 'code',\n clientId: 'clientId',\n redirectUri: 'redirectUri'\n },\n oauthType: '2.0',\n popupOptions: { width: null, height: null }\n}\n\nexport default class OAuth2 {\n constructor($http, storage, providerConfig, options) {\n this.$http = $http\n this.storage = storage\n this.providerConfig = objectExtend({}, defaultProviderConfig)\n this.providerConfig = objectExtend(this.providerConfig, providerConfig)\n this.options = options\n }\n\n init(userData) {\n let stateName = this.providerConfig.name\n if (isFunction(this.providerConfig.state)) {\n this.storage.setItem(stateName, this.providerConfig.state())\n } else if (isString(this.providerConfig.state)) {\n this.storage.setItem(stateName, this.providerConfig.state)\n }\n\n let url = [this.providerConfig.authorizationEndpoint, this._stringifyRequestParams()].join('?')\n\n this.oauthPopup = new OAuthPopup(url, this.providerConfig.name, this.providerConfig.popupOptions)\n \n return new Promise((resolve, reject) => {\n this.oauthPopup.open(this.providerConfig.redirectUri).then((response) => {\n if (this.providerConfig.responseType === 'token' || !this.providerConfig.url) {\n return resolve(response)\n }\n\n if (response.state && response.state !== this.storage.getItem(stateName)) {\n return reject(new Error('State parameter value does not match original OAuth request state value'))\n }\n\n resolve(this.exchangeForToken(response, userData))\n }).catch((err) => {\n reject(err)\n })\n })\n }\n\n /**\n * Exchange temporary oauth data for access token\n * @author Sahat Yalkabov \n * @copyright Method taken from https://github.com/sahat/satellizer\n * \n * @param {[type]} oauth [description]\n * @param {[type]} userData [description]\n * @return {[type]} [description]\n */\n exchangeForToken(oauth, userData) {\n let payload = objectExtend({}, userData)\n\n for (let key in defaultProviderConfig.responseParams) {\n let value = defaultProviderConfig[key]\n\n switch(key) {\n case 'code':\n payload[key] = oauth.code\n break\n case 'clientId':\n payload[key] = this.providerConfig.clientId\n break\n case 'redirectUri':\n payload[key] = this.providerConfig.redirectUri\n break\n default:\n payload[key] = oauth[key]\n }\n }\n\n if (oauth.state) {\n payload.state = oauth.state\n }\n\n let exchangeTokenUrl\n if (this.options.baseUrl) {\n exchangeTokenUrl = joinUrl(this.options.baseUrl, this.providerConfig.url)\n } else {\n exchangeTokenUrl = this.providerConfig.url\n }\n\n return this.$http.post(exchangeTokenUrl, payload, {\n withCredentials: this.options.withCredentials\n })\n }\n\n /**\n * Stringify oauth params\n * @author Sahat Yalkabov \n * @copyright Method taken from https://github.com/sahat/satellizer\n * \n * @return {String}\n */\n _stringifyRequestParams() {\n let keyValuePairs = []\n let paramCategories = ['defaultUrlParams', 'requiredUrlParams', 'optionalUrlParams']\n\n paramCategories.forEach((categoryName) => {\n if (!this.providerConfig[categoryName]) return\n if (!Array.isArray(this.providerConfig[categoryName])) return\n\n this.providerConfig[categoryName].forEach((paramName) => {\n let camelCaseParamName = camelCase(paramName)\n let paramValue = isFunction(this.providerConfig[paramName]) ? this.providerConfig[paramName]() : this.providerConfig[camelCaseParamName]\n\n if (paramName === 'redirect_uri' && !paramValue) return\n\n if (paramName === 'state') {\n const stateName = this.defaults.name + '_state';\n paramValue = encodeURIComponent(this.storage.getItem(stateName));\n }\n if (paramName === 'scope' && Array.isArray(paramValue)) {\n paramValue = paramValue.join(this.providerConfig.scopeDelimiter);\n if (this.providerConfig.scopePrefix) {\n paramValue = [this.providerConfig.scopePrefix, paramValue].join(this.providerConfig.scopeDelimiter);\n }\n }\n\n keyValuePairs.push([paramName, paramValue])\n })\n })\n\n return keyValuePairs.map((param) => {\n return param.join('=')\n }).join('&')\n }\n}","import Promise from './promise.js'\nimport { objectExtend, isString, isObject, isFunction, joinUrl, decodeBase64 } from './utils.js'\nimport defaultOptions from './options.js'\nimport StorageFactory from './storage.js'\nimport OAuth1 from './oauth/oauth1.js'\nimport OAuth2 from './oauth/oauth2.js'\n\nexport default class VueAuthenticate {\n constructor($http, overrideOptions) {\n let options = objectExtend({}, defaultOptions)\n options = objectExtend(options, overrideOptions)\n let storage = StorageFactory(options)\n\n Object.defineProperties(this, {\n $http: {\n get() {\n return $http\n }\n },\n\n options: {\n get() {\n return options\n }\n },\n\n storage: {\n get() {\n return storage\n }\n },\n\n tokenName: {\n get() {\n if (this.options.tokenPrefix) {\n return [this.options.tokenPrefix, this.options.tokenName].join('_')\n } else {\n return this.options.tokenName\n }\n }\n }\n })\n\n // Setup request interceptors\n if (this.options.bindRequestInterceptor && isFunction(this.options.bindRequestInterceptor)) {\n this.options.bindRequestInterceptor.call(this)\n\n if (this.options.bindResponseInterceptor && isFunction(this.options.bindResponseInterceptor)) {\n this.options.bindResponseInterceptor.call(this)\n }\n } else {\n // By default, insert request interceptor for vue-resource\n this.$http.interceptors.push((request, next) => {\n if (this.isAuthenticated()) {\n request.headers.set('Authorization', [\n this.options.tokenType, this.getToken()\n ].join(' '))\n } else {\n request.headers.delete('Authorization')\n }\n \n if (this.options.bindResponseInterceptor && isFunction(this.options.bindResponseInterceptor)) {\n this.options.bindResponseInterceptor.call(this)\n } else {\n next((response) => {\n try {\n var responseJson = JSON.parse(response[this.options.responseDataKey])\n if (responseJson[this.options.tokenName]) {\n this.setToken(responseJson)\n delete responseJson[this.options.tokenName]\n return responseJson\n }\n } catch(e) {}\n return response\n })\n }\n })\n }\n }\n\n /**\n * Check if user is authenticated\n * @author Sahat Yalkabov \n * @copyright Method taken from https://github.com/sahat/satellizer\n * @return {Boolean}\n */\n isAuthenticated() {\n let token = this.storage.getItem(this.tokenName)\n\n if (token) { // Token is present\n if (token.split('.').length === 3) { // Token with a valid JWT format XXX.YYY.ZZZ\n try { // Could be a valid JWT or an access token with the same format\n const base64Url = token.split('.')[1];\n const base64 = base64Url.replace('-', '+').replace('_', '/');\n const exp = JSON.parse(window.atob(base64)).exp;\n if (typeof exp === 'number') { // JWT with an optonal expiration claims\n return Math.round(new Date().getTime() / 1000) < exp;\n }\n } catch (e) {\n return true; // Pass: Non-JWT token that looks like JWT\n }\n }\n return true; // Pass: All other tokens\n }\n return false\n }\n\n /**\n * Get token if user is authenticated\n * @return {String} Authentication token\n */\n getToken() {\n return this.storage.getItem(this.tokenName)\n }\n\n /**\n * Set new authentication token\n * @param {String|Object} token\n */\n setToken(response) {\n if (response[this.options.requestDataKey]) {\n response = response[this.options.requestDataKey];\n }\n\n let token;\n if (response.access_token) {\n if (isObject(response.access_token) && isObject(response.access_token[this.options.requestDataKey])) {\n response = response.access_token\n } else if (isString(response.access_token)) {\n token = response.access_token\n }\n }\n\n if (!token && response) {\n token = response[this.options.tokenName]\n }\n\n if (token) {\n this.storage.setItem(this.tokenName, token)\n }\n }\n\n getPayload() {\n const token = this.storage.getItem(this.tokenName);\n\n if (token && token.split('.').length === 3) {\n try {\n const base64Url = token.split('.')[1];\n const base64 = base64Url.replace('-', '+').replace('_', '/');\n return JSON.parse(decodeBase64(base64));\n } catch (e) {\n console.log(e)\n }\n }\n }\n\n /**\n * Login user using email and password\n * @param {Object} user User data\n * @param {Object} requestOptions Request options\n * @return {Promise} Request promise\n */\n login(user, requestOptions) {\n requestOptions = requestOptions || {}\n requestOptions.url = requestOptions.url ? requestOptions.url : joinUrl(this.options.baseUrl, this.options.loginUrl)\n requestOptions[this.options.requestDataKey] = user || requestOptions[this.options.requestDataKey]\n requestOptions.method = requestOptions.method || 'POST'\n requestOptions.withCredentials = requestOptions.withCredentials || this.options.withCredentials\n\n return this.$http(requestOptions).then((response) => {\n this.setToken(response)\n return response\n })\n }\n\n /**\n * Register new user\n * @param {Object} user User data\n * @param {Object} requestOptions Request options\n * @return {Promise} Request promise\n */\n register(user, requestOptions) {\n requestOptions = requestOptions || {}\n requestOptions.url = requestOptions.url ? requestOptions.url : joinUrl(this.options.baseUrl, this.options.registerUrl)\n requestOptions[this.options.requestDataKey] = user || requestOptions[this.options.requestDataKey]\n requestOptions.method = requestOptions.method || 'POST'\n requestOptions.withCredentials = requestOptions.withCredentials || this.options.withCredentials\n\n return this.$http(requestOptions).then((response) => {\n this.setToken(response)\n return response\n })\n }\n\n /**\n * Logout current user\n * @param {Object} requestOptions Logout request options object\n * @return {Promise} Request promise\n */\n logout(requestOptions) {\n if (!this.isAuthenticated()) {\n return Promise.reject(new Error('There is no currently authenticated user'))\n }\n\n requestOptions = requestOptions || {}\n requestOptions.url = requestOptions.logoutUrl || this.options.logoutUrl\n\n if (requestOptions.url) {\n requestOptions.method = requestOptions.method || 'POST'\n requestOptions.withCredentials = requestOptions.withCredentials || this.options.withCredentials\n\n return this.$http(requestOptions).then((response) => {\n this.storage.removeItem(this.tokenName)\n })\n } else {\n this.storage.removeItem(this.tokenName)\n return Promise.resolve();\n }\n }\n\n /**\n * Authenticate user using authentication provider\n * \n * @param {String} provider Provider name\n * @param {Object} userData User data\n * @param {Object} requestOptions Request options\n * @return {Promise} Request promise\n */\n authenticate(provider, userData, requestOptions) {\n return new Promise((resolve, reject) => {\n var providerConfig = this.options.providers[provider]\n if (!providerConfig) {\n return reject(new Error('Unknown provider'))\n }\n\n let providerInstance;\n switch (providerConfig.oauthType) {\n case '1.0':\n providerInstance = new OAuth1(this.$http, this.storage, providerConfig, this.options)\n break\n case '2.0':\n providerInstance = new OAuth2(this.$http, this.storage, providerConfig, this.options)\n break\n default:\n return reject(new Error('Invalid OAuth type'))\n break\n }\n\n return providerInstance.init(userData).then((response) => {\n this.setToken(response)\n if (this.isAuthenticated()) {\n return resolve(response)\n } else {\n return reject(new Error('Authentication failed'))\n }\n }).catch(() => {\n reject(new Error('Authentication error occurred'))\n })\n })\n }\n}","import './utils.js'\nimport Promise from './promise.js'\nimport VueAuthenticate from './authenticate.js'\n\n/**\n * VueAuthenticate plugin\n * @param {Object} Vue\n * @param {Object} options\n */\nfunction plugin(Vue, options) {\n if (plugin.installed) {\n return\n }\n plugin.installed = true\n\n let vueAuthInstance = null;\n Object.defineProperties(Vue.prototype, {\n $auth: {\n get() {\n if (!vueAuthInstance) {\n // Request handler library not found, throw error\n if (!this.$http) {\n throw new Error('Request handler instance not found')\n }\n\n vueAuthInstance = new VueAuthenticate(this.$http, options)\n }\n return vueAuthInstance\n }\n }\n })\n}\n\nexport default plugin\nexport { VueAuthenticate }"],"names":["Object","assign","target","varArgs","TypeError","to","index","arguments","length","nextSource","nextKey","prototype","hasOwnProperty","call","camelCase","name","replace","_","separator","letter","offset","toUpperCase","isObject","value","isString","isFunction","objectExtend","a","b","keys","forEach","key","toString","joinUrl","baseUrl","url","test","joined","join","normalize","str","getFullUrlPath","location","isHttps","protocol","hostname","port","pathname","parseQueryString","obj","split","keyValue","decodeURIComponent","decodeBase64","buffer","module","exports","require","Buffer","err","fromCharCode","String","re_btou","RegExp","cb_btou","cccc","cp","charCodeAt","btou","_decode","constructor","atob","m0","setTimeoutFunc","setTimeout","noop","bind","fn","thisArg","apply","Promise","babelHelpers.typeof","_state","_handled","_value","undefined","_deferreds","handle","self","deferred","push","_immediateFn","cb","onFulfilled","onRejected","resolve","reject","promise","ret","e","newValue","then","finale","_unhandledRejectionFn","i","len","Handler","doResolve","done","reason","ex","prom","all","arr","args","Array","slice","remaining","res","val","race","values","setImmediate","console","warn","_setImmediateFn","_setUnhandledRejectionFn","width","height","LocalStorage","namespace","localStorage","setItem","_getStorageKey","window","getItem","removeItem","MemoryStorage","_storage","sessionStorage","StorageFactory","options","storageType","storageNamespace","SessionStorage","OAuthPopup","popupOptions","popup","redirectUri","skipPooling","open","_stringifyOptions","focus","pooling","Error","redirectUriParser","document","createElement","href","redirectUriPath","poolingInterval","setInterval","closed","popupWindowPath","search","hash","query","substring","params","error","close","optionKey","defaultProviderConfig","OAuth","$http","storage","providerConfig","userData","oauthPopup","getRequestToken","response","openPopup","popupResponse","exchangeForToken","requestOptions","method","requestDataKey","withCredentials","authorizationEndpoint","buildQueryString","responseDataKey","oauth","payload","parsedParams","encodeURIComponent","OAuth2","stateName","state","_stringifyRequestParams","responseType","catch","responseParams","code","clientId","exchangeTokenUrl","post","keyValuePairs","paramCategories","categoryName","isArray","paramName","camelCaseParamName","paramValue","defaults","scopeDelimiter","scopePrefix","map","param","VueAuthenticate","overrideOptions","defaultOptions","defineProperties","tokenPrefix","tokenName","bindRequestInterceptor","bindResponseInterceptor","interceptors","request","next","isAuthenticated","headers","set","tokenType","getToken","delete","responseJson","JSON","parse","setToken","token","base64Url","base64","exp","Math","round","Date","getTime","access_token","log","user","loginUrl","registerUrl","logoutUrl","provider","providers","providerInstance","oauthType","OAuth1","init","plugin","Vue","installed","vueAuthInstance"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAI,OAAOA,OAAOC,MAAd,IAAwB,UAA5B,EAAwC;SAC/BA,MAAP,GAAgB,UAASC,MAAT,EAAiBC,OAAjB,EAA0B;;;QAEpCD,UAAU,IAAd,EAAoB;YACZ,IAAIE,SAAJ,CAAc,4CAAd,CAAN;;;QAGEC,KAAKL,OAAOE,MAAP,CAAT;;SAEK,IAAII,QAAQ,CAAjB,EAAoBA,QAAQC,UAAUC,MAAtC,EAA8CF,OAA9C,EAAuD;UACjDG,aAAaF,UAAUD,KAAV,CAAjB;;UAEIG,cAAc,IAAlB,EAAwB;;aACjB,IAAIC,OAAT,IAAoBD,UAApB,EAAgC;;cAE1BT,OAAOW,SAAP,CAAiBC,cAAjB,CAAgCC,IAAhC,CAAqCJ,UAArC,EAAiDC,OAAjD,CAAJ,EAA+D;eAC1DA,OAAH,IAAcD,WAAWC,OAAX,CAAd;;;;;WAKDL,EAAP;GApBF;;;AAwBF,AAAO,SAASS,SAAT,CAAmBC,IAAnB,EAAyB;SACvBA,KAAKC,OAAL,CAAa,iBAAb,EAAgC,UAAUC,CAAV,EAAaC,SAAb,EAAwBC,MAAxB,EAAgCC,MAAhC,EAAwC;WACtEA,SAASD,OAAOE,WAAP,EAAT,GAAgCF,MAAvC;GADK,CAAP;;;AAKF,AAAO;;AAIP,AAAO;;AAIP,AAAO,SAASG,QAAT,CAAkBC,KAAlB,EAAyB;SACvBA,UAAU,IAAV,IAAkB,QAAOA,KAAP,yCAAOA,KAAP,OAAiB,QAA1C;;;AAGF,AAAO,SAASC,QAAT,CAAkBD,KAAlB,EAAyB;SACvB,OAAOA,KAAP,KAAiB,QAAxB;;;AAGF,AAAO;;AAIP,AAAO,SAASE,UAAT,CAAoBF,KAApB,EAA2B;SACzB,OAAOA,KAAP,KAAiB,UAAxB;;;AAGF,AAAO,SAASG,YAAT,CAAsBC,CAAtB,EAAyBC,CAAzB,EAA4B;;;MAG7BD,KAAK,IAAL,IAAaC,KAAK,IAAtB,EAA4B;WACnBD,CAAP;;;SAGKE,IAAP,CAAYD,CAAZ,EAAeE,OAAf,CAAuB,UAAUC,GAAV,EAAe;QAChC/B,OAAOW,SAAP,CAAiBqB,QAAjB,CAA0BnB,IAA1B,CAA+Be,EAAEG,GAAF,CAA/B,KAA0C,iBAA9C,EAAiE;UAC3D/B,OAAOW,SAAP,CAAiBqB,QAAjB,CAA0BnB,IAA1B,CAA+Bc,EAAEI,GAAF,CAA/B,KAA0C,iBAA9C,EAAiE;UAC7DA,GAAF,IAASH,EAAEG,GAAF,CAAT;OADF,MAEO;UACHA,GAAF,IAASL,aAAaC,EAAEI,GAAF,CAAb,EAAqBH,EAAEG,GAAF,CAArB,CAAT;;KAJJ,MAMO;QACHA,GAAF,IAASH,EAAEG,GAAF,CAAT;;GARJ;;SAYOJ,CAAP;;;;;;;;;;;;;AAaF,AAAO,SAASM,OAAT,CAAiBC,OAAjB,EAA0BC,GAA1B,EAA+B;MAChC,qBAAqBC,IAArB,CAA0BD,GAA1B,CAAJ,EAAoC;WAC3BA,GAAP;;MAEEE,SAAS,CAACH,OAAD,EAAUC,GAAV,EAAeG,IAAf,CAAoB,GAApB,CAAb;MACIC,YAAY,SAAZA,SAAY,CAAUC,GAAV,EAAe;WACtBA,IACJxB,OADI,CACI,QADJ,EACc,GADd,EAEJA,OAFI,CAEI,OAFJ,EAEa,GAFb,EAGJA,OAHI,CAGI,OAHJ,EAGa,GAHb,EAIJA,OAJI,CAII,OAJJ,EAIa,KAJb,CAAP;GADF;SAOOuB,UAAUF,MAAV,CAAP;;;;;;;;;;;;AAYF,AAAO,SAASI,cAAT,CAAwBC,QAAxB,EAAkC;MACjCC,UAAUD,SAASE,QAAT,KAAsB,QAAtC;SACOF,SAASE,QAAT,GAAoB,IAApB,GAA2BF,SAASG,QAApC,GACL,GADK,IACEH,SAASI,IAAT,KAAkBH,UAAU,KAAV,GAAkB,IAApC,CADF,KAEJ,MAAMP,IAAN,CAAWM,SAASK,QAApB,IAAgCL,SAASK,QAAzC,GAAoD,MAAML,SAASK,QAF/D,CAAP;;;;;;;;;;;;AAcF,AAAO,SAASC,gBAAT,CAA0BR,GAA1B,EAA+B;MAChCS,MAAM,EAAV;MACIlB,YAAJ;MACIR,cAAJ;GACCiB,OAAO,EAAR,EAAYU,KAAZ,CAAkB,GAAlB,EAAuBpB,OAAvB,CAA+B,UAACqB,QAAD,EAAc;QACvCA,QAAJ,EAAc;cACJA,SAASD,KAAT,CAAe,GAAf,CAAR;YACME,mBAAmB7B,MAAM,CAAN,CAAnB,CAAN;UACIQ,GAAJ,IAAY,CAAC,CAACR,MAAM,CAAN,CAAH,GAAe6B,mBAAmB7B,MAAM,CAAN,CAAnB,CAAf,GAA8C,IAAzD;;GAJJ;SAOO0B,GAAP;;;;;;;;;;;AAWF,AAAO,SAASI,YAAT,CAAsBb,GAAtB,EAA2B;MAC5Bc,eAAJ;MACI,OAAOC,MAAP,KAAkB,WAAlB,IAAiCA,OAAOC,OAA5C,EAAqD;QAC/C;eACOC,QAAQ,QAAR,EAAkBC,MAA3B;KADF,CAEE,OAAOC,GAAP,EAAY;;;;;MAKZC,eAAeC,OAAOD,YAA1B;;MAEIE,UAAU,IAAIC,MAAJ,CAAW,CACvB,wBADuB,EAEvB,2BAFuB,EAGvB,2BAHuB,EAIvBzB,IAJuB,CAIlB,GAJkB,CAAX,EAID,GAJC,CAAd;;MAMI0B,UAAU,SAAVA,OAAU,CAAUC,IAAV,EAAgB;YACpBA,KAAKzD,MAAb;WACO,CAAL;YACM0D,KAAM,CAAC,OAAOD,KAAKE,UAAL,CAAgB,CAAhB,CAAR,KAA+B,EAAhC,GACJ,CAAC,OAAOF,KAAKE,UAAL,CAAgB,CAAhB,CAAR,KAA+B,EAD3B,GAEJ,CAAC,OAAOF,KAAKE,UAAL,CAAgB,CAAhB,CAAR,KAA+B,CAF3B,GAGJ,OAAOF,KAAKE,UAAL,CAAgB,CAAhB,CAHZ;YAII/C,SAAS8C,KAAK,OAAlB;eACQN,aAAa,CAACxC,WAAW,EAAZ,IAAkB,MAA/B,IACNwC,aAAa,CAACxC,SAAS,KAAV,IAAmB,MAAhC,CADF;WAEG,CAAL;eACSwC,aACJ,CAAC,OAAOK,KAAKE,UAAL,CAAgB,CAAhB,CAAR,KAA+B,EAAhC,GACG,CAAC,OAAOF,KAAKE,UAAL,CAAgB,CAAhB,CAAR,KAA+B,CADlC,GAEG,OAAOF,KAAKE,UAAL,CAAgB,CAAhB,CAHL,CAAP;;eAMOP,aACJ,CAAC,OAAOK,KAAKE,UAAL,CAAgB,CAAhB,CAAR,KAA+B,CAAhC,GACG,OAAOF,KAAKE,UAAL,CAAgB,CAAhB,CAFL,CAAP;;GAjBN;;MAwBIC,OAAO,SAAPA,IAAO,CAAUxC,CAAV,EAAa;WACfA,EAAEZ,OAAF,CAAU8C,OAAV,EAAmBE,OAAnB,CAAP;GADF;;MAIIK,UAAUf,SAAS,UAAU3B,CAAV,EAAa;WAC3B,CAACA,EAAE2C,WAAF,KAAkBhB,OAAOgB,WAAzB,GACJ3C,CADI,GACA,IAAI2B,MAAJ,CAAW3B,CAAX,EAAc,QAAd,CADD,EAC0BK,QAD1B,EAAP;GADY,GAIV,UAAUL,CAAV,EAAa;WACRyC,KAAKG,KAAK5C,CAAL,CAAL,CAAP;GALF;;SAQO0C,QACLR,OAAOrB,GAAP,EAAYxB,OAAZ,CAAoB,OAApB,EAA6B,UAAUwD,EAAV,EAAc;WAClCA,OAAO,GAAP,GAAa,GAAb,GAAmB,GAA1B;GADF,EAGGxD,OAHH,CAGW,mBAHX,EAGgC,EAHhC,CADK,CAAP;;;AC3MF;;AAEA,IAAIyD,iBAAiBC,UAArB;;AAEA,SAASC,IAAT,GAAgB;;;AAGhB,SAASC,IAAT,CAAcC,EAAd,EAAkBC,OAAlB,EAA2B;SAClB,YAAY;OACdC,KAAH,CAASD,OAAT,EAAkBvE,SAAlB;GADF;;;AAKF,SAASyE,SAAT,CAAiBH,EAAjB,EAAqB;MACfI,QAAO,IAAP,MAAgB,QAApB,EAA8B,MAAM,IAAI7E,SAAJ,CAAc,sCAAd,CAAN;MAC1B,OAAOyE,EAAP,KAAc,UAAlB,EAA8B,MAAM,IAAIzE,SAAJ,CAAc,gBAAd,CAAN;OACzB8E,MAAL,GAAc,CAAd;OACKC,QAAL,GAAgB,KAAhB;OACKC,MAAL,GAAcC,SAAd;OACKC,UAAL,GAAkB,EAAlB;;YAEUT,EAAV,EAAc,IAAd;;;AAGF,SAASU,MAAT,CAAgBC,IAAhB,EAAsBC,QAAtB,EAAgC;SACvBD,KAAKN,MAAL,KAAgB,CAAvB,EAA0B;WACjBM,KAAKJ,MAAZ;;MAEEI,KAAKN,MAAL,KAAgB,CAApB,EAAuB;SAChBI,UAAL,CAAgBI,IAAhB,CAAqBD,QAArB;;;OAGGN,QAAL,GAAgB,IAAhB;YACQQ,YAAR,CAAqB,YAAY;QAC3BC,KAAKJ,KAAKN,MAAL,KAAgB,CAAhB,GAAoBO,SAASI,WAA7B,GAA2CJ,SAASK,UAA7D;QACIF,OAAO,IAAX,EAAiB;OACdJ,KAAKN,MAAL,KAAgB,CAAhB,GAAoBa,OAApB,GAA8BC,MAA/B,EAAuCP,SAASQ,OAAhD,EAAyDT,KAAKJ,MAA9D;;;QAGEc,GAAJ;QACI;YACIN,GAAGJ,KAAKJ,MAAR,CAAN;KADF,CAEE,OAAOe,CAAP,EAAU;aACHV,SAASQ,OAAhB,EAAyBE,CAAzB;;;YAGMV,SAASQ,OAAjB,EAA0BC,GAA1B;GAbF;;;AAiBF,SAASH,OAAT,CAAiBP,IAAjB,EAAuBY,QAAvB,EAAiC;MAC3B;;QAEEA,aAAaZ,IAAjB,EAAuB,MAAM,IAAIpF,SAAJ,CAAc,2CAAd,CAAN;QACnBgG,aAAa,QAAOA,QAAP,yCAAOA,QAAP,OAAoB,QAApB,IAAgC,OAAOA,QAAP,KAAoB,UAAjE,CAAJ,EAAkF;UAC5EC,OAAOD,SAASC,IAApB;UACID,oBAAoBpB,SAAxB,EAAiC;aAC1BE,MAAL,GAAc,CAAd;aACKE,MAAL,GAAcgB,QAAd;eACOZ,IAAP;;OAHF,MAKO,IAAI,OAAOa,IAAP,KAAgB,UAApB,EAAgC;kBAC3BzB,KAAKyB,IAAL,EAAWD,QAAX,CAAV,EAAgCZ,IAAhC;;;;SAICN,MAAL,GAAc,CAAd;SACKE,MAAL,GAAcgB,QAAd;WACOZ,IAAP;GAjBF,CAkBE,OAAOW,CAAP,EAAU;WACHX,IAAP,EAAaW,CAAb;;;;AAIJ,SAASH,MAAT,CAAgBR,IAAhB,EAAsBY,QAAtB,EAAgC;OACzBlB,MAAL,GAAc,CAAd;OACKE,MAAL,GAAcgB,QAAd;SACOZ,IAAP;;;AAGF,SAASc,MAAT,CAAgBd,IAAhB,EAAsB;MAChBA,KAAKN,MAAL,KAAgB,CAAhB,IAAqBM,KAAKF,UAAL,CAAgB9E,MAAhB,KAA2B,CAApD,EAAuD;cAC7CmF,YAAR,CAAqB,YAAW;UAC1B,CAACH,KAAKL,QAAV,EAAoB;kBACVoB,qBAAR,CAA8Bf,KAAKJ,MAAnC;;KAFJ;;;OAOG,IAAIoB,IAAI,CAAR,EAAWC,MAAMjB,KAAKF,UAAL,CAAgB9E,MAAtC,EAA8CgG,IAAIC,GAAlD,EAAuDD,GAAvD,EAA4D;WACnDhB,IAAP,EAAaA,KAAKF,UAAL,CAAgBkB,CAAhB,CAAb;;OAEGlB,UAAL,GAAkB,IAAlB;;;AAGF,SAASoB,OAAT,CAAiBb,WAAjB,EAA8BC,UAA9B,EAA0CG,OAA1C,EAAmD;OAC5CJ,WAAL,GAAmB,OAAOA,WAAP,KAAuB,UAAvB,GAAoCA,WAApC,GAAkD,IAArE;OACKC,UAAL,GAAkB,OAAOA,UAAP,KAAsB,UAAtB,GAAmCA,UAAnC,GAAgD,IAAlE;OACKG,OAAL,GAAeA,OAAf;;;;;;;;;AASF,SAASU,SAAT,CAAmB9B,EAAnB,EAAuBW,IAAvB,EAA6B;MACvBoB,OAAO,KAAX;MACI;OACC,UAAUrF,KAAV,EAAiB;UACdqF,IAAJ,EAAU;aACH,IAAP;cACQpB,IAAR,EAAcjE,KAAd;KAHF,EAIG,UAAUsF,MAAV,EAAkB;UACfD,IAAJ,EAAU;aACH,IAAP;aACOpB,IAAP,EAAaqB,MAAb;KAPF;GADF,CAUE,OAAOC,EAAP,EAAW;QACPF,IAAJ,EAAU;WACH,IAAP;WACOpB,IAAP,EAAasB,EAAb;;;;AAIJ9B,UAAQrE,SAAR,CAAkB,OAAlB,IAA6B,UAAUmF,UAAV,EAAsB;SAC1C,KAAKO,IAAL,CAAU,IAAV,EAAgBP,UAAhB,CAAP;CADF;;AAIAd,UAAQrE,SAAR,CAAkB0F,IAAlB,GAAyB,UAAUR,WAAV,EAAuBC,UAAvB,EAAmC;MACtDiB,OAAO,IAAK,KAAKzC,WAAV,CAAuBK,IAAvB,CAAX;;SAEO,IAAP,EAAa,IAAI+B,OAAJ,CAAYb,WAAZ,EAAyBC,UAAzB,EAAqCiB,IAArC,CAAb;SACOA,IAAP;CAJF;;AAOA/B,UAAQgC,GAAR,GAAc,UAAUC,GAAV,EAAe;MACvBC,OAAOC,MAAMxG,SAAN,CAAgByG,KAAhB,CAAsBvG,IAAtB,CAA2BoG,GAA3B,CAAX;;SAEO,IAAIjC,SAAJ,CAAY,UAAUe,OAAV,EAAmBC,MAAnB,EAA2B;QACxCkB,KAAK1G,MAAL,KAAgB,CAApB,EAAuB,OAAOuF,QAAQ,EAAR,CAAP;QACnBsB,YAAYH,KAAK1G,MAArB;;aAES8G,GAAT,CAAad,CAAb,EAAgBe,GAAhB,EAAqB;UACf;YACEA,QAAQ,QAAOA,GAAP,yCAAOA,GAAP,OAAe,QAAf,IAA2B,OAAOA,GAAP,KAAe,UAAlD,CAAJ,EAAmE;cAC7DlB,OAAOkB,IAAIlB,IAAf;cACI,OAAOA,IAAP,KAAgB,UAApB,EAAgC;iBACzBxF,IAAL,CAAU0G,GAAV,EAAe,UAAUA,GAAV,EAAe;kBACxBf,CAAJ,EAAOe,GAAP;aADF,EAEGvB,MAFH;;;;aAMCQ,CAAL,IAAUe,GAAV;YACI,EAAEF,SAAF,KAAgB,CAApB,EAAuB;kBACbH,IAAR;;OAZJ,CAcE,OAAOJ,EAAP,EAAW;eACJA,EAAP;;;;SAIC,IAAIN,IAAI,CAAb,EAAgBA,IAAIU,KAAK1G,MAAzB,EAAiCgG,GAAjC,EAAsC;UAChCA,CAAJ,EAAOU,KAAKV,CAAL,CAAP;;GAzBG,CAAP;CAHF;;AAiCAxB,UAAQe,OAAR,GAAkB,UAAUxE,KAAV,EAAiB;MAC7BA,SAAS,QAAOA,KAAP,yCAAOA,KAAP,OAAiB,QAA1B,IAAsCA,MAAM+C,WAAN,KAAsBU,SAAhE,EAAyE;WAChEzD,KAAP;;;SAGK,IAAIyD,SAAJ,CAAY,UAAUe,OAAV,EAAmB;YAC5BxE,KAAR;GADK,CAAP;CALF;;AAUAyD,UAAQgB,MAAR,GAAiB,UAAUzE,KAAV,EAAiB;SACzB,IAAIyD,SAAJ,CAAY,UAAUe,OAAV,EAAmBC,MAAnB,EAA2B;WACrCzE,KAAP;GADK,CAAP;CADF;;AAMAyD,UAAQwC,IAAR,GAAe,UAAUC,MAAV,EAAkB;SACxB,IAAIzC,SAAJ,CAAY,UAAUe,OAAV,EAAmBC,MAAnB,EAA2B;SACvC,IAAIQ,IAAI,CAAR,EAAWC,MAAMgB,OAAOjH,MAA7B,EAAqCgG,IAAIC,GAAzC,EAA8CD,GAA9C,EAAmD;aAC1CA,CAAP,EAAUH,IAAV,CAAeN,OAAf,EAAwBC,MAAxB;;GAFG,CAAP;CADF;;;AASAhB,UAAQW,YAAR,GAAwB,OAAO+B,YAAP,KAAwB,UAAxB,IAAsC,UAAU7C,EAAV,EAAc;eAAeA,EAAb;CAAvD,IACrB,UAAUA,EAAV,EAAc;iBACGA,EAAf,EAAmB,CAAnB;CAFJ;;AAKAG,UAAQuB,qBAAR,GAAgC,SAASA,qBAAT,CAA+B5C,GAA/B,EAAoC;MAC9D,OAAOgE,OAAP,KAAmB,WAAnB,IAAkCA,OAAtC,EAA+C;YACrCC,IAAR,CAAa,uCAAb,EAAsDjE,GAAtD,EAD6C;;CADjD;;;;;;;AAWAqB,UAAQ6C,eAAR,GAA0B,SAASA,eAAT,CAAyBhD,EAAzB,EAA6B;YAC7Cc,YAAR,GAAuBd,EAAvB;CADF;;;;;;;AASAG,UAAQ8C,wBAAR,GAAmC,SAASA,wBAAT,CAAkCjD,EAAlC,EAAsC;YAC/D0B,qBAAR,GAAgC1B,EAAhC;CADF,CAIA;;AChOA;;;AAGA,qBAAe;WACJ,IADI;aAEF,OAFE;eAGA,SAHA;eAIA,eAJA;aAKF,QALE;YAMH,aANG;eAOA,gBAPA;aAQF,IARE;eASA,cATA;oBAUK,kBAVL;kBAWG,MAXH;mBAYI,MAZJ;0BAaW,IAbX;2BAcY,IAdZ;;aAgBF;cACC;YACF,UADE;WAEH,gBAFG;6BAGe,4CAHf;mBAIK,IAJL;yBAKW,CAAC,SAAD,EAAY,OAAZ,CALX;aAMD,CAAC,OAAD,CANC;sBAOQ,GAPR;eAQC,OARD;iBASG,KATH;oBAUM,EAAEkD,OAAO,GAAT,EAAcC,QAAQ,GAAtB;KAXP;;YAcD;YACA,QADA;WAED,cAFC;6BAGiB,2CAHjB;mBAIO,IAJP;yBAKa,CAAC,OAAD,CALb;yBAMa,CAAC,SAAD,CANb;aAOC,CAAC,SAAD,EAAY,OAAZ,CAPD;mBAQO,QARP;sBASU,GATV;eAUG,OAVH;iBAWK,KAXL;oBAYQ,EAAED,OAAO,GAAT,EAAcC,QAAQ,GAAtB;KA1BP;;YA6BD;YACA,QADA;WAED,cAFC;6BAGiB,0CAHjB;mBAIO,IAJP;yBAKa,CAAC,OAAD,CALb;aAMC,CAAC,YAAD,CAND;sBAOU,GAPV;iBAQK,KARL;oBASQ,EAAED,OAAO,IAAT,EAAeC,QAAQ,GAAvB;KAtCP;;eAyCE;YACH,WADG;WAEJ,iBAFI;6BAGc,2CAHd;mBAII,IAJJ;yBAKU,CAAC,OAAD,CALV;aAMF,CAAC,OAAD,CANE;sBAOO,GAPP;iBAQE;KAjDJ;;aAoDA;YACD,SADC;WAEF,eAFE;6BAGgB,4CAHhB;mBAIM,IAJN;iBAKI,KALJ;oBAMO,EAAED,OAAO,GAAT,EAAcC,QAAQ,GAAtB;KA1DP;;eA6DE;YACH,WADG;WAEJ,iBAFI;6BAGc,6CAHd;mBAII,IAJJ;yBAKU,CAAC,OAAD,CALV;aAMF,CAAC,OAAD,CANE;sBAOO,GAPP;iBAQE,KARF;oBASK,EAAED,OAAO,IAAT,EAAeC,QAAQ,GAAvB;;;CAtFpB;;ICHMC;wBACQC,SAAZ,EAAuB;;;SAChBA,SAAL,GAAiBA,aAAa,IAA9B;;;;;4BAGMnG,KAAKR,OAAO;aACX4G,YAAP,CAAoBC,OAApB,CAA4B,KAAKC,cAAL,CAAoBtG,GAApB,CAA5B,EAAsDR,KAAtD;;;;4BAGMQ,KAAK;aACJuG,OAAOH,YAAP,CAAoBI,OAApB,CAA4B,KAAKF,cAAL,CAAoBtG,GAApB,CAA5B,CAAP;;;;+BAGSA,KAAK;aACPoG,YAAP,CAAoBK,UAApB,CAA+B,KAAKH,cAAL,CAAoBtG,GAApB,CAA/B;;;;mCAGaA,KAAK;UACd,KAAKmG,SAAT,EAAoB;eACX,CAAC,KAAKA,SAAN,EAAiBnG,GAAjB,EAAsBO,IAAtB,CAA2B,GAA3B,CAAP;;aAEKP,GAAP;;;;IAIJ;;ICzBM0G;yBACQP,SAAZ,EAAuB;;;SAChBA,SAAL,GAAiBA,aAAa,IAA9B;SACKQ,QAAL,GAAgB,EAAhB;;;;;4BAGM3G,KAAKR,OAAO;WACbmH,QAAL,CAAc,KAAKL,cAAL,CAAoBtG,GAApB,CAAd,IAA0CR,KAA1C;;;;4BAGMQ,KAAK;aACJ,KAAK2G,QAAL,CAAc,KAAKL,cAAL,CAAoBtG,GAApB,CAAd,CAAP;;;;+BAGSA,KAAK;aACP,KAAK2G,QAAL,CAAc,KAAKL,cAAL,CAAoBtG,GAApB,CAAd,CAAP;;;;mCAGaA,KAAK;UACd,KAAKmG,SAAT,EAAoB;eACX,CAAC,KAAKA,SAAN,EAAiBnG,GAAjB,EAAsBO,IAAtB,CAA2B,GAA3B,CAAP;;aAEKP,GAAP;;;;IAIJ;;IC1BMkG;wBACQC,SAAZ,EAAuB;;;SAChBA,SAAL,GAAiBA,aAAa,IAA9B;;;;;4BAGMnG,KAAKR,OAAO;aACXoH,cAAP,CAAsBP,OAAtB,CAA8B,KAAKC,cAAL,CAAoBtG,GAApB,CAA9B,EAAwDR,KAAxD;;;;4BAGMQ,KAAK;aACJuG,OAAOK,cAAP,CAAsBJ,OAAtB,CAA8B,KAAKF,cAAL,CAAoBtG,GAApB,CAA9B,CAAP;;;;+BAGSA,KAAK;aACP4G,cAAP,CAAsBH,UAAtB,CAAiC,KAAKH,cAAL,CAAoBtG,GAApB,CAAjC;;;;mCAGaA,KAAK;UACd,KAAKmG,SAAT,EAAoB;eACX,CAAC,KAAKA,SAAN,EAAiBnG,GAAjB,EAAsBO,IAAtB,CAA2B,GAA3B,CAAP;;aAEKP,GAAP;;;;IAIJ;;ACrBe,SAAS6G,cAAT,CAAwBC,OAAxB,EAAiC;UACtCA,QAAQC,WAAhB;SACO,cAAL;UACM;eACKX,YAAP,CAAoBC,OAApB,CAA4B,SAA5B,EAAuC,MAAvC;eACOD,YAAP,CAAoBK,UAApB,CAA+B,SAA/B;eACO,IAAIP,YAAJ,CAAiBY,QAAQE,gBAAzB,CAAP;OAHF,CAIE,OAAM5C,CAAN,EAAS;;SAER,gBAAL;UACM;eACKwC,cAAP,CAAsBP,OAAtB,CAA8B,SAA9B,EAAyC,MAAzC;eACOO,cAAP,CAAsBH,UAAtB,CAAiC,SAAjC;eACO,IAAIQ,cAAJ,CAAmBH,QAAQE,gBAA3B,CAAP;OAHF,CAIE,OAAM5C,CAAN,EAAS;;SAER,eAAL;;aAES,IAAIsC,aAAJ,CAAkBI,QAAQE,gBAA1B,CAAP;;;;;ACnBN;;;;;;;;IAOqBE;sBACP9G,GAAZ,EAAiBpB,IAAjB,EAAuBmI,YAAvB,EAAqC;;;SAC9BC,KAAL,GAAa,IAAb;SACKhH,GAAL,GAAWA,GAAX;SACKpB,IAAL,GAAYA,IAAZ;SACKmI,YAAL,GAAoBA,YAApB;;;;;yBAGGE,aAAaC,aAAa;UACzB;aACGF,KAAL,GAAab,OAAOgB,IAAP,CAAY,KAAKnH,GAAjB,EAAsB,KAAKpB,IAA3B,EAAiC,KAAKwI,iBAAL,EAAjC,CAAb;YACI,KAAKJ,KAAL,IAAc,KAAKA,KAAL,CAAWK,KAA7B,EAAoC;eAC7BL,KAAL,CAAWK,KAAX;;;YAGEH,WAAJ,EAAiB;iBACRrE,UAAQe,OAAR,EAAP;SADF,MAEO;iBACE,KAAK0D,OAAL,CAAaL,WAAb,CAAP;;OATJ,CAWE,OAAMjD,CAAN,EAAS;eACFnB,UAAQgB,MAAR,CAAe,IAAI0D,KAAJ,CAAU,4BAAV,CAAf,CAAP;;;;;4BAIIN,aAAa;;;aACZ,IAAIpE,SAAJ,CAAY,UAACe,OAAD,EAAUC,MAAV,EAAqB;YAChC2D,oBAAoBC,SAASC,aAAT,CAAuB,GAAvB,CAA1B;0BACkBC,IAAlB,GAAyBV,WAAzB;YACMW,kBAAkBtH,eAAekH,iBAAf,CAAxB;;YAEIK,kBAAkBC,YAAY,YAAM;cAClC,CAAC,MAAKd,KAAN,IAAe,MAAKA,KAAL,CAAWe,MAA1B,IAAoC,MAAKf,KAAL,CAAWe,MAAX,KAAsB7E,SAA9D,EAAyE;0BACzD2E,eAAd;8BACkB,IAAlB;mBACO,IAAIN,KAAJ,CAAU,0BAAV,CAAP;;;cAGE;gBACIS,kBAAkB1H,eAAe,MAAK0G,KAAL,CAAWzG,QAA1B,CAAxB;;gBAEIyH,oBAAoBJ,eAAxB,EAAyC;kBACnC,MAAKZ,KAAL,CAAWzG,QAAX,CAAoB0H,MAApB,IAA8B,MAAKjB,KAAL,CAAWzG,QAAX,CAAoB2H,IAAtD,EAA4D;oBACpDC,QAAQtH,iBAAiB,MAAKmG,KAAL,CAAWzG,QAAX,CAAoB0H,MAApB,CAA2BG,SAA3B,CAAqC,CAArC,EAAwCvJ,OAAxC,CAAgD,KAAhD,EAAuD,EAAvD,CAAjB,CAAd;oBACMqJ,OAAOrH,iBAAiB,MAAKmG,KAAL,CAAWzG,QAAX,CAAoB2H,IAApB,CAAyBE,SAAzB,CAAmC,CAAnC,EAAsCvJ,OAAtC,CAA8C,OAA9C,EAAuD,EAAvD,CAAjB,CAAb;oBACIwJ,SAAS9I,aAAa,EAAb,EAAiB4I,KAAjB,CAAb;yBACS5I,aAAa8I,MAAb,EAAqBH,IAArB,CAAT;;oBAEIG,OAAOC,KAAX,EAAkB;yBACT,IAAIf,KAAJ,CAAUc,OAAOC,KAAjB,CAAP;iBADF,MAEO;0BACGD,MAAR;;eATJ,MAWO;uBACE,IAAId,KAAJ,CAAU,yEAAV,CAAP;;;4BAGYM,eAAd;gCACkB,IAAlB;oBACKb,KAAL,CAAWuB,KAAX;;WArBJ,CAuBE,OAAMvE,CAAN,EAAS;;;SA9BS,EAiCnB,GAjCmB,CAAtB;OALK,CAAP;;;;wCA0CkB;UACd0C,UAAU,EAAd;WACK,IAAI8B,SAAT,IAAsB,KAAKzB,YAA3B,EAAyC;gBAC/BxD,IAAR,CAAgBiF,SAAhB,SAA6B,KAAKzB,YAAL,CAAkByB,SAAlB,CAA7B;;aAEK9B,QAAQvG,IAAR,CAAa,GAAb,CAAP;;;;;;AChFJ,IAAMsI,wBAAwB;QACtB,IADsB;OAEvB,IAFuB;yBAGL,IAHK;SAIrB,IAJqB;eAKf,IALe;kBAMZ,IANY;eAOf,IAPe;qBAQT,IARS;oBASV,IATU;aAUjB,KAViB;gBAWd,EAAE7C,OAAO,IAAT,EAAeC,QAAQ,IAAvB;CAXhB;;IAcqB6C;iBACPC,KAAZ,EAAmBC,OAAnB,EAA4BC,cAA5B,EAA4CnC,OAA5C,EAAqD;;;SAC9CiC,KAAL,GAAaA,KAAb;SACKC,OAAL,GAAeA,OAAf;SACKC,cAAL,GAAsBtJ,aAAa,EAAb,EAAiBkJ,qBAAjB,CAAtB;SACKI,cAAL,GAAsBtJ,aAAa,KAAKsJ,cAAlB,EAAkCA,cAAlC,CAAtB;SACKnC,OAAL,GAAeA,OAAf;;;;;;;;;;;;yBAQGoC,UAAU;;;WACRC,UAAL,GAAkB,IAAIjC,UAAJ,CAAe,aAAf,EAA8B,KAAK+B,cAAL,CAAoBjK,IAAlD,EAAwD,KAAKiK,cAAL,CAAoB9B,YAA5E,CAAlB;;UAEIZ,UAAU,CAACA,OAAO,SAAP,CAAf,EAAkC;aAC3B4C,UAAL,CAAgB5B,IAAhB,CAAqB,KAAK0B,cAAL,CAAoB5B,WAAzC,EAAsD,IAAtD;;;aAGK,KAAK+B,eAAL,GAAuB9E,IAAvB,CAA4B,UAAC+E,QAAD,EAAc;eACxC,MAAKC,SAAL,CAAeD,QAAf,EAAyB/E,IAAzB,CAA8B,UAACiF,aAAD,EAAmB;iBAC/C,MAAKC,gBAAL,CAAsBD,aAAtB,EAAqCL,QAArC,CAAP;SADK,CAAP;OADK,CAAP;;;;;;;;;;sCAWgB;UACZO,iBAAiB,EAArB;qBACeC,MAAf,GAAwB,MAAxB;qBACe,KAAK5C,OAAL,CAAa6C,cAA5B,IAA8ChK,aAAa,EAAb,EAAiB,KAAKsJ,cAAtB,CAA9C;qBACeW,eAAf,GAAiC,KAAK9C,OAAL,CAAa8C,eAA9C;UACI,KAAK9C,OAAL,CAAa3G,OAAjB,EAA0B;uBACTC,GAAf,GAAqBF,QAAQ,KAAK4G,OAAL,CAAa3G,OAArB,EAA8B,KAAK8I,cAAL,CAAoB7I,GAAlD,CAArB;OADF,MAEO;uBACUA,GAAf,GAAqB,KAAK6I,cAAL,CAAoB7I,GAAzC;;;aAGK,KAAK2I,KAAL,CAAWU,cAAX,CAAP;;;;;;;;;;;8BAQQJ,UAAU;UACZjJ,MAAM,CAAC,KAAK6I,cAAL,CAAoBY,qBAArB,EAA4C,KAAKC,gBAAL,CAAsBT,SAAS,KAAKvC,OAAL,CAAaiD,eAAtB,CAAtB,CAA5C,EAA2GxJ,IAA3G,CAAgH,GAAhH,CAAZ;;WAEK4I,UAAL,CAAgB/B,KAAhB,CAAsBzG,QAAtB,GAAiCP,GAAjC;UACImG,UAAUA,OAAO,SAAP,CAAd,EAAiC;eACxB,KAAK4C,UAAL,CAAgB5B,IAAhB,CAAqB,KAAK0B,cAAL,CAAoB5B,WAAzC,CAAP;OADF,MAEO;eACE,KAAK8B,UAAL,CAAgBzB,OAAhB,CAAwB,KAAKuB,cAAL,CAAoB5B,WAA5C,CAAP;;;;;;;;;;;;;qCAUa2C,OAAOd,UAAU;UAC5Be,UAAUtK,aAAa,EAAb,EAAiBuJ,QAAjB,CAAd;gBACUvJ,aAAasK,OAAb,EAAsBD,KAAtB,CAAV;UACIP,iBAAiB,EAArB;qBACeC,MAAf,GAAwB,MAAxB;qBACe,KAAK5C,OAAL,CAAa6C,cAA5B,IAA8CM,OAA9C;qBACeL,eAAf,GAAiC,KAAK9C,OAAL,CAAa8C,eAA9C;UACI,KAAK9C,OAAL,CAAa3G,OAAjB,EAA0B;uBACTC,GAAf,GAAqBF,QAAQ,KAAK4G,OAAL,CAAa3G,OAArB,EAA8B,KAAK8I,cAAL,CAAoB7I,GAAlD,CAArB;OADF,MAEO;uBACUA,GAAf,GAAqB,KAAK6I,cAAL,CAAoB7I,GAAzC;;aAEK,KAAK2I,KAAL,CAAWU,cAAX,CAAP;;;;qCAGehB,QAAQ;UACjByB,eAAe,EAArB;WACK,IAAIlK,GAAT,IAAgByI,MAAhB,EAAwB;YAClBjJ,QAAQiJ,OAAOzI,GAAP,CAAZ;qBACa2D,IAAb,CAAkBwG,mBAAmBnK,GAAnB,IAA0B,GAA1B,GAAgCmK,mBAAmB3K,KAAnB,CAAlD;;aAEK0K,aAAa3J,IAAb,CAAkB,GAAlB,CAAP;;;;;;ACvGJ;;;;AAIA,IAAMsI,0BAAwB;QACtB,IADsB;OAEvB,IAFuB;YAGlB,IAHkB;yBAIL,IAJK;eAKf,IALe;SAMrB,IANqB;eAOf,IAPe;kBAQZ,IARY;SASrB,IATqB;qBAUT,IAVS;oBAWV,CAAC,eAAD,EAAkB,WAAlB,EAA+B,cAA/B,CAXU;gBAYd,MAZc;kBAaZ;UACR,MADQ;cAEJ,UAFI;iBAGD;GAhBa;aAkBjB,KAlBiB;gBAmBd,EAAE7C,OAAO,IAAT,EAAeC,QAAQ,IAAvB;CAnBhB;;IAsBqBmE;kBACPrB,KAAZ,EAAmBC,OAAnB,EAA4BC,cAA5B,EAA4CnC,OAA5C,EAAqD;;;SAC9CiC,KAAL,GAAaA,KAAb;SACKC,OAAL,GAAeA,OAAf;SACKC,cAAL,GAAsBtJ,aAAa,EAAb,EAAiBkJ,uBAAjB,CAAtB;SACKI,cAAL,GAAsBtJ,aAAa,KAAKsJ,cAAlB,EAAkCA,cAAlC,CAAtB;SACKnC,OAAL,GAAeA,OAAf;;;;;yBAGGoC,UAAU;;;UACTmB,YAAY,KAAKpB,cAAL,CAAoBjK,IAApC;UACIU,WAAW,KAAKuJ,cAAL,CAAoBqB,KAA/B,CAAJ,EAA2C;aACpCtB,OAAL,CAAa3C,OAAb,CAAqBgE,SAArB,EAAgC,KAAKpB,cAAL,CAAoBqB,KAApB,EAAhC;OADF,MAEO,IAAI7K,SAAS,KAAKwJ,cAAL,CAAoBqB,KAA7B,CAAJ,EAAyC;aACzCtB,OAAL,CAAa3C,OAAb,CAAqBgE,SAArB,EAAgC,KAAKpB,cAAL,CAAoBqB,KAApD;;;UAGElK,MAAM,CAAC,KAAK6I,cAAL,CAAoBY,qBAArB,EAA4C,KAAKU,uBAAL,EAA5C,EAA4EhK,IAA5E,CAAiF,GAAjF,CAAV;;WAEK4I,UAAL,GAAkB,IAAIjC,UAAJ,CAAe9G,GAAf,EAAoB,KAAK6I,cAAL,CAAoBjK,IAAxC,EAA8C,KAAKiK,cAAL,CAAoB9B,YAAlE,CAAlB;;aAEO,IAAIlE,OAAJ,CAAY,UAACe,OAAD,EAAUC,MAAV,EAAqB;cACjCkF,UAAL,CAAgB5B,IAAhB,CAAqB,MAAK0B,cAAL,CAAoB5B,WAAzC,EAAsD/C,IAAtD,CAA2D,UAAC+E,QAAD,EAAc;cACnE,MAAKJ,cAAL,CAAoBuB,YAApB,KAAqC,OAArC,IAAgD,CAAC,MAAKvB,cAAL,CAAoB7I,GAAzE,EAA8E;mBACrE4D,QAAQqF,QAAR,CAAP;;;cAGEA,SAASiB,KAAT,IAAkBjB,SAASiB,KAAT,KAAmB,MAAKtB,OAAL,CAAaxC,OAAb,CAAqB6D,SAArB,CAAzC,EAA0E;mBACjEpG,OAAO,IAAI0D,KAAJ,CAAU,yEAAV,CAAP,CAAP;;;kBAGM,MAAK6B,gBAAL,CAAsBH,QAAtB,EAAgCH,QAAhC,CAAR;SATF,EAUGuB,KAVH,CAUS,UAAC7I,GAAD,EAAS;iBACTA,GAAP;SAXF;OADK,CAAP;;;;;;;;;;;;;;;qCA0BeoI,OAAOd,UAAU;UAC5Be,UAAUtK,aAAa,EAAb,EAAiBuJ,QAAjB,CAAd;;WAEK,IAAIlJ,GAAT,IAAgB6I,wBAAsB6B,cAAtC,EAAsD;YAChDlL,QAAQqJ,wBAAsB7I,GAAtB,CAAZ;;gBAEOA,GAAP;eACO,MAAL;oBACUA,GAAR,IAAegK,MAAMW,IAArB;;eAEG,UAAL;oBACU3K,GAAR,IAAe,KAAKiJ,cAAL,CAAoB2B,QAAnC;;eAEG,aAAL;oBACU5K,GAAR,IAAe,KAAKiJ,cAAL,CAAoB5B,WAAnC;;;oBAGQrH,GAAR,IAAegK,MAAMhK,GAAN,CAAf;;;;UAIFgK,MAAMM,KAAV,EAAiB;gBACPA,KAAR,GAAgBN,MAAMM,KAAtB;;;UAGEO,yBAAJ;UACI,KAAK/D,OAAL,CAAa3G,OAAjB,EAA0B;2BACLD,QAAQ,KAAK4G,OAAL,CAAa3G,OAArB,EAA8B,KAAK8I,cAAL,CAAoB7I,GAAlD,CAAnB;OADF,MAEO;2BACc,KAAK6I,cAAL,CAAoB7I,GAAvC;;;aAGK,KAAK2I,KAAL,CAAW+B,IAAX,CAAgBD,gBAAhB,EAAkCZ,OAAlC,EAA2C;yBAC/B,KAAKnD,OAAL,CAAa8C;OADzB,CAAP;;;;;;;;;;;;;8CAYwB;;;UACpBmB,gBAAgB,EAApB;UACIC,kBAAkB,CAAC,kBAAD,EAAqB,mBAArB,EAA0C,mBAA1C,CAAtB;;sBAEgBjL,OAAhB,CAAwB,UAACkL,YAAD,EAAkB;YACpC,CAAC,OAAKhC,cAAL,CAAoBgC,YAApB,CAAL,EAAwC;YACpC,CAAC7F,MAAM8F,OAAN,CAAc,OAAKjC,cAAL,CAAoBgC,YAApB,CAAd,CAAL,EAAuD;;eAElDhC,cAAL,CAAoBgC,YAApB,EAAkClL,OAAlC,CAA0C,UAACoL,SAAD,EAAe;cACnDC,qBAAqBrM,UAAUoM,SAAV,CAAzB;cACIE,aAAa3L,WAAW,OAAKuJ,cAAL,CAAoBkC,SAApB,CAAX,IAA6C,OAAKlC,cAAL,CAAoBkC,SAApB,GAA7C,GAAgF,OAAKlC,cAAL,CAAoBmC,kBAApB,CAAjG;;cAEID,cAAc,cAAd,IAAgC,CAACE,UAArC,EAAiD;;cAE7CF,cAAc,OAAlB,EAA2B;gBACnBd,YAAY,OAAKiB,QAAL,CAActM,IAAd,GAAqB,QAAvC;yBACamL,mBAAmB,OAAKnB,OAAL,CAAaxC,OAAb,CAAqB6D,SAArB,CAAnB,CAAb;;cAEEc,cAAc,OAAd,IAAyB/F,MAAM8F,OAAN,CAAcG,UAAd,CAA7B,EAAwD;yBACzCA,WAAW9K,IAAX,CAAgB,OAAK0I,cAAL,CAAoBsC,cAApC,CAAb;gBACI,OAAKtC,cAAL,CAAoBuC,WAAxB,EAAqC;2BACtB,CAAC,OAAKvC,cAAL,CAAoBuC,WAArB,EAAkCH,UAAlC,EAA8C9K,IAA9C,CAAmD,OAAK0I,cAAL,CAAoBsC,cAAvE,CAAb;;;;wBAIU5H,IAAd,CAAmB,CAACwH,SAAD,EAAYE,UAAZ,CAAnB;SAjBF;OAJF;;aAyBON,cAAcU,GAAd,CAAkB,UAACC,KAAD,EAAW;eAC3BA,MAAMnL,IAAN,CAAW,GAAX,CAAP;OADK,EAEJA,IAFI,CAEC,GAFD,CAAP;;;;;;IC9IiBoL;2BACP5C,KAAZ,EAAmB6C,eAAnB,EAAoC;;;;;QAC9B9E,UAAUnH,aAAa,EAAb,EAAiBkM,cAAjB,CAAd;cACUlM,aAAamH,OAAb,EAAsB8E,eAAtB,CAAV;QACI5C,UAAUnC,eAAeC,OAAf,CAAd;;WAEOgF,gBAAP,CAAwB,IAAxB,EAA8B;aACrB;WAAA,oBACC;iBACG/C,KAAP;;OAHwB;;eAOnB;WAAA,oBACD;iBACGjC,OAAP;;OATwB;;eAanB;WAAA,oBACD;iBACGkC,OAAP;;OAfwB;;iBAmBjB;WAAA,oBACH;cACA,KAAKlC,OAAL,CAAaiF,WAAjB,EAA8B;mBACrB,CAAC,KAAKjF,OAAL,CAAaiF,WAAd,EAA2B,KAAKjF,OAAL,CAAakF,SAAxC,EAAmDzL,IAAnD,CAAwD,GAAxD,CAAP;WADF,MAEO;mBACE,KAAKuG,OAAL,CAAakF,SAApB;;;;KAxBR;;;QA+BI,KAAKlF,OAAL,CAAamF,sBAAb,IAAuCvM,WAAW,KAAKoH,OAAL,CAAamF,sBAAxB,CAA3C,EAA4F;WACrFnF,OAAL,CAAamF,sBAAb,CAAoCnN,IAApC,CAAyC,IAAzC;;UAEI,KAAKgI,OAAL,CAAaoF,uBAAb,IAAwCxM,WAAW,KAAKoH,OAAL,CAAaoF,uBAAxB,CAA5C,EAA8F;aACvFpF,OAAL,CAAaoF,uBAAb,CAAqCpN,IAArC,CAA0C,IAA1C;;KAJJ,MAMO;;WAEAiK,KAAL,CAAWoD,YAAX,CAAwBxI,IAAxB,CAA6B,UAACyI,OAAD,EAAUC,IAAV,EAAmB;YAC1C,MAAKC,eAAL,EAAJ,EAA4B;kBAClBC,OAAR,CAAgBC,GAAhB,CAAoB,eAApB,EAAqC,CACnC,MAAK1F,OAAL,CAAa2F,SADsB,EACX,MAAKC,QAAL,EADW,EAEnCnM,IAFmC,CAE9B,GAF8B,CAArC;SADF,MAIO;kBACGgM,OAAR,CAAgBI,MAAhB,CAAuB,eAAvB;;;YAGE,MAAK7F,OAAL,CAAaoF,uBAAb,IAAwCxM,WAAW,MAAKoH,OAAL,CAAaoF,uBAAxB,CAA5C,EAA8F;gBACvFpF,OAAL,CAAaoF,uBAAb,CAAqCpN,IAArC;SADF,MAEO;eACA,UAACuK,QAAD,EAAc;gBACb;kBACEuD,eAAeC,KAAKC,KAAL,CAAWzD,SAAS,MAAKvC,OAAL,CAAaiD,eAAtB,CAAX,CAAnB;kBACI6C,aAAa,MAAK9F,OAAL,CAAakF,SAA1B,CAAJ,EAA0C;sBACnCe,QAAL,CAAcH,YAAd;uBACOA,aAAa,MAAK9F,OAAL,CAAakF,SAA1B,CAAP;uBACOY,YAAP;;aALJ,CAOE,OAAMxI,CAAN,EAAS;mBACJiF,QAAP;WATF;;OAZJ;;;;;;;;;;;;;;sCAkCc;UACZ2D,QAAQ,KAAKhE,OAAL,CAAaxC,OAAb,CAAqB,KAAKwF,SAA1B,CAAZ;;UAEIgB,KAAJ,EAAW;;YACLA,MAAM7L,KAAN,CAAY,GAAZ,EAAiB1C,MAAjB,KAA4B,CAAhC,EAAmC;;cAC7B;;gBACIwO,YAAYD,MAAM7L,KAAN,CAAY,GAAZ,EAAiB,CAAjB,CAAlB;gBACM+L,SAASD,UAAUhO,OAAV,CAAkB,GAAlB,EAAuB,GAAvB,EAA4BA,OAA5B,CAAoC,GAApC,EAAyC,GAAzC,CAAf;gBACMkO,MAAMN,KAAKC,KAAL,CAAWvG,OAAO/D,IAAP,CAAY0K,MAAZ,CAAX,EAAgCC,GAA5C;gBACI,OAAOA,GAAP,KAAe,QAAnB,EAA6B;;qBACpBC,KAAKC,KAAL,CAAW,IAAIC,IAAJ,GAAWC,OAAX,KAAuB,IAAlC,IAA0CJ,GAAjD;;WALJ,CAOE,OAAO/I,CAAP,EAAU;mBACH,IAAP,CADU;;;eAIP,IAAP,CAbS;;aAeJ,KAAP;;;;;;;;;;+BAOS;aACF,KAAK4E,OAAL,CAAaxC,OAAb,CAAqB,KAAKwF,SAA1B,CAAP;;;;;;;;;;6BAOO3C,UAAU;UACbA,SAAS,KAAKvC,OAAL,CAAa6C,cAAtB,CAAJ,EAA2C;mBAC9BN,SAAS,KAAKvC,OAAL,CAAa6C,cAAtB,CAAX;;;UAGEqD,cAAJ;UACI3D,SAASmE,YAAb,EAA2B;YACrBjO,SAAS8J,SAASmE,YAAlB,KAAmCjO,SAAS8J,SAASmE,YAAT,CAAsB,KAAK1G,OAAL,CAAa6C,cAAnC,CAAT,CAAvC,EAAqG;qBACxFN,SAASmE,YAApB;SADF,MAEO,IAAI/N,SAAS4J,SAASmE,YAAlB,CAAJ,EAAqC;kBAClCnE,SAASmE,YAAjB;;;;UAIA,CAACR,KAAD,IAAU3D,QAAd,EAAwB;gBACdA,SAAS,KAAKvC,OAAL,CAAakF,SAAtB,CAAR;;;UAGEgB,KAAJ,EAAW;aACJhE,OAAL,CAAa3C,OAAb,CAAqB,KAAK2F,SAA1B,EAAqCgB,KAArC;;;;;iCAIS;UACLA,QAAQ,KAAKhE,OAAL,CAAaxC,OAAb,CAAqB,KAAKwF,SAA1B,CAAd;;UAEIgB,SAASA,MAAM7L,KAAN,CAAY,GAAZ,EAAiB1C,MAAjB,KAA4B,CAAzC,EAA4C;YACtC;cACIwO,YAAYD,MAAM7L,KAAN,CAAY,GAAZ,EAAiB,CAAjB,CAAlB;cACM+L,SAASD,UAAUhO,OAAV,CAAkB,GAAlB,EAAuB,GAAvB,EAA4BA,OAA5B,CAAoC,GAApC,EAAyC,GAAzC,CAAf;iBACO4N,KAAKC,KAAL,CAAWxL,aAAa4L,MAAb,CAAX,CAAP;SAHF,CAIE,OAAO9I,CAAP,EAAU;kBACFqJ,GAAR,CAAYrJ,CAAZ;;;;;;;;;;;;;;0BAWAsJ,MAAMjE,gBAAgB;;;uBACTA,kBAAkB,EAAnC;qBACerJ,GAAf,GAAqBqJ,eAAerJ,GAAf,GAAqBqJ,eAAerJ,GAApC,GAA0CF,QAAQ,KAAK4G,OAAL,CAAa3G,OAArB,EAA8B,KAAK2G,OAAL,CAAa6G,QAA3C,CAA/D;qBACe,KAAK7G,OAAL,CAAa6C,cAA5B,IAA8C+D,QAAQjE,eAAe,KAAK3C,OAAL,CAAa6C,cAA5B,CAAtD;qBACeD,MAAf,GAAwBD,eAAeC,MAAf,IAAyB,MAAjD;qBACeE,eAAf,GAAiCH,eAAeG,eAAf,IAAkC,KAAK9C,OAAL,CAAa8C,eAAhF;;aAEO,KAAKb,KAAL,CAAWU,cAAX,EAA2BnF,IAA3B,CAAgC,UAAC+E,QAAD,EAAc;eAC9C0D,QAAL,CAAc1D,QAAd;eACOA,QAAP;OAFK,CAAP;;;;;;;;;;;;6BAYOqE,MAAMjE,gBAAgB;;;uBACZA,kBAAkB,EAAnC;qBACerJ,GAAf,GAAqBqJ,eAAerJ,GAAf,GAAqBqJ,eAAerJ,GAApC,GAA0CF,QAAQ,KAAK4G,OAAL,CAAa3G,OAArB,EAA8B,KAAK2G,OAAL,CAAa8G,WAA3C,CAA/D;qBACe,KAAK9G,OAAL,CAAa6C,cAA5B,IAA8C+D,QAAQjE,eAAe,KAAK3C,OAAL,CAAa6C,cAA5B,CAAtD;qBACeD,MAAf,GAAwBD,eAAeC,MAAf,IAAyB,MAAjD;qBACeE,eAAf,GAAiCH,eAAeG,eAAf,IAAkC,KAAK9C,OAAL,CAAa8C,eAAhF;;aAEO,KAAKb,KAAL,CAAWU,cAAX,EAA2BnF,IAA3B,CAAgC,UAAC+E,QAAD,EAAc;eAC9C0D,QAAL,CAAc1D,QAAd;eACOA,QAAP;OAFK,CAAP;;;;;;;;;;;2BAWKI,gBAAgB;;;UACjB,CAAC,KAAK6C,eAAL,EAAL,EAA6B;eACpBrJ,UAAQgB,MAAR,CAAe,IAAI0D,KAAJ,CAAU,0CAAV,CAAf,CAAP;;;uBAGe8B,kBAAkB,EAAnC;qBACerJ,GAAf,GAAqBqJ,eAAeoE,SAAf,IAA4B,KAAK/G,OAAL,CAAa+G,SAA9D;;UAEIpE,eAAerJ,GAAnB,EAAwB;uBACPsJ,MAAf,GAAwBD,eAAeC,MAAf,IAAyB,MAAjD;uBACeE,eAAf,GAAiCH,eAAeG,eAAf,IAAkC,KAAK9C,OAAL,CAAa8C,eAAhF;;eAEO,KAAKb,KAAL,CAAWU,cAAX,EAA2BnF,IAA3B,CAAgC,UAAC+E,QAAD,EAAc;iBAC9CL,OAAL,CAAavC,UAAb,CAAwB,OAAKuF,SAA7B;SADK,CAAP;OAJF,MAOO;aACAhD,OAAL,CAAavC,UAAb,CAAwB,KAAKuF,SAA7B;eACO/I,UAAQe,OAAR,EAAP;;;;;;;;;;;;;;;iCAYS8J,UAAU5E,UAAUO,gBAAgB;;;aACxC,IAAIxG,SAAJ,CAAY,UAACe,OAAD,EAAUC,MAAV,EAAqB;YAClCgF,iBAAiB,OAAKnC,OAAL,CAAaiH,SAAb,CAAuBD,QAAvB,CAArB;YACI,CAAC7E,cAAL,EAAqB;iBACZhF,OAAO,IAAI0D,KAAJ,CAAU,kBAAV,CAAP,CAAP;;;YAGEqG,yBAAJ;gBACQ/E,eAAegF,SAAvB;eACO,KAAL;+BACqB,IAAIC,KAAJ,CAAW,OAAKnF,KAAhB,EAAuB,OAAKC,OAA5B,EAAqCC,cAArC,EAAqD,OAAKnC,OAA1D,CAAnB;;eAEG,KAAL;+BACqB,IAAIsD,MAAJ,CAAW,OAAKrB,KAAhB,EAAuB,OAAKC,OAA5B,EAAqCC,cAArC,EAAqD,OAAKnC,OAA1D,CAAnB;;;mBAGO7C,OAAO,IAAI0D,KAAJ,CAAU,oBAAV,CAAP,CAAP;;;;eAIGqG,iBAAiBG,IAAjB,CAAsBjF,QAAtB,EAAgC5E,IAAhC,CAAqC,UAAC+E,QAAD,EAAc;iBACnD0D,QAAL,CAAc1D,QAAd;cACI,OAAKiD,eAAL,EAAJ,EAA4B;mBACnBtI,QAAQqF,QAAR,CAAP;WADF,MAEO;mBACEpF,OAAO,IAAI0D,KAAJ,CAAU,uBAAV,CAAP,CAAP;;SALG,EAOJ8C,KAPI,CAOE,YAAM;iBACN,IAAI9C,KAAJ,CAAU,+BAAV,CAAP;SARK,CAAP;OAnBK,CAAP;;;;;;ACjOJ;;;;;AAKA,SAASyG,MAAT,CAAgBC,GAAhB,EAAqBvH,OAArB,EAA8B;MACxBsH,OAAOE,SAAX,EAAsB;;;SAGfA,SAAP,GAAmB,IAAnB;;MAEIC,kBAAkB,IAAtB;SACOzC,gBAAP,CAAwBuC,IAAIzP,SAA5B,EAAuC;WAC9B;SAAA,iBACC;YACA,CAAC2P,eAAL,EAAsB;;cAEhB,CAAC,KAAKxF,KAAV,EAAiB;kBACT,IAAIpB,KAAJ,CAAU,oCAAV,CAAN;;;4BAGgB,IAAIgE,eAAJ,CAAoB,KAAK5C,KAAzB,EAAgCjC,OAAhC,CAAlB;;eAEKyH,eAAP;;;GAXN;CAiBF,AACA;;;;;;;"} \ No newline at end of file diff --git a/dist/vue-authenticate.min.js b/dist/vue-authenticate.min.js new file mode 100644 index 0000000..444cafd --- /dev/null +++ b/dist/vue-authenticate.min.js @@ -0,0 +1 @@ +(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?factory(exports):typeof define==="function"&&define.amd?define(["exports"],factory):factory(global["vue-authenticate"]=global["vue-authenticate"]||{})})(this,function(exports){"use strict";var _typeof=typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"?function(obj){return typeof obj}:function(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj};var classCallCheck=function(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}};var createClass=function(){function defineProperties(target,props){for(var i=0;i>>10)+55296)+fromCharCode((offset&1023)+56320);case 3:return fromCharCode((15&cccc.charCodeAt(0))<<12|(63&cccc.charCodeAt(1))<<6|63&cccc.charCodeAt(2));default:return fromCharCode((31&cccc.charCodeAt(0))<<6|63&cccc.charCodeAt(1))}};var btou=function btou(b){return b.replace(re_btou,cb_btou)};var _decode=buffer?function(a){return(a.constructor===buffer.constructor?a:new buffer(a,"base64")).toString()}:function(a){return btou(atob(a))};return _decode(String(str).replace(/[-_]/g,function(m0){return m0==="-"?"+":"/"}).replace(/[^A-Za-z0-9\+\/]/g,""))}var setTimeoutFunc=setTimeout;function noop(){}function bind(fn,thisArg){return function(){fn.apply(thisArg,arguments)}}function Promise$1(fn){if(_typeof(this)!=="object")throw new TypeError("Promises must be constructed via new");if(typeof fn!=="function")throw new TypeError("not a function");this._state=0;this._handled=false;this._value=undefined;this._deferreds=[];doResolve(fn,this)}function handle(self,deferred){while(self._state===3){self=self._value}if(self._state===0){self._deferreds.push(deferred);return}self._handled=true;Promise$1._immediateFn(function(){var cb=self._state===1?deferred.onFulfilled:deferred.onRejected;if(cb===null){(self._state===1?resolve:reject)(deferred.promise,self._value);return}var ret;try{ret=cb(self._value)}catch(e){reject(deferred.promise,e);return}resolve(deferred.promise,ret)})}function resolve(self,newValue){try{if(newValue===self)throw new TypeError("A promise cannot be resolved with itself.");if(newValue&&((typeof newValue==="undefined"?"undefined":_typeof(newValue))==="object"||typeof newValue==="function")){var then=newValue.then;if(newValue instanceof Promise$1){self._state=3;self._value=newValue;finale(self);return}else if(typeof then==="function"){doResolve(bind(then,newValue),self);return}}self._state=1;self._value=newValue;finale(self)}catch(e){reject(self,e)}}function reject(self,newValue){self._state=2;self._value=newValue;finale(self)}function finale(self){if(self._state===2&&self._deferreds.length===0){Promise$1._immediateFn(function(){if(!self._handled){Promise$1._unhandledRejectionFn(self._value)}})}for(var i=0,len=self._deferreds.length;i